學(xué)習(xí)地址1:https://pan.baidu.com/s/1F4tAlst6Rix-AVI1EmiEAw 提取碼:lkso
學(xué)習(xí)地址2:https://share.weiyun.com/DF5SwWs3 密碼:u2h5nv
一、WebRTC,名稱源自網(wǎng)頁(yè)實(shí)時(shí)通信(Web Real-Time Communication)的縮寫(xiě),是一個(gè)支持網(wǎng)頁(yè)瀏覽器進(jìn)行實(shí)時(shí)語(yǔ)音通話或視頻聊天的技術(shù),是谷歌 2010 年以 6820 萬(wàn)美元收購(gòu) Global IP Solutions 公司而獲得的一項(xiàng)技術(shù)。
WebRTC 提供了實(shí)時(shí)音視頻的核心技術(shù),包括音視頻的采集、編解碼、網(wǎng)絡(luò)傳輸、顯示等功能,并且還支持跨平臺(tái):windows,linux,mac,android。
雖然 WebRTC 的目標(biāo)是實(shí)現(xiàn)跨平臺(tái)的 Web 端實(shí)時(shí)音視頻通訊,但因?yàn)楹诵膶哟a的 Native、高品質(zhì)和內(nèi)聚性,開(kāi)發(fā)者很容易進(jìn)行除 Web 平臺(tái)外的移殖和應(yīng)用。很長(zhǎng)一段時(shí)間內(nèi) WebRTC 是業(yè)界能免費(fèi)得到的唯一高品質(zhì)實(shí)時(shí)音視頻通訊技術(shù)。
二、WebRTC 功能模塊
WebRTC 實(shí)現(xiàn)了基于網(wǎng)頁(yè)的視頻會(huì)議,標(biāo)準(zhǔn)是 WHATWG 協(xié)議,目的是通過(guò)瀏覽器提供簡(jiǎn)單的 javascript 就可以達(dá)到實(shí)時(shí)通訊(Real-Time Communications (RTC))能力。
①、視頻采集—video_capture
源代碼在 webrtc\modules\video_capture\main 目錄下, 包含接口和各個(gè)平臺(tái)的源代碼。
在 windows 平臺(tái)上,WebRTC 采用的是 dshow 技術(shù),來(lái)實(shí)現(xiàn)枚舉視頻的設(shè)備信息和視頻數(shù)據(jù)的采集,這意味著可以支持大多數(shù)的視頻采集設(shè)備;對(duì)那些需要單獨(dú)驅(qū)動(dòng)程序的視頻采集卡(比如?蹈咔蹇ǎ┚蜔o(wú)能為力了。
視頻采集支持多種媒體類型,比如 I420、YUY2、RGB、UYUY 等,并可以進(jìn)行幀大小和幀率控制。
②、視頻編解碼—video_coding
源代碼在 webrtc\modules\video_coding 目錄下。
WebRTC 采用 I420/VP8 編解碼技術(shù)。VP8 是 google 收購(gòu) ON2 后的開(kāi)源實(shí)現(xiàn),并且也用在 WebM 項(xiàng)目中。VP8 能以更少的數(shù)據(jù)提供更高質(zhì)量的視頻,特別適合視頻會(huì)議這樣的需求。
③、視頻加密—video_engine_encryption
視頻加密是 WebRTC 的 video_engine 一部分,相當(dāng)于視頻應(yīng)用層面的功能,給點(diǎn)對(duì)點(diǎn)的視頻雙方提供了數(shù)據(jù)上的安全保證,可以防止在 Web 上視頻數(shù)據(jù)的泄漏。
視頻加密在發(fā)送端和接收端進(jìn)行加解密視頻數(shù)據(jù),密鑰由視頻雙方協(xié)商,代價(jià)是會(huì)影響視頻數(shù)據(jù)處理的性能;也可以不使用視頻加密功能,這樣在性能上會(huì)好些。
④、視頻媒體文件—media_file
源代碼在 webrtc\modules\media_file 目錄下。
該功能是可以用本地文件作為視頻源,有點(diǎn)類似虛擬攝像頭的功能;支持的格式有 Avi,另外 WebRTC 還可以錄制音視頻到本地文件,比較實(shí)用的功能。
⑤、視頻圖像處理—video_processing
源代碼在 webrtc\modules\video_processing 目錄下。
視頻圖像處理針對(duì)每一幀的圖像進(jìn)行處理,包括明暗度檢測(cè)、顏色增強(qiáng)、降噪處理等功能,用來(lái)提升視頻質(zhì)量。
⑥、視頻顯示—video_render
源代碼在 webrtc\modules\video_render 目錄下。
在 windows 平臺(tái),WebRTC 采用 direct3d9 和 directdraw 的方式來(lái)顯示視頻,只能這樣,必須這樣。
⑦、網(wǎng)絡(luò)傳輸與流控
對(duì)于網(wǎng)絡(luò)視頻來(lái)講,數(shù)據(jù)的傳輸與控制是核心價(jià)值。WebRTC 采用的是成熟的 RTP/RTCP 技術(shù)。
三、WebRTC的工作原理
WebRTC的工作方式的理解需要涉及多個(gè)關(guān)鍵組件。這些組件相互協(xié)作,形成了一個(gè)強(qiáng)大的,允許瀏覽器和應(yīng)用程序進(jìn)行實(shí)時(shí)通信的框架。讓我們?cè)敿?xì)探討一下每個(gè)部分:
2.1 信令(Signaling)
盡管信令并不直接包含在WebRTC的技術(shù)規(guī)范中,但它在實(shí)現(xiàn)實(shí)時(shí)通信的過(guò)程中起到了核心作用。信令是用于在WebRTC客戶端之間協(xié)調(diào)、建立通信的過(guò)程,包括了會(huì)話控制(發(fā)起和結(jié)束)、網(wǎng)絡(luò)數(shù)據(jù)(IP和端口)和媒體數(shù)據(jù)(編解碼器、帶寬和媒體類型等SDP信息)等元數(shù)據(jù)的交換。
WebRTC并沒(méi)有規(guī)定特定的信令協(xié)議或方法,這給了開(kāi)發(fā)者很大的靈活性,他們可以選擇最適合他們需求的協(xié)議,如WebSocket、SIP等。然而,需要注意的是,信令過(guò)程需要一個(gè)服務(wù)器來(lái)中繼消息,而這個(gè)服務(wù)器是開(kāi)發(fā)者需要自己提供的。
2.2 網(wǎng)絡(luò)地址轉(zhuǎn)換穿越(NAT Traversal)
WebRTC設(shè)計(jì)的初衷就是要讓設(shè)備能夠相互通信,不論這些設(shè)備在何處、是否在NAT防火墻之后。為了實(shí)現(xiàn)這一目標(biāo),WebRTC引入了網(wǎng)絡(luò)地址轉(zhuǎn)換穿越(NAT Traversal)的技術(shù)。這一過(guò)程主要依賴于兩種協(xié)議,即會(huì)話穿越工具(STUN)和中繼NAT穿越工具(TURN)。
STUN服務(wù)器的作用是幫助設(shè)備發(fā)現(xiàn)自己的公網(wǎng)IP地址和端口。然而,STUN不能在所有情況下都工作,特別是當(dāng)NAT防火墻的策略比較嚴(yán)格時(shí)。這時(shí),TURN服務(wù)器就派上用場(chǎng)了。TURN服務(wù)器實(shí)際上扮演了媒體流的中繼角色,將數(shù)據(jù)從發(fā)送端傳到接收端。