天天看點

sync是同步還是非同步_音視訊是怎麼保持同步的?(四)

sync是同步還是非同步_音視訊是怎麼保持同步的?(四)

今天我們來繼續講音視訊是怎麼保持同步的。

常用同步政策

前面已經說了,實作音視訊同步,在播放時,需要進行標明一個重要參考時鐘,讀取幀上的時間戳,同時企業根據的參考時鐘來動态管理調節播放。它是目前已知的是,時間标記PTS,那麼參考時鐘一般有三種選擇:

将視訊進行同步到音頻上:就是以音頻的播放速度為基準來同步視訊。

将音頻同步到視訊:它根據視訊的播放速度對音頻進行同步。

外部的視訊和音頻同步的時鐘:選擇外部時鐘參考,視訊和音頻播放的快時鐘作為标準。

sync是同步還是非同步_音視訊是怎麼保持同步的?(四)

音視訊是怎麼保持同步的?(四)

當播放源比參考系統時鐘慢,則加快其播放速度,或者直接丢棄;快了,則延遲可以播放。

這三個都是最基本的政策,考慮到人的敏感度比視訊的聲音更強,音頻調節将帶來不吸引人的體驗,而音頻播放時鐘線性增長,它通常是在一個參考音頻時鐘的時鐘,同步視訊音頻。

調整政策簡單地阻止早期或晚期到達延遲或速度高達過程中,有時是不夠的。

對于從階段廣播,尤其是TS實時流,由于視訊解碼依靠第一I幀,和音頻可以是實時的輸出,這種情況可能出現更先進的音頻視訊PTS PTS,同步這種情況下,它勢必導緻更明顯的慢速同步。

音視訊同步簡單示例代碼

代碼引用ffplay實作,同時添加自己的修改。基準時鐘同步到所述樣本代碼的音頻,視訊音頻:

擷取企業目前要顯示的video PTS,減去上一幀進行視訊PTS,則得出上一幀通過視訊應該研究顯示的時長delay;

目前視訊PTS與目前音頻PTS比較,音頻和視訊的diff之間的間隙的基準時鐘;

擷取資訊同步進行門檻值sync_threshold,為一幀通過視訊發展差距,範圍為10ms-100ms;

差分小于sync_threshold,認為不需要同步;否則,延遲差分值是正确的延遲;正确的

如果不是sync_threshold多,背後的音頻和視訊,你需要減少延遲,進而使目前幀顯示為盡快。

因為這很可能跟上視訊解碼,再怎麼調整延遲是沒用的。

如果沒有超過sync_threshold,且視訊發展快于音頻,那麼需要不斷加大delay,讓目前幀延遲資料顯示。

sync是同步還是非同步_音視訊是怎麼保持同步的?(四)

音視訊是怎麼保持同步的?(四)

會延遲*2慢慢調整間隙,這是輕輕調整間隙,因為直接延遲diff,會讓圖檔滞後。

如果很長一段時間之前,視訊顯示器本身,是以直接到位延遲+DIFF步進調節,因為這種情況,然後慢慢調整并沒有太大的意義。

考慮到渲染的耗時,還需進行分析調整。frame_timer系統是一個時間顯示,frame_timer+對延遲curr_time,接下去的顯示時間延遲是必需的目前幀的。

以上就是音視訊是怎麼保持同步的全部内容啦。