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

本文详细介绍了如何使用GStreamer工具链处理RTSP网络摄像头流,包括连接播放、帧级图片保存与一次性抓取。涉及的关键组件如rtspsrc、rtph264depay、h264parse和videorate在实际应用中的配置和功能解析。

        之前的内容,我们研究了用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数据流
### 解决NVIDIA Jetson GStreamer gst-launch-1.0 RTSP转MP4录制不播放的问题 在处理NVIDIA Jetson平台上使用GStreamer通过`gst-launch-1.0`命令将RTSP流转换并保存为MP4文件遇到无法播放的情况时,有几个方面需要注意。 #### 安装必要的GStreamer组件 为了确保所有必需的插件都已安装,在Jetson平台上应执行如下命令来安装完整的GStreamer工具集及其开发库: ```bash sudo apt-get update && sudo apt-get upgrade -y sudo apt-get install gstreamer1.0-tools gstreamer1.0-alsa \ gstreamer1.0-plugins-base gstreamer1.0-plugins-good \ gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly \ gstreamer1.0-libav libgstreamer1.0-dev \ libgstreamer-plugins-base1.0-dev \ libgstreamer-plugins-good1.0-dev \ libgstreamer-plugins-bad1.0-dev[^1] ``` #### 正确配置GST_LAUNCH-1.0管道 当尝试从RTSP源捕获视频并将其实时编码成MP4格式存储到本地磁盘时,建议采用以下结构化的pipeline设置方法。这有助于创建兼容大多数媒体播放器的标准容器格式文件: ```bash gst-launch-1.0 rtspsrc location=rtsp://<your_rtsp_stream_url> ! decodebin ! x264enc tune=zerolatency bitrate=<desired_bitrate_in_kbps> ! mp4mux fragment-duration=5 ! filesink location=output.mp4 ``` 这里的关键点在于选择了合适的编解码器(`x264enc`)以及多路复用器(`mp4mux`),并且设置了合理的参数以适应不同的应用场景需求。特别是对于移动设备上的回放优化,可以通过调整比特率(bitrate)和其他选项获得更好的体验效果。 另外值得注意的是,如果目标是生成分片式的MP4文件以便于后续在线传输或即时观看,则可以在上述基础上进一步指定更短的时间间隔来进行片段划分操作,比如上面例子中的`fragment-duration=5`表示每五秒切分为一个新的片段。 #### 验证输出文件的有效性 完成录制之后,可以利用FFmpeg或其他第三方软件检查生成的MP4文件是否具有正确的元数据标签和索引表项。有时即使看起来正常的视频也可能因为缺少这些信息而导致某些特定类型的播放程序读取失败。修复这类问题的一个简单方式就是重新封装一次而不改变原始内容本身: ```bash ffmpeg -i output.mp4 -c copy fixed_output.mp4 ``` 此过程不会影响音画质量,仅是对内部结构进行了整理优化,从而提高了与其他应用程序之间的互操作性和稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

机器人虎哥

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

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

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

打赏作者

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

抵扣说明:

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

余额充值