问题描述
我正在玩 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 行中看到 rtph264pay
和 udpsink
。
然后我想用 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。我建议您阅读有关 RTP
、RTSP
和 SDP
的一些内容,以便您了解它们之间是如何相互作用的。
TL;博士 RTSP 用于发起 RTP 会话。基本上,它将一个 SDP 文件传输到客户端,其中包含有关如何接收 RTP 流的所需信息。
如果您想要完整的 RTSP 规范所需的传输,则必须遵循 3 种不同的协议。
请注意,GStreamer 项目也有一些 RTSP 库来处理这种情况。