ubuntu中USB摄像头gstreamer方式图像采集、显示、录像及回放功能设计——(1)

这篇具有很好参考价值的文章主要介绍了ubuntu中USB摄像头gstreamer方式图像采集、显示、录像及回放功能设计——(1)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


背景

最近由于项目需求,需要在X86平台及ARM平台中进行USB摄像头视频的采集、显示、录像及回放功能,尝试了许多方式来进行,比如openCV库,mplayer库的方式,虽然它们都能够进行USB摄像头的采集显示,但是实现需求方面总是存在各种问题:(1)性能不行,图像采集的分辨率很低或帧率很低,图像丢帧问题比较严重;(2)不能实现流畅的一边录像一边显示,在1920*1080分辨率延迟最大在200左右,在(也有可能是自己的技术问题,有大神可以分享下实现方法)。最终我还是选择了在linux中使用起来比便的gstreamer库进行学习研究,发现其能很好的满足我们的需求,接下来我来分享下其中主要内容。

一、USB摄像头图像格式

目前USB接口的摄像头还是比较常见的,我用的是一款HK的1080P高清摄像头,USB摄像头采用UVC协议来进行数据传输的,具体的这个我也研究不深。我们主要需要注意的是USB摄像头的传输图像数据格式,一般是MJPG与YUV数据格式,MJPG压缩格式数据一般更容易满足USB传输需求,而YUV数据原始流数据传输,数量量太大很难在USB上实时传输。接下来介绍USB摄像头图像格式分析工具及方法。

1.安装v4l2-ctl库

sudo apt install v4l-utils

2.找到挂载节点

使用如下命令,会查找到所有视频设备节点,其中/dev/video0是我们主要所需要用到的。

 v4l2-ctl --list-devices

ubuntu中USB摄像头gstreamer方式图像采集、显示、录像及回放功能设计——(1)

3.图像格式分析

使用如下命令,可以看到USB摄像机的支持的所有视频格式信息,可以看到其支持MJPG与YUV两种格式,每种格式有对应支持的分辨率、帧率信息。

v4l2-ctl -d /dev/video0 --list-formats-ext --all

ubuntu中USB摄像头gstreamer方式图像采集、显示、录像及回放功能设计——(1)

二、Gstreamer 简介

gstreamer是一种多媒体库,GStreamer采用基于插件(plugin)和管道(pipeline)的体系结构,其内部提供了许多组件,可以按照我们需要的功能在我们设计的管道中添加我们需要的组件,然后进行连接起来,最后就可以控制这个管道的工作,具体原理可以自己查找下相关资料。
gstreamer使用手册:
https://gstreamer.freedesktop.org/documentation/tutorials/index.html?gi-language=c
gstreamer的安装方法可以参考: https://blog.csdn.net/qq_32196869/article/details/124278298?spm=1001.2014.3001.5501

三、Gstreamer 命令行

1.显示MJPG格式,1280*720@30fps视频

gst-launch-1.0 v4l2src device=/dev/video0 ! image/jpeg,width=1280,height=720,framerate=30/1 ! jpegdec ! videoconvert ! xvimagesink

2.显示YUV格式,1280*720@15fps视频,容易卡顿

备注:这个性能主要看USB接口是2.0还是3.0、YUV传输图像fps以及主机的性能。

 gst-launch-1.0 v4l2src  device=/dev/video0 ! video/x-raw,format=YUY2,width=1280,height=720,framerate=15/1 ! videorate ! videoscale ! videoconvert ! xvimagesink

3. 显示MJPG格式,1280*720@30fps视频并同时抓拍(通过回调函数的方式)

gst-lanuch-1.0 v4l2src device=/dev/video0 ! image/jpeg,width=1280,height=720 ! jpegdec ! tee name=srctee srctee. ! queue2 ! xvimagesink srctee. ! queue2 ! videoconvert ! capsfilter video/x-raw,format=RGB ! fsink

4.显示MJPG格式,1280*720@30fps视频并同时抓拍(通过回调函数的方式),此外并进行录像功能

gst-launch-1.0 v4l2src device=/dev/video0 ! image/jpeg,width=1280,height=720 ! jpegdec ! videoconvert ! tee name=srctee srctee. ! queue2 ! xvimagesink srctee. ! queue2 ! x264enc threads=4 sliced-threads=TRUE tune=zerolatency ! matroskamux ! filesink location = output.mp4 srctee. ! queue2 ! videoconvert ! video/x-raw,format=RGB ! fakesink

5.回放录像的视频(该命令不能直接执行,而是代码中实现的基本原理)

gst-launch-1.0 filesrc location=test.mp4 ! qtdemux ! queue ! avdec_h264 ! videoconvert ! xvimagesink

总结

以上介绍了Gstreamer使用的背景及需求,以及通过Gstreamer实现显示、录像、截图、回放功能的实现中的命令行,gstreamer代码就是基于命令行的功能复现,在接下来会再进行介绍。文章来源地址https://www.toymoban.com/news/detail-400660.html

到了这里,关于ubuntu中USB摄像头gstreamer方式图像采集、显示、录像及回放功能设计——(1)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Ubuntu18.04中用ROS驱动外接USB摄像头

    问题描述: 在学习古月居ROS机器人开发实践第7章机器视觉过程中,按照书中的指令驱动USB摄像头打开的是笔记本电脑自带的摄像头,然后网上各种找教程去驱动USB外接的摄像头,终于解决问题,成功驱动外接USB摄像头!   1 首先确定USB摄像头已经连接到电脑的USB接口上。

    2024年02月15日
    浏览(30)
  • 【全志T113-S3_100ask】14-1 linux采集usb摄像头实现拍照(FFmpeg、fswebcam)

    在开发板上有一个csi转dvp接口的摄像头,但是,目前还不会驱动,先使用usb摄像头来采集图像数据。 本小节使用ffmpeg和fswebcam实现拍照。 FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流

    2023年04月08日
    浏览(44)
  • 【Qt】用QWidget显示opencv采集的摄像头图像

    本案例用QWidget容器重写paintEvent函数来显示OpenCv采集的摄像头画面,图像还可以自适应QWidget的大小,还可以检测相机断开失联的情况(可能是掉电、线被拔了等待)。在改变窗口大小时暂停显示图像,防止莫名其妙的卡顿奔溃错误!(显示图像的方式有很多种,可以用QLabel显

    2024年02月13日
    浏览(38)
  • 【opencv+图像处理】(Gui Features in OpenCV) 1-1摄像头:采集摄像头视频,读取视频帧,录制视频

    本专栏代码总库地址 https://github.com/xiawei20161308104/xv_opencv_tutorials 本节代码路径 xv_opencv_tutorials/VideoRelated/get_started_with_videos.py xv_opencv_tutorials/VideoRelated/get_and_set_video.py xv_opencv_tutorials/VideoRelated/save_video.py 参考官网 https://docs.opencv.org/4.x/d6/d00/tutorial_py_root.html 从设备,可以是摄像

    2024年02月03日
    浏览(57)
  • ubuntu20.04下的USB摄像头使用与标定(单目相机)一.使用

    A.查找摄像头接口 B.在该路径下修改launch文件,换成你自己的摄像头接口 C.运行摄像头节点(此时就能看到画面了) ⭐可能会出现的错误 1.终端会warning是因为还没有进行摄像头标定,后续会进行讲解 2.若用的是虚拟机但发出了error,看看你的usb是接入3.0还是2.0处,然后在如下

    2024年02月04日
    浏览(116)
  • 在Ubuntu虚拟机使用ffmpeg采集摄像头的yuv视频数据

    提取命令: ./cl.mp4为当前目录下的cl.mp4视频文件 -an其中a代表是audio,n代表是none,意思就是过滤掉音频 -c:v代表的是视频的编解码器 rawvideo代表我们使用rawvideo这个工具对视频进行处理 -pix_fmt yuv420p表示我们指定输出yuv视频的格式,这里我们指定为yuv420p 最后一个就是我们输出

    2023年04月11日
    浏览(70)
  • Lattice FPGA解码MIPI视频,IMX219摄像头4Line 1080P采集USB3.0输出,提供工程源码硬件原理图PCB和技术支持

    FPGA图像采集领域目前协议最复杂、技术难度最高的应该就是MIPI协议了,MIPI解码难度之高,令无数英雄竞折腰,以至于Xilinx官方不得不推出专用的IP核供开发者使用,不然太高端的操作直接吓退一大批FPGA开发者,就没人玩儿了。 本设计基于Lattice的LCMXO3LF-6900C-5BG256C开发板,采

    2024年02月02日
    浏览(41)
  • Ubuntu18.04跑通ORB_SLAM3(实时USB单目摄像头&本地视频.mp4&官方数据集)

    本人小白,寒假期间学习了一些ROS知识,试着在虚拟机搭建ORB_SLAM3环境并跑通数据集和摄像头,作本文以记录学习过程。所有用到的资源(软件安装包,镜像文件,库的源码文件都会放在最后百度网盘链接里) 目录 0.something you should know 1.安装VMware Workstation Pro和Ubuntu18.04 2.安

    2023年04月18日
    浏览(54)
  • AHD同轴摄像头接入电脑USB录制视频的方法,AHD转USB,AI图像算法(ADAS\DMS\360环视\BSD\人脸识别),图像接入电脑处理

            在图像算法训练时,有时候需要接入电脑进行算法调试和处理,很多摄像头是AHD同轴信号,例如安防和汽车后装市场很多摄像头都是AHD同轴的接口,而电脑没有可以接入同轴的接口,所以需要转换成电脑可以接入的接口才可以将摄像头接入电脑,而USB绝对是最常用

    2024年02月09日
    浏览(65)
  • ROS高效进阶第四章 -- 机器视觉处理之图像格式,usb_cam,摄像头标定,opencv和cv_bridge引入

    从本文开始,我们用四篇文章学习ROS机器视觉处理,本文先学习一些外围的知识,为后面的人脸识别,目标跟踪和yolov5目标检测做准备。 我的笔记本是Thinkpad T14 i7 + Nvidia MX450,系统是ubuntu20.04,ros是noetic。由于很多驱动与硬件强相关,请读者注意这点。 本文的参考资料有:

    2024年02月04日
    浏览(31)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包