1
問題:如何處理時鐘偏斜在音頻流
- 它的實時音頻,視頻流通過WiFi + UDP網絡。
- 流:Mpeg2Ts
- Player Framework:gstreamer。
- Pipeline Appsrc ----> tsdemuxer -----> audio-queue ----> faad decoder ---> alsasink - -----> video-queue-> vpudecoder ---- > videosink
- 音頻設備配置爲每秒處理48000個採樣。
- 發送方時鐘比接收方時鐘更快,我通過跟蹤流和接收方系統時鐘中的pcr值來獲取此信息。 1小時後,發送器和接收器時鐘之間有8秒的差異。
- 所以問題是發送者正在發送更多的樣本在接收器時鐘方面的一秒鐘,因爲發送器和接收器之間的延遲隨着時間的推移而不斷增加。
我無法使用最新版本的gstreamer。目前,我正在使用gstreamer-0.10.36。在Demuxer(tsdemuxer)中,gstreamer使用了一種處理時鐘偏差的算法.Algorithm需要包含pcr信息的rtp數據包的接收時間戳。使用發送方的PCR(程序時鐘參考)值和數據包的接收值,它計算髮送方時鐘和接收方時鐘之間的差值。 Diff =(PCR-PACKET-RECV-TIME-N-PCR-PACKET-RECV-TIME-1) - (PCR-VALUE-N-PCR-VALUE-1)。 –
根據差異,它計算偏斜的運行平均值並更新接收器時鐘的每個數據包的PTS(顯示時間戳)。根據此邏輯,視頻播放沒有漂移,但音頻播放隨時間漂移。所以基本上我正面臨音頻 - 視頻同步問題。 –
如果這是RTP,爲什麼你不只是使用udpsrc和rtpbin?你如何獲得RTP包到你的應用程序? 要保留A/V同步,您需要確保屬於一起的音頻和視頻具有相同的運行時間。 –