• v4l2及gstreamer使用指南


     

    目录

     V4L2

      编译

     获取摄像头信息

     列出设备节点        

     列出某个节点的属性参数

     捕获图像和视频

    像素格式

       YUYV图像格式

       图像大小

     7yuv

    MPP压缩测试

    交叉编译配置

    压缩测试

    格瑞克

     采集视频命令

    命令参数

    编解码信息


    两个命令工具分别侧重不同功能,v4l2主要用于视频采集; gstreamer则像个管家,整合所有组件完成某项功能。

      

     V4L2

      编译

       1)  在下面链接选择相应版本:

    索引 /downloads/v4l-utils

      2) 解压压缩包,cd v4l-utils   设置平台GCC

    export PATH=/home/rockchip/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu//bin:$PATH

    导出PKG_CONFIG_LIBDIR=/home/rockchip/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/lib

       3) –with-udevdir参数设置目录,避免使用目录/lib/udev权限问题

    ./configure --host=aarch64-linux-gnu --prefix=/home/rockchip/v4l2/src/out --with-udevdir=/home/rockchip/v4l2/src/out

    进行安装

    customer@ubuntu:~/200/v4l-utils-1.20.0/out/bin$ file v4l2-ctl

     获取摄像头信息

     列出设备节点        

    ./v4l2-ctl --list-devices

    电脑摄像头 (1.1):

    /dev/media1

    rkisp1-statistics(平台:rkisp1):

    /dev/video4

    /dev/video5

    rkisp1_mainpath (平台:ffb50000.rkisp1):

    /dev/video0

    /dev/video1

    /dev/video2

    /dev/video3

    rkisp1 (platform:rkisp1):

    /dev/media0

    电脑摄像头 (usb-ffd80000.usb-1.1):

    /dev/video6

    /dev/video7

     列出某个节点的属性参数

    [root@rk1808:~]#./v4l2-ctl -d /dev/video6 --all

    司机信息:

    驱动程序名称 : uvcvideo

    卡类型 : 电脑摄像头

    总线信息 : usb-ffd80000.usb-1.1

    驱动程序版本 : 4.4.194

    能力: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 : PC Cam

    Serial :

    Bus info : 1.1

    Media version : 0.1.0

    Hardware revision: 0x00000007 (7)

    Driver version : 4.4.194

    Entity Info:

    ID : 1

    Name : PC Cam

    Type : V4L2 I/O

    Flags : default

    Major : 81

    Minor : 8

    Pad : 0: Sink

    Priority: 2

    Video input : 0 (Camera 1: ok)

    Format Video Capture:  (视频格式,在采用命令捕获时,需要和此视频格式保持一致)

    Width/Height : 640/480

    Pixel Format : 'YUYV' (YUYV 4:2:2)

    Field : None

    Bytes per Line : 1280

    Size Image : 614400

    Colorspace : sRGB

    Transfer Function : Default (maps to sRGB)

    YCbCr/HSV Encoding: Default (maps to ITU-R 601)

    Quantization : Default (maps to Limited Range)

    Flags :

    Crop Capability Video Capture:  (裁剪能力)

    Bounds : Left 0, Top 0, Width 640, Height 480

    Default : Left 0, Top 0, Width 640, Height 480

    Pixel Aspect: 1/1

    Selection Video Capture: crop_default, Left 0, Top 0, Width 640, Height 480, Flags:

    Selection Video Capture: crop_bounds, Left 0, Top 0, Width 640, Height 480, Flags:

    Streaming Parameters Video Capture:

    Capabilities : timeperframe     (帧率设置,此处设置帧率后,对后续采集的视频帧率有影响)

    Frames per second: invalid (1/0)

    Read buffers : 0

    brightness 0x00980900 (int) : min=0 max=255 step=1 default=120 value=120

    contrast 0x00980901 (int) : min=0 max=127 step=1 default=23 value=23

    saturation 0x00980902 (int) : min=0 max=127 step=1 default=32 value=32

    hue 0x00980903 (int) : min=-15 max=15 step=1 default=3 value=3

    white_balance_temperature_auto 0x0098090c (bool) : default=1 value=1

    gamma 0x00980910 (int) : min=1 max=10 step=1 default=8 value=8

    gain 0x00980913 (int) : min=0 max=9 step=1 default=2 value=2

    power_line_frequency 0x00980918 (menu) : min=0 max=2 default=2 value=2 (60 Hz)

    0: Disabled

    1: 50 Hz

    2: 60 Hz

    white_balance_temperature 0x0098091a (int) : min=2800 max=6500 step=1 default=5000 value=5000 flags=inactive

    sharpness 0x0098091b (int) : min=0 max=15 step=1 default=1 value=1

    backlight_compensation 0x0098091c (int) : min=0 max=1 step=1 default=0 value=0

    exposure_auto_priority 0x009a0903 (bool) : default=0 value=1

     捕获图像和视频

    1) ./v4l2-ctl -d /dev/video6 \--set-fmt-video=width=640,height=480,pixelformat=NV12 \--stream-mmap=3 \--stream-skip=3 \--stream-to=/tmp/cif.out \--stream-count=1 \--stream-poll

    The pixelformat 'NV12' is invalid

    ount=1 \--stream-poll

    2) ./v4l2-ctl -d /dev/video6 \--set-fmt-video=width=640,height=480,pixelformat=YUYV \--stream-mmap=3 \--stream-skip=3 \--stream-to=/tmp/cif.out \--stream-count=1 \--stream-poll

    根据前面的查询命令,只有YUYV格式被支持。

    将此命令的  stream-count 修改为100等,则捕获stream-count数目的帧视频。

    pixel format

    单独拎出来,作为一节,因为这是摄像头支持格式,也是视频的入口。

    例如下图某摄像头支持的格式比我们上面列举的仅支持YUYV的更丰富。

    包括支持的分辨率,帧率等。

     

    V4L2_PIX_FMT_MJPEG采集方式得到的是经过MJPEG压缩的图片,图片格式是jpeg/jpg,后缀为.jpg或.jpeg。直接将采集到的.jpeg数据依序循环写入一个文件,得到的流并不能直接播放,需要封装成avi等视频格式才能正常播放。

    V4L2_PIX_FMT_YUYV采集方式得到的是yuyv格式的原始图像格式文件,后缀为.yuv,得到的yuv数据文件可直接利用pYUV等专业yuv格式查看器进行播放,yuv数据可经HEVC(H265)、H264、VP8、VP9等方式进行编码压缩,通过h.264压缩可得到h264码流,H264码流可直接用VLC播放器进行播放。

          MJPEG 为压缩格式,因而其在1080P时,依然有30fps;而YUYV为原始图像,1080P仅支持5fps了

       YUYV图像格式

         上述采集了yuyv的图像或者视频,那么怎么查看是个问题,以及大小怎么计算?

       图像大小

     7yuv

       

    MPP压缩测试

    sdk中存在mpp测试用例

    交叉编译配置

    压缩测试

    ./mpi_enc_test -w 640 -h 480 -t 7 -i /tmp/cif.out -o /tmp/out_f8.h264 -n 100 -f 8

    -f  参数指定了输入的视频格式,此处为8,即YUYV。如果不指定,则压缩出的视频不能播放

    -f 各个格式的含义:

    1. mpp[1055]: mpi: mpp color support list:
    2. mpp[1055]: mpi: color: id 0 0x00000 YUV420SP, NV12
    3. mpp[1055]: mpi: color: id 1 0x00001 YUV420SP-10bit
    4. mpp[1055]: mpi: color: id 2 0x00002 YUV422SP, NV24
    5. mpp[1055]: mpi: color: id 3 0x00003 YUV422SP-10bit
    6. mpp[1055]: mpi: color: id 4 0x00004 YUV420P, I420
    7. mpp[1055]: mpi: color: id 5 0x00005 YUV420SP, NV21
    8. mpp[1055]: mpi: color: id 6 0x00006 YUV422P, 422P
    9. mpp[1055]: mpi: color: id 7 0x00007 YUV422SP, NV42
    10. mpp[1055]: mpi: color: id 8 0x00008 YUV422-YUYV, YUY2
    11. mpp[1055]: mpi: color: id 10 0x0000a YUV422-UYVY, UYVY
    12. mpp[1055]: mpi: color: id 12 0x0000c YUV400-Y8, Y800
    13. mpp[1055]: mpi: color: id 65536 0x10000 RGB565
    14. mpp[1055]: mpi: color: id 65537 0x10001 BGR565
    15. mpp[1055]: mpi: color: id 65538 0x10002 RGB555
    16. mpp[1055]: mpi: color: id 65539 0x10003 BGR555
    17. mpp[1055]: mpi: color: id 65542 0x10006 RGB888
    18. mpp[1055]: mpi: color: id 65543 0x10007 BGR888
    19. mpp[1055]: mpi: color: id 65546 0x1000a ARGB8888
    20. mpp[1055]: mpi: color: id 65547 0x1000b ABGR8888
    21. mpp[1055]: mpi: color: id 65548 0x1000c BGRA8888
    22. mpp[1055]: mpi: color: id 65549 0x1000d RGBA8888

    压缩时间

    ​​​​​​​time ./mpi_enc_test -w 640 -h 480 -t 7 -i /tmp/cif.out -o /tmp/out_f8.h264 -n 100 -f 8

    时间信息为

    gstreamer

    借用瑞芯微的一张图示

     采集视频命令

     gst-launch-1.0 v4l2src device=/dev/video6 num-buffers=100 ! videoconvert !video/x-raw,format=NV12,width=640,height=480 ! queue ! mpph264enc ! queue ! h264parse ! qtmux ! filesink location=/tmp/uvc_h264.mp4

    命令参数

    元素

    v4l2src

    device=/dev/video6

    num-buffers=100

    ! videoconvert

    !video/x-raw,format=NV12,width=640,height=480

    ! queue ! mpph264enc

    ! queue ! h264parse

    ! qtmux

    ! filesink location=/tmp/uvc_h264.mp4

    编解码信息

    通过上述命令,压缩出的视频编解码信息如下,此处的帧率来源于哪里

     

     

  • 相关阅读:
    vue3在父组件的jsx代码中使用具名插槽
    安达发|富士康科技集团利用自动排程APS软件打造智慧工厂
    jmeter做接口压力测试_jmeter接口性能测试
    C++ Reference: Standard C++ Library reference: Containers: array: array: rend
    SpringBoot视图渲染技术
    暑假给娃买书看?通过爬虫爬取新书评分信息,并通过pandas存入csv文件
    Apache Storm 2.5.0 集群安装与配置
    获取操作系统信息服务器信息JVM信息cpu内存磁盘信息
    第三话、程序员第一家公司有多重要
    Paddle Serving v0.9.0 重磅发布多机多卡分布式推理框架
  • 原文地址:https://blog.csdn.net/proware/article/details/128064939