GStreamer管道显示RTSP流

时间:2017-05-24 13:40:38

标签: video gstreamer rtsp

我对Gstreamer很新。

我需要编写一个能够使用GStreamer从RTSP源流式传输数据的视频客户端。我将VLC配置为使用RTSP流式传输我的笔记本电脑上的视频,并且我想创建一个管道来获取该流并显示它。我尝试使用playbin,一切正常。关键是我需要微调用于流式传输视频的延迟,但似乎我不能用playbin做到这一点。

我尝试rtspsrc因为它允许处理延迟,但我不知道如何在任何窗口上显示视频。这就是我创建的管道:

gst-launch-1.0 rtspsrc location=rtsp://localhost:8554/test latency=300 ! decodebin ! autovideosink

我收到错误“流媒体任务暂停,原因未协商(-4)”。

在深入了解互联网后,我尝试了不同的管道,但我肯定会错过一些东西。如何编写gstreamer管道来显示来自RTSP的视频?

最终目标是建立一个至少在延迟方面可以调整的管道,所以我有两个选择:

  • 如果可能,设置playbin元素的延迟。 (此元素正确显示视频)
  • 使用正确的管道显示视频,因为rtspsrc允许我设置延迟。

我使用的是Xubuntu 16.04,gstreamer-tools-1.0(也使用了0.10),而带有VLC的视频流也有mp4扩展名。

3 个答案:

答案 0 :(得分:2)

您可以通过设置正确的属性并使用playbin组件来调整延迟:

gst-launch-1.0 -v playbin uri=rtsp://localhost:8554/test uridecodebin0::source::latency=300

希望您觉得这很有用:)

答案 1 :(得分:1)

上次检查时,

playbin确实有latency个选项。请注意,它的比例与rtspsrc的比例不同。 rtspsrc以毫秒为单位,playbin以纳秒为单位。它可能仍然不会低于某个阈值 - 取决于输入视频要求(vbv缓冲区限制)。

对于rtspsrc管道,您可能会错过videoconvert之前的autovideosonvertautovideosink元素。

答案 2 :(得分:0)

假定rtsp流是h264格式,请使用显式的h264解码器和编码器解析该流。使用videoconvert和videoscale更改帧形状。

gst-launch-1.0 rtspsrc location=rtsp://localhost:8554/test latency=100 ! queue ! rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! videoscale ! video/x-raw,width=640,height=480 ! autovideosink