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

2023-11-18


背景

最近由于项目需求,需要在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

在这里插入图片描述

3.图像格式分析

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

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

在这里插入图片描述

二、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代码就是基于命令行的功能复现,在接下来会再进行介绍。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 如何解决:ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。

    python编写mqtt服务时候出现如下问题 ConnectionRefusedError WinError 10061 由于目标计算机积极拒绝 无法连接 尝试了网上的很多方法都无法解决 发现主要问题在于broker没有打开 可以下载emq
  • 使用CDN有什么好处?

    现如今 在这个移动互联网时代 越来越多的人使用手机观看视频 丰富自己的娱乐生活 可是 大家在追剧的时候 有没有想过一个问题 为什么以前观看视频时 那么卡顿 现在看视频却这么流畅呢 其实 这是互联网视频内容提供商使用了摩杜云CDN 解决巨大流
  • 操作系统可以做服务器操作系统,可以做服务器操作系统

    可以做服务器操作系统 内容精选 换一换 Atlas 800 训练服务器 型号 9010 安装上架 服务器基础参数配置 安装操作系统等操作请参见 Atlas 800 训练服务器 用户指南 型号9010 Atlas 800 训练服务器 型号 9
  • 【windows11】python安装教程(超简易·免配置)

    废话不多说 直接上流程 一 下载python 认准官方网址 http www python org 由于是国外平台网站 网页加载可能有些慢 可以耐心等待 鼠标光标移至 Downloads 处 点击 All releases 若想体验最新版
  • Libvirt安装

    目录 建立在上一章的基础上 一 Libvirt安装与配置 1 修改 etc selinux config 文件 2 配置yum源为阿里源 3 清理yum源 4 重新生成新缓存 5 检查系统是否安装 libvirt qemu 6 检查kvm模
  • 【华为OD统一考试A卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • Linux磁盘管理

    lsblk 使用lsblk命令可以以tree的形式展示所有设备的信息 lsblk命令的英文是 list block 即用于列出所有可用块设备的信息 而且还能显示他们之间的依赖关系 但是它不会列出RAM盘的信息 使用者权限 所有用户 语法格式
  • HCNP路由交换笔记

    路由基础 路由 在报文转发的过程中沿途的网络设备收到该报文后 会根据其携带的目的IP地址来判断如何转发这个报文 最终将报文从恰当的接口转发出去 当一台路由器收到一个IP报文后 会在自己的路由器中执行路由查询 寻找匹配报文的目的IP地址的路由
  • 如何更改vue项目中的小图标

    1 先将icon图标放入static文件夹中 2 然后在index html文件中引入 3 保存后刷新浏览器就可以显示图标了
  • 如何开启esxi主机的ssh远程连接

    环境 esxi主机 说明 esxi主机默认ssh是不开启的 需要人工手动启动 也可以设置同esxi主机一起开机启动 1 找到esxi主机 点击 配置 那里 再点击右边的属性 如图所示 2 在 服务属性 界面中 可以看到很多服务 找到 SSH
  • navicat mysql data transfer_Navicat 导出导入数据库的实现方法

    描述 把mysql数据库中的一个数据库导出 备份 或者传输给别人 导出 使用Navicat连接到mysql 然后选中你要导出的数据库 右键 选择转储SQL文件 命名为数据名 sql 保存到本地中即可 如下图 选择转储SQL文件 保存到本地
  • Python中configparser的使用

    1 configparser介绍 configparser是python自带的配置参数解析器 可以用于解析 ini文件中的配置参数 ini文件中由sections 节点 key value组成 2 ini文件配置说明 DEFAULT key
  • 华为OD机试 - 用户调度问题(Java)

    题目描述 在通信系统中 一个常见的问题是对用户进行不同策略的调度 会得到不同的系统消耗和性能 假设当前有n个待串行调度用户 每个用户可以使用A B C三种不同的调度策略 不同的策略会消耗不同的系统资源 请你根据如下规则进行用户调度 并返回总
  • 数字化时代-17:从中国历年五年规划后的GDP增长看中美大碰撞的必然

    前言 本文通过观察中国历年五年规划后的GDP增长与美国同期GDP的增长的关系 展示中美大碰撞的必然性 这是中国崛起路上必然要经过的一道坎 无法回避 能做的就是降低它的负面影响 我们先看一下日美大碰撞 在上图中 上个世纪80年代 日本经济飞速
  • 2003服务器iis网站在哪,【搭建网站】Windows2003系统iis搭建网站教程

    1 开始 管理工具 internet信息服务 iis 管理右键添加到桌面快捷方式 然后打开如图 2 右键点击网站 选择新建 网站 3 输入网址描述 并下一步 4 填写网址相关信息 网站ip地址 可以选择全部未分配也选择本机的ip地址 建议使
  • (已上岸)记一次Java后台实习面试问题——附答案

    2020年6月5日 某互联网公司的 Java开发实习生 技术面二面 面试官 自我介绍 项目提了一嘴 JDK 1 8 集合源码 TCP细节 HTTP和HTTPS redis数据结构和常用方法 消息队列基础 Spring SpringCloud
  • mybatis-plus代码生成器一键生成代码

    第一步 添加依赖
  • AI视频成工具D-ID介绍(AI数字人常用工具)

    Studio D id 一个AI视频成工具 用AI创作的数字人 输入人物关键词就可一键生成人物 上传要说的文本或音频则可以开口说话了 关于AI语音 有很多选项可供选择 目前 Studio D id支持多达66种语言 然后 您可以使用普通话
  • 【读点论文】ViTGAN: Training GANs with Vision Transformers 将视觉transformer和gan结合起来

    ViTGAN Training GANs with Vision Transformers Abstract 最近 Vision Transformers vits 在图像识别方面表现出了具有竞争力的性能 需要较少的视觉特定的归纳偏差 在本
  • ubuntu中USB摄像头gstreamer方式图像采集、显示、录像及回放功能设计——(1)

    文章目录 背景 一 USB摄像头图像格式 1 安装v4l2 ctl库 2 找到挂载节点 3 图像格式分析 二 Gstreamer 简介 三 Gstreamer 命令行 1 显示MJPG格式 1280 720 30fps视频 2 显示YUV格