★李超
北京音視跳動科技有限公司首席架構師,曾先後擔任滬江網高級架構師、新東方音視頻技術專家等,擁有十餘年的音視頻實時互動直播研發經驗及多年團隊管理經驗,參與設計了多個高負載、高並發服務器架構。曾在全時云會議擔任Tang平臺研發經理,帶領團隊研發自主知識產權的全時音視頻會議平臺——該平臺可以同時並發10000場會議,每場可以支持超過1000人的實時互動。
★本書是一本WebRTC從入門到進階的書籍,不僅對WebRTC的網絡傳輸做了細致、大量的分析,而且還向你詳細介紹了如何通過WebRTC實現Web端與Android和iOS端的互聯互通;最後還對WebRTC的源碼進行了剖析,使你不但可以知道如何使用WebRTC實現音視頻通信,還能讓你了解其中的原理,並知道WebRTC具體是如何做的。
★內容詳實、深入淺出、案例豐富,是音視頻應用開發工程師必備的參考資料,也可供相關專業的在校學生和入門者學習參考。 得到業內多個行業專家聯袂推薦。
★關注“華章計算機”,回復“68501”獲取本書配套代碼地址及後續例程的更新、通過RTC開發者社區本書專欄地址與作者互動交流。
【前言】
回想2020年,疫情的爆發使得世界經濟陷入衰退,目前仍對我們的生活造成影響。
幸運的是我們生活在一個好時代,科技在這幾十年中得到了迅猛發展。即使在疫情最嚴重的時刻,我們仍然可以通過音視頻會議進行遠程辦公,通過在線教育系統進行學習,通過一些視頻軟件觀看直播。
從某個角度看,這次疫情雖然導致很多行業處於崩潰邊緣,但也迫使一些行業加速發展,其中音視頻會議、在線教育的重要性馬上體現了出來,新的溝通方式和教育方式被越來越多的人所認知、接納。我們甚至可以推測,在線教育行業和音視頻會議行業會在今年崛起,並在未來十年得到迅猛發展。音視頻技術、傳輸技術(如5G)的飛速發展,以及因此激發出的人們對音視頻的需求,也為音視頻行業的發展提供了動力。
現在音視頻技術已經非常成熟了,它被越來越廣泛地應用於各行各業,如抖音、微信短視頻、娛樂直播、教育直播、音視頻會議等。就連熱門的AI技術也與音視頻技術關係密切,如智能音箱、自動駕駛、人臉識別等都離不開音視頻技術。未來音視頻技術會有更好的前景,對音視頻人才的需求也必然會像當年移動互聯網發展時一樣出現井噴現象。面對這樣的機遇,你若能掌握音視頻的核心技術,一定可以在未來職場上獲得豐厚的回報和滿滿的成就感。所以,目前是學習音視頻的最佳時機,及早加入音視頻研發的隊伍,有助於你在未來的職場上更有作為。
說到音視頻技術,就不得不說Google開源的WebRTC庫了。WebRTC庫如同音視頻技術的一頂“王冠”,上面鑲嵌了大大小小、各種各樣的“寶石”,如降噪、回音消除、自動增益、NetEQ、網絡擁塞控制······不勝枚舉!目前國內無論是在線教育直播系統,還是音視頻會議系統,其底層幾乎無一例外都使用了WebRTC或從WebRTC中借鑒了不少有價值的模塊和思想。不僅如此,如果現在你去應聘一線大廠的音視頻研發崗,可以發現崗位描述中都寫有“熟悉WebRTC技術者優先”之類的要求,WebRTC的重要性由此可見一斑。因此,了解和學習WebRTC更顯得尤為重要。
自從2011年WebRTC推出之後,我就一直在追蹤其進展。最近幾年WebRTC的發展越來越快,服務質量也越來越好,現在對於大多數公司來說,完全不必像我們當年(2010年)那樣從0開始自研音視頻系統了。你可以在WebRTC的基礎上構建系統,這樣既省時又省力,質量又能得到保障。
但學習WebRTC也並非易事,需要你有良好的基礎,如熟練掌握C++、熟悉音視頻知識、了解網絡傳輸等,這顯然增加了學習WebRTC的成本。而我自從加入“跟誰學”團隊後,不知怎的竟有了“好為人師”的衝動,一直在想是否可以對WebRTC做一個深入剖析,讓更多的人知道WebRTC能做什麼,該如何更好地利用WebRTC。這種想法一直縈繞心頭,隨著時間的推移反而愈加強烈,後來竟成了我必須完成的使命!
因此,自2018年開始,我制定了“WebRTC三部曲”的計劃,即推出三門課,分別是“WebRTC入門與實戰”“百萬級高並發WebRTC流媒體服務器的實現”“WebRTC源碼剖析”。這三門課的前兩門我已經在慕課網推出,受到了廣泛好評,而第三門則以圖書的形式推出,本書也就與大家見面了。當然,WebRTC源碼十分龐雜,想通過一本書將其講清楚是不現實的,所以這本書的推出既是我制定的WebRTC三部曲計劃的終點,也是後面深入分析WebRTC源碼的起點,而我的終極目標是將WebRTC剖析透徹,讓更多的人可以更好地利用WebRTC做出更優秀的產品。
【本書分為三部分,共13章】
第①部分,第1~3章,主要介紹WebRTC的由來,為什麼要選擇WebRTC,以及實時音視頻通信的本質是什麼。
其中第3章最為關鍵,只有了解了音視頻實時通信的本質,你才能知道音視頻實時通信要解決什麼問題,然後才能知道如何解決這些問題,從而理解WebRTC為什麼要這樣做。
第②部分,第4~10章,循序漸進地向你講解WebRTC的理論和實戰。
第4章介紹了一個最簡單的WebRTC信令服務器該如何構建,
第5章介紹了如何通過瀏覽器實現一對一通信,通過這兩章你就可以搭建出一個WebRTC一對一實時通信系統了。
第6章介紹了WebRTC底層是如何傳輸音視頻數據的,重點是如何進行NAT穿越;
第7章詳述了WebRTC媒體協商使用的SDP各字段的含義。需要說明的是,SDP中的每個字段你都需要牢記在心,這樣才能為後續閱讀WebRTC代碼掃清障礙。
第8章介紹如何通過移動端(Android、iOS)Native的方式實現一對一通信,讀完本章內容後,將能實現Web端與移動端的互聯互通;
第9章介紹了WebRTC底層的傳輸協議RTP/RTCP,這部分內容是每個從事實時通信工作的讀者必須掌握的;
第10章介紹了WebRTC的兩種擁塞控制算法,詳細介紹了WebRTC為什麼最終選擇Transport-CC作為默認擁塞控制算法。
第③部分,第11~13章。
第11章介紹了編譯WebRTC源碼庫的方法,對於大多數剛入門的讀者來說,學習WebRTC的第一道門檻便是如何編譯WebRTC,通過對該章的學習,相信你一定可以順利地將WebRTC庫編譯出來;
第12章對WebRTC的peerconnect_client例子做了深入剖析,這個例子可以說是我們學習WebRTC源碼的必經之路,這一章你一定要多花些時間將其全部掌握;
第13章是對WebRTC源碼的整體架構和運轉流程的詳細分析,也是本書最難的部分,將這章了解清楚後,你就知道WebRTC是如何運轉的了。
【推薦序】
2021年1月29日,WebRTC正式成為W3C和IETF標準。自2011年Google宣布WebRTC開源,已經十年了。記得2011年10月,我約了當時還在VisualOn的劉華平和華平科技的劉睿在上海討論基於WebRTC創業計劃。
WebRTC的前身是GIPS(GlobalIPSolutions)。GIPS最早全名叫作GlobalIPSound,是和SpritDSP一樣的終端語音通信解決方案。很多運營商都使用了GIPS或SpritDSP的方案做3G的底層通話SDK。GIPS的突出特點是包括編解碼、回聲消除、降噪等3A算法。GIPS團隊中也不乏大師,比如KenVos、BastiaanKleijn。KenVos(也是後來發明SILK的科學家)的iLBC和iSAC編碼器(2000年後唯一基於FFT的語音編碼器)都開創了編解碼考慮網絡丟包影響的先河。發明回聲消除動態延時估計算法的BastiaanKleijn大師的論文一直被後來的工程師膜拜,它從根本上解決了延時估計的問題。GIPS後期開始做視頻通信SDK方案,所以也把全名由GlobalIPSound改成了GlobalIPSolutions。但星光閃耀的GIPS在商業上不算成功,最後在2011年以不到7000萬美元的價格賣給了Google。而同年5月,微軟收購同樣技術領先的Skype時花費了85億美元。
如果把端到端通信互動技術分解一下,會發現其中有幾個技術難點:客戶端技術、服務器技術、全球設備網絡適配技術和通信互動質量監控與展示技術。在被收購時,GIPS更像一個完整的客戶端解決方案。所以後期Google的開發者在裡面增加了P2P通信技術和一些簡單的互聯互通協議,以及基於Web展示的質量監控,使整個方案逐漸完整起來。
李超先生擁有十多年的實時音視頻研發經驗,曾帶領團隊研發過多個直播平臺,先後任職滬江網高級架構師、新東方音視頻技術專家。這本書從代碼出發,詳細介紹了如何使用WebRTC搭建一對一通信服務,並對內部的協議、擁塞控制技術和交互邏輯也做了詳細的剖析,是一本難得的WebRTC開發書籍。
十年彈指一揮間,一本書囊括了李超先生多年的經驗總結。很榮幸能為李超先生的作品作序。
聲網 Agora 技術 VP & 合伙人,高澤華
●第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.2WebRTC客戶端架構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.1WebRTC一對一架構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.4MediaStream與MediaStreamTrack47
5.5本地視頻預覽47
5.6信令狀態機49
5.7RTCPeerConnection52
5.7.1創建RTCPeerConnection物件52
5.7.2RTCPeerConnection與本地音視頻數據綁定53
5.7.3媒體協商54
5.7.4ICE55
5.7.5SDP與Candidate消息的交換57
5.7.6遠端音視頻渲染58
5.7.7客戶端完整例子59
5.8小結82
●第6章 WebRTC中的ICE實現83
6.1Candidate種類與優先級83
6.2ICE策略85
6.3P2P連接87
6.3.1完全錐型NAT89
6.3.2IP限制錐型NAT90
6.3.3端口限制錐型NAT91
6.3.4對稱型NAT92
6.3.5NAT類型檢測93
6.3.6如何進行NAT穿越97
6.4網絡中繼101
6.4.1TURN協議中轉數據101
6.4.2WebRTC使用TURN協議102
6.4.3STUN/TURN服務器的安裝與部署103
6.5小結105
●第7章 WebRTC中的SDP106
7.1SDP標準規範106
7.2WebRTC中SDP的整體結構108
7.3媒體信息110
7.3.1音頻媒體信息111
7.3.2視頻媒體信息112
7.3.3SSRC與CNAME114
7.4PlanB與UnifiedPlan115
7.5WebRTC如何保證數據安全117
7.6RTP擴展頭119
7.7服務質量120
7.8SDP詳解122
7.9ORTC131
7.10小結131
●第8章 各端的互聯互通132
8.1WebRTCNative的核心132
8.2Android端的實現134
8.2.1申請權限134
8.2.2引入WebRTC庫136
8.2.3構造PeerConnection-Factory138
8.2.4創建音視頻源138
8.2.5視頻采集139
8.2.6視頻渲染142
8.2.7創建PeerConnection144
8.2.8建立信令系統146
8.3iOS端的實現146
8.3.1申請權限146
8.3.2引入WebRTC庫147
8.3.3構造RTCPeerConnection-Factory148
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.4PC端與Mac端的實現159
8.5小結159
●第9章 網絡傳輸協議RTP與RTCP160
9.1如何選擇UDP與TCP160
9.2RTP162
9.2.1RTP協議頭163
9.2.2RTP的使用165
9.2.3RTP擴展頭167
9.2.4RTP中的填充數據170
9.3RTCP171
9.3.1RTCP報文分類171
9.3.2RTCP協議頭172
9.3.3WebRTC的反饋報文173
9.4小結174
●第10章 WebRTC擁塞控制175
10.1WebRTC的擁塞控制算法175
10.1.1Goog-REMB176
10.1.2Transport-CC181
10.1.3基於丟包的擁塞評估算法原理184
10.1.4WebRTC擁塞控制流程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.1WebRTC源碼的選擇193
11.2WebRTC開發環境的搭建193
11.2.1配置軟硬件環境194
11.2.2安裝依賴工具包195
11.2.3獲取並編譯WebRTC代碼195
11.3國內WebRTC鏡像196
11.4WebRTC目錄結構197
11.4.1WebRTC主目錄197
11.4.2modules目錄198
11.5小結200
●第12章 分析WebRTC源碼的必經之路201
12.1信令服務器實現分析201
12.1.1信令服務器的組成202
12.1.2信令服務器的工作流程203
12.2PeerConnection客戶端分析206
12.2.1運行peerconnection_client206
12.2.2peerconnection_client的組成207
12.2.3界面的展示213
12.2.4視頻的渲染218
12.2.5WebRTC的使用220
12.2.6信令的處理225
12.3小結229
●第13章 WebRTC源碼分析231
13.1WebRTC的數據流231
13.2WebRTC線程模型234
13.2.1WebRTC線程的創建與使用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
大陸出版品因裝訂品質及貨運條件與台灣出版品落差甚大,除封面破損、內頁脫落等較嚴重的狀態,其餘商品將正常出貨。
特別提醒:部分書籍附贈之內容(如音頻mp3或影片dvd等)已無實體光碟提供,需以QR CODE 連結至當地網站註冊“並通過驗證程序”,方可下載使用。
無現貨庫存之簡體書,將向海外調貨:
海外有庫存之書籍,等候約45個工作天;
海外無庫存之書籍,平均作業時間約60個工作天,然不保證確定可調到貨,尚請見諒。
為了保護您的權益,「三民網路書店」提供會員七日商品鑑賞期(收到商品為起始日)。
若要辦理退貨,請在商品鑑賞期內寄回,且商品必須是全新狀態與完整包裝(商品、附件、發票、隨貨贈品等)否則恕不接受退貨。