直播間新手常見技術問題解答--音畫不同步
對于播放器而言,它判斷一幀視頻和一幀音頻是否要在同一個時間渲染和播放,依靠的完全是該數據攜帶的時間戳信息。
如果內容的生產端給音視頻數據打的時間戳本身就有問題的話,播放器也往往無能為力了,因此,音畫不同步問題,更多的時候,應該從生產端去排查原因。
1 采集源距離太遠
如果音頻源離麥克風距離太遠,那么,攝像頭采集到畫面后給出的時間戳,肯定要遠小于麥克風采集到同一時刻音頻給出的時間戳,因此會產生音畫不同步問題。
解決方案:音頻源盡可能離麥克風設備近一點。
2采集設備內部問題
攝像頭和麥克風采集音視頻,在硬件上都會經過一些信號處理模塊,如果處理延時不穩定,則會導致輸出數據的時間不穩定,從而導致應用層獲取時間戳的時候產生誤差,帶來音畫不同步問題。
解決方案:極少數硬件/機型才會有,需要根據采集參數(如采樣率)做一些 Jitter 抖動的矯正。
3 未使用采集的時間戳
如果在后續的某個環節修改了采集的時間戳,則非常大概率地會出現音視頻不同步問題。
? 音視頻算法處理模塊
比如:視頻經過美顏、編碼后,重新更新為了處理后的的時間戳。
? 緩沖區導致的不同步
多線程程序中,往往會在不同線程之間共享一些幀緩沖區,緩沖區會導致音視頻對應關系發生變化,如果從緩沖區取數據后,拋棄掉了原有的時間戳,重新使用新的當前時間,那么,肯定會出現問題。
? 網絡傳輸導致的不同步
由于網絡的傳輸的延時、丟包等原因,同一時刻的音視頻包不會正好同時準確到達,如果在接收到了數據后再打上當前的時間戳,肯定也會出現不同步問題。
4 時間戳出現回退或者紊亂
如果時間戳出現了回退,這樣的流,會導致播放器出現卡頓,因為播放器的 master 主時鐘一般是單調遞增的,當出現小于主時鐘的視頻幀后,一般會做丟棄處理,畫面不更新但是音頻還是在繼續播放,從而導致看起來聲音和畫面并沒有匹配上的問題。
解決方案:排查推流端時間戳是否單調線性遞增,或者排查服務端是否有對流的時間戳有過修改導致回退。
5 播放端性能問題
比如低端機型軟解 1080P 的高清碼流,會存在解碼不夠及時的問題,導致部分視頻解碼完成后,已經遠慢于當前的音頻時鐘,只能丟棄,從而導致畫面更新不及時,與正在播放的音頻無法匹配上,從而產生音畫不同步的現象。
解決方案:使用硬解,選擇較低清的碼流,增大播放緩沖,等等。
6 馬賽克嚴重
馬賽克主要是指畫面中出現多處類似小方塊的圖像,導致畫面的局部或者整體看不清楚的情況。
7 視頻編碼參數配置原因
視頻的畫質,是由它的編碼質量決定的,壓縮得越厲害,畫質損失就越嚴重,馬賽克就越多。
編碼器最重要的五個參數:畫質級別、碼率、幀率、GOP 大小、碼控方式。
畫質級別:H.264 有四種畫質級別,Baseline profile,Extended profile,Main profile,High profile。級別越高,壓縮的效果越好,但算法復雜度更高,導致功耗也更高。
碼率:決定了視頻被壓縮的程度,碼率越低,丟失的信息也就越多,畫質也就越差。但是,帶來的好處是占用的網絡帶寬會比較小,容易在互聯網上傳輸,不容易出現卡頓。
幀率:決定了視頻的流暢性,幀率越高,視頻越流暢,但每秒鐘編碼器要處理的數據量也就越大,同等碼率下壓縮出來的視頻質量就越差。
GOP 大小:決定了視頻的延時,GOP 越小,延時就越小,但 GOP 小帶來的問題是關鍵幀數量多,數據量變大,因此,同等碼率下壓縮出來的視頻質量就會越差。
碼控方式:一般編碼器都有固定碼率(CBR) 和 動態碼率(VBR) 兩種碼控方式,前者是指碼率優先,為了保證碼率盡可能穩定,會主動降低畫質,因此容易出現馬賽克,后者是指畫質優先,會優先保證畫質,減少馬賽克,但碼率會浮動很大。
當然,還有一個重要的因素,就是編碼器本身的實現質量,軟編一般可以保證在不同手機上效果一致,而硬編則完全依賴手機所使用的硬件平臺了。
8 推薦的編碼器參數配置
一般直播場景中,考慮到手機性能和功耗,一般畫質級別采用的是 Baseline profile,GOP 通常設置為 1~3s,幀率一般在 15~24 幀,而碼率的配置,則需要根據推流的分辨率來決定,推薦的分辨率和碼率配置關系如下圖所示:
總之,關于視頻編碼與馬賽克的關系,我們只需要記住一個原則:送入編碼器的數據量越大,編碼壓縮得越厲害,丟失的圖像信息也就越多,數據解碼后的產生馬賽克也就越厲害。
9 圖像尺寸原因
一般攝像頭采集的圖像分辨率,跟最終推流的尺寸不一定完全匹配,當攝像頭采集的分辨率大于推流尺寸的時候,需要先對畫面進行剪裁處理,而當攝像頭采集的分辨率小于推流尺寸的時候,則需要先對畫面進行拉伸處理,然后再送入編碼器中編碼壓縮。
例如:小尺寸的畫面(比如:640 x 480),拉伸到大的尺寸(比如:1280 x 720),則很容易會產生模糊和馬賽克,這樣的畫面再送入編碼器中編碼,無論怎樣配置都無法再改善已經產生的馬賽克了。
所以,為了降低馬賽克,我們必須要保證,攝像頭采集的分辨率,一定要大于最終推流的分辨率。
10 客觀條件原因
如果主播在光線非常暗的環境下,本身送入編碼器的圖像質量也不會特別好,因此,同等條件下馬賽克也會相對嚴重些。
同樣,如果拍攝的是劇烈晃動的畫面,劇烈變化的畫面信息量也要大很多,因此,編碼的復雜度會明顯增大,如果要保證碼率不會浮動太大,就必然要降低輸出的圖像質量,從而產生馬賽克現象。
如果直播應用是主打這種光線暗的場景或者劇烈運動的畫面場景的話,為了降低馬賽克,可以考慮適當將編碼參數配置得高 一點(比如:碼率高一點,幀率低一點等等),以抵抗環境因素帶來的影響。
11 關鍵幀丟失
還有一種馬賽克現象,是由于視頻流中丟失了關鍵幀,導致播放器解碼后花屏,從現象來看有點像馬賽克,但實際上跟上面討論的不是同一個問題。
————————————————
版權聲明:本文為CSDN博主「步基」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/wangbuji/article/details/121661187
================================
【新聞】
中國e直播帶貨供應鏈金融13306003307(V同),
一件代發共享云倉:主播減去了自己先采購囤貨的問題,可以無壓力的開播賣貨。主播只要選定生廠商的抖音小店產品鏈接或快手小店產品鏈接,在自己直播間上了鏈接就可以賣,賣完由廠家小店訂單結算,廠家網店直接收款;直播帶貨主播直接分傭金;MCN機構直接分管理費。
中國E直播帶貨供應鏈機構協調廠家按規則48小時內一件代發!