我在通過RTSP傳輸H.264視頻時遇到了一些問題。我們的目標是將攝像頭圖像直播到RTSP客戶端(最終是一個瀏覽器插件)。迄今爲止,這一切都非常順利,除了一個問題:視頻將在啓動時滯後,每隔幾秒結束,並且延遲約4秒。這不好。Streaming RTP/RTSP:sync/timestamp problems
我們的設置是用x264(w/zerolatency & ultrafast)進行編碼,並使用ffmpeg 0.6.5的libavformat打包到RTSP/RTP中。爲了進行測試,我在連接到RTSP服務器時使用帶有gst-launch的GStreamer管道接收流。 但是,我只能用RTP從另一個GStreamer實例直接流式傳輸時就能夠重現相同的問題。
發送機:
gst-launch videotestsrc ! x264enc tune=zerolatency ! rtph264pay ! udpsink host=10.89.6.3
接收機:
gst-launch udpsrc ! application/x-rtp,payload=96 ! rtph264depay ! decodebin ! xvimagesink
您也可以同一臺機器上運行這些,只是改變主機127.0.0.1發件人。在接收端,你應該注意到口吃,並在控制檯上多次警告普遍業績不佳的視頻,一起:
WARNING: from element /GstPipeline:pipeline0/GstXvImageSink:xvimagesink0: A lot of buffers are being dropped.
Additional debug info:
gstbasesink.c(2875): gst_base_sink_is_too_late(): /GstPipeline:pipeline0/GstXvImageSink:xvimagesink0:
There may be a timestamping problem, or this computer is too slow.
一個共同建議「修復」,我已經看到在互聯網上是使用sync=false
與xvimagesink:
gst-launch udpsrc ! application/x-rtp,payload=96 ! rtph264depay ! decodebin ! xvimagesink sync=false
的視頻隨即播放接近零延遲,甚至當我們的相機軟件進行測試。這對於測試非常有用,但對部署並不是很有用,因爲它不適用於Totem,VLC或其瀏覽器插件嵌入。
我想嘗試從源頭上解決問題;我很懷疑x264或者RTP有效載荷上的H.264流中缺少某種時間戳信息。有沒有什麼辦法可以修改來源 gst管道讓我做不是需要在接收器上用sync=false
?
如果這是不可能的,我該如何告訴客戶端(通過SDP或其他方式)流不應該同步?最終,我們會使用各種VLC插件將其嵌入到瀏覽器中,因此,在那裏工作的解決方案會更好。
謝謝你..同樣的問題,但我已經在接收端給予「sync = false」,它爲我工作。 – 2016-08-12 10:41:53