【GStreamer 】3-2 gstreamer实现USB相机采集图片和录像

这篇具有很好参考价值的文章主要介绍了【GStreamer 】3-2 gstreamer实现USB相机采集图片和录像。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【GStreamer 】3-2 gstreamer实现USB相机采集图片和录像

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

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

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

【GStreamer 】3-2 gstreamer实现USB相机采集图片和录像

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 、查看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格式的视频,但是图像分辨率越大,帧率也会变低,需要根据情况做一定的调整。

2、采集USB摄像头保存至图片

2.1 采集YUV格式的图片

#jpegenc 输入video/x-raw个数,输出image/jpeg格式
gst-launch-1.0 v4l2src device=/dev/video0 num-buffers=1 \
! 'video/x-raw,format=YUY2,width=1280, height=720, framerate=5/1' \
! jpegenc ! filesink location=/home/nvidia/Pictures/file_1280_720_YUV_1401.jpg
​
#采集Size: Discrete 640x480 图片
gst-launch-1.0 v4l2src device=/dev/video0 num-buffers=1 \
! 'video/x-raw,format=YUY2,width=640, height=480, framerate=25/1' \
! jpegenc ! filesink location=/home/nvidia/Pictures/file_640_480_YUV_1401.jpg

【GStreamer 】3-2 gstreamer实现USB相机采集图片和录像

2.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
​
#也可以补全所有的参数framerate=30/1
gst-launch-1.0 v4l2src device=/dev/video0 num-buffers=1 \
! image/jpeg,width=1280,height=720,framerate=30/1 ! \
filesink location=/home/nvidia/Pictures/file_jpeg_1280_720_1417.jpg
​
#采集不同的分辨率
gst-launch-1.0 v4l2src device=/dev/video0 num-buffers=1 \
! image/jpeg,width=640,height=480,framerate=30/1 ! \
filesink location=/home/nvidia/Pictures/file_jpeg_640_480_1417.jpg
 
 

3、采集USB摄像头保存成视频

3.1 采集yuv格式输入的,输出AVI视频

        AVI英文全称为Audio Video Interleaved,即音频视频交错格式,是微软公司于1992年11月推出、作为其Windows视频软件一部分的一种多媒体容器格式。

        AVI文件将音频(语音)和视频(影像)数据包含在一个文件容器中,允许音视频同步回放。类似DVD视频格式,AVI文件支持多个音视频流。AVI信息主要应用在多媒体光盘上,用来保存电视、电影等各种影像信息。

#采集video/x-raw格式,生成AVI
#avimux 要向生成AVI,必须用的插件多路复用,常用来做音视频混合成一个文件,实现AVI格式交错
gst-launch-1.0 videotestsrc num-buffers=100 \
! 'video/x-raw,format=YUY2,width=1280, height=720, framerate=10/1' \
! avimux  ! filesink location=/home/nvidia/Pictures/x-raw.avi
​
gst-launch-1.0 v4l2src device=/dev/video0 num-buffers=100 \
! 'video/x-raw,format=YUY2,width=1280, height=720, framerate=5/1' \
! avimux  ! filesink location=/home/nvidia/Pictures/video0-x-raw.avi
​
#jpegenc 是GStreamer 中迎来实现JPEG image 编码的插件。其输入为 video/x-raw ,输出为image/jpeg
#将video/x-raw格式编码成image/jpeg,生成AVI,都是可以的
gst-launch-1.0 videotestsrc num-buffers=100 \
! 'video/x-raw,format=YUY2,width=1280, height=720, framerate=5/1' \
! jpegenc ! avimux ! filesink location=/home/nvidia/Pictures/jpeg.avi
​
gst-launch-1.0 v4l2src device=/dev/video0 num-buffers=100 \
! 'video/x-raw,format=YUY2,width=1280, height=720, framerate=5/1' \
! jpegenc ! avimux ! filesink location=/home/nvidia/Pictures/video0-jpeg.avi

【GStreamer 】3-2 gstreamer实现USB相机采集图片和录像

【GStreamer 】3-2 gstreamer实现USB相机采集图片和录像 

3.2 采集MJPG格式输入的,输出AVI视频

#使用USB相机采集 Size: Discrete 1280x720
gst-launch-1.0 v4l2src device=/dev/video0 num-buffers=100 \
! image/jpeg,width=1280,height=720,framerate=30/1 ! \
avimux ! filesink location=/home/nvidia/Pictures/jpeg_1280_720_1417.avi

【GStreamer 】3-2 gstreamer实现USB相机采集图片和录像

3.3 采集YUV格式输入的,编码成 H.264格式,输出MP4文件

        从 v4l2 设备获取视频流,编码成 H.264格式,并混合到一个MP4文件中

#x264enc 其输入为 video/x-raw ,输出为video/x-h264
gst-launch-1.0 v4l2src device=/dev/video0 num-buffers=100 \
! 'video/x-raw,format=YUY2,width=1280, height=720, framerate=5/1' \
! videoconvert  \
! x264enc ! mp4mux ! filesink location=/home/nvidia/Pictures/x264-video-1280-720.mp4

#也有人这么写,单独开一个队列去做,也是可以的
gst-launch-1.0 v4l2src device=/dev/video0 num-buffers=100 \
! 'video/x-raw,format=YUY2,width=640, height=480, framerate=25/1' \
! videoconvert \
! queue ! x264enc ! mp4mux ! filesink sync=false location=/home/nvidia/Pictures/camera-h264-640x480.mp4

        不使用videoconvert 会报错

pipeline: could not link v4l2src0 to x264enc0, x264enc0 can't handle caps video/x-raw, format=(string)YUY2, width=(int)1280, height=(int)720, framerate=(fraction)5/1

【GStreamer 】3-2 gstreamer实现USB相机采集图片和录像

 

拷贝到WIN下可以直接播放。

【GStreamer 】3-2 gstreamer实现USB相机采集图片和录像

 

3.4 采集MJPG格式输入的,输出MP4文件

gst-launch-1.0 v4l2src device=/dev/video0  num-buffers=100 \
! image/jpeg,width=1280,height=720,framerate=30/1 ! \
! 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
 
# jpegdec jpeg解码
# x264enc 编码成X264
# mp4mux 混合生成MP4 
gst-launch-1.0 v4l2src device=/dev/video0  num-buffers=100 \
! image/jpeg,width=1280,height=720,framerate=30/1  \
! jpegdec ! videoconvert \
! x264enc ! mp4mux ! filesink location=/home/nvidia/Pictures/x264-video-1280-720.mp4

【GStreamer 】3-2 gstreamer实现USB相机采集图片和录像

 

3.5 一边显示,一边录视频

gst-launch-1.0 v4l2src device=/dev/video0  num-buffers=300 \
! image/jpeg,width=1280,height=720,framerate=30/1  \
! jpegdec ! videoconvert \
! tee name=srctee srctee. \
! queue2 ! xvimagesink srctee. \
! queue2 ! x264enc threads=4 sliced-threads=TRUE tune=zerolatency ! matroskamux ! filesink location = /home/nvidia/Pictures/output.mp4 
​
​
#不同分辨率
gst-launch-1.0 v4l2src device=/dev/video0  num-buffers=300 \
! image/jpeg,width=640,height=480,framerate=30/1  \
! jpegdec ! videoconvert \
! tee name=srctee srctee. \
! queue2 ! xvimagesink srctee. \
! queue2 ! x264enc threads=4 sliced-threads=TRUE tune=zerolatency ! matroskamux ! filesink location = /home/nvidia/Pictures/output2.mp4 
​实际效果感觉比较卡顿

 文章来源地址https://www.toymoban.com/news/detail-492864.html

到了这里,关于【GStreamer 】3-2 gstreamer实现USB相机采集图片和录像的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • gstreamer中使用webrtc实现音视频对讲

    gstreamer官方源代码中有一个基于webrtc插件实现音视频通话的开源项目,下面介绍在Ubuntu系统中如何搭建环境并使用。 这里省略gstreamer安装,直接安装使用webrtcbin插件使用的相关库,参考官网。系统版本建议高于ubuntu18.04。 首先安装如下相关依赖库。 gstreamer项目编译官方建议

    2024年04月11日
    浏览(43)
  • 微信小程序 图片 相机 二维码 动画相关API(实现选择相册、拍照、录像、动画)

    本文探讨微信小程序 图片 相机 二维码 动画相关API(实现选择相册、拍照、录像、动画)功能,带有示例代码

    2024年02月04日
    浏览(54)
  • 使用Gstreamer+OpenCV实现两路图像数据混合拉流推流

    本示例看完后,可基本掌握以下内容 1、利用opencv+gstreamer拉流推流的基本步骤 2、可学习gstreamer,图像混合的一些插件用法 3、TX2 NX上的视频编解码与硬件加速,H264编码参数调整 4、linux下如何提高线程优先级 我需要实现的功能是在TX2 NX上,拉取摄像头数据,并在摄像头数据上

    2024年02月09日
    浏览(42)
  • [GStreamer] (1) GStreamer-plugin 基础

    GStreamer 插件基础 创建 高级 元素类型 创建 高级特殊元素类型 介绍 - 在本指南中,您将学习如何应用基本的 GStreamer 编程概念来编写一个简单的插件。 编写插件的基础流程 构建样板 通过下载模板参考,重写、添加相应的函数 $ cd ~/gst-template/gst-plugin/src $ …/tools/make_element My

    2024年02月02日
    浏览(31)
  • FPGA驱动FT601实现USB3.0相机HDMI视频采集 提供工程源码和QT上位机源码

    目前USB3.0的实现方案很多,但就简单好用的角度而言,FT601应该是最佳方案,因为它电路设计简单,操作时序简单,软件驱动简单,官方甚至提供了包括FPGA驱动在内的丰富的驱动源码和测试软件; 本设计用FPGA驱动FT601芯片实现USB3.0数据通信,使用同步245模式通信,提供vivad

    2024年02月09日
    浏览(39)
  • opencv+gstreamer拉流

    opencv的VideoCapture函数支持以Gstreamer pipeline的方法对RTSP数据进行解码,VideoWriter函数支持以Gstreamer pipeline的方式进行RTSP推流。 为了实现上述的功能, opencv在编译时需要打开WITH_GSTREAMER选项 ,具体编译过程,需要后续进行测试,然后描述相应的过程。 opencv中可以通过调用getBu

    2024年02月04日
    浏览(37)
  • 二、什么是GStreamer

    GStreamer是一个用于创建流媒体应用程序的框架。基本的设计来自俄勒冈研究生院的视频管道,还有一些来自DirectShow的想法。 GStreamer的开发框架使编写任何类型的流媒体应用程序成为可能。GStreamer框架旨在使编写处理音频或视频或两者同时处理的应用程序变得容易。它不局限

    2024年02月14日
    浏览(33)
  • Gstreamer基础讲解

    背景 ​ 从历史的角度来看,Linux在多媒体方面已经远远落后于其他的操作系统。Microsoft’s Windows 和Apple’s MacOS它们对多媒体设备、多媒体创作、播放和实时处理等方面已经有了很好的支持。另一方面,Linux对多媒体应用的综合贡献比较少,这也使得Linux很难在专业级别的软件

    2024年02月03日
    浏览(28)
  • FPGA驱动FT601实现USB3.0相机 OV5640视频采集 提供2套工程源码和QT上位机源码

    目前USB3.0的实现方案很多,但就简单好用的角度而言,FT601应该是最佳方案,因为它电路设计简单,操作时序简单,软件驱动简单,官方甚至提供了包括FPGA驱动在内的丰富的驱动源码和测试软件; 本设计用FPGA驱动FT601芯片实现USB3.0数据通信,使用同步245模式通信,提供2套v

    2024年02月11日
    浏览(39)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包