音畫(huà)不同步
1. 音畫(huà)不同步的表現(xiàn)
很容易判斷庵楷,就是畫(huà)面和聲音不匹配鸵赖。
2. 音畫(huà)同步的基礎(chǔ)概念
首先我們要明白一個(gè)概念抚恒,雖然人的肉眼赫编,很容易辨別音畫(huà)是否同步的巡蘸,但是機(jī)器則不然,對(duì)于播放器而言擂送,它判斷一幀視頻和一幀音頻是否要在同一個(gè)時(shí)間渲染和播放悦荒,依靠的完全是該數(shù)據(jù)攜帶的時(shí)間戳信息
。
如果內(nèi)容的生產(chǎn)端
給音視頻數(shù)據(jù)
打的時(shí)間戳本身
就有問(wèn)題的話嘹吨,播放器也往往無(wú)能為力了搬味,因此,音畫(huà)不同步問(wèn)題蟀拷,更多的時(shí)候碰纬,應(yīng)該從生產(chǎn)端去排查原因。
3. 音畫(huà)不同步的問(wèn)題排查
3.1 采集源距離太遠(yuǎn)
如果音頻源離麥克風(fēng)距離太遠(yuǎn)问芬,聲音傳播到麥克風(fēng)的速度遠(yuǎn)小于畫(huà)面(光速)悦析,那么,攝像頭采集到畫(huà)面后給出的時(shí)間戳此衅,肯定要遠(yuǎn)小于麥克風(fēng)采集到同一時(shí)刻音頻給出的時(shí)間戳强戴,因此會(huì)產(chǎn)生音畫(huà)不同步問(wèn)題亭螟。
解決方案:
音頻源盡可能離麥克風(fēng)設(shè)備近一點(diǎn)
。
3.2 采集設(shè)備內(nèi)部問(wèn)題
攝像頭和麥克風(fēng)采集音視頻酌泰,在硬件上都會(huì)經(jīng)過(guò)一些信號(hào)處理模塊媒佣,如果處理延時(shí)不穩(wěn)定的時(shí)候,則會(huì)導(dǎo)致輸出數(shù)據(jù)的時(shí)間不穩(wěn)定陵刹,從而導(dǎo)致應(yīng)用層獲取時(shí)間戳的時(shí)候產(chǎn)生誤差默伍,帶來(lái)音畫(huà)不同步問(wèn)題。
解決方案:極少數(shù)硬件/機(jī)型才會(huì)有衰琐,需要根據(jù)采集參數(shù)(如采樣率)做一些 Jitter 抖動(dòng)的矯正也糊。
3.3 時(shí)間戳沒(méi)有在采集的時(shí)候獲取
如果音視頻幀的時(shí)間戳不是在采集的時(shí)候獲取,而是在后續(xù)的某個(gè)環(huán)節(jié)再獲取羡宙,則非常大概率地會(huì)出現(xiàn)音視頻不同步問(wèn)題狸剃。
先舉個(gè)簡(jiǎn)單的:
假設(shè)音頻 A 和 視頻 B 同時(shí)從設(shè)備中被采集出來(lái),時(shí)間戳為:TA 和 TB狗热,他們差值會(huì)很小钞馁,播放端收到后會(huì)認(rèn)為是同一時(shí)刻的音視頻數(shù)據(jù),從而一起播放匿刮。
但是僧凰,當(dāng) 音頻 A 和 視頻 B 分別經(jīng)過(guò)某些算法處理模塊后,我們 “不慎” 在處理后重新獲取當(dāng)前時(shí)間戳為了 TA2 和 TB2熟丸,那么训措,這個(gè)更新后的時(shí)間戳差值可能會(huì)非常大,導(dǎo)致音畫(huà)不同步光羞。
那么绩鸣,一般大家會(huì) “不慎” 在哪些地方更改了采集的時(shí)間戳呢 ?
- 音視頻算法處理模塊
比如:視頻經(jīng)過(guò)美顏纱兑、編碼后呀闻,重新更新為了處理后的的時(shí)間戳。
- 緩沖區(qū)導(dǎo)致的不同步
多線程程序中潜慎,往往會(huì)在不同線程之間共享一些幀緩沖區(qū)总珠,緩沖區(qū)會(huì)導(dǎo)致音視頻對(duì)應(yīng)關(guān)系發(fā)生變化,如果從緩沖區(qū)取數(shù)據(jù)后勘纯,拋棄掉了原有的時(shí)間戳,重新使用新的當(dāng)前時(shí)間钓瞭,那么驳遵,肯定會(huì)出現(xiàn)問(wèn)題。
- 網(wǎng)絡(luò)傳輸導(dǎo)致的不同步
由于網(wǎng)絡(luò)的傳輸?shù)难訒r(shí)山涡、丟包等原因堤结,同一時(shí)刻的音視頻包不會(huì)正好同時(shí)準(zhǔn)確到達(dá)唆迁,如果在接收到了數(shù)據(jù)后再打上當(dāng)前的時(shí)間戳,則肯定也會(huì)出現(xiàn)不同步問(wèn)題竞穷。
3.4 時(shí)間戳出現(xiàn)回退或者紊亂
曾經(jīng)有遇到過(guò)一些音畫(huà)不同步的流唐责,我把它的音視頻時(shí)間戳打印出來(lái)后顯示如下的結(jié)果:
該碼流的時(shí)間戳沒(méi)有單調(diào)遞增,而是頻繁出現(xiàn)了回退瘾带,這樣的流鼠哥,會(huì)導(dǎo)致播放器出現(xiàn)頻繁卡頓,因?yàn)椴シ牌鞯?code>master 主時(shí)鐘一般是單調(diào)遞增
的看政,當(dāng)出現(xiàn)小于主時(shí)鐘
的視頻幀后朴恳,一般會(huì)做丟棄處理
,畫(huà)面不更新但是音頻還是在繼續(xù)播放允蚣,從而導(dǎo)致看起來(lái)聲音和畫(huà)面并沒(méi)有匹配上的問(wèn)題于颖。
解決方案:排查推流端時(shí)間戳是否單調(diào)線性遞增,或者排查服務(wù)端是否有對(duì)流的時(shí)間戳有過(guò)修改導(dǎo)致回退嚷兔。
3.5 播放端性能問(wèn)題
比如低端機(jī)型軟解 1080P 的高清碼流森渐,會(huì)存在解碼不夠及時(shí)的問(wèn)題,導(dǎo)致部分視頻解碼完成后冒晰,已經(jīng)遠(yuǎn)慢于當(dāng)前的音頻時(shí)鐘同衣,只能丟棄,從而導(dǎo)致畫(huà)面更新不及時(shí)翩剪,與正在播放的音頻無(wú)法匹配上乳怎,從而產(chǎn)生音畫(huà)不同步的現(xiàn)象。
解決方案:使用硬解前弯,選擇較低清的碼流蚪缀,增大播放緩沖,等等恕出。
直播專(zhuān)題問(wèn)題排查-播放失斞丁(一)
直播專(zhuān)題問(wèn)題排查-播放卡頓(二)
直播專(zhuān)題問(wèn)題排查-首開(kāi)慢(三)
直播專(zhuān)題問(wèn)題排查-延時(shí)高(四)
直播專(zhuān)題問(wèn)題排查-音畫(huà)不同步(五)
直播專(zhuān)題問(wèn)題排查-黑屏、花屏浙巫、閃屏(六)
直播專(zhuān)題問(wèn)題排查-播放雜音金蜀、噪音、回聲(七)
直播專(zhuān)題問(wèn)題排查-拖動(dòng)不準(zhǔn)(八)
直播專(zhuān)題問(wèn)題排查-功耗高(九)
直播專(zhuān)題問(wèn)題排查-馬賽克(十)