Gstreamer RTSP服务器

4

我希望使用Gstreamer 1.0(gst-launch-1.0)设置一个RTSP服务器流。

我的“服务器”目前如下

gst-launch-1.0.exe videotestsrc  ! x264enc ! rtph264pay ! udpsink host=localhost port=5000

我的客户端长这样

gst-launch-1.0.exe udpsrc port=5000 ! rtpmp2tdepay ! decodebin ! autovideosink

这两个命令都能够正常运行,但是我在“客户端”上看不到任何视频。此外,我知道我的命令只是通过RTP将H.264编码视频流式传输到UDP端口。

我可以看到一些数据从UDP端口5000进入,因此我认为发送方部分是正确的。

我的问题:

  1. 接收端出了什么问题?
  2. 如何设置gst-launch-1.0以提供带有元信息.sdp文件的RTSP流?

编辑(2014-03-24): 发送端的调试输出:

gst-launch-1.0.exe -v videotestsrc ! x264enc ! rtph264pay ! udpsink host=localhost port=5000
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
/GstPipeline:pipeline0/GstVideoTestSrc:videotestsrc0.GstPad:src: caps = video/x-raw, framerate=(fraction)30/1, width=(int)320, height=(int)240, format=(string)I420, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive
/GstPipeline:pipeline0/GstX264Enc:x264enc0.GstPad:sink: caps = video/x-raw, framerate=(fraction)30/1, width=(int)320, height=(int)240, format=(string)I420, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive
Redistribute latency...
/GstPipeline:pipeline0/GstX264Enc:x264enc0.GstPad:src: caps = video/x-h264, codec_data=(buffer)01640014ffe1001967640014acd94141fb0110000003001000000303c8f142996001000568ebecb22c, stream-format=(string)avc, alignment=(string)au, level=(string)2, profile=(string)high, width=(int)320, height=(int)240, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1
/GstPipeline:pipeline0/GstRtpH264Pay:rtph264pay0.GstPad:src: caps = application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, sprop-parameter-sets=(string)"Z2QAFKzZQUH7ARAAAAMAEAAAAwPI8UKZYA\=\=\,aOvssiw\=", payload=(int)96, ssrc=(uint)383435573, timestamp-offset=(uint)786392204, seqnum-offset=(uint)781
/GstPipeline:pipeline0/GstUDPSink:udpsink0.GstPad:sink: caps = application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, sprop-parameter-sets=(string)"Z2QAFKzZQUH7ARAAAAMAEAAAAwPI8UKZYA\=\=\,aOvssiw\=", payload=(int)96, ssrc=(uint)383435573, timestamp-offset=(uint)786392204, seqnum-offset=(uint)781
/GstPipeline:pipeline0/GstRtpH264Pay:rtph264pay0.GstPad:sink: caps = video/x-h264, codec_data=(buffer)01640014ffe1001967640014acd94141fb0110000003001000000303c8f142996001000568ebecb22c, stream-format=(string)avc, alignment=(string)au, level=(string)2, profile=(string)high, width=(int)320, height=(int)240, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1
/GstPipeline:pipeline0/GstRtpH264Pay:rtph264pay0: timestamp = 786392204
/GstPipeline:pipeline0/GstRtpH264Pay:rtph264pay0: seqnum = 781
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock

接收方:
gst-launch-1.0.exe -vvv udpsrc port=5000 ! "application/x-rtp, media=video, clock-rate=90000, encoding-name=H264, payload=96" ! queue ! rtph264depay ! queue ! decodebin ! autovideosink sync=false
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock

感谢你!
1个回答

5
问题#1:您在发送端使用的是rtph264pay,但在接收端使用的是rtpmp2tdepay。您需要使用rtph264depay
问题#2:您需要提供rtph264depay的功能,以正确识别视频格式。
为了获取正确的功能,请使用-v标志运行发送代码,并将rtp特定功能复制到接收管道中。
gst-launch-1.0 udpsrc port=5000 ! "application/x-rtp, media=video, clock-rate=90000, encoding-name=H264, payload=96" ! rtph264depay ! decodebin ! autovideosink

根据您提供的两个解决方案,仍然无法正常工作:gst-launch-1.0.exe -vvv udpsrc port=5000 ! "application/x-rtp, media=video, clock-rate=90000, encoding-name=H264, payload=96" ! rtph264depay ! decodebin ! autovideosink 我没有看到视频窗口弹出。实际上几乎没有日志(即使我设置了-vvv参数)。您还有其他提示吗? - Soccertrash
你是否从“发送”管道的调试输出中复制了能力? - max taldykin
请更新您的问题,并提供发送管道的调试输出。 - max taldykin
我已经添加了日志。是的,我已经从发送端(x-rtp)中删除了大写字母。 - Soccertrash
你的新管道没有问题(除了一些无用的“队列”)。这可能是与Windows相关的问题(或防火墙设置),我在这方面无法提供帮助。抱歉。 - max taldykin
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接