音視頻開發:碼率、延時、花屏、卡頓

1. 視頻碼率一般設多大?


對於1080P的視頻而言,藍光視頻的碼率是20Mb/s,一般下載的視頻碼率大都是10Mb/s,一些IPCamera/無人機的碼率是2~8Mb/s,而很多視頻網站的碼率甚至低於5M/s。


同等分辨率的情況下,碼率越大,清晰度越大,但同時對網絡帶寬的佔用也越大,具體碼率該設置爲多少,需要看應用的具體場景了。


2. 播放中出現“跳躍”和“花屏”現象?


“跳躍”和“花屏”現象絕大多數原因是網絡傳輸過程中由於信號不好導致丟失了“關鍵幀”/“參考幀” 引起的,下面來進一步解釋。


視頻在網上傳播之前是需要壓縮的,而簡單來解釋視頻壓縮的核心思想就是:每隔10~50幀取視頻中的一幀圖像作爲“關鍵幀”,而隨後的幾幀圖像由於時間/空間的冗餘和相關性,我們只需記錄其與關鍵幀的“差異”信息即可,這樣視頻文件就可以不用把每一幀完整的圖像數據全部保存下來,從而起到了節省空間的效果。


由此可見,如果丟失掉了“關鍵幀”,隨後的幾幀圖像自然就無法正常地解碼了,因此產生了“花屏”現象。


從技術的角度,怎麼解決“花屏”現象呢?——當我們在視頻傳輸過程中,通過幀序號發現丟幀後,可以跳過隨後的非“關鍵幀”,直到遇到下一個關鍵幀再送入解碼。這樣的確可以解決“花屏”現象,但是由於跳躍了很多幀,因此會出現視頻圖像的不連續情況(即“跳躍”現象)。


3. 播放過程中出現“卡頓”現象?


由於網絡是很不穩定的,因此,音視頻數據的傳輸也是時快時慢的,在播放網絡視頻流的過程中,一定要根據時間戳來決定何時解碼何時顯示,而不是來一幀就播放一幀,另外,添加一定數量的“幀緩衝區”可以有效地降低由於網絡抖動帶來的“卡頓”現象。


4. 音視頻實時傳輸的延時主要來自哪裏 ?


(1) 編碼器/解碼器一般需要緩衝2~4幀

(2) 編碼/解碼的耗時

(3) 業務代碼中的幀緩衝區

(4) 網絡傳輸延時

(5) 代碼中的數據拷貝


一般情況下,幀率爲30f/s的視頻,每緩衝n幀,就會增加1000/30*n毫秒的延時。因此,要想減少延時,則必須通過分析和測試找到上述每一部分的延時,儘量減少數據的拷貝和緩衝。


5. 邊下邊播的原理 ?


邊下邊播與播放本地文件其實差不多,只不過是文件數據不在本地,在播放器播放到指定位置之前,後臺線程把需要的數據提前下載下來而已。


關於Android中使用開發HTTP邊下邊播的功能,可以參考我的這篇文章:《Android HTTP邊下邊播》


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