音視頻不同步問題的原因和解決方案


FAQ:
    在播放視頻的時候,尤其是網絡視頻或者高清視頻,會有視頻畫面和對應的聲音信息不同步的問題,這樣的問題原因在哪里?如何解決?
 
Resolve:
避免音視頻不同步現象有兩個關鍵——
 
一是 在生成數據流時要打上正確的時間戳。如果數據塊上打的時間戳本身就有問題,那么播放時再怎么調整也於事無補。假如,視頻流內容是從0s開始的,假設10s時有人開始說話,要求配上音頻流,那么音頻流的起始時間應該是10s,如果時間戳從0s或其它時間開始打,則這個混合的音視頻流在時間同步上本身就出了問題。打時間戳時,視頻流和音頻流都是參考參考時鍾的時間,而數據流之間不會發生參考關系;也就是說,視頻流和音頻流是通過一個中立的第三方(也就是參考時鍾)來實現同步的。
 
 第二個關鍵的地方,就是 在播放時基於時間戳對數據流的控制,也就是對數據塊早到或晚到采取不同的處理方法。圖2.8中, 參考時鍾時間在0-10s內播放視頻流內容過程中,即使收到了音頻流數據塊也不能立即播放它,而必須等到參考時鍾的時間達到10s之后才可以,否則就會引起音視頻不同步問題
 
基於時間戳的播放過程中,僅僅對早到的或晚到的數據塊進行等待或快速處理,有時候是不夠的。 如果想要更加主動並且有效地調節播放性能,需要引入一個反饋機制,也就是要將當前數據流速度太快或太慢的狀態反饋給“源”,讓源去放慢或加快數據流的速度。熟悉DirectShow的讀者一定知道,DirectShow中的質量控制(Quality Control)就是這么一個反饋機制。DirectShow對於音視頻同步的解決方案是相當出色的。但WMF SDK在播放時只負責將ASF數據流讀出並解碼,而並不負責音視頻內容的最終呈現,所以它也缺少這樣的一個反饋機制。
 

 

 
 

ref:

音視頻同步原理解析
http://blog.csdn.net/titer1/article/details/39613123


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM