我在通过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