当前位置: 首页 > article >正文

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

结语

不枉博主详细讲解,欢迎订阅博主–炭烤毛蛋 。


http://www.kler.cn/a/158529.html

相关文章:

  • 计数问题(数位DP)
  • 如何将 Python 2 代码移植到 Python 3
  • Web开发-问题-前后端交互数据不一致
  • 网工内推 | 上市公司初级网工,HCIP认证优先,14薪,享企业年金
  • 记录 | CUDA编程中 __host__ 标识符可以省略的情况
  • Excel如何比较两列数据的不同
  • 论文解读:《数据增强:通过强化学习引导的条件生成进行文本数据扩充》
  • esp32使用命令查看芯片flash大小以及PSRAM的大小
  • dcat admin日志扩展 dcat-log-viewer 遇到的问题记录
  • Navicat在分辨率不同的屏幕窗口显示大小不一致问题解决
  • ActiveMQ Jolokia 代码执行漏洞(CVE-2022-41678)复现
  • Spring——全局异常处理(介绍@RestControllerAdvice和@ExceptionHandler)
  • js实现AES加密解密,简易又全面
  • monaco报错#Unexpected usage at EditorSimpleWorker.loadForeignModule
  • WPF使用Prism框架批量注册Page,Window,UserControl等视图组件
  • 7天快速学习计算机基础必考八股文day02:操作系统
  • SOCKET、TCP、HTTP之间的区别与联系
  • 最新测试开发招聘信息汇总,内含社招和实习生岗位~
  • 如何有效预防内存泄漏?
  • 基于Python+OpenCV的车道线和车辆检测系统