2014-12-29 30 views
1

問題:如何處理時鐘偏斜在音頻流

  1. 它的實時音頻,視頻流通過WiFi + UDP網絡。
  2. 流:Mpeg2Ts
  3. Player Framework:gstreamer。
  4. Pipeline Appsrc ----> tsdemuxer -----> audio-queue ----> faad decoder ---> alsasink - -----> video-queue-> vpudecoder ---- > videosink
  5. 音頻設備配置爲每秒處理48000個採樣。
  6. 發送方時鐘比接收方時鐘更快,我通過跟蹤流和接收方系統時鐘中的pcr值來獲取此信息。 1小時後,發送器和接收器時鐘之間有8秒的差異。
  7. 所以問題是發送者正在發送更多的樣本在接收器時鐘方面的一秒鐘,因爲發送器和接收器之間的延遲隨着時間的推移而不斷增加。

回答

1

時鐘歪斜應該由GStreamer的同步機制和音頻接收器基類內的歪斜邏輯自動處理。

爲了解決您的發送方和接收方之間延遲增加的問題,您必須正確輸入時間戳,而不是依賴TS流內的時間戳(基於發送方時鐘,因此在您身邊出錯)。爲此,使用最新足夠的GStreamer版本並在appsrc上設置do-timestamp = true和format = time就足夠了。

+0

我無法使用最新版本的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)。 –

+0

根據差異,它計算偏斜的運行平均值並更新接收器時鐘的每個數據包的PTS(顯示時間戳)。根據此邏輯,視頻播放沒有漂移,但音頻播放隨時間漂移。所以基本上我正面臨音頻 - 視頻同步問題。 –

+0

如果這是RTP,爲什麼你不只是使用udpsrc和rtpbin?你如何獲得RTP包到你的應用程序? 要保留A/V同步,您需要確保屬於一起的音頻和視頻具有相同的運行時間。 –