【GStreamer 】5-2 gstreamer实现RTSP相机保存JPG照片

        之前的内容,我们研究了用GStreamer 实现对USB相机的截图、录像、显示等操作,已经后续的压缩,解压缩,硬件加速实现的办法。但是我们在实际使用中,越来越多的前端接入其实是RTSP码流的网络相机偏多,尤其是前端可能使用海康、大华等大厂的网络相机,所以接下来我们主要研究如果实现RTSP网络流相机的接入的一些操作实现。

目录

1、硬件环境说明

2、RTSP相机链接播放显示

3、将RTSP码流转jpg图片保存

保存每一帧照片

只保存一帧照片

相关组件查询详情补充说明

rtspsrc

rtph264depay

h264parse

videorate

multifilesink


1、硬件环境说明

参考文章:

【GStreamer 】5-1 gstreamer实现RTSP相机显示_机器人虎哥的博客-CSDN博客

2、RTSP相机链接播放显示

#playbin 插件播放 需要显示器支持
gst-launch-1.0 playbin uri= rtsp://admin:abcd1234@192.168.11.68:554/h264/ch1/main/av_stream

在nomachine 终端执行命令的效果为:

无报错了,屏幕显示内容也一致。

如果想测试自码流,只需要更换后面的URL即可。

#子码流取流:
#playbin 插件播放 需要显示器支持
gst-launch-1.0 playbin uri= rtsp://admin:abcd1234@192.168.11.68:554/h264/ch1/sub/av_stream

3、将RTSP码流转jpg图片保存

保存每一帧照片

#rtspsrc 指定数据来源,类似之前的v4l2 Receive data over the network via RTSP (RFC 2326)
#location 数据来源URL,需要可以使用playbin能播放
#rtph264depay 从RTSP数据流转接成H264 video  Extracts H264 video from RTP packets (RFC 3984)
#avdec_h264 H.264解码 不是所有平台都有,先要查一下自己平台是否有这个插件
#h264parse 分析和缓冲H.264数据流 Parses H.264 streams
#videorate 调整帧率,优化视频流 Drops/duplicates/adjusts timestamps on video frames to make a perfect stream
#jpegenc 编码
#multifilesink 保存缓冲数据,按照一个连续命名文件 Write buffers to a sequentially named set of files

gst-launch-1.0 rtspsrc \
location="rtsp://admin:abcd1234@192.168.11.68:554/h264/ch1/main/av_stream" \
! rtph264depay ! h264parse ! avdec_h264 \
! videorate ! jpegenc ! multifilesink location="img_%06.jpg"
执行结果是保存了连续很多图片:

 这条命令很适合我们连续采集照片,基本是按照帧率在采集照片。

只保存一帧照片

#rtspsrc 指定数据来源,类似之前的v4l2 Receive data over the network via RTSP (RFC 2326)
#location 数据来源URL,需要可以使用playbin能播放
#rtph264depay 从RTSP数据流转接成H264 video  Extracts H264 video from RTP packets (RFC 3984)
#avdec_h264 H.264解码 不是所有平台都有,先要查一下自己平台是否有这个插件
#h264parse 分析和缓冲H.264数据流 Parses H.264 streams
#videorate 调整帧率,优化视频流 Drops/duplicates/adjusts timestamps on video frames to make a perfect stream
#jpegenc 编码

gst-launch-1.0 rtspsrc \
location="rtsp://admin:abcd1234@192.168.11.68:554/h264/ch1/main/av_stream" \
! rtph264depay ! h264parse ! avdec_h264 \
! videorate ! jpegenc ! filesink location=/home/nvidia/GStreamer/rtsp/pic/file_1280_720_img-1.jpg

这条命令需要手动结束,Ctrl+C 实际上这个文件被不断覆盖重新写了,会保留最近的一帧数据。

相关组件查询详情补充说明

rtspsrc

nvidia@nvidia-desktop:~$  gst-inspect-1.0 rtspsrc
Factory Details:
  Description              Receive data over the network via RTSP (RFC 2326)
  Author                   Wim Taymans <wim@fluendo.com>, Thijs Vermeir <thijs.vermeir@barco.com>, Lutz Mueller 
​
GObject
 +----GInitiallyUnowned
       +----GstObject
             +----GstElement
                   +----GstBin
                         +----GstRTSPSrc
​
Pad Templates:
  SRC template: 'stream_%u'
    Availability: Sometimes
    Capabilities:
      application/x-rtp
      application/x-rdt
​
Element has no clocking capabilities.
​
URI handling capabilities:
  Element can act as source.
  Supported URI protocols:
    rtsp
    rtspu
    rtspt
    rtsph
    rtsp-sdp
    rtsps
    rtspsu
    rtspst
    rtspsh
​
Pads:
  none

rtph264depay

nvidia@nvidia-desktop:~$ gst-inspect-1.0 rtph264depay
Factory Details:
  Description              Extracts H264 video from RTP packets (RFC 3984)
​
​
GObject
 +----GInitiallyUnowned
       +----GstObject
             +----GstElement
                   +----GstRTPBaseDepayload
                         +----GstRtpH264Depay
​
Pad Templates:
  SINK template: 'sink'
    Availability: Always
    Capabilities:
      application/x-rtp
                  media: video
             clock-rate: 90000
          encoding-name: H264
  
  SRC template: 'src'
    Availability: Always
    Capabilities:
      video/x-h264
          stream-format: avc
              alignment: au
      video/x-h264
          stream-format: byte-stream
              alignment: { (string)nal, (string)au }
​
Element has no clocking capabilities.
Element has no URI handling capabilities.
​
Pads:
  SINK: 'sink'
    Pad Template: 'sink'
  SRC: 'src'
    Pad Template: 'src'

h264parse

nvidia@nvidia-desktop:~$ gst-inspect-1.0 h264parse
Factory Details:
  Rank                     primary + 1 (257)
  Long-name                H.264 parser
  Klass                    Codec/Parser/Converter/Video
  Description              Parses H.264 streams
  Author                   Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
​
​
GObject
 +----GInitiallyUnowned
       +----GstObject
             +----GstElement
                   +----GstBaseParse
                         +----GstH264Parse
​
Pad Templates:
  SINK template: 'sink'
    Availability: Always
    Capabilities:
      video/x-h264
  
  SRC template: 'src'
    Availability: Always
    Capabilities:
      video/x-h264
                 parsed: true
          stream-format: { (string)avc, (string)avc3, (string)byte-stream }
              alignment: { (string)au, (string)nal }
​
Element has no clocking capabilities.
Element has no URI handling capabilities.
​
Pads:
  SINK: 'sink'
    Pad Template: 'sink'
  SRC: 'src'
    Pad Template: 'src'

videorate

nvidia@nvidia-desktop:~$ gst-inspect-1.0 videorate
Factory Details:
  Rank                     none (0)
  Long-name                Video rate adjuster
  Klass                    Filter/Effect/Video
  Description              Drops/duplicates/adjusts timestamps on video frames to make a perfect stream
  Author                   Wim Taymans <wim@fluendo.com>
​
Plugin Details:
  Name                     videorate
  Description              Adjusts video frames
  Filename                 /usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstvideorate.so
  Version                  1.14.5
  License                  LGPL
  Source module            gst-plugins-base
  Source release date      2019-05-29
  Binary package           GStreamer Base Plugins (Ubuntu)
  Origin URL               https://launchpad.net/distros/ubuntu/+source/gst-plugins-base1.0
​
GObject
 +----GInitiallyUnowned
       +----GstObject
             +----GstElement
                   +----GstBaseTransform
                         +----GstVideoRate
​
Pad Templates:
  SRC template: 'src'
    Availability: Always
    Capabilities:
      video/x-raw(ANY)
      video/x-bayer(ANY)
      image/jpeg(ANY)
      image/png(ANY)
  
  SINK template: 'sink'
    Availability: Always
    Capabilities:
      video/x-raw(ANY)
      video/x-bayer(ANY)
      image/jpeg(ANY)
      image/png(ANY)
​
Element has no clocking capabilities.
Element has no URI handling capabilities.
​
Pads:
  SINK: 'sink'
    Pad Template: 'sink'
  SRC: 'src'
    Pad Template: 'src'
​
Element Properties:

multifilesink

nvidia@nvidia-desktop:~$ gst-inspect-1.0 multifilesink
Factory Details:
  Rank                     none (0)
  Long-name                Multi-File Sink
  Klass                    Sink/File
  Description              Write buffers to a sequentially named set of files
  Author                   David Schleef <ds@schleef.org>
​
​
GObject
 +----GInitiallyUnowned
       +----GstObject
             +----GstElement
                   +----GstBaseSink
                         +----GstMultiFileSink
​
Pad Templates:
  SINK template: 'sink'
    Availability: Always
    Capabilities:
      ANY
​
Element has no clocking capabilities.
Element has no URI handling capabilities.
​
Pads:
  SINK: 'sink'
    Pad Template: 'sink'
​
Element Properties:

如果对你有帮助,给个赞呗!

纠错,疑问,交流: 911946883@qq.com

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 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`:GStreamerRTSP插件。 这些操作旨在为容器配置一个适合开发的环境,使其能够支持Python编程、OpenCV图像处理和GStreamer多媒体处理等任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

机器人虎哥

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

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

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

打赏作者

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

抵扣说明:

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

余额充值