camera - 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,width=640,height=480,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,width=640,height=480,framerate=30/1
反而。
推荐阅读
- r - 自变量在回归摘要中出现两次?
- extentreports - ExtentReport.core 包安装失败,Visual Studio C# 项目
- kotlin - Kotlin 中的连续子数组求和
- reactjs - 无法弄清楚为什么 useState 挂钩没有正确更新
- python - pythonic 写入文本文件的方法,替换 Windows 的这个 bash 命令
- html - 响应式图像,多图像/格式延迟加载的图片元素
- scala - 如何通过 netcdfAll 读取 grib 文件
- javascript - onclick 功能无法隐藏 UL 元素
- python - NoReverseMatch at / in Django 如何传递 url
- ruby-on-rails - 如何在 filterrific gem 中返回对表单选择选项的计数?