用于显示 RTSP 流的 GStreamer 管道

问题描述 投票:0回答:5

我对 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
5个回答
10
投票

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

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

希望您觉得这很有用:)


10
投票

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

1
投票
我上次检查时,

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

对于您的

rtspsrc
管道,您可能会错过
videoconvert
之前的
autovideosonvert
autovideosink
元素。


0
投票

我一直在尝试完成这项工作,并在树莓派 3 上取得了成功,所以我想“好吧,因为这很容易,我会在 rpi4 上尝试它”遵循相同的步骤来安装 gstream,但是在运行命令时:

gst-launch-1.0 rtspsrc 位置=rtsp://localhost:8554/测试延迟=100!队列 ! rtph264depay ! h264解析! avdec_h264!视频转换!视频尺度!视频/x-raw,宽度=640,高度=480!自动视频接收器

它看起来像热感摄像机。不过在 rpi3 上仍然可以正常工作。不确定这里会有什么不同。


0
投票

在我的例子中,我从 Android 智能手机(服务器)到 nvidia jetson nano(客户端)接收到一个具有令人印象深刻的延迟的视频流,以便稍后进行推理处理,并且以下字符串有效:

pipeline = "rtspsrc location=rtsp://admin:[email protected]:xxxx latency=0 ! queue ! rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! videoscale ! video/x-raw,width=640,height=480 ! appsink"

在管道中用“avdec_h264”替换“omxh264dec”解码器后,它们消失了以下弃用:

python3:10659): GStreamer-CRITICAL **: 22:47:22.966: gst_caps_is_empty: assertion 'GST_IS_CAPS (caps)' failed

(python3:10659): GStreamer-CRITICAL **: 22:47:22.966: gst_caps_truncate: assertion 'GST_IS_CAPS (caps)' failed

(python3:10659): GStreamer-CRITICAL **: 22:47:22.966: gst_caps_fixate: assertion 'GST_IS_CAPS (caps)' failed

(python3:10659): GStreamer-CRITICAL **: 22:47:22.966: gst_caps_get_structure: assertion 'GST_IS_CAPS (caps)' failed

(python3:10659): GStreamer-CRITICAL **: 22:47:22.966: gst_structure_get_string: assertion 'structure != NULL' failed

(python3:10659): GStreamer-CRITICAL **: 22:47:22.966: gst_mini_object_unref: assertion 'mini_object != NULL' failed

希望我有帮助

© www.soinside.com 2019 - 2024. All rights reserved.