![](/c49/99/10029238453247.jpg)
出版社:清華大學出版社 ISBN:9787302558132 商品編碼:10029238453247 包裝:平裝 出版時間:2020-08-01 代碼:89 作者:許建林
"基本信息 書名:WebRTC Native 開發實戰 定價 作者:許建林 出版社:清華大學出版社 出版日期:2020-08-01 ISBN:9787302558132 字數: 頁碼: 版次: 裝幀:平裝 開本:16開 商品重量: 編輯推薦
近年來,WebRTC技術的使用越來越廣泛,引起了眾多開發者以及各大公司的關注。目前市面上關於WebRTC的書籍大多都是關注Web端的,對Native端(Android 、iOS、macOS、Windows、Linux)的涉獵非常少。此外,還沒有任何圖書對WebRTC內部的技術實現進行分析,本書試圖彌補這一空白。 本書是編者在WebRTC學習、WebRTC Native實際使用過程中的心得體會和繫統總結,內容涵蓋了Native端WebRTC SDK基本場景的使用、基本場景下完整流程的源碼導讀,還有一些高級的功能和 場景,比如多人通話、屏幕共享、H.265、美顏、伴奏、本地錄制等,後還對Server端展開了一些討論。 書中利用大量細致的代碼分析和源碼導讀來講解WebRTC Native的具體實戰,分析WebRTC內部主要的數據流程,力圖使讀者能夠通過實際操作快速入門和理解WebRTC Native的開發技巧。 內容提要
本書是WebRTC方面的專著,WebRTC是一項實時通信領域革命性的技術,在實時音視頻通信領域已經產生了深遠的影響。本書涵蓋了Native端WebRTC SDK基本場景的使用、基本場景下完整流程的源碼導讀,還介紹了一些高級的功能和場景,比如多人通話、屏幕共享、H.265、美顏、伴奏、本地錄制等,後還對Server端展開了一些討論。本書通過細致的代碼分析和源碼導讀,來講解WebRTC Native的具體實戰,分析WebRTC內部主要的數據流程,力圖使讀者能夠通過實際操作快速入門和理解WebRTC Native的開發技巧。 本書主要面向的是所有希望從事WebRTC Native開發的IT從業人員,且要求讀者具備的Java/Objective-C/C 語言基礎。 目錄
章 開發環境搭建 // 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 0章 純音/視頻 // 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 1章 多人通話 // 178 11.1 概覽 // 178 11.1.1 P2P網狀結構 // 178 11.1.2 SFU結構 // 179 11.1.3 MCU結構 // 180 11.2 客戶端代碼實現 // 180 2章 日志和狀態統計 // 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 3章 屏幕共享 // 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 4章 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 5章 美顏 // 228 15.1 Android美顏處理器 // 228 15.2 iOS美顏處理器 // 231 6章 伴奏 // 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 7章 本地錄制 // 247 17.1 概覽 // 247 17.2 添加接口 // 248 17.3 獲取數據 // 249 17.4 FFmpeg調用 // 252 17.5 視頻關鍵幀 // 257 17.6 視頻方向 // 258 17.7 純音/視頻錄制 // 258 8章 項目外使用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 9章 信令 // 269 19.1 AppRTC Server信令協議 // 269 19.1.1 POST加入房間 // 270 19.1.2 GET獲取ICE服務器配置 // 271 19.1.3 長連接注冊 // 271 19.1.4 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 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 GET用戶和流列表 // 284 19.3 P2P網狀結構信令協議 // 285 19.3.1 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 進程結構和代碼處理流程 // 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 代碼處理流程 // 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 作者介紹
許建林,網名Piasy,畢業於清華大學計算機繫,畢業後創業,參與從零到一打造社交直播 APP YOLO 的全過程。目前就職於 PowerInfo(北京世紀鼎點軟件有限公司),從事高穩定低音視頻實時傳輸技術的研發工作,對實時音視頻領域有著深入的研究。開源愛好者,GitHub 近兩千關注者,開源了數個上千標星的項目。技術分享者,曾在北京 GDG Meetup、DroidCon Beijing 進行技術分享,是WebRTC Native 源碼導讀繫列博客作者。 序言
" |