使用Gstreamer以不同比特率或视频大小将UDP流保存到mp4

时间:2015-12-28 07:18:38

标签: udp gstreamer mp4 h.264 rtp

我正在尝试将UDP流存储到不同大小的MP4文件。

使用1080视频生成UDP流用于开发目的,稍后它将被IP Camera替换

UDP服务器接收器:

gst-launch-0.10 -v filesrc location=video.mp4 ! decodebin    ! ffmpegcolorspace     ! videoscale ! video/x-raw-yuv,width=1920,height=1088 ! timeoverlay halignment=right ! clockoverlay time-format="%Y/%m/%d %H:%M:%S"  ! x264enc tune=zerolatency bitrate=2998 speed-preset=superfast     ! queue ! rtph264pay name=pay0 pt=96     ! udpsink host=127.0.0.1 port=5000

使用以下管道,我可以播放具有相同视频显示大小的UDP流,其中UDP正在流式传输

gst-launch-1.0 udpsrc uri=udp://127.0.0.1:5000 \
caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, sprop-parameter-sets=(string)\"Z01ADdoFB+/8CqwIAEAAAAMAQAAADKPFCqg\\=\\,aO88gA\\=\\=\", payload=(int)96, ssrc=(uint)1045780718, clock-base=(uint)2990047309, seqnum-base=(uint)65496" \
! rtph264depay \
! avdec_h264 \
! autovideosink

现在,我想将此流保存在不同的视频屏幕大小的MP4文件中。

我正在尝试跟随管道线,但它会出错

erroneous pipeline: could not link videoscale0 to h264parse0

gst-launch-1.0 udpsrc uri=udp://127.0.0.1:5000 \
caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, sprop-parameter-sets=(string)\"Z01ADdoFB+/8CqwIAEAAAAMAQAAADKPFCqg\\=\\,aO88gA\\=\\=\", payload=(int)96, ssrc=(uint)1045780718, clock-base=(uint)2990047309, seqnum-base=(uint)65496" \
! rtph264depay \
! decodebin \
! queue \
! videoconvert ! videoscale ! video/x-raw,width=1280,height=720 ! h264parse ! x264enc tune=zerolatency bitrate=2998 speed-preset=superfast ! queue \
! autovideosink

稍后使用autovideosink进行开发,它将被filesink

取代

[已编辑] 2015年12月30日

我在管道中做了一些更改,现在正在工作但不一致。它有时有效并且有时失败。我认为,这是RTP流和解码器中的同步问题但目前的变化是,

  1. 将decodebin更改为avdec_h264,为什么? 我看到GStreamer管道图,decodebin的src没有连接 到视频转换的下沉。所以管道实际上已被打破。 用avdec_h264替换decodebin并完成管道。
  2. 当前渠道:

    gst-launch-1.0 udpsrc uri=udp://127.0.0.1:5000 caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, sprop-parameter-sets=(string)\"Z01ADdoFB+/8CqwIAEAAAAMAQAAADKPFCqg\\=\\,aO88gA\\=\\=\", payload=(int)96, ssrc=(uint)1045780718, clock-base=(uint)2990047309, seqnum-base=(uint)65496" ! rtpjitterbuffer  ! rtph264depay ! avdec_h264 ! queue ! videoconvert ! videoscale ! video/x-raw,width=1280,height=720 ! x264enc tune=zerolatency bitrate=2998 speed-preset=superfast ! queue ! filesink location=video-2.mp4
    

    但现在低于错误,

    0:00:00.217021017 18449      0x1c50850 ERROR                  libav :0:: first_mb_in_slice overflow
    0:00:00.217066624 18449      0x1c50850 ERROR                  libav :0:: decode_slice_header error
    0:00:00.217085496 18449      0x1c50850 ERROR                  libav :0:: first_mb_in_slice overflow
    0:00:00.217101775 18449      0x1c50850 ERROR                  libav :0:: decode_slice_header error
    0:00:00.217118391 18449      0x1c50850 ERROR                  libav :0:: first_mb_in_slice overflow
    0:00:00.217133568 18449      0x1c50850 ERROR                  libav :0:: decode_slice_header error
    0:00:00.217231425 18449      0x1c50850 ERROR                  libav :0:: left block unavailable for requested intra mode at 0 1
    0:00:00.217260466 18449      0x1c50850 ERROR                  libav :0:: error while decoding MB 0 1, bytestream 1286
    0:00:00.242377091 18449      0x1c50850 ERROR                  libav :0:: first_mb_in_slice overflow
    0:00:00.242642392 18449      0x1c50850 ERROR                  libav :0:: decode_slice_header error
    0:00:00.242670418 18449      0x1c50850 ERROR                  libav :0:: first_mb_in_slice overflow
    0:00:00.242689807 18449      0x1c50850 ERROR                  libav :0:: decode_slice_header error
    0:00:00.242709715 18449      0x1c50850 ERROR                  libav :0:: first_mb_in_slice overflow
    0:00:00.242728336 18449      0x1c50850 ERROR                  libav :0:: decode_slice_header error
    0:00:00.242821704 18449      0x1c50850 ERROR                  libav :0:: left block unavailable for requested intra mode at 0 1
    0:00:00.242851186 18449      0x1c50850 ERROR                  libav :0:: error while decoding MB 0 1, bytestream 1193
    

1 个答案:

答案 0 :(得分:0)

这个链接给我。 decodebin已经为您提供了视频/ x-raw。

gst-launch-1.0 udpsrc uri=udp://127.0.0.1:5000 caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, sprop-parameter-sets=(string)\"Z01ADdoFB+/8CqwIAEAAAAMAQAAADKPFCqg\\=\\,aO88gA\\=\\=\", payload=(int)96, ssrc=(uint)1045780718, clock-base=(uint)2990047309, seqnum-base=(uint)65496" \
! rtph264depay \
! decodebin ! queue \
! videoconvert ! videoscale ! video/x-raw,width=1280,height=720 ! x264enc tune=zerolatency bitrate=2998 speed-preset=superfast \
! queue ! autovideosink