【GStreamer 】3-6 gstreamer jpegenc 、jpegdec 插件说明

29 篇文章 9 订阅
19 篇文章 33 订阅

 

目录

1、jpegenc 编码

1.1 USB相机YUV格式的编码成jpeg图片

2.2 使用 videotestsrc 生成YUV测试

2、jpegdec 解码

2.1 示例

2.2 综合示例


1、jpegenc 编码

1.1 USB相机YUV格式的编码成jpeg图片

        USB相机一般输出YUV原始数据,无法直接保存成可显示的图片,一般图片格式都是经过编码压缩的,使用jpegenc插件,可以实现RAW格式数据输入后,编码成输出image/jpeg格式。

查询插件信息: 挑一些重点信息说一下:这个地方说明了sink的格式要求,src输出的格式要求。

nvidia@nvidia-desktop:~$ gst-inspect-1.0 jpegenc
Pad Templates:
  SINK template: 'sink'
    Availability: Always
    Capabilities:
      video/x-raw
                 format: { (string)I420, (string)YV12, (string)YUY2, (string)UYVY, (string)Y41B, (string)Y42B, (string)YVYU, (string)Y444, (string)NV21, (string)NV12, (string)RGB, (string)BGR, (string)RGBx, (string)xRGB, (string)BGRx, (string)xBGR, (string)GRAY8 }
                  width: [ 1, 2147483647 ]
                 height: [ 1, 2147483647 ]
              framerate: [ 0/1, 2147483647/1 ]
  
  SRC template: 'src'
    Availability: Always
    Capabilities:
      image/jpeg
                  width: [ 16, 65535 ]
                 height: [ 16, 65535 ]
              framerate: [ 0/1, 2147483647/1 ]
             sof-marker: { (int)0, (int)1, (int)2, (int)4, (int)9 }

示例:

#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

 

2.2 使用 videotestsrc 生成YUV测试

#jpegenc 输入video/x-raw个数,输出image/jpeg格式
gst-launch-1.0 videotestsrc num-buffers=1 \
! 'video/x-raw,format=YUY2,width=1280, height=720, framerate=25/1' \
! jpegenc ! filesink location=/home/nvidia/Pictures/file25_1280_720_YUV_1401.jpg

 

2、jpegdec 解码

        jpegdec 的作用,是将image/jpeg 格式数据解码成为video/x-raw个数数据,和jpegenc 正好相反。

查询插件信息:

nvidia@nvidia-desktop:~$ gst-inspect-1.0  jpegdec
Factory Details:
  Rank                     primary (256)
  Long-name                JPEG image decoder
  Klass                    Codec/Decoder/Image
  Description              Decode images from JPEG format
  Author                   Wim Taymans <wim@fluendo.com>
​
Plugin Details:
  Name                     jpeg
  Description              JPeg plugin library
  Filename                 /usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstjpeg.so
  Version                  1.14.5
  License                  LGPL
  Source module            gst-plugins-good
  Source release date      2019-05-29
  Binary package           GStreamer Good Plugins (Ubuntu)
  Origin URL               https://launchpad.net/distros/ubuntu/+source/gst-plugins-good1.0
​
GObject
 +----GInitiallyUnowned
       +----GstObject
             +----GstElement
                   +----GstVideoDecoder
                         +----GstJpegDec
​
Pad Templates:
  SINK template: 'sink'
    Availability: Always
    Capabilities:
      image/jpeg
  
  SRC template: 'src'
    Availability: Always
    Capabilities:
      video/x-raw
                 format: { (string)I420, (string)RGB, (string)BGR, (string)RGBx, (string)xRGB, (string)BGRx, (string)xBGR, (string)GRAY8 }
                  width: [ 1, 2147483647 ]
                 height: [ 1, 2147483647 ]
              framerate: [ 0/1, 2147483647/1 ]
​
Element has no clocking capabilities.
Element has no URI handling capabilities.
​
Pads:
  SINK: 'sink'
    Pad Template: 'sink'
  SRC: 'src'
    Pad Template: 'src'
​
Element Properties:
  name                : The name of the object
                        flags: readable, writable
                        String. Default: "jpegdec0"
  parent              : The parent of the object
                        flags: readable, writable
                        Object of type "GstObject"
  idct-method         : The IDCT algorithm to use
                        flags: readable, writable
                        Enum "GstIDCTMethod" Default: 1, "ifast"
                           (0): islow            - Slow but accurate integer algorithm
                           (1): ifast            - Faster, less accurate integer method
                           (2): float            - Floating-point: accurate, fast on fast HW
  max-errors          : (Deprecated) Error out after receiving N consecutive decoding errors (-1 = never fail, 0 = automatic, 1 = fail on first error)
                        flags: readable, writable, deprecated
                        Integer. Range: -1 - 2147483647 Default: 0 

查询插件信息中:说明sink 的要求是image/jpeg,src 也就是输出的格式为video/x-raw。

Pad Templates:
  SINK template: 'sink'
    Availability: Always
    Capabilities:
      image/jpeg
  
  SRC template: 'src'
    Availability: Always
    Capabilities:
      video/x-raw
                 format: { (string)I420, (string)RGB, (string)BGR, (string)RGBx, (string)xRGB, (string)BGRx, (string)xBGR, (string)GRAY8 }
                  width: [ 1, 2147483647 ]
                 height: [ 1, 2147483647 ]
              framerate: [ 0/1, 2147483647/1 ]

2.1 示例

#v4l2src 这是数据源控件,从相机取数据
#image/jpeg,width=1280,height=720,framerate=30/1  数据参数,需要和相机支持格式一致
#jpegdec 解码成video/x-raw 格式
#videoconvert 解码后我们需要将数据转成YUV做显示
#xvimagesink 这个大家应该要很熟悉,这个是显示插件
​
gst-launch-1.0 v4l2src device=/dev/video0 \
! image/jpeg,width=1280,height=720,framerate=30/1 \
! jpegdec ! videoconvert ! xvimagesink
​
#必须相机支持这种格式才可以
gst-launch-1.0 v4l2src device=/dev/video0 \
! image/jpeg,width=640,height=480,framerate=30/1 \
! jpegdec ! videoconvert ! xvimagesink

 

2.2 综合示例

我们先使用videotestsrc生成任意时间长度,大小,帧率的视频,然后再解码播放视频。

生成测试视频

#使用videotestsrc 生成任意指定的大小和帧率的image/jpeg测试视频
#videotestsrc 输出的格式为video/x-raw 
#num-buffers=100 采集100帧
#avimux AVI格式生成器
# filesink location=/home/nvidia/Pictures/jpeg-1280-720-25.avi 保存文件插件
gst-launch-1.0 videotestsrc num-buffers=100 \
! 'video/x-raw,format=YUY2,width=1280, height=720, framerate=25/1' \
! jpegenc ! avimux ! filesink location=/home/nvidia/Pictures/jpeg-1280-720-25.avi
​
​
gst-launch-1.0 videotestsrc num-buffers=100 \
! 'video/x-raw,format=YUY2,width=640, height=480, framerate=30/1' \
! jpegenc ! avimux ! filesink location=/home/nvidia/Pictures/jpeg-640-480-30.avi

播放视频

#filesrc  与 filesink 对应,读取文件插件
#avidemux 与 avimux 对应,将AVI文件格式解码成单独的音频和视频
#queue 理解为单独建立一个现场
# jpegdec 解码
# videoconvert 转换成显示格式
gst-launch-1.0 -v filesrc location=/home/nvidia/Pictures/jpeg-1280-720-25.avi ! avidemux \
!  queue ! jpegdec ! videoconvert \
! videoscale ! xvimagesink
​
​
gst-launch-1.0 -v filesrc location=/home/nvidia/Pictures/jpeg-640-480-30.avi ! avidemux \
!  queue ! jpegdec ! videoconvert \
! videoscale ! xvimagesink

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
这段代码是在Docker容器中执行的一系列命令,用于安装一些软件包和依赖项。具体来说,它执行以下操作: 1. `apt-get clean`:清理apt-get缓存,以释放磁盘空间。 2. `apt-get update`:更新apt-get软件包列表。 3. `apt-get install -y`:安装以下软件包和依赖项: - `python3`:Python 3的主要二进制文件。 - `python3-pip`:Python 3的包管理工具pip。 - `libopencv-dev`:OpenCV开发库的头文件和静态库。 - `python3-opencv`:Python 3的OpenCV绑定。 - `build-essential`:构建软件包所需的基本工具和编译器。 - `yasm`:视频编解码器的汇编器。 - `cmake`:跨平台的构建工具。 - `libtool`:通用库支持脚本工具。 - `libc6`、`libc6-dev`:C标准库的运行时库和开发文件。 - `unzip`:解压缩工具。 - `wget`:网络下载工具。 - `libnuma1`、`libnuma-dev`:NUMA(非统一内存访问)系统的库和开发文件。 - `libgstreamer1.0-0`:GStreamer多媒体框架的核心库。 - `gstreamer1.0-plugins-base`、`gstreamer1.0-plugins-good`、`gstreamer1.0-plugins-bad`、`gstreamer1.0-plugins-ugly`、`gstreamer1.0-libav`:GStreamer插件和解码器。 - `gstreamer1.0-doc`、`gstreamer1.0-tools`、`gstreamer1.0-x`、`gstreamer1.0-alsa`、`gstreamer1.0-gl`、`gstreamer1.0-gtk3`、`gstreamer1.0-qt5`、`gstreamer1.0-pulseaudio`:GStreamer的文档、工具和相关库。 - `libglib2.0-dev`:GLib开发库的头文件。 - `libgstrtspserver-1.0-dev`:GStreamer RTSP服务器库的开发文件。 - `gstreamer1.0-rtsp`:GStreamer的RTSP插件。 这些操作旨在为容器配置一个适合开发的环境,使其能够支持Python编程、OpenCV图像处理和GStreamer多媒体处理等任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

机器人虎哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值