【问题标题】:GStreamer pipeline to show an RTSP stream用于显示 RTSP 流的 GStreamer 管道
【发布时间】:2017-10-24 21:36:50
【问题描述】:

我对 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 扩展名。

【问题讨论】:

    标签: video gstreamer rtsp


    【解决方案1】:

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

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

    希望你觉得这很有用:)

    【讨论】:

      【解决方案2】:

      假设 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
      

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

        • 感谢您的帮助!我想我得到了上面答案的解决方案。但我仍然对rtsp 的第二个解决方案感兴趣。我尝试了videoconvertautovideoconvert,但我什么也没看到。管道似乎是正确的艰难。我没有收到任何错误消息。我的管道中是否需要其他元素?谢谢!
        • 导出 GST_DEBUG=3 并查看日志发生了什么。
        猜你喜欢
        • 2014-01-04
        • 2012-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-11
        • 1970-01-01
        • 1970-01-01
        • 2018-05-03
        相关资源
        最近更新 更多