如何解决gstreamer 如何选择相机的格式类型
我的电脑上安装了 gstreamer,我想使用 H264 格式。从这个命令我知道相机支持它:
# v4l2-ctl -d /dev/video2 --list-formats
ioctl: VIdioC_ENUM_FMT
Index : 0
Type : Video Capture
Pixel Format: 'MJPG' (compressed)
Name : Motion-JPEG
Index : 1
Type : Video Capture
Pixel Format: 'YUYV'
Name : YUYV 4:2:2
Index : 2
Type : Video Capture
Pixel Format: 'H264' (compressed)
Name : H.264
我想用于 gstreamer 的命令如下:
./test-launch --gst-debug=3 '( v4l2src device=/dev/video2 ! video/x-raw,width=640,height=480,framerate=30/1 ! videoconvert ! x264enc tune=zerolatency ! rtph264pay name=pay0 pt=96 )'
我在哪里设置使用 H264? 从命令中,我看到编码器已设置为 x264enc,有效载荷为 h264pay。为什么我需要编码为 x264,因为来自相机的数据已经是 h264 了?
# ./test-launch --gst-debug=3 '( v4l2src d
evice=/dev/video2 ! video/x-raw,framerate=30/1 ! videoconve
rt ! x264enc tune=zerolatency ! rtph264pay name=pay0 pt=96 )'
stream ready at rtsp://127.0.0.1:8554/test
0:00:56.085259093 4891 0x55ae286140 WARN GST_ELEMENT_FACTORY gstelementfactory.c:456:gst_element_factory_make: no such element factory "x264enc"!
0:00:56.085377739 4891 0x55ae286140 ERROR GST_PIPELINE grammar.y:816:priv_gst_parse_yyparse: no element "x264enc"
0:00:56.085404562 4891 0x55ae286140 ERROR GST_PIPELINE grammar.y:901:priv_gst_parse_yyparse: link has no sink [source=@0x7f740197c0]
0:00:56.088847062 4891 0x55ae286140 ERROR GST_PIPELINE grammar.y:901:priv_gst_parse_yyparse: link has no source [sink=@0x7f74038210]
0:00:56.092296385 4891 0x55ae286140 WARN rtspmediafactory rtsp-media-factory.c:1427:default_create_element: recoverable parsing error: no element "x264enc"
0:00:56.123282895 4891 0x7f6c029990 FIXME default gstutils.c:3902:gst_pad_create_stream_id_internal:<appsrc0:src> Creating random stream-id,consider implementing a deterministic way of creating a stream-id
0:01:04.027984559 4891 0x7f6c029a80 WARN v4l2bufferpool gstv4l2bufferpool.c:754:gst_v4l2_buffer_pool_start:<v4l2src0:pool:src> Uncertain or not enough buffers,enabling copy threshold
0:01:04.240517944 4891 0x7f6c029a80 WARN basesrc gstbasesrc.c:2939:gst_base_src_loop:<v4l2src0> error: Internal data stream error.
0:01:04.240787267 4891 0x7f6c029a80 WARN basesrc gstbasesrc.c:2939:gst_base_src_loop:<v4l2src0> error: streaming stopped,reason not-linked (-1)
0:01:04.242162319 4891 0x7f7400f4a0 WARN rtspmedia rtsp-media.c:2433:default_handle_message: 0x7f7404b180: got error Internal data stream error. (../../../../gstreamer-1.12.2/libs/gst/base/gstbasesrc.c(2939): gst_base_src_loop (): /GstPipeline:media-pipeline/GstBin:bin0/GstV4l2Src:v4l2src0:
streaming stopped,reason not-linked (-1))
0:01:04.242804976 4891 0x55ae286140 WARN rtspmedia rtsp-media.c:2728:wait_preroll: Failed to preroll pipeline
0:01:04.242955184 4891 0x55ae286140 WARN rtspmedia rtsp-media.c:3032:gst_rtsp_media_prepare: Failed to preroll pipeline
0:01:04.402276538 4891 0x55ae286140 ERROR rtspclient rtsp-client.c:977:find_media: client 0x55ae2c5170: can't prepare media
0:01:04.403620496 4891 0x55ae286140 ERROR rtspclient rtsp-client.c:2696:handle_describe_request: client 0x55ae2c5170: no media
0:01:04.405440236 4891 0x55ae286140 WARN GST_ELEMENT_FACTORY gstelementfactory.c:456:gst_element_factory_make: no such element factory "x264enc"!
0:01:04.405544819 4891 0x55ae286140 ERROR GST_PIPELINE grammar.y:816:priv_gst_parse_yyparse: no element "x264enc"
0:01:04.405635132 4891 0x55ae286140 ERROR GST_PIPELINE grammar.y:901:priv_gst_parse_yyparse: link has no sink [source=@0x7f740197c0]
0:01:04.405832684 4891 0x55ae286140 ERROR GST_PIPELINE grammar.y:901:priv_gst_parse_yyparse: link has no source [sink=@0x7f74038500]
0:01:04.411951382 4891 0x55ae286140 WARN rtspmediafactory rtsp-media-factory.c:1427:default_create_element: recoverable parsing error: no element "x264enc"
0:01:04.432344715 4891 0x7f6c0299e0 FIXME default gstutils.c:3902:gst_pad_create_stream_id_internal:<appsrc1:src> Creating random stream-id,consider implementing a deterministic way of creating a stream-id
0:01:05.191722944 4891 0x7f6c02a000 WARN v4l2 gstv4l2object.c:2186:gst_v4l2_object_add_interlace_mode:0x7f7405b090 Failed to determine interlace mode
0:01:05.208055340 4891 0x7f6c02a000 WARN v4l2 gstv4l2object.c:2834:gst_v4l2_object_get_nearest_size:<v4l2src1> Unable to try format: No such device
0:01:05.208426434 4891 0x7f6c02a000 WARN
解决方法
您通过给下游的上限告诉 v4l2source
。目前您拥有:
video/x-raw,width=640,height=480,framerate=30/1
告诉它使用未压缩的原始格式。而是尝试这样的事情:
video/x-h264,framerate=30/1
相反。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。