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 各个格式的含义:

mpp[1055]: mpi: mpp color support list:
mpp[1055]: mpi: color: id 0          0x00000 YUV420SP,          NV12
mpp[1055]: mpi: color: id 1          0x00001 YUV420SP-10bit
mpp[1055]: mpi: color: id 2          0x00002 YUV422SP,          NV24
mpp[1055]: mpi: color: id 3          0x00003 YUV422SP-10bit
mpp[1055]: mpi: color: id 4          0x00004 YUV420P,          I420
mpp[1055]: mpi: color: id 5          0x00005 YUV420SP,          NV21
mpp[1055]: mpi: color: id 6          0x00006 YUV422P,          422P
mpp[1055]: mpi: color: id 7          0x00007 YUV422SP,          NV42
mpp[1055]: mpi: color: id 8          0x00008 YUV422-YUYV,          YUY2
mpp[1055]: mpi: color: id 10          0x0000a YUV422-UYVY,          UYVY
mpp[1055]: mpi: color: id 12          0x0000c YUV400-Y8,          Y800
mpp[1055]: mpi: color: id 65536 0x10000 RGB565
mpp[1055]: mpi: color: id 65537 0x10001 BGR565
mpp[1055]: mpi: color: id 65538 0x10002 RGB555
mpp[1055]: mpi: color: id 65539 0x10003 BGR555
mpp[1055]: mpi: color: id 65542 0x10006 RGB888
mpp[1055]: mpi: color: id 65543 0x10007 BGR888
mpp[1055]: mpi: color: id 65546 0x1000a ARGB8888
mpp[1055]: mpi: color: id 65547 0x1000b ABGR8888
mpp[1055]: mpi: color: id 65548 0x1000c BGRA8888
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

编解码信息

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

 

猜你喜欢

转载自blog.csdn.net/proware/article/details/128064939