【GStreamer 】3-USB相机的各种显示,播放常用指令

这篇具有很好参考价值的文章主要介绍了【GStreamer 】3-USB相机的各种显示,播放常用指令。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【GStreamer 】3-USB相机的各种显示,播放常用指令

0、硬件平台和测试环境说明

        感觉网上看这一类说明,常常最大的疑惑就是,为什么别人能用,我自己就不成了,其实很多时候都是各自的环境交代不清楚所致。所以我觉得讲操作前,必须先交代自己的测试环境。

        我自己使用的是TX1核心模块,安装ubuntu 18.04 的环境。安装了英伟达配套的所有cuda的套件库。

【GStreamer 】3-USB相机的各种显示,播放常用指令

 文章来源地址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):

【GStreamer 】3-USB相机的各种显示,播放常用指令

2、xshell终端直接执行(xvimagesink):

【GStreamer 】3-USB相机的各种显示,播放常用指令

从输出看,需要显示器输出支持。

3、gst-launch-1.0 v4l2src ! ximagesink 测试结果

#ximagesink支持rgb格式,不支持yuv格式;

【GStreamer 】3-USB相机的各种显示,播放常用指令

 可见,我测试的相机无法给出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

【GStreamer 】3-USB相机的各种显示,播放常用指令

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

【GStreamer 】3-USB相机的各种显示,播放常用指令

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

【GStreamer 】3-USB相机的各种显示,播放常用指令

 

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

 

 

到了这里,关于【GStreamer 】3-USB相机的各种显示,播放常用指令的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 从零开始成为GStreamer专家——RTSP播放开发

            RTSP不同于本地播放,也不同于http,它需要动态创建source的srcpad,不可以直接将source和typefind相连,涉及到的元素按创建时间的先后顺序有: rtspsrc rtspwms rtspreal udpsrc udpsrc rtpbin rtpsession rtpssrcdemux rtpstorage udpsink fakesrc udpsink rtpjitterbuffer rtpptdemux 层次关系如下:    

    2024年02月12日
    浏览(47)
  • gstreamer推流SRT协议视频,VLC播放SRT视频(一)

    Secure Reliable Transport(SRT)是安全、可靠、低延时的多媒体实时传输协议。SRT协议使用AES进行数据加密,运用FEC进行前向纠错,并且有流量控制、拥塞控制。类似于QUIC协议,SRT采用UDP代替TCP,在应用层提供发送确认机制、ARQ自动重传,减少端到端的延迟。 SRT探测实时网络带宽状

    2024年01月22日
    浏览(38)
  • 移动端开源播放器对比与选型(ExoPlayer/ijkplayer/VLC/GStreamer/SmarterPlayer)

    ExoPlayer 是 Google 推出的开源播放器,主要是集成了Android 提供的一套解码系统来解析视频和音频,将 MediaCodec 封装地非常完善,并加入了对 DASH 和 HLS 等直播协议的支持,形成了一个性能优越,播放稳定性较好的一个开发播放器。 Github : https://github.com/google/ExoPlayer star fork iss

    2024年02月08日
    浏览(50)
  • [桌面运维]PC常用的视频接口,显示器VGA、DVI、HDMI、DP、USB-C接口的认识和应用

    ⬜⬜⬜ 🐰🟧🟨🟩🟦🟪(*^▽^*)欢迎光临 🟧🟨🟩🟦🟪🐰⬜⬜⬜ ✏️write in front✏️ 📝个人主页:陈丹宇jmu 🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​ 🙉联系作者🙈by QQ:813942269🐧 🌈致亲爱的读者:很高兴你能看到我的文章,希望我的文章可以帮助到你,祝万事

    2024年02月07日
    浏览(49)
  • 【opencv-python Gstreamer支持】Jetson Agx Orin手动编译opencv4.5.1加入gstreamer库,实现opencv简洁驱动GMSL2 IMX390相机

    # opencv官网下载opencv4.5.1源代码 opencv下载网址 # libtiff官网下载libtiff4的包,解决opencv编译问题 libtiff4下载地址 # libtiff安装 下载对应的安装包 tiff-4.0.10.zip ,( tiff-4.0.x.zip 都可以),解压之后,然后编译安装: # 编译安装

    2024年02月10日
    浏览(50)
  • usb相机转为ip网络相机(ubuntu)

    首先,需要确保你的Ubuntu系统上已经安装了VLC Media Player,如果没有安装,则可以通过以下命令进行安装: 首先,我们需要找出你的USB摄像头的设备路径。可以通过运行以下命令来查找: 这将返回诸如 /dev/video0,/dev/video1 等设备路径。通常,/dev/video0 是你的主要摄像头。 在找

    2024年01月17日
    浏览(35)
  • 多USB工业相机的使用

    USB相机的使用 USB3.0引入了“SuperSpeed”(SS)传输速率。理论传输速度高达625 MByte/s, SuperSpeed传输可以在短时间内传输大量数据,适用于许多视觉应用。给出的带宽上限是一个理想化的理论值。对于实际应用,主机控制器(Host Controller)的实际可实现传输速率应该在主控制器的数

    2024年02月09日
    浏览(21)
  • ROS系统读取USB相机图像数据

    usb_cam功能包简介 为了丰富机器人与外界的交互方式,已经增加了与机器人的语音交互方式,不仅使机器人能够说话发声,还能听懂我们说的话,但是如果只有语音交互的话机器人就是一个盲人,无法看到这个色彩斑斓的大千世界,因此我们就需要为机器人增加视觉识别功能

    2024年04月08日
    浏览(51)
  • 【ROS】usb_cam相机标定

    1. 唠叨两句 当我们要用相机做测量用途时,就需要做相机标定了,不然得到的计算结果会有很大误差,标定的内容包括三部分:内参,外参还有畸变参数。所以标定的过程就是要求得上面这些参数。 以前弄这个事估计挺麻烦,需要做实验和计算才能得到,现在通过ros的开源

    2024年02月08日
    浏览(50)
  • 【opencv】解决USB相机取流卡顿问题

            最近在使用opencv接usb相机时遇到了画面很卡问题,具体体现在cv::videocapture frame 的耗时大概在200ms左右。通过查询资料发现,USB相关通常会支持YUV格式和MJPG格式输出,YUV格式未经过压缩,数据量较大,usb相机的带宽不足以支撑高分辨率,MJPG格式可支持高分辨率。

    2024年02月05日
    浏览(89)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包