WebRTC Native 開發實戰

許建林

  • WebRTC Native 開發實戰-preview-1
  • WebRTC Native 開發實戰-preview-2
  • WebRTC Native 開發實戰-preview-3
WebRTC Native 開發實戰-preview-1

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

相關主題

商品描述

本書是WebRTC方面的專著,WebRTC是一項實時通信領域革命性的技術,在實時音視頻通信領域已經產生了深遠的影響。本書涵蓋了Native端WebRTC SDK基本場景的使用、基本場景下完整流程的源碼導讀,還介紹了一些高級的功能和場景,比如多人通話、屏幕共享、H.265、美顏、伴奏、本地錄制等,最後還對Server端展開了一些討論。本書通過細致的代碼分析和源碼導讀,來講解WebRTC Native的具體實戰,分析WebRTC內部主要的數據流程,力圖使讀者能夠通過實際操作快速入門和理解WebRTC Native的開發技巧。 本書主要面向的是所有希望從事WebRTC Native開發的IT從業人員,且要求讀者具備一定的Java/Objective-C/C++語言基礎。

目錄大綱

目   錄

第1章  開發環境搭建 1

1.1  WebRTC簡介 1

1.2  iOS/macOS編譯環境 2

1.3  Android/Linux編譯環境 3

1.4  Windows編譯環境 3

1.5  更新WebRTC編譯環境 4

1.6  macOS上的Android編譯環境 4

第2章  運行官方Demo 6

2.1  官方Demo簡介 6

2.2  部署AppRTC Server 6

2.3  運行iOS AppRTCMobile 7

2.4  運行macOS AppRTCMobile 13

2.5  運行Android AppRTCMobile 17

2.6  iOS/macOS/Android AppRTCMobile互通測試 19

2.7  Android C++代碼單步調試 20

2.8  部署PeerConnection Server 23

2.9  運行Windows PeerConnection Client 23

2.10  運行Linux PeerConnection Client 25

第3章  基本流程分析 26

3.1  拓撲結構 26

3.2  通話過程 27

3.2.1  PeerConnection 28

3.2.2  Offer、Answer和SDP 28

3.2.3  ICE 28

3.2.4  STUN 28

3.2.5  TURN 29

3.2.6  ICE Candidate 29

3.3  核心API和Demo代碼位置 30

3.3.1  全局初始化 30

3.3.2  PeerConnectionFactory 31

3.3.3  創建PeerConnection 33

3.3.4  創建Source和Track 34

3.3.5  創建Offer 37

3.3.6  創建Answer 39

3.3.7  ICE Candidate回調和設置 41

3.3.8  ICE連接狀態回調 42

3.3.9  核心API回顧 43

3.4  SDP初探 44

第4章  編譯工具介紹 46

4.1  Ninja 46

4.2  GN 46

4.3  系統宏定義 48

4.4  添加源碼目錄和預編譯依賴庫 50

第5章  SDP詳解 54

5.1  Plan B v.s. Unified Plan 54

5.2  Transceiver 54

5.3  SDP詳解 57

5.3.1  session metadata 57

5.3.2  video media section 57

5.3.3  audio media section 60

5.3.4  application media section 61

5.4  操縱SDP 62

 

 

第6章  線程模型 63

6.1  三大線程的使用 63

6.1.1  對外接口的線程切換 63

6.1.2  內部代碼的線程切換 65

6.2  三大線程的創建 66

6.2.1  iOS/macOS創建PC Factory 68

6.2.2  Android創建PC Factory 69

6.2.3  Windows/Linux創建PC Factory 70

第7章  視頻數據流程 72

7.1  視頻數據流程概覽 72

7.2  視頻採集 73

7.2.1  iOS/macOS視頻採集 73

7.2.2  Android視頻採集 79

7.2.3  Windows/Linux視頻採集 85

7.3  視頻渲染 87

7.3.1  iOS/macOS視頻渲染 87

7.3.2  Android視頻渲染 91

7.3.3  Windows/Linux視頻渲染 92

7.4  視頻編解碼 92

7.4.1  iOS/macOS視頻編碼 94

7.4.2  iOS/macOS視頻解碼 100

7.4.3  Android視頻編碼 104

7.4.4  Android視頻解碼 113

7.4.5  Windows/Linux視頻編碼 120

7.4.6  Windows/Linux視頻解碼 125

7.4.7  編碼流控測試 125

7.5  視頻數據流程調用棧 130

第8章  音頻數據流程 134

8.1  音頻數據流程概覽 134

8.2  音頻採集和播放 135

8.2.1  iOS音頻採集和播放 135

8.2.2  Android音頻採集和播放 143

8.2.3  macOS音頻採集和播放 153

8.2.4  Windows音頻採集和播放 154

8.2.5  Linux音頻採集和播放 154

8.3  音頻設備模塊ADM 155

8.3.1  iOS ADM 155

8.3.2  Android ADM 156

8.3.3  macOS ADM 156

8.3.4  Windows ADM 156

8.3.5  Linux ADM 157

8.3.6  聲音路由 157

8.4  音頻編解碼模塊ACM 158

8.4.1  音頻編碼 159

8.4.2  音頻解碼 160

8.5  音頻數據流程調用棧 162

第9章  DataChannel 167

9.1  概覽 167

9.2  iOS DataChannel 167

9.2.1  創建DataChannel 167

9.2.2  SDP 168

9.2.3  發送消息 169

9.2.4  接收消息 169

9.3  Android DataChannel 170

9.3.1  創建DataChannel 170

9.3.2  SDP 170

9.3.3  發送消息 170

9.3.4  接收消息 171

9.4  RTCQuicTransport 171

 

 

第10章  純音/視頻 172

10.1  概覽 172

10.2  AudioTrack的禁用與啟用 173

10.3  VideoTrack的禁用與啟用 173

10.4  HijackCapturerObserver 174

10.4.1  iOS的實現 174

10.4.2  Android的實現 176

10.5  track狀態的通知 177

10.6  錄制相關 177

第11章  多人通話 178

11.1  概覽 178

11.1.1  P2P網狀結構 178

11.1.2  SFU結構 179

11.1.3  MCU結構 180

11.2  客戶端代碼實現 180

第12章  日誌和狀態統計 183

12.1  概覽 183

12.2  iOS集成Mars XLog 185

12.3  Android集成Mars XLog 187

12.4  RTCStatsReport 189

12.4.1  AccumulatedValueSplitter 190

12.4.2  RtcStats選擇函數 193

12.4.3  連接狀態解析 194

12.4.4  視頻發送狀態解析 199

12.4.5  音頻發送狀態解析 205

12.4.6  視頻接收狀態解析 207

12.4.7  音頻接收狀態解析 209

第13章  屏幕共享 211

13.1  概覽 211

13.2  iOS屏幕共享 211

13.2.1  CFRPCapturer的實現 212

13.2.2  CFRPCapturer的使用 214

13.2.3  修改RTCVideoSource 214

13.3  Android屏幕共享 215

13.3.1  ScreenCapturerAndroid的實現 215

13.3.2  ScreenCapturerAndroid的使用 217

第14章  H.265 支持 219

14.1  概覽 220

14.2  SDP 220

14.3  編解碼 222

14.3.1  iOS修改編碼代碼 222

14.3.2  iOS修改解碼代碼 224

14.3.3  Android修改編碼代碼 226

14.3.4  Android修改編碼代碼 227

14.4  RTP封包解包 227

第15章  美顏 228

15.1  Android美顏處理器 228

15.2  iOS美顏處理器 231

第16章  伴奏 234

16.1  概覽 234

16.2  解碼音頻數據 235

16.2.1  初始化 235

16.2.2  音頻解碼 236

16.2.3  重採樣 239

16.2.4  銷毀 240

16.3  播放非接收的音頻數據 240

16.4  伴奏混音發送 243

16.5  其他控制和調節功能 246

第17章  本地錄制 247

17.1  概覽 247

17.2  添加接口 248

17.3  獲取數據 249

17.4  FFmpeg調用 252

17.5  視頻關鍵幀 257

17.6  視頻方向 258

17.7  純音/視頻錄制 258

第18章  項目外使用WebRTC 260

18.1  概覽 260

18.2  摘取源碼 260

18.3  使用整體靜態庫 264

18.3.1  std::__1 的來源 264

18.3.2  修改WebRTC編譯配置 266

18.3.3  提取頭文件 267

18.4  使用子模塊靜態庫 267

第19章  信令 269

19.1  AppRTC Server信令協議 269

19.1.1  HTTP POST加入房間 270

19.1.2  HTTP GET獲取ICE服務器配置 271

19.1.3  長連接註冊 271

19.1.4  HTTP POST發送消息 272

19.1.5  長連接發送消息 272

19.1.6  離開房間 273

19.1.7  同時加入 274

19.1.8  Offer/Answer和ICE Candidate順序 274

19.2  OWT Server信令協議 274

19.2.1  OWT Server架構 274

19.2.2  OWT信令協議 276

19.2.3  HTTP POST創建token 276

19.2.4  SocketIO登錄 278

19.2.5  SocketIO發布流 280

19.2.6  SocketIO發送Offer和ICE Candidate 280

19.2.7  SocketIO接收Answer 281

19.2.8  SocketIO訂閱流 282

19.2.9  SocketIO接收其他用戶的通知 282

19.2.10  SocketIO退出登錄 283

19.2.11  Offer和ICE Candidate順序 283

19.2.12  錯誤重連 284

19.2.13  HTTP GET用戶和流列表 284

19.3  P2P網狀結構信令協議 285

19.3.1  HTTP POST加入房間 286

19.3.2  長連接註冊 287

19.3.3  WebSocket接收其他用戶的通知 287

19.3.4  長連接發送Offer/Answer和ICE Candidate 288

19.3.5  離開房間 289

19.3.6  錯誤重連 289

19.3.7  Offer/Answer和ICE Candidate順序 290

第20章  NAT穿透 291

20.1  NAT穿透原理 291

20.2  coturn的基本使用 295

第21章  OWT Server SFU數據流程 299

21.1  進程結構和JavaScript代碼處理流程 299

21.1.1  進程結構 299

21.1.2  Management API 300

21.1.3  WebRTC Portal 300

21.1.4  Conference Agent 301

21.1.5  WebRTC Agent 302

21.1.6  WebRTC Agent node間的流擴散 303

21.1.7  Cluster Manager 304

21.1.8  完整過程總結 306

21.2  C++代碼處理流程 307

21.2.1  WebRTC信令處理 308

21.2.2  WebRTC媒體數據處理 309

21.2.3  流擴散處理 311

第22章  OWT Server MCU數據流程 314

22.1  JavaScript代碼處理流程 314

22.1.1  Conference Agent 314

22.1.2  Audio Agent 316

22.1.3  Video Agent 316

22.1.4  轉碼處理 317

22.2  C++代碼處理流程 317

22.2.1  AudioMixer 317

22.2.2  VideoMixer 318

22.2.3  VideoTranscoder 320

後記 321