Gstreamer RTSP服务器

时间:2014-03-21 12:33:42

标签: gstreamer gst-launch

我想使用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以提供RTSP流(包含元信息.sdp文件)?
  3. 编辑(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 个答案:

答案 0 :(得分:2)

问题#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