目录
V4L2
编译
获取摄像头信息
列出设备节点
列出某个节点的属性参数
捕获图像和视频
像素格式
YUYV图像格式
图像大小
7yuv
MPP压缩测试
交叉编译配置
压缩测试
格瑞克
采集视频命令
命令参数
编解码信息
两个命令工具分别侧重不同功能,v4l2主要用于视频采集; gstreamer则像个管家,整合所有组件完成某项功能。
V4L2
编译
1) 在下面链接选择相应版本:
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
根据前面的查询命令,只有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 各个格式的含义:
压缩时间
时间信息为:
gstreamer
借用瑞芯微的一张图示
采集视频命令
命令参数
元素
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
编解码信息
通过上述命令,压缩出的视频编解码信息如下,此处的帧率来源于哪里?