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邊下邊播》