GStreamer (三)常⽤插件

在这里插入图片描述

常⽤插件

  • 1、Source
    • 1.1、filesrc
    • 1.2. videotestsrc
    • 1.3. v4l2src
    • 1.4. rtspsrc和rtspclientsink
  • 2、 Sink
    • 2.1. filesink
    • 2.2. fakesink
    • 2.3. xvimagesink
    • 2.4. kmssink
    • 2.5. waylandsink
    • 2.6. rkximagesink
    • 2.7. fpsdisplaysink
  • 3 、视频推流/拉流
    • 3.1. 本地推流/拉流
      • 3.1.1 USB摄像头
      • 3.1.2 ov8858 mipi摄像头
    • 3.2. RTSP推流/拉流

1、Source

GStreamer的Source插件用于生成和提供媒体数据流。它们可以从不同的数据源读取音频或视频,比如文件、网络、设备等。 常见的Source插件包括文件源(如 filesrc)、网络源(如 tcpserversrc)、设备源(如 v4l2src),这些插件允许开发者灵活地构建多媒体管道, 以满足不同的应用需求。通过配置Source插件,用户可以轻松获取和处理多种类型的媒体数据。

1.1、filesrc

从⽂件读取数据,⽰例如下:

#创建/tmp/test
echo 666 > /tmp/test#读取文件数据到/tmp/test2
gst-launch-1.0 filesrc location=/tmp/test ! filesink location=/tmp/test2#查看
cat /tmp/test2

1.2. videotestsrc

⽣成视频数据,⽰例如下:

# 使⽤默认格式输出视频
gst-launch-1.0 videotestsrc ! xvimagesink
# 使⽤指定格式输出视频
gst-launch-1.0 videotestsrc ! "video/x-raw,width=1920,height=1080,format=(string)NV12" ! xvimagesink

1.3. v4l2src

从摄像头获取视频数据,⽰例如下:

#如果不指定摄像头编号,默认使用系统的第一个视频设备/dev/video0
gst-launch-1.0 v4l2src ! video/x-raw,width=1920,height=1080,format=NV12 ! xvimagesink#如果需要使用特定的摄像头,可以通过device属性指定设备,例如
gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw,width=1920,height=1080,format=NV12 ! xvimagesink

1.4. rtspsrc和rtspclientsink

rtspsrc和rtspclientsink是GStreamer中用于处理RTSP流的两个不同元素。

rtspsrc:这是一个源元素,用于接收RTSP流。它可以从RTSP服务器拉取音视频流,并将其传递给管道的下游元素进行处理。

rtspclientsink:这是一个接收元素,用于将处理后的音视频流发送到RTSP服务器。

简单来说,rtspsrc用于接收流,rtspclientsink用于发送流。

系统默认没有安装插件,需要进行安装:

#安装插件
sudo apt install gstreamer1.0-rtsp

具体使用方法,参考本章节推流、拉流部分。

2、 Sink

GStreamer的Sink插件用于接收和处理媒体数据流,通常用于输出到不同的目标,例如文件、音频设备、视频显示等。 常见的Sink插件包括文件接收器(如filesink)、音频输出(如 alsasink)、视频显示(如 ximagesink)。 这些插件使开发者能够灵活地将媒体数据导出到所需的格式或设备,方便实现多媒体播放和录制功能。

2.1. filesink

将收到的数据保存为⽂件,⽰例如下:

#创建/tmp/test
echo 666 > /tmp/test#读取文件数据到/tmp/test2
gst-launch-1.0 filesrc location=/tmp/test ! filesink location=/tmp/test2#查看
cat /tmp/test2

2.2. fakesink

将收到的数据全部丢弃,⽰例如下:

gst-launch-1.0 filesrc location=/tmp/test ! fakesink

2.3. xvimagesink

视频Sink,接收视频并显⽰,使⽤X11接口实现,⽰例如下:

gst-launch-1.0 videotestsrc ! xvimagesink

2.4. kmssink

视频Sink,接收视频并显⽰,使⽤kms接口实现,需要独占硬解图层,⽰例如下:

gst-launch-1.0 videotestsrc ! kmssink
# 常⽤命令
connector-id #指定屏幕
plane-id #指定硬件图层
render-rectangle #指定渲染范围

2.5. waylandsink

视频Sink,接收视频并显⽰,使⽤wayland接口实现,⽰例如下:

gst-launch-1.0 videotestsrc ! waylandsink

2.6. rkximagesink

视频Sink,接收视频并显⽰,使⽤drm接口实现零拷⻉等功能,性能较好,但需要独占硬解图层。⽰例如下:

gst-launch-1.0 videotestsrc ! rkximagesink

2.7. fpsdisplaysink

视频Sink,接收视频并统计帧率,同时会将视频中转⾄下⼀级Sink显⽰,⽰例如下:

#⽇志等级为TRACE(7)即可查看实时帧率,设置为DEBUG(5)则只显⽰最⼤/最小帧率
GST_DEBUG=fpsdisplaysink:7 gst-play-1.0 --flags=3 --videosink="fpsdisplaysink \
video-sink=xvimagesink signal-fps-measurements=true text-overlay=false \
sync=false" test.mp4#信息输出如下
Press 'k' to see a list of keyboard shortcuts.
Now playing /home/cat/test.mp4
0:00:00.111413754  7044   0x5580fc5d90 DEBUG         fpsdisplaysink fpsdisplaysink.c:440:fps_display_sink_start:<fpsdisplaysink0> Use text-overlay? 0
Redistribute latency...
0:00:02.035048410  7044   0x7f6004e2d0 DEBUG         fpsdisplaysink fpsdisplaysink.c:372:display_current_fps:<fpsdisplaysink0> Updated max-fps to 44.703224
0:00:02.036371046  7044   0x7f6004e2d0 DEBUG         fpsdisplaysink fpsdisplaysink.c:376:display_current_fps:<fpsdisplaysink0> Updated min-fps to 44.703224
0:00:02.037667141  7044   0x7f6004e2d0 LOG           fpsdisplaysink fpsdisplaysink.c:381:display_current_fps:<fpsdisplaysink0> Signaling measurements: fps:44.703224 droprate:0.000000 avg-fps:44.703224
0:00:02.552749637  7044   0x7f6004e2d0 DEBUG         fpsdisplaysink fpsdisplaysink.c:372:display_current_fps:<fpsdisplaysink0> Updated max-fps to 46.356696
0:00:02.554009567  7044   0x7f6004e2d0 LOG           fpsdisplaysink fpsdisplaysink.c:381:display_current_fps:<fpsdisplaysink0> Signaling measurements: fps:46.356696 droprate:0.000000 avg-fps:45.532539

3 、视频推流/拉流

3.1. 本地推流/拉流

3.1.1 USB摄像头

摄像头接口为device=/dev/video9,需要先运行接收端命令,然后再运行服务端(注意如果是ssh需要指定export DISPLAY=:0环境变量)

#板卡接收端
gst-launch-1.0 udpsrc port=1234 ! "application/x-rtp, payload=96" ! rtph264depay ! decodebin ! autovideosink sync=false#板卡服务端测试1
gst-launch-1.0 v4l2src device=/dev/video9  !  video/x-raw,width=640,height=480,framerate=30/1 ! videoconvert ! video/x-raw,format=UYVY !  mpph264enc ! queue ! h264parse ! rtph264pay ! udpsink host=127.0.0.1 port=1234#板卡服务端测试2
gst-launch-1.0 v4l2src device=/dev/video9  ! image/jpeg !  mppjpegdec ! videoconvert ! video/x-raw,height=1080,width=1920,frame=30/1,format=NV12 !  mpph264enc ! queue ! h264parse ! rtph264pay ! udpsink host=127.0.0.1 port=1234

说明如下:

接收端,命令通过udpsrc从指定的端口(1234)接收RTP数据流,使用rtph264depay解封装RTP数据,接着通过decodebin解码视频流,最后将解码后的视频输出到自动选择的视频窗口(autovideosink)。

服务端测试1:使用v4l2src直接捕获原始视频流,输出为YUYV格式,并进行H.264编码,然后通过rtph264pay封装成RTP数据包,最后使用udpsink将数据推送到指定的地址(127.0.0.1:1234)。

服务端测试2:同样使用v4l2src,但输入的是JPEG格式的图像,通过解码后再转换成NV12格式,并进行H.264编码,然后通过rtph264pay封装成RTP数据包,最后使用udpsink将数据推送到指定的地址(127.0.0.1:1234)。

3.1.2 ov8858 mipi摄像头

摄像头接口为device=/dev/video0,需要先运行接收端命令,然后再运行服务端(注意如果是ssh需要指定export DISPLAY=:0环境变量)

#板卡接收端
gst-launch-1.0 udpsrc port=1234 ! "application/x-rtp, payload=96" ! rtph264depay ! decodebin ! autovideosink sync=false#板卡服务端测试1
gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw,width=640,height=480,framerate=23/1 ! videoconvert ! video/x-raw,format=UYVY !  mpph264enc ! queue ! h264parse ! rtph264pay ! udpsink host=127.0.0.1 port=1234#板卡服务端测试2
gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw,width=1280,height=960,framerate=23/1 ! videoconvert ! video/x-raw,format=NV12 !  mpph264enc ! queue ! h264parse ! rtph264pay ! udpsink host=127.0.0.1 port=1234

以上和usb相似,只是ov8858不支持输出JPEG格式,测试1和测试2分辨率和格式不同。

3.2. RTSP推流/拉流

系统默认没有安装插件,需要进行安装:

#安装插件

sudo apt install gstreamer1.0-rtsp

推流前需要启动RTSP服务器,需要运行mediamtx

访问: mediamtx,下载mediamtx_vx.x.x_linux_arm64v8.tar.gz

将mediamtx_v1.9.1_linux_arm64v8.tar.gz传到板卡解压并运行:

#运行mediamtx
sudo ./mediamtx &#信息输出如下
2024/09/18 16:24:54 INF MediaMTX v1.9.1
2024/09/18 16:24:54 INF configuration loaded from /home/cat/mediamtx.yml
2024/09/18 16:24:54 INF [RTSP] listener opened on :8554 (TCP), :8000 (UDP/RTP), :8001 (UDP/RTCP)
2024/09/18 16:24:54 INF [RTMP] listener opened on :1935
2024/09/18 16:24:54 INF [HLS] listener opened on :8888
2024/09/18 16:24:54 INF [WebRTC] listener opened on :8889 (HTTP), :8189 (ICE/UDP)
2024/09/18 16:24:54 INF [SRT] listener opened on :8890 (UDP)

将视频流发送到RTSP服务器,简单⽰例如下:

以下测试USB摄像头,摄像头接口为device=/dev/video9

gst-launch-1.0 v4l2src device=/dev/video9  ! image/jpeg !  mppjpegdec ! videoconvert ! video/x-raw,height=1080,width=1920,frame=30/1,format=NV12 ! tee name=t \
t. ! queue ! videoconvert ! autovideosink \
t. ! videoconvert ! mpph264enc ! queue ! h264parse  ! rtspclientsink location=rtsp://127.0.0.1:8554/live

以下测试mipi摄像头,摄像头接口为device=/dev/video0

gst-launch-1.0 v4l2src device=/dev/video0  !  video/x-raw,width=1920,height=1080,framerate=23/1 ! tee name=t \
t. ! queue ! videoconvert ! autovideosink \
t. ! videoconvert ! mpph264enc ! queue ! h264parse  ! rtspclientsink location=rtsp://127.0.0.1:8554/live

从RTSP服务器中获取视频流,简单⽰例如下:

#指定为实际推流板卡ip
gst-launch-1.0 rtspsrc location=rtsp://192.168.103.101:8554/live ! rtph264depay ! h264parse ! mppvideodec ! xvimagesink

或者使用VLC工具,打开左上角媒体->打开网络串流
在这里插入图片描述

然后根据推流板卡实际IP输入RTSP地址
在这里插入图片描述

如果链接成功则会出现摄像头画面。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/81884.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【EDA软件】【联合Modelsim仿真使用方法】

背景 业界EDA工具仿真功能是必备的&#xff0c;例如Vivado自带仿真工具&#xff0c;且无需联合外部仿真工具&#xff0c;例如MoodelSim。 FUXI工具仿真功能需要联合Modelsim&#xff0c;才能实现仿真功能。 方法一&#xff1a;FUXI联合ModelSim 1 添加testbench文件 新建to…

国产化Excel处理组件Spire.XLS for .NET系列教程:通过 C# 将 TXT 文本转换为 Excel 表格

在数据处理和管理场景中&#xff0c;将原始文本文件&#xff08;TXT&#xff09;高效转换为结构化的 Excel 电子表格是一项常见要求。对于那些需要自动生成报表或者处理日志文件的开发人员而言&#xff0c;借助 C# 实现 TXT 到 Excel 的转换工作&#xff0c;可以简化数据组织和…

DeepSeek 的强化学习优化策略:RLHF 与 DPO 的应用

DeepSeek 的强化学习优化策略&#xff1a;RLHF 与 DPO 的应用 系统化学习人工智能网站&#xff08;收藏&#xff09;&#xff1a;https://www.captainbed.cn/flu 文章目录 DeepSeek 的强化学习优化策略&#xff1a;RLHF 与 DPO 的应用摘要引言技术原理对比1. RLHF&#xff1a…

c: 分号的歧义

最近看到一个关于某些语言里的分号问题&#xff0c;比如下面一个作者就是无意识的每行后面多加了分号导致问题。 其实python的语法可以更好的规避这种潜意识&#xff0c;因为根本就不需要每行后面加分号的意识&#xff0c;也就不需要开发者习惯这种意识。 所以&#xff0c;最后…

Elasticsearch 实战面试题,每个题目都会单独解析

Elasticsearch 在 Java 中最常用的客户端是什么&#xff1f;如何初始化一个 RestHighLevelClient&#xff1f;如何用 Spring Boot 快速集成 Elasticsearch&#xff1f;Spring Data Elasticsearch 如何定义实体类与索引的映射&#xff1f; ES的倒排索引和正排索引的区别及适用场…

拉普拉斯高斯(LoG)滤波器掩模的注意事项

目录 问题&#xff1a; 解答&#xff1a; 一、高斯函数归一化&#xff1a;消除幅度偏差 1. 归一化的定义 2. 为何必须归一化&#xff1f; 二、拉普拉斯系数和为零&#xff1a;抑制直流项干扰 1. 拉普拉斯算子的特性 2. 系数和不为零的后果 三、直流项如何影响零交叉点&…

运维实施35-磁盘管理

了解磁盘 硬盘的接口类型 接口类型发展方向应用场景IDESATA I/II/III个人PC机SCSISAS服务器上 磁盘命名规则 OSIDE(并口)SATA(串口)SCSIRHEL5/dev/hda/dev/sda/dev/sdaRHEL6/dev/sda/dev/sda/dev/sdaRHEL7/dev/sda/dev/sda/dev/sda 磁盘设备的命名 /dev/sda2 s 硬件接口…

API面临哪些风险,如何做好API安全?

API面临的风险 API&#xff08;应用程序编程接口&#xff09;在现代软件开发和集成中扮演着至关重要的角色&#xff0c;但同时也面临着多种安全风险&#xff0c;主要包括以下几个方面&#xff1a; 数据泄露风险&#xff1a; API通常涉及敏感数据的传输和交换&#xff0c;如用…

`application-{env}.yml` 配置文件来实现多环境配置

在 Spring Boot 应用中&#xff0c;使用多套 application-{env}.yml 配置文件来实现多环境配置是一种常见且推荐的做法。这种方式可以帮助你根据不同的环境&#xff08;如开发、测试、生产等&#xff09;加载不同的配置&#xff0c;从而实现环境隔离和灵活配置。以下是如何通过…

野火鲁班猫(arrch64架构debian)从零实现用MobileFaceNet算法进行实时人脸识别(一)conda环境搭建

先安装miniconda wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-aarch64.sh chmod x Miniconda3-latest-Linux-aarch64.sh bash Miniconda3-latest-Linux-aarch64.sh source ~/.bashrc conda --version按照MobileFaceNet的github官方指南&#xff0c;需要…

目标检测 Lite-DETR(2023)详细解读

文章目录 迭代高级特征跨尺度融合高效的低层次特征跨尺度融合KDA&#xff1a;Key-aware Deformable Attention 论文翻译&#xff1a; CVPR 2023 | Lite DETR&#xff1a;计算量减少60%&#xff01;高效交错多尺度编码器-CSDN博客 DINO团队的 &#xff08;Lightweight Transfo…

【Git】远程操作

Git 是一个分布式版本控制系统 可以简单理解为&#xff0c;每个人的电脑上都是一个完整的版本库&#xff0c;这样在工作时&#xff0c;就不需要联网 了&#xff0c;因为版本库就在自己的电脑上。 因此&#xff0c; 多个人协作的方式&#xff0c;譬如说甲在自己的电脑上改了文件…

华为云Flexus+DeepSeek征文|基于华为云Flexus云服务的Dify 构建智能客服助手

目录 一、构建智能客服助手应用 二、构建智能客服助手提示词 2.1 什么是智能客服助手&#xff1f; 2.2 生成智能客服助手提示词 三、访问智能客服助手 3.1 智能客服助手发布 3.2 智能客服助手聊天 3.3 开启新会话 四、总结 本篇文章主要基于华为云Flexus云服务的Dify 构…

基于单片机的矩阵键盘与数码管显示实验实践

在单片机开发领域&#xff0c;掌握基础的输入输出控制是迈向复杂项目的关键一步。本次实验聚焦于利用单片机开发板&#xff0c;通过矩阵键盘实现学号后 8 位的输入与数码管显示&#xff0c;旨在掌握数码管显示、软件延时以及键盘扫描及去抖动等核心方法。接下来&#xff0c;就带…

GO语言语法---switch语句

文章目录 基本语法1. 特点1.1 不需要break1.2 表达式可以是任何类型1.3 省略比较表达式1.4 多值匹配1.5 类型switch1.6 case穿透1.7 switch后直接声明变量1.7.1 基本语法1.7.2 带比较表达式1.7.3 不带比较表达式1.7.4 结合类型判断 1.8 switch后的表达式必须与case语句中的表达…

GO语言学习(三)

GO语言学习&#xff08;三&#xff09; GO语言的独特接口可以实现内容和面向对象组织的更加方便&#xff0c;我们从这里来详细的讲解接口&#xff0c;让大家感受一下interface的魅力 interface定义 首先接口是一组方法签名的组合&#xff0c;我们通过接口来实现定义对象的一…

anaconda创建环境出错HTTPS

报错信息 warnings.warn( /home/ti-3/anaconda3/lib/python3.12/site-packages/urllib3/connectionpool.py:1099: InsecureRequestWarning: Unverified HTTPS request is being made to host ‘repo.anaconda.com’. Adding certificate verification is strongly advised. Se…

Android 自定义SnackBar和下滑取消

如何自定义SnackBar 首先我们得了解SnackBar的布局&#xff1a; 之前我看有一些方案是获取内部的contentLayout&#xff0c;然后做一些处理。但是现在已经行不通了&#xff1a; RestrictTo(LIBRARY_GROUP) public static final class SnackbarLayout extends BaseTransientB…

JavaScript性能优化实战(13):性能测试与持续优化

在前面的系列文章中,我们探讨了各种JavaScript性能优化的方法和实战案例。然而,优化工作不应仅是一次性的努力,而应当成为开发流程中的常态。本篇将聚焦于如何建立系统化的性能测试体系,并实现持续的性能优化机制,确保应用长期保持出色的性能表现。 前端性能测试体系构建…

《告别低效签约!智合同如何用AI重构商业“契约时代”》​​——解析智能合约技术的爆发与行业变革

在数字化浪潮奔涌的当下&#xff0c;合同作为商业活动的核心枢纽&#xff0c;正经历着智能化的深度变革。智合同-合同智能应用这一创新模式&#xff0c;犹如一颗璀璨的新星&#xff0c;在商业领域的天空中绽放出独特光芒&#xff0c;深刻改变着人们对合同管理与应用的认知和实践…