UVC debug 工具
v4l2-ctl media-ctl
v4l2-ctl和media-ctl是Linux系统中用于配置和控制摄像头的命令行工具。
v4l2-ctl(Video for Linux Control)是一个用于配置和控制摄像头的工具。它允许用户查看设备的当前状态、设置视频格式、调整图像属性(如亮度、对比度、饱和度等)、启用或禁用特定功能(如自动曝光、自动对焦等)以及执行其他与视频相关的操作。v4l2-ctl通常用于摄像头、视频捕捉卡以及其它支持Video4Linux2(V4L2)标准的设备。
media-ctl是一个用于管理媒体设备拓扑结构的命令行工具。媒体设备拓扑结构描述了不同媒体设备(如摄像头、声卡等)之间的连接关系。通过media-ctl,用户可以查看、配置和修改媒体设备的拓扑结构,包括输入和输出端口的连接关系、数据格式的设置以及设备间的流传输等。media-ctl主要用于高级应用场景,比如多媒体应用开发和媒体设备驱动程序的调试。
这些工具在实际中的应用场景包括但不限于:
- 设置和调整摄像头的参数,如亮度、对比度、饱和度等。
- 配置视频捕捉卡的工作模式和格式。
- 检查和修改媒体设备的拓扑结构,确保设备之间的连接正确。
- 进行多媒体应用开发和调试,如流媒体传输、视频录制等。
作者:炭烤毛蛋 ,点击博主了解更多。
提示:。v4l2-ctl media-ctl 需要有支持V4L2的媒体硬件设备。
文章目录
- v4l2-ctl media-ctl
- 前期准备
- Linux/Ubuntu 预装软件
- Android 预装命令
- 1. v4l2-ctl
- 1.1 Android v4l2-ctl
- 1.1.1 设备的设备信息
- 1.1.2 视频格式查看、设定
- 1.1.3 摄像头支持的可控制参数查看、设定
- 1.1.4 摄像头采集图像
- 1.2 linux v4l2-ctl
- 1.2.1 摄像头 /dev/videoX 的自动授权
- 1.2.2 摄像头参数读取、设定
- 2. media-ctl
- 3. gst-stream
- 结语
前期准备
Linux/Ubuntu 预装软件
- 安装 v4l2-ctl media-ctl
sudo apt install v4l-utils
- 安装 gst-play
sudo apt-get install gstreamer1.0-tools
Android 预装命令
- 工程设定配置 v4l2-ctl media-ctl
vi device/rockchip/rk356x/rk3568_r/rk3568_r.mk
+ v4l2-ctl
+ media-ctl
1. v4l2-ctl
v4l2-ctl是一个用于控制视频4 Linux 2(V4L2)设备的命令行工具。它提供了一种简单的方式来配置和管理摄像头的参数、格式和功能。
1.1 Android v4l2-ctl
1.1.1 设备的设备信息
- 列出摄像头节点
v4l2-ctl --list-devices
USB Video: USB Video (usb-fe380000.usb-1.1):
/dev/video0
/dev/video1
- 列出摄像头的设备信息
设备信息包括设备名称、驱动程序等。
v4l2-ctl -D -d /dev/video0
-
- -d --device 指定摄像头节点 /dev/video0,缺省参数默认显示全部 camera属性
# 列出所有摄像头的设备信息
v4l2-ctl -D
Driver Info:
Driver name : uvcvideo
Card type : USB Video: USB Video
Bus info : usb-fe380000.usb-1.1
Driver version : 4.19.193
Capabilities : 0x84a00001
Video Capture
Metadata Capture
Streaming
Extended Pix Format
Device Capabilities
Device Caps : 0x04200001
Video Capture
Streaming
Extended Pix Format
Media Driver Info:
Driver name : uvcvideo
Model : USB Video: USB Video
Serial :
Bus info : usb-fe380000.usb-1.1
Media version : 4.19.193
Hardware revision: 0x00002100 (8448)
Driver version : 4.19.193
Interface Info:
ID : 0x03000002
Type : V4L Video
Entity Info:
ID : 0x00000001 (1)
Name : USB Video: USB Video
Function : V4L2 I/O
Pad 0x01000007 : Sink
Link 0x0200000d: from remote pad 0x100000a of entity 'Processing 2': Data, Enabled, Immutable
1.1.2 视频格式查看、设定
视频格式包括帧大小、像素格式等。
- 列出摄像头当前属性
v4l2-ctl -d /dev/video0 --all
- -d --device 指定摄像头节点 /dev/video0,缺省参数默认显示全部 camera属性
v4l2-ctl --all
Driver Info:
Driver name : uvcvideo
Card type : USB Video: USB Video
Bus info : usb-fe380000.usb-1.1
Driver version : 4.19.193
Capabilities : 0x84a00001
Video Capture
Metadata Capture
Streaming
Extended Pix Format
Device Capabilities
Device Caps : 0x04200001
Video Capture
Streaming
Extended Pix Format
Media Driver Info:
Driver name : uvcvideo
Model : USB Video: USB Video
Serial :
Bus info : usb-fe380000.usb-1.1
Media version : 4.19.193
Hardware revision: 0x00002100 (8448)
Driver version : 4.19.193
Interface Info:
ID : 0x03000002
Type : V4L Video
Entity Info:
ID : 0x00000001 (1)
Name : USB Video: USB Video
Function : V4L2 I/O
Pad 0x01000007 : Sink
Link 0x0200000d: from remote pad 0x100000a of entity 'Processing 2': Data, Enabled, Immutable
Priority: 2
Video input : 0 (Camera 1: ok)
Format Video Capture:
Width/Height : 1920/1080
Pixel Format : 'MJPG'
Field : None
Bytes per Line : 0
Size Image : 4147200
Colorspace : sRGB
Transfer Function : Default (maps to sRGB)
YCbCr/HSV Encoding: Default (maps to ITU-R 601)
Quantization : Default (maps to Full Range)
Flags :
Crop Capability Video Capture:
Bounds : Left 0, Top 0, Width 1920, Height 1080
Default : Left 0, Top 0, Width 1920, Height 1080
Pixel Aspect: 1/1
Selection: crop_default, Left 0, Top 0, Width 1920, Height 1080, Flags:
Selection: crop_bounds, Left 0, Top 0, Width 1920, Height 1080, Flags:
Streaming Parameters Video Capture:
Capabilities : timeperframe
Frames per second: 30.000 (30/1)
Read buffers : 0
brightness 0x00980900 (int) : min=-128 max=127 step=1 default=-11 value=-11
contrast 0x00980901 (int) : min=0 max=255 step=1 default=148 value=148
saturation 0x00980902 (int) : min=0 max=255 step=1 default=180 value=180
hue 0x00980903 (int) : min=-128 max=127 step=1 default=0 value=0
- 列出摄像头支持格式和分辨率
v4l2-ctl --list-formats-ext --device=/dev/video0
- -d --device 指定摄像头节点 /dev/video0,缺省参数默认显示全部 camera属性
v4l2-ctl --list-formats-ext
ioctl: VIDIOC_ENUM_FMT
Index : 0
Type : Video Capture
Pixel Format: 'MJPG' (compressed)
Name : Motion-JPEG
Size: Discrete 1920x1080
Interval: Discrete 0.033s (30.000 fps)
Interval: Discrete 0.040s (25.000 fps)
Interval: Discrete 0.050s (20.000 fps)
Interval: Discrete 0.100s (10.000 fps)
Interval: Discrete 0.200s (5.000 fps)
Size: Discrete 1280x960
Interval: Discrete 0.020s (50.000 fps)
Interval: Discrete 0.033s (30.000 fps)
Interval: Discrete 0.050s (20.000 fps)
Interval: Discrete 0.100s (10.000 fps)
Interval: Discrete 0.200s (5.000 fps)
Size: Discrete 1280x720
Interval: Discrete 0.017s (60.000 fps)
Interval: Discrete 0.020s (50.000 fps)
Interval: Discrete 0.033s (30.000 fps)
Interval: Discrete 0.050s (20.000 fps)
Interval: Discrete 0.100s (10.000 fps)
Index : 1
Type : Video Capture
Pixel Format: 'YUYV'
Name : YUYV 4:2:2
Size: Discrete 1920x1080
Interval: Discrete 0.200s (5.000 fps)
Size: Discrete 1280x960
Interval: Discrete 0.125s (8.000 fps)
Size: Discrete 1280x720
Interval: Discrete 0.100s (10.000 fps)
- 列出摄像头支持的视频格式
视频格式包括帧大小、像素格式等
v4l2-ctl -d /dev/video0 --list-formats
- -d --device 指定摄像头节点 /dev/video0,缺省参数默认显示全部 camera属性
v4l2-ctl --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
- 列出摄像头 MJPG 格式支持分辨率、帧大小
v4l2-ctl --list-framesizes=MJPG -d /dev/video0
ioctl: VIDIOC_ENUM_FRAMESIZES
Size: Discrete 1920x1080
Size: Discrete 1280x960
Size: Discrete 1280x720
- 列出摄像头 YUYV 格式支持分辨率、帧大小
v4l2-ctl --list-framesizes=YUYV -d /dev/video0
ioctl: VIDIOC_ENUM_FRAMESIZES
Size: Discrete 1920x1080
Size: Discrete 1280x960
Size: Discrete 1280x720
- 设置摄像头图像分辨率、格式
v4l2-ctl -d /dev/video0 --set-fmt-video=width=1280,height=720,pixelformat=NV12
- 设置摄像头帧率
v4l2-ctl -d /dev/video0 --set-parm=60
1.1.3 摄像头支持的可控制参数查看、设定
摄像头支持的可控制参数,包括亮度、对比度、饱和度等
- 列出指定摄像头支持的可控制参数,包括亮度、对比度、饱和度等
v4l2-ctl -d /dev/video0 --list-ctrls
- -d --device 指定摄像头节点 /dev/video0,缺省参数默认显示全部 camera属性
v4l2-ctl --list-ctrls
brightness 0x00980900 (int) : min=-128 max=127 step=1 default=-11 value=-11
contrast 0x00980901 (int) : min=0 max=255 step=1 default=148 value=148
saturation 0x00980902 (int) : min=0 max=255 step=1 default=180 value=180
hue 0x00980903 (int) : min=-128 max=127 step=1 default=0 value=0
- 获取指定摄像头的某个可控制参数(例如亮度)的当前值
v4l2-ctl -d /dev/video0 --get-ctrl=control_name
-d --device 指定摄像头节点 /dev/video0,缺省参数默认显示全部 camera属性
v4l2-ctl -d /dev/video0 --get-ctrl brightness
brightness: -11
- 设置指定摄像头的某个可控制参数(例如亮度)为指定的值。
v4l2-ctl -d /dev/video0 --set-ctrl=control_name=value
-d --device 指定摄像头节点 /dev/video0,缺省参数默认显示全部 camera属性
v4l2-ctl -d /dev/video0 --set-ctrl brightness -31
1.1.4 摄像头采集图像
- 指定摄像头上进行内存映射模式的视频流捕获,捕获10帧视频
v4l2-ctl -d /dev/video0 --stream-mmap --stream-count=10
- 指定摄像头上使用用户指针模式进行视频流捕获,捕获10帧视频。
v4l2-ctl -d /dev/video0 --stream-userp --stream-io-methode=2 --stream-count=10
尽量采集时间超过3s,能看到帧率信息;-d --device 指定摄像头节点 /dev/video0。
v4l2-ctl -d /dev/video0 --stream-mmap=3 --stream-skip=3 --stream-to=/sdcard/cif.raw --stream-count=200 --stream-poll
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 58.53 fps
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 59.26 fps
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 59.50 fps
- 整合参数,抓取图像
v4l2-ctl -d /dev/video0 --set-fmt-video=width=800,height=600,pixelformat=NV12 --stream-mmap=3 --stream-skip=3 --stream-to=/path/cif.raw --stream-count=1 --stream-poll
1.2 linux v4l2-ctl
1.2.1 摄像头 /dev/videoX 的自动授权
udev是Linux系统中负责管理设备的设备管理器,在设备插入或系统启动时执行规则以对设备进行配置和授权。
/etc/udev/rules.d/99-video.rules
SUBSYSTEM=="video4linux", KERNEL=="video[0-9]", MODE="0666"
SUBSYSTEM=="video4linux"用于匹配摄像头子系统,KERNEL=="videoX"用于匹配设备名为video0的设备,MODE="0666"表示设置设备权限为0666(即所有用户均有读写权限)。
重新加载udev规则,使其生效添加完规则:
sudo udevadm control --reload-rules
sudo udevadm trigger
1.2.2 摄像头参数读取、设定
- 通过v4l2查看摄像头设备
v4l2-ctl --list-devices
当同时连接多个摄像头时,指定摄像头的两种方法。
-d /dev/video0
–device /dev/video0 #指定摄像头节点 /dev/video0
- 查看/dev/video0 摄像头所有参数
v4l2-ctl -d /dev/video0 --all
- 查看当前摄像头支持的视频压缩格式
v4l2-ctl -d /dev/video0 --list-formats
-
查看当前摄像头支持的分辨率和帧速率
v4l2-ctl -d /dev/video0 --list-formats-ext -
设置帧率
Av4l2-ctl -d /dev/video0 --set-parm=30
- 查看摄像头所支持的分辨率
v4l2-ctl --list-framesizes=MJPG -d /dev/video0
- 设置摄像头所支持的分辨率
v4l2-ctl --set-fmt-video=width=320,height=240,pixelformat=YUYV
- 曝光参数调整
v4l2-ctl -d /dev/video0 --list-ctrls
- 设置曝光值
当exposure_auto=1( V4L2_EXPOSURE_MANUAL )时可设置曝光绝对值
v4l2-ctl --device=/dev/video0 --set-ctrl=exposure_auto=1
v4l2-ctl --device=/dev/video0 --set-ctrl=exposure_absolute=2
- 加载 uvcvideo 模块
sudo modprobe uvcvideo nodrop=1 timeout=5000
- 查看摄像头加载状态
ls /dev/v* # 看到"/dev/video0",表示成功驱动
- 查看摄像头占用总线
lsusb
- 移除 uvcvideo 模块
# 列出可用模块
lsmod
# 移除模块
sudo rmmod uvcvideo
注意: 使用v4l2-ctl进行摄像头的配置和管理通常需要有相应的权限,可能需要使用sudo命令来执行相关操作。
2. media-ctl
media-ctl是一个用于控制媒体设备的命令行工具。它提供了一种简单的方式来配置和管理视频、音频和其他媒体设备的连接、格式和参数设置。
配置媒体设备拓扑:通过media-ctl,您可以配置和修改媒体设备的拓扑结构,包括输入和输出端口的连接关系、数据格式的设置以及设备间的流传输等。这对于建立复杂的多媒体应用程序非常有用,如音视频编解码、实时视频处理等。
调试和测试媒体设备:使用media-ctl,您可以检查媒体设备的状态、属性和拓扑结构,并测试不同的配置选项。这对于故障排除和确定最佳设置非常有用。
验证数据流:media-ctl可以用来验证数据流是否正确。您可以在媒体设备之间建立连接,发送和接收数据流,并验证数据的格式和属性是否符合要求。
编写自动化测试脚本:media-ctl可以通过脚本和命令行批处理来自动化测试和集成。您可以编写脚本来执行一系列的配置和控制操作,以及检查结果,从而提高开发和测试效率。
以下是一些常用的media-ctl命令和选项的详解:
- 显示当前系统中的摄像头和连接信息,包括设备名称、实体信息、连接关系等。
media-ctl -p
- 列出当前系统中的摄像头和实体信息,包括设备名称、实体类型、组件子实体等。
media-ctl -l
- 显示当前系统中的摄像头信息,包括设备名称、视频标准、格式等。
media-ctl -V
- 显示指定摄像头(例如/dev/media0)的详细信息,包括实体、连接和格式等。
media-ctl -d /dev/media0 -p
- 显示指定实体的详细信息,其中"entity_id"是实体的ID(从media-ctl -p命令中获取)。
media-ctl -r -l “entity_id” -V
- 向指定实体(例如/video/xilinx_hdmi_tx_0)应用参数列表(例如"args")。
media-ctl -e “entity_id” -A “args”:
- 重置指定实体的参数为默认值。
media-ctl -r “entity_id” -A “args”:
- 以JSON格式列出指定实体的详细信息。
media-ctl -l “entity_id” -j:
- 显示指定媒体设备(例如/dev/media0)支持的视频标准和格式列表。
media-ctl -V -d /dev/media0:
media-ctl -p -d /dev/media0
Opening media device /dev/media0
Enumerating entities
Found 4 entities
Enumerating pads and links
Media controller API version 0.0.193
Media device information
------------------------
driver uvcvideo
model USB Video: USB Video
serial
bus info usb-fe380000.usb-1.1
hw revision 0x2100
driver version 0.0.193
Device topology
- entity 1: USB Video: USB Video (1 pad, 1 link)
type Node subtype V4L
device node name /dev/video0
pad0: Sink
<- "Processing 2":1 [ENABLED,IMMUTABLE]
- entity 4: USB Video: USB Video (0 pad, 0 link)
type Node subtype V4L
device node name /dev/video1
- entity 8: Processing 2 (2 pads, 2 links)
type V4L2 subdev subtype Unknown
pad0: Sink
v4l2_subdev_open: Failed to open subdev device node
<- "Camera 1":0 [ENABLED,IMMUTABLE]
pad1: Source
v4l2_subdev_open: Failed to open subdev device node
-> "USB Video: USB Video":0 [ENABLED,IMMUTABLE]
- entity 11: Camera 1 (1 pad, 1 link)
type V4L2 subdev subtype Sensor
pad0: Source
v4l2_subdev_open: Failed to open subdev device node
-> "Processing 2":0 [ENABLED,IMMUTABLE]
3. gst-stream
在GStreamer中,gst-stream-parameters(gst-stream)是一个用于设置流媒体传输参数的工具。
-
–uri:指定输入流的URI,可以是本地文件路径或网络流媒体地址。
-
–video-output:指定视频输出格式,如xvimagesink、autovideosink等。这是用于显示视频的插件。
-
–audio-output:指定音频输出格式,如alsasink、autoaudiosink等。这是用于播放音频的插件。
-
–video-decoder:指定视频解码器,如h264parse、vp8dec等。
-
–audio-decoder:指定音频解码器,如aacparse、vorbisdec等。
-
–video-filter:指定视频过滤器,如videoflip method=horizontal-flip、videorate等。这些过滤器可以对视频进行转换和处理。
-
–audio-filter:指定音频过滤器,如audioconvert、audioresample等。这些过滤器可以对音频进行转换和处理。
-
–muxer:指定多路复用器,将视频和音频混合成一个流,如mp4mux、matroskamux等。
-
–output:指定输出文件路径或网络地址,用于保存或传输处理后的流媒体。
-
gst-stream 预览
gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw,width=1280,height=720,framerate=30/1 ! autovideosink
gst-launch-1.0 v4l2src ! videoconvert ! ximagesink
gst-launch-1.0 v4l2src ! videoconvert ! xvimagesink
gst-launch-1.0 v4l2src ! videoconvert ! glimagesink
gst-launch-1.0 v4l2src ! device=/dev/video0 videoconvert ! ximagesink
gst-launch-1.0 v4l2src ! device=/dev/video2 videoconvert ! xvimagesink
- 自动匹配 video sink
gst-launch-1.0 v4l2src device=/dev/video0 ! autovideosink
- gst-launch 预览 UVC
v4l2-ctl --set-fmt-video=width=1280,height=720,pixelformat=0 --device=/dev/video0
v4l2-ctl -p 60 --device=/dev/video0
gst-launch-1.0 -vvv v4l2src device=/dev/video0 ! ! video/x-raw,format=(string)YUY2,width=1280,height=720,framerate=(fraction)60/1 ! ! waylandsink
结语
不枉博主详细讲解,欢迎订阅博主–炭烤毛蛋 。