WebRTC 音視頻實時互動技術:原理、實戰與源碼分析

李超 著

  • 出版商: 機械工業
  • 出版日期: 2021-07-01
  • 售價: $534
  • 貴賓價: 9.5$507
  • 語言: 簡體中文
  • 頁數: 288
  • 裝訂: 平裝
  • ISBN: 7111685016
  • ISBN-13: 9787111685012
  • 立即出貨

買這商品的人也買了...

相關主題

商品描述

本書深入淺出地對WebRTC技術進行了系統講解,既有原理又有實戰,從WebRTC是如何實現實時音視頻通信的,
到如何應用WebRTC庫實現音視頻通信,再到WebRTC源碼的剖析,逐步展開講解。
此外,對WebRTC的傳輸系統進行了重點分析,相信讀者通過本書可以一窺WebRTC傳輸的奧秘。

第1~3章介紹音視頻實時通信的由來,WebRTC做了什麼,以及它要解決什麼問題;
第4~10章是實戰部分,介紹如何使用WebRTC庫實現音視頻通信,並對其實現原理進行講解;
第11~13章對WebRTC源碼進行分析,讓讀者對WebRTC有更深層次的認知。
想了解WebRTC實現的專業開發人員可以通過本書了解WebRTC運轉機理;

學生、老師和音視頻愛好者可以通過本書了解WebRTC可以做什麼,
如何通過WebRTC實現音視頻的實時通信。

作者簡介

李超

北京音視跳動科技有限公司首席架構師,曾先後擔任滬江網高級架構師、新東方音視頻技術專家等,
擁有十餘年的音視頻實時互動直播研發經驗及多年團隊管理經驗,參與設計了多個高負載、高並發服務器架構。
曾在全時雲會議擔任Tang平台研發經理,
帶領團隊研發自主知識產權的全時音視頻會議平台——該平台可以同時並發10000場會議,
每場可以支持超過1000人的實時互動。

目錄大綱

第 1 章 音視頻直播的前世今生 1
1.1 音視頻的歷史 1
1.2 移動互聯網 3
1.3 音視頻直播的兩條技術路線 3
1.4 音視頻直播的現狀 5
1.5 音視頻直播的未來 6
1.6 小結 7

第 2 章 為什麼要使用 WebRTC8
2.1 自研直播客戶端架構8
2.1.1 拆分音視頻模塊 9
2.1.2 跨平台 10
2.1.3 插件化管理11
2.1.4 其他 13
2.2 WebRTC 客戶端架構14
2.3 小結 16

第 3 章 音視頻實時通信的本質 17
3.1 兩種指標 18
3.1.1 實時通信延遲指標 18
3.1.2 音視頻服務質量指標 19
3.2 實時通信的主要矛盾 20
3.2.1 增加帶寬 20
3.2.2 減少數據量22
3.2.3 適當增加時延 24
3.2.4 提高網絡質量 24
3.2.5 快速準確地評估帶寬 25
3.3 小結 25

第 4 章 構建WebRTC一對一信令服務器 27
4.1 WebRTC 一對一架構27
4.2 細化架構 28
4.3 信令 29
4.3.1 信令定義 29
4.3.2 信令時序 30
4.3.3 信令傳輸協議的選擇 31
4.4 構建信令服務器 31
4.4.1 信令服務器的實現方案32
4.4.2 信令服務器的業務邏輯32
4.4.3 信令服務器的實現 33
4.4.4 信令服務器的安裝與部署 35
4.4.5 信令服務器的完整代碼37
4.5 小結 40

第 5 章 WebRTC 實現一對一通信 41
5.1 瀏覽器對 WebRTC 的支持41
5.2 遍歷音視頻設備 42
5.3 採集音視頻數據 44
5.4 MediaStream 與 MediaStreamTrack 47
5.5 本地視頻預覽47
5.6 信令狀態機 49
5.7 RTCPeerConnection52
5.7.1 創建 RTCPeerConnection 對象 52
5.7.2 RTCPeerConnection 與本地 音視頻數據綁定 53
5.7.3 媒體協商 54
5.7.4 ICE 55
5.7.5 SDP 與 Candidate 消息的 交換 57
5.7.6 遠端音視頻渲染 58
5.7.7 客戶端完整例子 59
5.8 小結 82

第 6 章 WebRTC 中的 ICE 實現 83
6.1 Candidate 種類與優先級83
6.2 ICE 策略 85
6.3 P2P 連接 87
6.3.1 完全錐型 NAT 89
6.3.2 IP 限制錐型 NAT90
6.3.3 端口限制錐型 NAT 91
6.3.4 對稱型 NAT92
6.3.5 NAT 類型檢測 93
6.3.6 如何進行 NAT 穿越 97
6.4 網絡中繼 101
6.4.1 TURN 協議中轉數據 101
6.4.2 WebRTC 使用 TURN 協議 102
6.4.3 STUN/TURN 服務器的 安裝與部署103
6.5 小結 105

第 7 章 WebRTC 中的 SDP 106
7.1 SDP 標準規範106
7.2 WebRTC 中 SDP 的整體 結構 108
7.3 媒體信息 110
7.3.1 音頻媒體信息 111
7.3.2 視頻媒體信息 112
7.3.3 SSRC 與 CNAME 114
7.4 PlanB 與 UnifiedPlan 115
7.5 WebRTC 如何保證數據 安全 117
7.6 RTP 擴展頭 119
7.7 服務質量 120
7.8 SDP 詳解 122
7.9 ORTC 131
7.10 小結 131

第 8 章 各端的互聯互通 132
8.1 WebRTC Native 的核心 132
8.2 Android 端的實現 134
8.2.1 申請權限 134
8.2.2 引入 WebRTC 庫 136
8.2.3 構造 PeerConnection- Factory 138
8.2.4 創建音視頻源 138
8.2.5 視頻採集 139
8.2.6 視頻渲染 142
8.2.7 創建 PeerConnection 144
8.2.8 建立信令系統 146
8.3 iOS 端的實現146
8.3.1 申請權限 146
8.3.2 引入 WebRTC 庫 147
8.3.3 構造 RTCPeerConnection- Factory 148
8.3.4 創建音視頻源 149
8.3.5 視頻採集 150
8.3.6 本地視頻預覽 151
8.3.7 建立信令系統 153
8.3.8 創建 RTCPeer- Connection155
8.3.9 遠端視頻渲染 158
8.4 PC 端與 Mac 端的實現 159
8.5 小結 159

第 9 章 網絡傳輸協議 RTP 與 RTCP 160
9.1 如何選擇 UDP 與 TCP 160
9.2 RTP 162
9.2.1 RTP 協議頭163
9.2.2 RTP 的使用165
9.2.3 RTP 擴展頭167
9.2.4 RTP 中的填充數據 170
9.3 RTCP 171
9.3.1 RTCP 報文分類 171
9.3.2 RTCP 協議頭 172
9.3.3 WebRTC 的反饋報文 173
9.4 小結 174

第 10 章 WebRTC 擁塞控制 175
10.1 WebRTC 的擁塞控制算法175
10.1.1 Goog-REMB176
10.1.2 Transport-CC 181
10.1.3 基於丟包的擁塞評估算法 原理184
10.1.4 WebRTC 擁塞控制 流程184
10.2 擁塞控制算法比較185
10.2.1 擁塞控制的準確性 186
10.2.2 與 TCP 連接並存時的公 平性187
10.2.3 同種類型連接的公 平性188
10.2.4 擁塞控制算法在丟包 情況下的表現 189
10.3 小結 191

第 11 章 WebRTC 源碼分析入門 192
11.1 WebRTC 源碼的選擇 193
11.2 WebRTC 開發環境的搭建193
11.2.1 配置軟硬件環境194
11.2.2 安裝依賴工具包195
11.2.3 獲取並編譯 WebRTC 代碼195
11.3 國內 WebRTC 鏡像196
11.4 WebRTC 目錄結構 197
11.4.1 WebRTC 主目錄 197
11.4.2 modules 目錄 198
11.5 小結 200

第 12 章 分析 WebRTC 源碼的必經 之路 201
12.1 信令服務器實現分析 201
12.1.1 信令服務器的組成 202
12.1.2 信令服務器的工作流程 203
12.2 PeerConnection 客戶端分析 206
12.2.1 運行 peerconnection_ client 206
12.2.2 peerconnection_client 的組成 207
12.2.3 界面的展示 213
12.2.4 視頻的渲染 218
12.2.5 WebRTC 的使用 220
12.2.6 信令的處理 225
12.3 小結 229

第 13 章 WebRTC 源碼分析 231
13.1 WebRTC 的數據流 231
13.2 WebRTC 線程模型 234
13.2.1 WebRTC 線程的創建與使用 234
13.2.2 線程切換 236
13.3 網絡傳輸 250
13.3.1 網絡接收與分發模塊類關係圖 250
13.3.2 網絡連接的建立251
13.4 音視頻數據採集 256
13.4.1 音頻採集與播放256
13.4.2 視頻採集與渲染258
13.5 音視頻編解碼 261
13.5.1 音頻編碼 261
13.5.2 音頻解碼 265
13.5.3 視頻編碼 267
13.5.4 視頻解碼 270
13.6 小結 272