我在RTSP上播放H.264视频有一些困难。其目标是将摄像机图像实时流到RTSP客户端(理想情况下,最终是一个浏览器插件)。到目前为止,它一直运行得很好,除了一个问题:视频在启动时就会滞后,每隔几秒钟就会结巴一次,并且有大约4秒的延迟。这很糟糕。
我们的设置是使用x264 (w/零和超快)进行编码,并使用ffmpeg 0.6.5中的libavformat打包到RTSP/RTP中。为了进行测试,在连接到RTSP服务器时,我正在接收带有gst启动的GStreamer管道的流。但是,当直接从另一个GStreamer实例仅用RTP流时,我已经能够重现相同的问题。
发送机:
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.我在互联网上看到的一个常见的“修复”方法是在xvimagesink中使用sync=false:
gst-launch udpsrc ! application/x-rtp,payload=96 ! rtph264depay ! decodebin ! xvimagesink sync=false然后,即使用我们的相机软件测试,视频也会以接近零延迟的速度播放。这对于测试是有用的,但对于部署却不是很有用,因为它不能使用Totem、VLC或他们的浏览器插件嵌入。
我想尝试在源端解决这个问题;我怀疑x264的H.264流或者RTP负载上缺少某种时间戳信息。是否有任何方法来修改源gst管道,使我做而不是需要在接收器上使用sync=false?
如果这是不可能的,我如何告诉客户端(通过SDP或其他方式)不应该同步流?最终,我们会使用VLC插件将其嵌入到浏览器中,这样,在那里工作的解决方案就会更好。
发布于 2014-03-17 18:08:17
我不知道这有多少是真的,但是当我不把电池充电器连接到我的笔记本电脑的时候,它会向我发出同样的警告,当我插上电源的时候,相信它成功了。我认为这可能是因为旧的CMOS电池,它没有正常工作。因为它负责时钟的产生。
https://stackoverflow.com/questions/11397655
复制相似问题