- WebRTC音視頻實時互動技術:原理、實戰與源碼分析
- 李超編著
- 2493字
- 2021-08-06 14:49:27
前言
回想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是如何運轉的了。
我深深知道,一本書的完成并非一人之功,有身邊無數親人、朋友的支持和幫助,才能讓這本書得以出版。這里首先要感謝我的家人,特別是我親愛的妻子,正是她的支持和鼓勵,才使我可以順利地將這本書編寫完成。除此之外,她還成了我的第一個讀者,幫我糾正了很多語病。
感謝我的老領導、老朋友嚴石先生,他是WebEx創業“十君子”之一,是音視頻實時通信方面的頂級專家。他在工作十分繁忙的情況下,仍然抽出了大量時間來閱讀本書書稿,并指出了其中的不足,在此萬分感謝!
感謝高澤華先生能在百忙之中抽出時間來閱讀書稿,并為本書作序。能請到澤華為本書作序是我莫大的榮幸!
感謝劉岐先生為我指出書中的不足。我們是十多年的老朋友了,2005年我們因研究Linux內核而結緣,之后各自發展,沒想到幾年之后我們又都進入了音視頻領域,這應該就是一種緣分吧!
感謝翟方慶先生為本書的編寫提供各種幫助,特別是為圖書的宣傳做了很多工作。
感謝聲網,聲網不但是一家音視頻SDK頂級服務商,也是一家特別有情懷的公司,每年舉辦的RTC大會都是音視頻界的盛會,促進了RTC社區的發展和技術交流。
感謝每一位為本書出版默默付出的人,沒有大家的幫助就不會有本書的誕生。
在編寫本書時,我努力做到準確細致,但難免存在不妥之處,希望讀者朋友能不吝指正,在此萬分感謝!
- Mastering Concurrency Programming with Java 8
- Web前端開發技術:HTML、CSS、JavaScript(第3版)
- Mastering RabbitMQ
- LabVIEW程序設計基礎與應用
- Practical UX Design
- Learning RxJava
- 編程卓越之道(卷3):軟件工程化
- EPLAN實戰設計
- Learning Apache Karaf
- FPGA嵌入式項目開發實戰
- Elasticsearch Essentials
- 跟戴銘學iOS編程:理順核心知識點
- Socket.IO Cookbook
- Mastering React Test:Driven Development
- Programming MapReduce with Scalding