當(dāng)前位置:首頁(yè) > 芯聞號(hào) > 充電吧
[導(dǎo)讀] 最近由于公司業(yè)務(wù)關(guān)系,需要一個(gè)在公網(wǎng)上能實(shí)時(shí)互動(dòng)超清視頻的架構(gòu)和技術(shù)方案。眾所周知,視頻直播用 CDN + RTMP 就可以滿足絕大部分視頻直播業(yè)務(wù),我們也接觸了和測(cè)試了幾家 CDN 提供的

最近由于公司業(yè)務(wù)關(guān)系,需要一個(gè)在公網(wǎng)上能實(shí)時(shí)互動(dòng)超清視頻的架構(gòu)和技術(shù)方案。眾所周知,視頻直播用 CDN + RTMP 就可以滿足絕大部分視頻直播業(yè)務(wù),我們也接觸了和測(cè)試了幾家 CDN 提供的方案,單人直播沒(méi)有問(wèn)題,一旦涉及到多人互動(dòng)延遲非常大,無(wú)法進(jìn)行正常的互動(dòng)交談。對(duì)于我們做在線教育的企業(yè)來(lái)說(shuō)沒(méi)有互動(dòng)的直播是毫無(wú)意義的,所以我們決定自己來(lái)構(gòu)建一個(gè)超清晰(1080P)實(shí)時(shí)視頻的傳輸方案。


先來(lái)解釋下什么是實(shí)時(shí)視頻,實(shí)時(shí)視頻就是視頻圖像從產(chǎn)生到消費(fèi)完成整個(gè)過(guò)程人感覺(jué)不到延遲,只要符合這個(gè)要求的視頻業(yè)務(wù)都可以稱為實(shí)時(shí)視頻。關(guān)于視頻的實(shí)時(shí)性歸納為三個(gè)等級(jí):


偽實(shí)時(shí):視頻消費(fèi)延遲超過(guò) 3 秒,單向觀看實(shí)時(shí),通用架構(gòu)是 CDN + RTMP + HLS,現(xiàn)在基本上所有的直播都是這類技術(shù)。

準(zhǔn)實(shí)時(shí): 視頻消費(fèi)延遲 1 ~ 3 秒,能進(jìn)行雙方互動(dòng)但互動(dòng)有障礙。有些直播網(wǎng)站通過(guò) TCP/UDP + FLV 已經(jīng)實(shí)現(xiàn)了這類技術(shù),YY 直播屬于這類技術(shù)。

真實(shí)時(shí):視頻消費(fèi)延遲 < 1秒,平均 500 毫秒。這類技術(shù)是真正的實(shí)時(shí)技術(shù),人和人交談沒(méi)有明顯延遲感。QQ、微信、Skype 和 WebRTC 等都已經(jīng)實(shí)現(xiàn)了這類技術(shù)。


市面上大部分真實(shí)時(shí)視頻都是 480P 或者 480P 以下的實(shí)時(shí)傳輸方案,用于在線教育和線上教學(xué)有一定困難,而且有時(shí)候流暢度是個(gè)很大的問(wèn)題。在實(shí)現(xiàn)超清晰實(shí)時(shí)視頻我們做了大量嘗試性的研究和探索,在這里會(huì)把大部分細(xì)節(jié)分享出來(lái)。


要實(shí)時(shí)就要縮短延遲,要縮短延遲就要知道延遲是怎么產(chǎn)生的,視頻從產(chǎn)生、編碼、傳輸?shù)阶詈蟛シ畔M(fèi),各個(gè)環(huán)節(jié)都會(huì)產(chǎn)生延遲,總體歸納為下圖:



(點(diǎn)擊圖片可以全屏縮放)


成像延遲,一般的技術(shù)是毫無(wú)為力的,涉及到 CCD 相關(guān)的硬件,現(xiàn)在市面上最好的CCD,一秒鐘 50 幀,成像延遲也在 20 毫秒左右,一般的CCD只有 20 ~ 25 幀左右,成像延遲 40 ~ 50 毫秒。


編碼延遲,和編碼器有關(guān)系,在接下來(lái)的小結(jié)介紹,一般優(yōu)化的空間比較小。


我們著重針對(duì)網(wǎng)絡(luò)延遲和播放緩沖延遲來(lái)進(jìn)行設(shè)計(jì),在介紹整個(gè)技術(shù)細(xì)節(jié)之前先來(lái)了解下視頻編碼和網(wǎng)絡(luò)傳輸相關(guān)的知識(shí)和特點(diǎn)。


一、視頻編碼那些事


我們知道從CCD采集到的圖像格式一般的 RGB 格式的(BMP),這種格式的存儲(chǔ)空間非常大,它是用三個(gè)字節(jié)描述一個(gè)像素的顏色值,如果是 1080P 分辨率的圖像空間:1920 x 1080 x 3 = 6MB,就算轉(zhuǎn)換成 JPG 也有近 200KB,如果是每秒 12 幀用 JPG 也需要近 2.4MB/S 的帶寬,這帶寬在公網(wǎng)上傳輸是無(wú)法接受的。


視頻編碼器就是為了解決這個(gè)問(wèn)題的,它會(huì)根據(jù)前后圖像的變化做運(yùn)動(dòng)檢測(cè),通過(guò)各種壓縮把變化的發(fā)送到對(duì)方,1080P 進(jìn)行過(guò) H.264編碼后帶寬也就在 200KB/S ~ 300KB/S 左右。在我們的技術(shù)方案里面我們采用 H.264 作為默認(rèn)編碼器(也在研究 H.265)。


1.1 H.264 編碼


前面提到視頻編碼器會(huì)根據(jù)圖像的前后變化進(jìn)行選擇性壓縮,因?yàn)閯傞_(kāi)始接收端是沒(méi)有收到任何圖像,那么編碼器在開(kāi)始?jí)嚎s的視頻時(shí)需要做個(gè)全量壓縮,這個(gè)全量壓縮在 H.264 中 I 幀,后面的視頻圖像根據(jù)這個(gè)I幀來(lái)做增量壓縮,這些增量壓縮幀叫做 P 幀,H.264 為了防止丟包和減小帶寬還引入一種雙向預(yù)測(cè)編碼的 B 幀,B 幀以前面的 I 或 P 幀和后面的 P 幀為參考幀。H.264 為了防止中間 P 幀丟失視頻圖像會(huì)一直錯(cuò)誤它引入分組序列(GOP)編碼,也就是隔一段時(shí)間發(fā)一個(gè)全量 I 幀,上一個(gè) I 幀與下一個(gè) I 幀之間為一個(gè)分組 GOP。它們之間的關(guān)系如下圖:




PS:在實(shí)時(shí)視頻當(dāng)中最好不要加入 B 幀,因?yàn)?B 幀是雙向預(yù)測(cè),需要根據(jù)后面的視頻幀來(lái)編碼,這會(huì)增大編解碼延遲。


1.2 馬賽克、卡頓和秒開(kāi)


前面提到如果 GOP 分組中的P幀丟失會(huì)造成解碼端的圖像發(fā)生錯(cuò)誤,其實(shí)這個(gè)錯(cuò)誤表現(xiàn)出來(lái)的就是馬賽克。因?yàn)橹虚g連續(xù)的運(yùn)動(dòng)信息丟失了,H.264 在解碼的時(shí)候會(huì)根據(jù)前面的參考幀來(lái)補(bǔ)齊,但是補(bǔ)齊的并不是真正的運(yùn)動(dòng)變化后的數(shù)據(jù),這樣就會(huì)出現(xiàn)顏色色差的問(wèn)題,這就是所謂的馬賽克現(xiàn)象,如圖:




這種現(xiàn)象不是我們想看到的。為了避免這類問(wèn)題的發(fā)生,一般如果發(fā)現(xiàn) P 幀或者 I 幀丟失,就不顯示本 GOP 內(nèi)的所有幀,直到下一個(gè) I 幀來(lái)后重新刷新圖像。但是 I 幀是按照幀周期來(lái)的,需要一個(gè)比較長(zhǎng)的時(shí)間周期,如果在下一個(gè) I 幀來(lái)之前不顯示后來(lái)的圖像,那么視頻就靜止不動(dòng)了,這就是出現(xiàn)了所謂的卡頓現(xiàn)象。如果連續(xù)丟失的視頻幀太多造成解碼器無(wú)幀可解,也會(huì)造成嚴(yán)重的卡頓現(xiàn)象。視頻解碼端的卡頓現(xiàn)象和馬賽克現(xiàn)象都是因?yàn)閬G幀引起的,最好的辦法就是讓幀盡量不丟。


知道 H.264 的原理和分組編碼技術(shù)后所謂的秒開(kāi)技術(shù)就比較簡(jiǎn)單了,只要發(fā)送方從最近一個(gè) GOP 的 I 幀開(kāi)發(fā)發(fā)送給接收方,接收方就可以正常解碼完成的圖像并立即顯示。但這會(huì)在視頻連接開(kāi)始的時(shí)候多發(fā)一些幀數(shù)據(jù)造成播放延遲,只要在接收端播放的時(shí)候盡量讓過(guò)期的幀數(shù)據(jù)只解碼不顯示,直到當(dāng)前視頻幀在播放時(shí)間范圍之內(nèi)即可。


1.3 編碼延遲與碼率


前面四個(gè)延遲里面我們提到了編碼延遲,編碼延遲就是從CCD出來(lái)的 RGB 數(shù)據(jù)經(jīng)過(guò) H.264 編碼器編碼后出來(lái)的幀數(shù)據(jù)過(guò)程的時(shí)間。我們?cè)谝粋€(gè) 8 核 CPU 的普通客戶機(jī)測(cè)試了最新版本 X.264 的各個(gè)分辨率的延遲,數(shù)據(jù)如下:



從上面可以看出,超清視頻的編碼延遲會(huì)達(dá)到 50ms,解決編碼延遲的問(wèn)題只能去優(yōu)化編碼器內(nèi)核讓編碼的運(yùn)算更快,我們也正在進(jìn)行方面的工作。


在 1080P 分辨率下,視頻編碼碼率會(huì)達(dá)到 300KB/S,單個(gè) I 幀數(shù)據(jù)大小達(dá)到 80KB,單個(gè) P 幀可以達(dá)到 30KB,這對(duì)網(wǎng)絡(luò)實(shí)時(shí)傳輸造成嚴(yán)峻的挑戰(zhàn)。


二、網(wǎng)絡(luò)傳輸質(zhì)量因素


實(shí)時(shí)互動(dòng)視頻一個(gè)關(guān)鍵的環(huán)節(jié)就是網(wǎng)絡(luò)傳輸技術(shù),不管是早期 VoIP,還是現(xiàn)階段流行的視頻直播,其主要手段是通過(guò) TCP/IP 協(xié)議來(lái)進(jìn)行通信。但是 IP 網(wǎng)絡(luò)本來(lái)就是不可靠的傳輸網(wǎng)絡(luò),在這樣的網(wǎng)絡(luò)傳輸視頻很容易造成卡頓現(xiàn)象和延遲。先來(lái)看看 IP 網(wǎng)絡(luò)傳輸?shù)膸讉€(gè)影響網(wǎng)絡(luò)傳輸質(zhì)量關(guān)鍵因素。


2.1 TCP 和 UDP


對(duì)直播有過(guò)了解的人都會(huì)認(rèn)為做視頻傳輸首選的就是 TCP + RTMP,其實(shí)這是比較片面的。在大規(guī)模實(shí)時(shí)多媒體傳輸網(wǎng)絡(luò)中,TCP 和 RTMP 都不占優(yōu)勢(shì)。TCP 是個(gè)擁塞公平傳輸?shù)膮f(xié)議,它的擁塞控制都是為了保證網(wǎng)絡(luò)的公平性而不是快速到達(dá),我們知道,TCP 層只有順序到對(duì)應(yīng)的報(bào)文才會(huì)提示應(yīng)用層讀數(shù)據(jù),如果中間有報(bào)文亂序或者丟包都會(huì)在TCP做等待,所以TCP的發(fā)送窗口緩沖和重發(fā)機(jī)制在網(wǎng)絡(luò)不穩(wěn)定的情況下會(huì)造成延遲不可控,而且傳輸鏈路層級(jí)越多延遲會(huì)越大。


關(guān)于TCP的原理:

http://coolshell.cn/articles/11564.html

關(guān)于TCP重發(fā)延遲:

http://weibo.com/p/1001603821691477346388


在實(shí)時(shí)傳輸中使用 UDP 更加合理,UDP 避免了TCP繁重的三次握手、四次揮手和各種繁雜的傳輸特性,只需要在 UDP 上做一層簡(jiǎn)單的鏈路 QoS 監(jiān)測(cè)和報(bào)文重發(fā)機(jī)制,實(shí)時(shí)性會(huì)比TCP好,這一點(diǎn)從 RTP 和 DDCP 協(xié)議可以證明這一點(diǎn),我們正式參考了這兩個(gè)協(xié)議來(lái)設(shè)計(jì)自己的通信協(xié)議。


2.2 延遲


要評(píng)估一個(gè)網(wǎng)絡(luò)通信質(zhì)量的好壞和延遲一個(gè)重要的因素就是 Round-Trip Time(網(wǎng)絡(luò)往返延遲),也就是 RTT。評(píng)估兩端之間的 RTT 方法很簡(jiǎn)單,大致如下:


發(fā)送端方一個(gè)帶本地時(shí)間戳 T1 的 ping 報(bào)文到接收端;

接收端收到 ping 報(bào)文,以 ping 中的時(shí)間戳 T1 構(gòu)建一個(gè)攜帶 T1 的 pong 報(bào)文發(fā)往發(fā)送端;

發(fā)送端接收到接收端發(fā)了的 pong 時(shí),獲取本地的時(shí)間戳 T2,用 T2 – T1 就是本次評(píng)測(cè)的 RTT。


示意圖如下:


欲知詳情,請(qǐng)下載word文檔 下載文檔

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉