我正在使用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上播放,但格式错误并且播放奇怪。
注意:上面的管道指定了mpegtsmux
和width=320
的分辨率,因为将其增加到正常height=720
和width=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
的流不能成功通过我的管道? shmsrc
或x264enc
和videoconvert
是否存在兼容性问题?
答案 0 :(得分:0)
使用shmsrc
查询组件gst-inspect-1.0 shmsrc
:
Pad Templates:
SRC template: 'src'
Availability: Always
Capabilities:
ANY
建议它能够接收包括I420
在内的任何格式。我们也知道videoconvert
支持I420
的输入。出于这个原因,我认为您的流格式为RGBA
。如果文件格式为I420
,则decodebin
元素可能会将其转换为RGBA
。