如何使用 gstreamer rtspsrc 显示 rtsp 源?

问题描述

我正在玩 gstreamer rtsp。

我创建了一个 rtsp 接收器,如下所示:

gst-launch-1.0 videotestsrc ! x264enc ! rtph264pay config-interval=10 pt=96 ! udpsink host=127.0.0.1 port=5000

我无法通过 VLC(使用 rtsp://127.0.0.1:5000)直接打开它,但是使用 vlc.sdp 文件可以显示它。 vlc.sdp 文件是这样的:

v=0
m=video 5000 RTP/AVP 96
c=IN IP4 127.0.0.1
a=rtpmap:96 H264/90000
vlc vlc.sdp

上面的文件是从某个地方复制的,我不太明白,但我认为 rtsp 接收器正在运行。我认为它是 rtsp 而不是 udp,因为我在上面的 cmd 行中看到 rtph264payudpsink

然后我想用 rtspsrc显示它。

gst-launch-1.0 rtspsrc location=rtsp://127.0.0.1:5000 ! rtph264depay ! avdec_h264 ! autovideosink sync=false

我有这样的错误

Setting pipeline to PAUSED ...
Pipeline is live and does not need preroll ...
Progress: (open) opening Stream
Progress: (connect) Connecting to rtsp://127.0.0.1:5000
ERROR: from element /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0: Could not open resource for reading and writing.
Additional debug info:
gstrtspsrc.c(7469): gst_rtspsrc_retrieve_sdp (): /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0:
Failed to connect. (Generic error)
ERROR: pipeline doesn't want to preroll.
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Setting pipeline to NULL ...
Freeing pipeline ...

那么我的 rtspsrc 命令有什么问题?

解决方法

您没有在发送端使用 RTSP。您只发送 RTP。我建议您阅读有关 RTPRTSPSDP 的一些内容,以便您了解它们之间是如何相互作用的。

TL;博士 RTSP 用于发起 RTP 会话。基本上,它将一个 SDP 文件传输到客户端,其中包含有关如何接收 RTP 流的所需信息。

如果您想要完整的 RTSP 规范所需的传输,则必须遵循 3 种不同的协议。

请注意,GStreamer 项目也有一些 RTSP 库来处理这种情况。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...