12月9日-10日,中國科學院軟件研究所、中科軟科技聯合主辦的中國軟件技術大會在北京開幕,來自國內各大互聯網和IT公司的技術從業者彙集於此,共同討論交流前沿技術和發展趨勢、分享最佳實踐和應用經驗。
不久前,網易視頻雲在國內首家推出了多路互動直播服務,收到業內人士的普遍關注。在今年的中國軟件技術大會,網易資深音視頻工程師朱玲受邀出席,同與會者分享了網易視頻雲在互動直播場景下的視頻核心技術實踐。算法
用戶須要什麼樣的互動直播?
據朱玲介紹,經過長期的用戶調研和市場研究,網易視頻雲發現互動直播用戶最爲關心的有三個問題:
一、低延時。延時最大不超過500ms,固然越小越好;
2,流暢。每秒最少十幾幀,24fps~30fps,接近電影、電視的播放速率 ,用戶體驗佳;
3,清晰。用客觀標準衡量的話,當視頻編碼後與原始視頻的峯值信噪比。要高於30db,主觀感覺清晰。
那麼,首先須要解決的就是低延時問題。延時指的是端到端延時,包括髮送端、網路傳輸、接收端播放延時,其中延時佔比最大的是傳輸延時。市場上不少直播服務採用了RTMP/TCP協議,將視頻數據流封裝成FLV格式進行傳輸,TCP協議在網絡OSI模型中屬於傳輸層協議,經過擁塞控制、流量控制等算法實現可靠連接。
然而TCP協議中經過丟包重傳、擁塞避免等算法來作擁塞控制,雖然保障了傳輸的可靠性,延時也在增大。一些公司經過修改TCP協議棧來解決延時問題,網易視頻雲在互動直播方面選擇了UDP做爲傳輸協議。
朱玲介紹說,UDP協議自己沒有QoS,在流暢度方面存在一些問題。網易視頻雲給出的解決方案是經過RTP/RTCP半傳輸半應用層協議來實現可靠傳輸控制方案。一方面,RTP標準協議是爲了傳輸實時多媒體應用而生的,有着豐富的擴展以及補充協議,彌補了UDP協議的不足;另外一方面,思科、Google廣泛採用這種方案來實現傳輸流控,能夠說這是一種工業界的標準,更適用於第三方標準應用對接。緩存
據朱玲介紹,針對用戶的基本需求,爲知足和提高用戶體驗。網易視頻雲自主研發了一整套的視頻流傳輸架構,視頻採集後通過編碼,RTP封裝,發送RTP以及RTCP的sender report到對端,對端在接收、解碼過程當中,將流量監控信息實時經過標準RTCP協議反饋給發送端,進行編碼以及發送的控制。
視頻傳輸在實踐過程當中遇到了哪些挑戰?
在實際的視頻傳輸過程當中,每每還會遇到不少意想不到的問題,好比受限於編碼器對不一樣內容圖像的編碼效率以及壓縮率不一樣,RTP包的產生並非均勻的,每每會有burst;在IP網絡中,各個分組從發送方到接收方所歷經的網絡途徑可能不一樣,從而各個分組的傳輸時延也各不相同,甚至容易發生分組的到達次序發生變化;最終在接收端出現亂序、延時抖動、丟包等,用戶端出現卡頓、花屏、沒法播放等一系列問題。
朱玲解釋說,網易視頻雲主要從三個方面來解決這些問題,即平滑發送、抗丟包、抗抖動。
首先是平滑發送。在發送端維護一個rtp數據包buffer,一個發送優先級隊列,當rtp數據包產生後並非馬上發送,而是存放到buffer中緩存,並開啓一個發送定時器線程,將數據包從數據buffer中取出,存放在優先級隊列中,進行發送,咱們在發送以前,會進行網絡探測,根據探測到的可用帶寬,自適應的調節發送速率。
其次解決丟包問題。網絡丟包分爲兩種狀況,一種是網絡中存在的固有,隨機丟包,譬如聯路層的傳輸誤碼,另外一種是網絡擁塞丟包。針對這兩種不一樣的丟包,應該採用不一樣的解決方法,一種是前向糾錯更正FEC, 另外一種是ARQ自動請求重傳。對於互動這種這種延時敏感的應用場景,網易視頻雲選擇FEC做爲丟包解決方案。
「爲了解決丟包問題,咱們的思路是盡力傳輸的基礎上進行擁塞控制,儘可能避免發生擁塞丟包,當聯路存在不可避免的隨機丟包,經過FEC,加強傳輸的魯棒性;利用接收端反饋信息,估計當前可用帶寬,避免擁塞;編碼器在當前估計的可用帶寬下,選擇合適的編碼策略,達到帶寬利益最大化傳輸。」朱玲介紹說。
網易視頻雲是怎麼解決的?
朱玲介紹了網易視頻雲解決擁塞問題的思路。在接收端根據流量監控,實時反饋當前網絡聯路情況,反饋給發送端,發送端根據反饋的丟包信息,添加合適的冗餘包,並結合接收端發送的帶寬估計信息,估計當前的可用帶寬,並進行視頻編碼控制。
除了丟包問題,影響直播體驗的另外一個常見狀況就是延時抖動。所謂抖動,就是每一個數據包到達對端的時間延時是動態變化,可能因爲路由聯路的選擇變動,網絡擁塞等形成,它的直接後果就是,會致使對端播放的不流暢。爲了解決抖動問題,網易視頻雲在接收和播放中引入了JitterBuffer的策略。
朱玲總結說,實驗以及線上用戶的統計數據代表,網易視頻雲的互動直播產品徹底知足用戶需求,平均延時在網絡較好狀況下,端到端延時控制在200ms左右,在網絡不穩定丟包率在20%之內,網易視頻雲依然能提供較爲流暢清晰的視頻體驗。
網絡