0、硬件平台和测试环境说明
感觉网上看这一类说明,常常最大的疑惑就是,为什么别人能用,我自己就不成了,其实很多时候都是各自的环境交代不清楚所致。所以我觉得讲操作前,必须先交代自己的测试环境。
我自己使用的是TX1核心模块,安装ubuntu 18.04 的环境。安装了英伟达配套的所有cuda的套件库。
文章来源地址https://www.toymoban.com/news/detail-468523.html
nvidia@nvidia-desktop:~$ sudo lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04.5 LTS
Release: 18.04
Codename: bionic
1、ubuntu下查看USB摄像头参数
v4l2-ctl -d /dev/video0 --all
我自己的系统得到的回复是:
nvidia@nvidia-desktop:~$ v4l2-ctl -d /dev/video0 --all
Driver Info (not using libv4l2):
Driver name : uvcvideo
Card type : LRCP USB2.0
Bus info : usb-70090000.xusb-3.4
Driver version: 4.9.253
Capabilities : 0x84200001
Video Capture
Streaming
Extended Pix Format
Device Capabilities
Device Caps : 0x04200001
Video Capture
Streaming
Extended Pix Format
Priority: 2
Video input : 0 (Camera 1: ok)
Format Video Capture:
Width/Height : 1280/720
Pixel Format : 'MJPG'
Field : None
Bytes per Line : 0
Size Image : 1843789
Colorspace : Default
Transfer Function : Default (maps to Rec. 709)
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 1280, Height 720
Default : Left 0, Top 0, Width 1280, Height 720
Pixel Aspect: 1/1
Selection: crop_default, Left 0, Top 0, Width 1280, Height 720
Selection: crop_bounds, Left 0, Top 0, Width 1280, Height 720
Streaming Parameters Video Capture:
Capabilities : timeperframe
Frames per second: 25.000 (25/1)
Read buffers : 0
brightness 0x00980900 (int) : min=-64 max=64 step=1 default=0 value=0
contrast 0x00980901 (int) : min=0 max=64 step=1 default=32 value=32
saturation 0x00980902 (int) : min=0 max=128 step=1 default=64 value=64
hue 0x00980903 (int) : min=-40 max=40 step=1 default=0 value=0
white_balance_temperature_auto 0x0098090c (bool) : default=1 value=1
gamma 0x00980910 (int) : min=72 max=500 step=1 default=100 value=100
gain 0x00980913 (int) : min=0 max=100 step=1 default=0 value=0
power_line_frequency 0x00980918 (menu) : min=0 max=2 default=1 value=1
white_balance_temperature 0x0098091a (int) : min=2800 max=6500 step=1 default=4600 value=4600 flags=inactive
sharpness 0x0098091b (int) : min=0 max=16 step=1 default=8 value=8
backlight_compensation 0x0098091c (int) : min=0 max=121 step=121 default=0 value=121
exposure_auto 0x009a0901 (menu) : min=0 max=3 default=3 value=3
exposure_absolute 0x009a0902 (int) : min=1 max=5000 step=1 default=157 value=157 flags=inactive
exposure_auto_priority 0x009a0903 (bool) : default=0 value=1
2 、查看usb摄像头可用的分辨率
nvidia@nvidia-desktop:~$ v4l2-ctl --device=/dev/video0 --list-formats-ext
ioctl: VIDIOC_ENUM_FMT
Index : 0
Type : Video Capture
Pixel Format: 'MJPG' (compressed)
Name : Motion-JPEG
Size: Discrete 1280x720
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 800x600
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 640x480
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 640x360
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 352x288
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 320x240
Interval: Discrete 0.033s (30.000 fps)
Index : 1
Type : Video Capture
Pixel Format: 'YUYV'
Name : YUYV 4:2:2
Size: Discrete 1280x720
Interval: Discrete 0.200s (5.000 fps)
Size: Discrete 800x600
Interval: Discrete 0.050s (20.000 fps)
Size: Discrete 640x480
Interval: Discrete 0.040s (25.000 fps)
Size: Discrete 640x360
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 352x288
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 320x240
Interval: Discrete 0.033s (30.000 fps)
可以看到,我测试使用的USB相机可以支持MJPG格式的压缩视频,恒定30HZ帧率,也可以提供YUYV这种RAW格式的视频,但是图像分辨率越大,帧率也会变低,需要根据情况做一定的调整。
3 、使用gst-launch-1.0测试USB相机
3.1、gstreamer获取USB图像
#根据摄像头 ,有的可能不能显示图像
#\- gst-launch 构建通道
#\- v4l2src 采集视频 的插件
#\- xvimagesink 显示采集图像的sink插件
gst-launch-1.0 v4l2src ! xvimagesink
#ximagesink和xvimagesink 两者都是用来x桌面用来显示视频图像的sink插件,但支持的格式不同。
#ximagesink支持rgb格式,不支持yuv格式;
#xvimagesink支持yuv等多种格式
#下面有这条命令的测试结果
gst-launch-1.0 v4l2src ! ximagesink
1、nomachine 登录的界面(xvimagesink):
2、xshell终端直接执行(xvimagesink):
从输出看,需要显示器输出支持。
3、gst-launch-1.0 v4l2src ! ximagesink 测试结果
#ximagesink支持rgb格式,不支持yuv格式;
可见,我测试的相机无法给出RGP格式,但是是可以给出YUV格式的数据。
3.2 gstreamer 1.0 测试 捕获 显示USB不同参数YUV 视频
相机支持的不同YUV的分辨率吧和帧率,只有参数对,才能正常显示。
Index : 1
Type : Video Capture
Pixel Format: 'YUYV'
Name : YUYV 4:2:2
Size: Discrete 1280x720
Interval: Discrete 0.200s (5.000 fps)
Size: Discrete 800x600
Interval: Discrete 0.050s (20.000 fps)
Size: Discrete 640x480
Interval: Discrete 0.040s (25.000 fps)
Size: Discrete 640x360
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 352x288
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 320x240
Interval: Discrete 0.033s (30.000 fps)
1、测试命令说明
#指定选择Size: Discrete 1280x720 10.000 fps,默认选择序号0的相机设备,由于相机不支持,所以报错
gst-launch-1.0 v4l2src \
! video/x-raw,format=YUY2,width=1280,height=720,framerate=10/1 \
! xvimagesink
#指定选择输入设备/dev/video0,Size: Discrete 1280x720 ,默认会选择5.000 fps
gst-launch-1.0 v4l2src device=/dev/video0 \
! video/x-raw,format=YUY2,width=1280,height=720 \
! xvimagesink
#指定选择输入设备/dev/video0,Size: Discrete 1280x720 ,指定帧率5.000 fps,由于相机不支持,所以报错
gst-launch-1.0 v4l2src device=/dev/video0 \
! video/x-raw,format=YUY2,width=1280,height=720,framerate=10/1 \
! xvimagesink
2、测试不同正确的参数效果
为了清晰命令,我们所有使用的参数和命令尽量不要使用默认,一下测试命令会得到不同的帧率和不同的分辨率视频,可以对照测试自己的摄像头。
#指定选择输入设备/dev/video0,Size: Discrete 1280x720 ,指定帧率5.000 fps
gst-launch-1.0 v4l2src device=/dev/video0 \
! video/x-raw,format=YUY2,width=1280,height=720,framerate=5/1 \
! xvimagesink
#指定选择输入设备/dev/video0,Size: Discrete 800X600 ,指定帧率20.000 fps 视频显示会乱,没有找到问题原因
gst-launch-1.0 v4l2src device=/dev/video0 \
! video/x-raw,format=YUY2,width=800,height=600,framerate=20/1 \
! xvimagesink
gst-launch-1.0 v4l2src device=/dev/video0 \
! video/x-raw,width=800,height=600,framerate=20/1 \
! xvimagesink
#指定选择输入设备/dev/video0,Size: Discrete 640X480 ,指定帧率25.000 fps
gst-launch-1.0 v4l2src device=/dev/video0 \
! video/x-raw,format=YUY2,width=640,height=480,framerate=25/1 \
! xvimagesink
#指定选择输入设备/dev/video0,Size: Discrete 640x360 ,指定帧率30.000 fps
gst-launch-1.0 v4l2src device=/dev/video0 \
! video/x-raw,format=YUY2,width=640,height=360,framerate=30/1 \
! xvimagesink
#指定选择输入设备/dev/video0,Size: Discrete 352x288 ,指定帧率30.000 fps
gst-launch-1.0 v4l2src device=/dev/video0 \
! video/x-raw,format=YUY2,width=352,height=288,framerate=30/1 \
! xvimagesink
#指定选择输入设备/dev/video0,Size: Discrete 320x240 ,指定帧率30.000 fps
gst-launch-1.0 v4l2src device=/dev/video0 \
! video/x-raw,format=YUY2,width=320,height=240,framerate=30/1 \
! xvimagesink
3.3 gstreamer 1.0 测试 捕获 显示USB不同参数MJPG格式视频
我自己测试的USB相机除了支持YUV个数输出外,还支持MJPG格式的视频数据。
ioctl: VIDIOC_ENUM_FMT
Index : 0
Type : Video Capture
Pixel Format: 'MJPG' (compressed)
Name : Motion-JPEG
Size: Discrete 1280x720
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 800x600
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 640x480
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 640x360
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 352x288
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 320x240
Interval: Discrete 0.033s (30.000 fps)
1、测试命令说明
#v4l2src 这是数据源控件,从相机取数据
#image/jpeg,width=1280,height=720,framerate=30/1 数据参数,需要和相机支持格式一致
#jpegdec 这个我们第一次见,是MJPG解码插件
#videoconvert 解码后我们需要将数据转成YUV做显示
#xvimagesink 这个大家应该要很熟悉,这个是显示插件
gst-launch-1.0 v4l2src device=/dev/video0 \
! image/jpeg,width=1280,height=720,framerate=30/1 \
! jpegdec ! videoconvert ! xvimagesink
这个获取1280x720视频流就要比YUV的速度快很多,帧率高不少,但是由于需要额外的解码,对硬件资源的消耗肯定也是变大的。
2、相机不同的参数效果测试
#指定选择输入设备/dev/video0,Size: Discrete 1280x720 ,指定帧率30.000 fps MJPG格式
gst-launch-1.0 v4l2src device=/dev/video0 \
! image/jpeg,width=1280,height=720,framerate=30/1 \
! jpegdec ! videoconvert ! xvimagesink
#指定选择输入设备/dev/video0,Size: Discrete 800x600 ,指定帧率30.000 fps MJPG格式 这个测试就是正确的
gst-launch-1.0 v4l2src device=/dev/video0 \
! image/jpeg,width=800,height=600,framerate=30/1 \
! jpegdec ! videoconvert ! xvimagesink
#指定选择输入设备/dev/video0,Size: Discrete 640x480,指定帧率30.000 fps MJPG格式 这个测试就是正确的
gst-launch-1.0 v4l2src device=/dev/video0 \
! image/jpeg,width=640,height=480,framerate=30/1 \
! jpegdec ! videoconvert ! xvimagesink
4、采集USB摄像头保存至图片
4.1 采集YUV格式的图片
#采集后无法显示,后续解决后我在替换更新,这里只是一个尝试,
gst-launch-1.0 v4l2src device=/dev/video0 num-buffers=1 \
! 'video/x-raw,format=YUY2,width=1280, height=720, framerate=5/1' \
! filesink location=/home/nvidia/Pictures/file_1280_720_YUV_1732
4.2 采集jpeg格式的图片
#指定设备 /dev/video0 采集一帧 num-buffers=1 ,数据格式 image/jpeg,width=1280,height=720
#filesink 这是一个只消费数据的对象,传入保存位置,将数据输出到指定位置
gst-launch-1.0 v4l2src device=/dev/video0 num-buffers=1 \
! image/jpeg,width=1280,height=720 ! \
filesink location=/home/nvidia/Pictures/file_1280_720_1724.jpg
5、tee 插件一路视频源同时显示两路视频
gst-launch-1.0 v4l2src device=/dev/video0 \
! image/jpeg,width=1280,height=720,framerate=30/1 \
! tee name=vsrc \
! queue ! jpegdec ! videoconvert ! xvimagesink vsrc. \
! queue ! jpegdec ! videoconvert ! xvimagesink
文章来源:https://www.toymoban.com/news/detail-468523.html
到了这里,关于【GStreamer 】3-USB相机的各种显示,播放常用指令的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!