4K視頻在WebRTC中的實時傳輸

人們對音視頻體驗的追求是不斷在增長的,當1080P已經逐漸成爲主流分辨率的情況下,追求更高品質的畫面,將會是音視頻工作者需要提前去研究的。

最近對4K視頻(分辨率 4096x2160 / 3840x2160)在WebRTC中的採/編/解/渲染進行了一次嘗試,總的來說還不錯。

在描述我的實驗之前,讓我們來看一篇文章。(請容忍我的英文翻譯水平,你可以直接跳過我的翻譯看原文

以下是我對此文的翻譯:

很多人都聯繫過我詢問有關使用4K和WebRTC的問題。各種設備/服務供應商已經開始宣揚他們是如何支持4K視頻的。這消息當然是挺好的,但卻沒能讓我瘋狂起來。

WebRTC是否支持4K視頻?回答是肯定的(Chrome桌面版至少支持使用getUserMedia來獲取到4K)。但考慮一下實際中可行嗎?不。

4K視頻的分辨率爲4096x2160(或3840×2160)。要傳輸4K視頻,您需要至少15 Mbps、最好是20 Mbps的碼率來支持30 fps的幀率。對於視頻會議,您需要以此速度長時間地進行雙向互聯網連接。當連接方數多的時候,將會變得非常糟糕。所以,你真的擁有這樣一個理想的高速互聯網連接嗎?

在我看來你根本沒有。

實際上我們很少有人具備這種網絡條件。對於最後一英里的互聯網連接,下行鏈接通常速度快連通性好,但您的上行鏈路速度通常較低。互聯網服務供應商通常也會虛標帶寬能力,這意味着你的速度怎樣還要看他們的心情。

我自己的Google互聯網服務有100 Mbps的服務,實際上,它在任何時間段內都很少超過10 Mbps。當然它可以衝到40 Mbps但不會持續很長時間。Netflix正在嘗試傳輸4K視頻,但這顯然需要20 Mbps的下行鏈路,不像實時視頻那樣,Netflix可以緩衝一些數據來平滑邊緣,並且也只需要發送1路即可。實時視頻不會有這種奢侈。

另一個障礙是您的以太網NIC或WiFi。當你試圖使用30-40Mbps的恆定碼率時,你的網絡帶寬資源可能很快就飽和了。記住你是在一種基於廉價規則的消費級設備上來做個事情的。

你能通過WebRTC運行4K視頻嗎?是的,維吉尼亞,它可以。事實上,許多人已經對此進行了實驗,確實有效。然後他們只是實驗,每個人都連在同一個局域網上。考慮將4K WebRTC視頻用於公網上作爲產品是否切合實際?不。

隨着時間的推移,互聯網訪問速度將會提高,毫無疑問,我們將能夠更快地運行某些東西,也許4K會議將成爲現實。但不是今天。

如果你正在看WebRTC視頻,下面是每個流需要多少的帶寬近似值:

模式 碼率
4K 15-20Mbps
1080p 4-8Mbps
720p 1-4Mbps
VGA (640x480) 500K - 1Mbps
QVGA (320x320) 300-500K

你可以將QVGA放大到全屏,但它看起來不會很好。同樣你可以將1080p縮減到一個小盒子那麼大,這種情況下,你使用了較多的帶寬而且它看起來也不好。

總而言之,WebRTC的4K至少在目前是營銷炒作。更高的質量最終會一統天下嗎?也許吧。但更快並不總是更好,100年後我們仍然在使用55英里/小時的速度來開車。

這篇文章主要對WebRTC上使用4K進行視頻傳輸的擔憂就是在現實中,在公網上很難找到能夠長時間穩定滿足傳輸要求的帶寬資源。確實,就目前中國的網絡狀況來看,4K傳輸所需的帶寬消耗是非常巨大的。也許在2020年5G時代真正到來的時候,現在我們擔心的問題便會自動消失。好吧,姑且胡亂臆想一下,這不是我這篇文章要描述的。

下面來說說我做的這個實驗的具體內容。

實驗軟硬件環境

編碼端:i7 7700 3.6G,128G SSD,8G,NVIDIA GeForce GTX 1060,Windows 10家庭版,一塊國產的4K採集卡(插在PCI插槽上)。視頻輸入源使用了2種:一種是通過HDMI線直接連接了一臺MacbookPro到4K採集卡上,MacbookPro的屏幕作爲視頻輸入,另外一種就是使用一臺4K攝像機作爲視頻輸入。視頻編碼:VP8。

解碼/渲染端:Windows筆記本電腦。實驗中使用的是購於2018年初的小米筆記本15.6寸頂配機型。

服務器/網絡:Licode服務器公司WiFi,上下行對稱,正常辦公時間,使用speedtest.net測速如下:

實驗結果

調整了前端和服務器的參數配置,主要是要放開帶寬限制,因爲實驗中發現碼率會持續在20Mbps上下,峯值更高,這與上面譯文中提到的相符。

下方是發送端的編碼、傳輸碼率圖表:

通過上方圖標看出,發送端的碼率在4096x2160分辨率的情況下,碼率持續在20Mbps 附近。注:端和服務器之間要通過SDP協商信息來放開帶寬限制,否則碼率可能上不去,徘徊在4Mbps以下。實驗中,x-google-max-bitrate 胡亂寫了一個500000。另外googCpuOveruseDetection最好也設爲false,否則碼率可能會不穩定。

再來看看接收端的:

可以看到,在20Mbps的接收碼率情況下,幀率在10-15fps,只能說流暢度方面勉強過得去吧,畢竟碼率這麼大。 

最後貼幾張實驗時的實拍圖。下方是作爲4K輸入的MacbookPro屏幕。可以看到屏幕上的文字在4K下已經變得非常小了。圖中是在播放《我不是藥神》的4K版本(分辨率3840x2072,24fps):

解碼端如上面所述,是一個小米筆記本,但因爲筆記本屏幕太小,不足以看出4K的效果,因此我使用HDMI線將內容投射到一個4K電視上:

將部分屏幕內容放大看細節:

可以看到,在如此巨大的顯示屏下,編碼端界面上的細小文字也是相當清晰的,這就是4K的魅力。

最後說明的是關於資源佔用和延時,實驗中的結果比我預期的要好。在上面提到的編碼端機器配置下,整機的CPU佔用率只有30%不到,單向延時在本次實驗中大約在350~400ms的樣子(測試方法可以參考這片文章:https://blog.csdn.net/xiejiashu/article/details/77601187)。

綜上,在WebRTC中進行實時傳輸4K視頻,超大的帶寬消耗是最主要的問題,也是最大的瓶頸,其他方面其實不用太擔心。這也是本文一開始翻譯的那篇文章中作者的擔憂,確實如此。

另外就是在測試過程中,發現一個問題,不知道是否是Chrome的bug,我使用的是Chrome 70 3538.102 64位版本,首次在頁面中是可以正常顯示從4K採集卡過來的視頻的,但當我把Chrome瀏覽器關掉再打開,會發現getUserMedia來獲取4K視頻會提示OverconstrainedError。當我卸載Chrome重裝,或者手動刪除Chome的User Data目錄,一切就都正常了,不知道是什麼原因。這個問題是使用https://webrtc.github.io/samples/下面的例子測試的。所以如果有一天你也遇到一樣的問題,不妨試試看。

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章