Gstreamer插件不处理I420格式

时间:2017-01-12 15:44:14

标签: video encoding streaming gstreamer

我正在使用Gstreamer将视频文件流式传输到shmsink,然后通过udpsink传输到网络,但只有在从shmsrc读取时指定大写的格式为{{} 1}}。

以下是我的管道:

BGRA

此管道读取指定的文件并将其输出到共享内存接收器。

sudo gst-launch-1.0 filesrc location=/home/me/files/Snowmix-0.5.1/test/big_buck_bunny_720p_H264_AAC_25fps_3400K.MP4 ! decodebin ! shmsink socket-path=/tmp/feed1-control-pipe shm-size=10000000 wait-for-connection=0

此管道从共享内存源读取并尝试通过UDP输出。在上面的管道中,我们可以看到我已经将视频的格式指定为sudo GST_DEBUG=mpegtsmux:5 gst-launch-1.0 shmsrc socket-path=/tmp/feed1-control-pipe do-timestamp=true is-live=true ! 'video/x-raw, format=I420, max-input-size=200000, width=320, height=720, framerate=25/1' ! videoconvert ! x264enc ! mpegtsmux ! udpsink host=192.168.78.10 port=4012 sync=true ,这确实是视频文件的编码。但是,I420插件似乎没有交互,应该将流重新格式化为mpegtsmux传输流。

将格式从mpeg更改为I420,即使文件本身编码为BGRA,也可以让我们在I420插件上看到互动。视频输出并可以在VLC上播放,但格式错误并且播放奇怪。

注意:上面的管道指定了mpegtsmuxwidth=320的分辨率,因为将其增加到正常height=720width=1280 height=720会导致以下错误:

BGRA

使用WARNING: from element /GstPipeline:pipeline0/GstVideoConvert:videoconvert0: Internal GStreamer error: code not implemented. Please file a bug at http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer. Additional debug info: gstvideofilter.c(292): gst_video_filter_transform (): /GstPipeline:pipeline0/GstVideoConvert:videoconvert0: invalid video buffer received 的正常分辨率不会产生上述错误,但也不会将流传递到管道中的I420插件。

为什么从mpegtsmux读取时,标识为I420的流不能成功通过我的管道? shmsrcx264encvideoconvert是否存在兼容性问题?

1 个答案:

答案 0 :(得分:0)

使用shmsrc查询组件gst-inspect-1.0 shmsrc

Pad Templates:
  SRC template: 'src'
    Availability: Always
    Capabilities:
      ANY

建议它能够接收包括I420在内的任何格式。我们也知道videoconvert支持I420的输入。出于这个原因,我认为您的流格式为RGBA。如果文件格式为I420,则decodebin元素可能会将其转换为RGBA