12月9日-10日能庆,中國科學(xué)院軟件研究所砖瞧、中科軟科技聯(lián)合主辦的中國軟件技術(shù)大會在北京開幕屯蹦,來自國內(nèi)各大互聯(lián)網(wǎng)和IT公司的技術(shù)從業(yè)者聚集于此,共同討論交流前沿技術(shù)和發(fā)展趨勢脐区、分享最佳實踐和應(yīng)用經(jīng)驗愈诚。
不久前,網(wǎng)易視頻云在國內(nèi)首家推出了多路互動直播服務(wù),收到業(yè)內(nèi)人士的廣泛關(guān)注炕柔。在今年的中國軟件技術(shù)大會酌泰,網(wǎng)易資深音視頻工程師朱玲受邀出席,同與會者分享了網(wǎng)易視頻云在互動直播場景下的視頻核心技術(shù)實踐汗唱。
用戶需要什么樣的互動直播宫莱?
據(jù)朱玲介紹丈攒,通過長期的用戶調(diào)研和市場研究哩罪,網(wǎng)易視頻云發(fā)現(xiàn)互動直播用戶最為關(guān)心的有三個問題:
1、低延時巡验。延時最大不超過500ms际插,當(dāng)然越小越好;
2显设,流暢框弛。每秒最少十幾幀,24fps~30fps捕捂,接近電影瑟枫、電視的播放速率 ,用戶體驗佳指攒;
3慷妙,清晰。用客觀標(biāo)準(zhǔn)衡量的話允悦,當(dāng)視頻編碼后與原始視頻的峰值信噪比膝擂。要高于30db,主觀感受清晰隙弛。
那么架馋,首先需要解決的就是低延時問題。延時指的是端到端延時全闷,包括發(fā)送端叉寂、網(wǎng)路傳輸、接收端播放延時总珠,其中延時占比最大的是傳輸延時屏鳍。市場上很多直播服務(wù)采用了RTMP/TCP協(xié)議,將視頻數(shù)據(jù)流封裝成FLV格式進行傳輸姚淆,TCP協(xié)議在網(wǎng)絡(luò)OSI模型中屬于傳輸層協(xié)議孕蝉,通過擁塞控制、流量控制等算法實現(xiàn)可靠鏈接腌逢。
然而TCP協(xié)議中通過丟包重傳降淮、擁塞避免等算法來做擁塞控制,雖然保障了傳輸?shù)目煽啃裕訒r也在增大佳鳖。一些公司通過修改TCP協(xié)議棧來解決延時問題霍殴,網(wǎng)易視頻云在互動直播方面選擇了UDP作為傳輸協(xié)議。
朱玲介紹說系吩,UDP協(xié)議本身沒有QoS来庭,在流暢度方面存在一些問題。網(wǎng)易視頻云給出的解決方案是通過RTP/RTCP半傳輸半應(yīng)用層協(xié)議來實現(xiàn)可靠傳輸控制方案穿挨。一方面月弛,RTP標(biāo)準(zhǔn)協(xié)議是為了傳輸實時多媒體應(yīng)用而生的,有著豐富的擴展以及補充協(xié)議科盛,彌補了UDP協(xié)議的不足帽衙;另一方面,思科贞绵、Google普遍采用這種方案來實現(xiàn)傳輸流控厉萝,可以說這是一種工業(yè)界的標(biāo)準(zhǔn),更適用于第三方標(biāo)準(zhǔn)應(yīng)用對接榨崩。
據(jù)朱玲介紹谴垫,針對用戶的基本需求,為滿足和提升用戶體驗母蛛。網(wǎng)易視頻云自主研發(fā)了一整套的視頻流傳輸架構(gòu)翩剪,視頻采集后經(jīng)過編碼,RTP封裝溯祸,發(fā)送RTP以及RTCP的sender report到對端肢专,對端在接收、解碼過程中焦辅,將流量監(jiān)控信息實時通過標(biāo)準(zhǔn)RTCP協(xié)議反饋給發(fā)送端博杖,進行編碼以及發(fā)送的控制。
視頻傳輸在實踐過程中遇到了哪些挑戰(zhàn)筷登?
在實際的視頻傳輸過程中剃根,往往還會遇到很多意想不到的問題,比如受限于編碼器對不同內(nèi)容圖像的編碼效率以及壓縮率不同前方,RTP包的產(chǎn)生并不是均勻的狈醉,往往會有burst惠险;在IP網(wǎng)絡(luò)中,各個分組從發(fā)送方到接收方所歷經(jīng)的網(wǎng)絡(luò)途徑可能不同班巩,從而各個分組的傳輸時延也各不相同渣慕,甚至容易發(fā)生分組的到達次序發(fā)生變化;最終在接收端出現(xiàn)亂序、延時抖動逊桦、丟包等眨猎,用戶端出現(xiàn)卡頓、花屏强经、無法播放等一系列問題睡陪。
朱玲解釋說,網(wǎng)易視頻云主要從三個方面來解決這些問題匿情,即平滑發(fā)送兰迫、抗丟包、抗抖動码秉。
首先是平滑發(fā)送逮矛。在發(fā)送端維護一個rtp數(shù)據(jù)包buffer,一個發(fā)送優(yōu)先級隊列转砖,當(dāng)rtp數(shù)據(jù)包產(chǎn)生后并不是立刻發(fā)送,而是存放到buffer中緩存鲸伴,并開啟一個發(fā)送定時器線程府蔗,將數(shù)據(jù)包從數(shù)據(jù)buffer中取出,存放在優(yōu)先級隊列中汞窗,進行發(fā)送姓赤,我們在發(fā)送之前,會進行網(wǎng)絡(luò)探測仲吏,根據(jù)探測到的可用帶寬不铆,自適應(yīng)的調(diào)節(jié)發(fā)送速率。
其次解決丟包問題裹唆。網(wǎng)絡(luò)丟包分為兩種情況誓斥,一種是網(wǎng)絡(luò)中存在的固有,隨機丟包许帐,譬如聯(lián)路層的傳輸誤碼劳坑,另一種是網(wǎng)絡(luò)擁塞丟包。針對這兩種不同的丟包成畦,應(yīng)該采用不同的解決方法距芬,一種是前向糾錯更正FEC, 另一種是ARQ自動請求重傳。對于互動這種這種延時敏感的應(yīng)用場景循帐,網(wǎng)易視頻云選擇FEC作為丟包解決方案框仔。
“為了解決丟包問題,我們的思路是盡力傳輸?shù)幕A(chǔ)上進行擁塞控制拄养,盡量避免發(fā)生擁塞丟包离斩,當(dāng)聯(lián)路存在不可避免的隨機丟包,通過FEC,增強傳輸?shù)聂敯粜裕焕媒邮斩朔答佇畔⒕柰龋烙嫯?dāng)前可用帶寬纵朋,避免擁塞;編碼器在當(dāng)前估計的可用帶寬下茄袖,選擇合適的編碼策略操软,達到帶寬利益最大化傳輸∠芟椋”朱玲介紹說。
網(wǎng)易視頻云是怎么解決的藏澳?
朱玲介紹了網(wǎng)易視頻云解決擁塞問題的思路馍迄。在接收端根據(jù)流量監(jiān)控,實時反饋當(dāng)前網(wǎng)絡(luò)聯(lián)路狀況野芒,反饋給發(fā)送端,發(fā)送端根據(jù)反饋的丟包信息狞悲,添加合適的冗余包摇锋,并結(jié)合接收端發(fā)送的帶寬估計信息,估計當(dāng)前的可用帶寬荸恕,并進行視頻編碼控制戚炫。
除了丟包問題,影響直播體驗的另一個常見情況就是延時抖動双肤。所謂抖動,就是每個數(shù)據(jù)包到達對端的時間延時是動態(tài)變化七芭,可能由于路由聯(lián)路的選擇變更狸驳,網(wǎng)絡(luò)擁塞等造成,它的直接后果就是撰糠,會導(dǎo)致對端播放的不流暢。為了解決抖動問題阅酪,網(wǎng)易視頻云在接收和播放中引入了JitterBuffer的策略术辐。
朱玲總結(jié)說施无,實驗以及線上用戶的統(tǒng)計數(shù)據(jù)表明,網(wǎng)易視頻云的互動直播產(chǎn)品完全滿足用戶需求瑞躺,平均延時在網(wǎng)絡(luò)較好情況下卓练,端到端延時控制在200ms左右襟企,在網(wǎng)絡(luò)不穩(wěn)定丟包率在20%以內(nèi)顽悼,網(wǎng)易視頻云依然能提供較為流暢清晰的視頻體驗。