在當(dāng)中,音頻和視頻通道一般都是分開傳輸,而音視頻分開傳輸帶來另外一個問題就是音視頻必須要同步,如果音視頻不同步,就會導(dǎo)致視頻會議的真實感急劇下降。因此音視頻是否同步也是視頻會議真實感的一個衡量標(biāo)準(zhǔn)。
解決的音視頻同步問題就是使用時間戳,所謂的時間戳就是一個時間的參考計數(shù)器,我們先選擇一個參考時鐘,生成數(shù)據(jù)流時依據(jù)參考時鐘上的時間給每個數(shù)據(jù)塊都打上時間戳;在播放時,讀取數(shù)據(jù)塊上的時間戳,同時參考當(dāng)前參考時鐘上的時間來安排播放(如果數(shù)據(jù)塊的開始時間大于當(dāng)前參考時鐘上的時間,則不急于播放該數(shù)據(jù)塊,直到參考時鐘達(dá)到數(shù)據(jù)塊的開始時間;如果數(shù)據(jù)塊的開始時間小于當(dāng)前參考時鐘上的時間,則“盡快”播放這塊數(shù)據(jù)或者索性將這塊數(shù)據(jù)“丟棄”,以使播放進(jìn)度追上參考時鐘)。
因此,解決音視頻同步現(xiàn)象有兩個步驟
1. 在生成數(shù)據(jù)流時要打上正確的。如果數(shù)據(jù)塊上打的時間戳本身就有問題,那么播放時再怎么調(diào)整也于事無補(bǔ)。,視頻流內(nèi)容是從0s開始的,假設(shè)10s時有人開始說話,要求配上音頻流,那么音頻流的起始時間應(yīng)該是10s,如果時間戳從0s或其它時間開始打,則這個混合的音視頻流在時間同步上本身就出了問題。打時間戳?xí)r,視頻流和音頻流都是參考參考時鐘的時間,而數(shù)據(jù)流之間不會發(fā)生參考關(guān)系;也就是說,視頻流和音頻流是通過一個中立的第三方(也就是參考時鐘)來實現(xiàn)同步的。
2. 在播放時基于時間戳對數(shù)據(jù)流進(jìn)行控制,也就是對數(shù)據(jù)塊早到或晚到采取不同的處理方法。參考時鐘時間在0-10s內(nèi)播放視頻流內(nèi)容過程中,即使收到了音頻流數(shù)據(jù)塊也不能立即播放它,而必須等到參考時鐘的時間達(dá)到10s之后才可以,否則就會引起音視頻不同步問題。
以上就是開發(fā)當(dāng)中解決音視頻同步問題的方法,具體對于采用的編解碼需要用到時間戳代碼實現(xiàn),我們可以參考ffmpeg里面的音視頻同步的例子。