文章導讀:本節內容如標題——“初識webrtc”,我將從這三個問題展開本節的內容:第一、 看看我們身邊音視頻應用的場景;第二、開發一個完整的的實時音視頻應用需要解決哪些技術問題;第三、webrtc是如何解決復雜的音視頻技術問題。
本書目錄
正文開始。
問題一、身邊的音視頻應用場景。
談到實時音視頻應用的市場需求情況,在前面的章節中也講到過,暫且不提知名的通信應用如Wechat(微信),QQ,Skype,當然,這些應用都是重度依賴實時音視頻通信技術的。接下來我要分析的這兩個應用是工程場景中的實時音視頻應用。
第一個——在線問診醫療系統。我在編寫本文的內容時,正是“新型冠狀病毒”爆發的高峰,每天看着新確診患者人數不斷上升,新死亡患者的數量也不斷增加,身為新一代的“IT 工作者”,我坐立不安,嘆自身能力的渺小,無法沖鋒陷陣。“激動”之余,冷靜思考,雖我不能同廣大的醫護人員一樣獻身前線,但我可以從自身做起,利用自身的技術知識和經驗,為這場“戰役”所需的IT技術貢獻一份綿薄之力。
在疫情抗戰中,第一個實時音視頻應用的典型場景——“在線問診醫療系統”被推到大眾的“視野焦點”,醫生和患者通過智能設備,如手機,平板電腦,個人電腦在線實時溝通,做到了低延時,高可靠的在線交流,提高了治療防疫的效率;同時也很大程度上阻止了疫情的傳播。這一切就如玄幻世界里的魔法棒,開啟時空之門,明明遠在天邊,卻可近在咫尺。回到現實,實時音視頻通信技術撐起了最關鍵的卡點。
第二個——“遠程辦公系統”。這類系統很早就有了,但一直沒有“大火”,疫情的爆發直接導致多家企業無法正常運營,遠程辦公系統借勢上位,仿佛一夜之間,互聯網變得熱鬧非凡,大家都在線上辦公。大廠研發的辦公軟件如釘釘、企業微信一度變成了熱門工具,在線面試,在線客服,在線培訓,在線會議應用等瞬間變成了時代眷顧的寵兒,共同造就了這個五彩繽紛的在線世界。互聯網之中,疫情又如何,擋不住我華夏子孫的勤勞刻苦、創造價值。回到現實,實時音視頻通信技術撐起了最關鍵的卡點。
事物在發展,技術在進步,機遇在到來,未來服務型的產品將會越來越具有互動性,越來越依賴實時通信技術,實時音視頻通信技術將會成為web技術體系中不可缺少的部分。
2019年,我們度過了一個充滿坎坷的一年;換一個視角,我們也經歷了一個科技進步的一年。2019年是5G技術的元年,相比4G高了幾十倍甚至更高的傳輸速度,帶來了更快、更高的網絡通信效率。我不知道會有哪些技術會順勢而生,但我知道,在即時通信領域里的實時音視頻應用中必定如雨后春筍,各類應用及類需求拔地而起。5G 就是實時音視頻的沃土,滋養這一切變得生機勃勃,在這片沃土中耕耘的人們充滿了機遇、希望與未來。我們必應順應時代,從點看面,把握先機,把握未來。
問題二、開發一個完整的實時音視頻應用需要解決哪些技術問題。
讀完這個問題,揭開“天涯咫尺”魔法背后的技術問題。 先來看一張圖,如1.2.1所示。先聲明下,考慮到大部分讀者的情況,下圖1.2.1中僅大體列出核心技術細節流程,真實的技術環節更為復雜。
圖 1.2.1 音視頻通信簡要流程圖
從上圖可以分析到,開發一套完整的音視頻應用需要考慮的技術問題:音視頻流媒體數據的采集、數據處理(如聲音的降噪、回聲消除、增益控制)、編碼、網絡傳輸、解碼、 再次數據處理,播放。細節挺多,總體來講,整個過程比較繁瑣,不誇張的說,任何一個環節都可以單獨提出來成為一個項目來運作,比如網絡傳輸,涉及技術細節有傳輸延時,網絡抖動,丟包處理,p2p傳輸,NAT打洞 ...... ;再比如視頻編解碼,主流的編解碼器如H.264 AVC、 H.265 HEVC、 VP8、 VP9,單獨的一個編解碼器就是一個項目,在音視頻應用中起到不可替代的作用。在這里插一個題外話,可能有小伙伴不知道視頻/音頻的編解碼有什么用,在這里先普及下基本常識, 程序從硬件設備中如攝像頭,麥克風采集到的原始的音視頻數據非常龐大,不便於在網絡中傳輸和磁盤數據存儲,於是編解碼器應運而生,編碼器對原始的音視頻數據進行了有規則的壓縮處理,在不影響體驗效果的情況下降低數據量;而解碼器則是把壓縮的數據進行還原,方便播放,不同的編解碼算法,編解碼質量不同,速度也不同。
如此復雜的一個技術體系不是一般的公司或者個人能獨立完成的,2011年之前,開發音視頻應用的代價很昂貴,技術問題復雜不說,成熟的解決方案並非免費;基於此類解決方案開發出來的應用,用戶的體驗也不好,如在web中則需要依賴各種插件。知名應用如QQ,Yahoo,IBM,SKYPE也在使用GIPS。由此看來,一面方面,自家研發實時音視頻技術的成本高;另外一方面,GIPS的技術確實可靠。
了解音視頻的通信流程之后,接下來我們來看看webrtc是如何解決這些技術問題。這里需要申明,使用第三方SDK的情況不在本書的討論范圍中,本書的重點是在沒有第三方SDK的幫助下,依靠開源的webrtc技術來解決問題。
問題三、webrtc如何解決復雜的音視頻通信中的技術問題。
你可以先體驗下webrtc的demo,在線地址:https://appr.tc/。
2011年webrtc誕生 。初期的webrtc除了谷歌自家的瀏覽器Chrome之外,其他瀏覽器廠商並未支持,特別是微軟更是不屑一顧。直到六年之后,WebRTC加入W3C家族,逐漸成為web的規范,截止2020年,在PC端,主流瀏覽器Chrome、Safari、Edge...... ;移動端,如Android、IOS、IoT(物聯網)等均已支持。 目前市面上只要涉及實時音視頻通信的應用,其技術解決方案9大部分是基於webrtc技術。webrtc是當下,更是未來。
webrtc的誕生解決了音視頻應用中復雜的技術問題,開發者可以其規范快速開發出安全可靠的實時音視頻應用。項目開發時,開發者只需關心上層API的調用,底層的復雜的技術均由webrtc的各種模塊來解決,如網絡傳輸功能,開發者只需要將采集到數據流添加到連接對象中,webrtc會自動選擇最優的傳輸路徑完成數據傳輸;再如音視頻數據采集功能,開發者只需要調用簡單的API即可完成流數據的采集。
在應用層,webrtc對開發者非常友好,那么webrtc是如何解決這么龐大的工程問題呢?這還要歸功於其優秀的架構設計,如下圖1.2.2 所示。注意,本節暫還不細講架構的各個組成部,在這里先讓各位讀者感受一下webrtc技術分層,另外,webrtc的完整源碼比較大,初學者我不建議直接下載源碼編譯或者學習。
圖 1.2.2 webrtc 架構圖
由上圖可以看出,webrtc的架構可以大致分為5層。最上層(應用層)——Web API是本書講解的重點, Web API層主要是以瀏覽器環境為主,基於JavaScript API的應用開發; 下層(核心層)分為四個子層,其中如上圖紅框所標注的部分是第三子核心層——引擎層,該層中分為三大模塊,分別是音頻引擎模塊,視頻引擎模塊,傳輸控制模塊;如此的模塊設計使得webrtc的音頻、視頻、網絡傳輸分而治之,業務邏輯清晰。其他層的介紹詳見下一節。
受益於webrtc的架構,我們開發音視頻應用時就簡單多了。再來參照下圖1.2.3,分析webrtch是如何解決這些技術問題的。
圖 1.2.3 (同圖1.2.1)
圖1.2.3的流程如下:
step1: 音視頻采集。 總體技術細節需要考慮硬件設備(攝像頭、麥克風)的管理,以及如何從硬件設備中讀取流數據,webrtc在底層已經解決了,開發者只需要考慮如何調用這些API。
step2:一系列處理。總體技術很復雜,webrtc都給你實現了,開發者只需要簡單的配置參數。
step3:編碼。總體技術復雜,webrtc已經在底層處理。
step4:網絡傳輸。開發者需要了解網絡處理的流程,如信令服務,ICE框架(數據傳輸框架),P2P穿洞原理、中轉傳輸原理等,並且會使用相關的API。底層的實現交給webrtc。
step5:解碼。同step3。
step6:一系列處理。同step2。
step7:音視頻播放。在web環境中,主要是基於H5的音視頻播放規范,如video標簽、audio標簽。開發者只需要用即可,無需自己實現。
最終基於webrtc實現出來的軟件的架構如下圖1.2.4所示。
圖 1.2.4
在圖1.2.4中,音視頻通信軟件以網頁應用的形式在瀏覽器中運行,中間經過服務器(信令服務器、TURN服務器,后續重點講解)的“搭橋牽線”,實現了兩個端之間的p2p通信/中轉通信。這里在解釋下什么是P2P通信,普通的網絡通信需要經過服務端的中轉,即A、B兩人聊天需要一個“媒婆”來中轉消息,媒婆就是服務端,而P2P通信則無需服務端中轉,服務端僅需為通信雙方建立起通信鏈路即可,通信由A和B直接完成。中轉通信的好處是消息可達性高,幾乎到100%,但缺點是需要服務端中轉,增加通信成本,如果服務端繁忙會導致通信阻塞;p2p通信的好處是無需服務端中轉,通信成本低,速度快,缺點是可達性不高,在我國境內p2p通道建立的成功率不到50%。在webrtc的數據傳輸模塊中會自動優選通信路線,優先使用p2p鏈路通信,如果p2p不成功,再使用中轉通信,而建立P2P鏈路的過程就是我們俗稱的“打洞、穿洞、NAT穿越”。
上述中step1到step7描述的就是一次完整的音視頻傳輸的流程,描述偏理論,當然本章的目標就是幫你構建起基本的概念,第二章開始,我們會有代碼的演示,但本書的定位為核心技術講解,所以所涉及的代碼都是核心代碼,項目實戰,請訂閱本書的姊妹篇——《搞定WebRTC實時音視頻直播技術(項目實戰篇)》 ,書籍的相關信息請在我的個人微信公眾號“晨叔周刊”獲取。
最后,附上本書指定交流微信公眾號——“晨叔周刊”,一起討論吧。