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.pswp.cn/news/906699.shtml

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

相关文章

Spring Boot与Kafka集成实践:实现高效消息队列

Spring Boot与Kafka集成实践 引言 在现代分布式系统中&#xff0c;消息队列是实现异步通信和解耦的重要组件。Apache Kafka作为一种高性能、分布式的消息队列系统&#xff0c;被广泛应用于大数据和实时数据处理场景。本文将介绍如何在Spring Boot项目中集成Kafka&#xff0c;…

Linux PXE批量装机+无人值守技术(自动化装机)

目录 PXE所需条件 服务端所需服务 客户端所需功能 1.准备系统安装rpm仓库 (1)安装vsftpd服务 (2)启动并设置开机自启 (3)准备yum仓库文件 2.安装配置dhcpd服务 (1)安装dhcoo软件包 (2)配置dhcp服务 (3)启动并设置开机自启 3.部署TFTP服务 (1)安装软…

linux_cmake的笔记

include_directories()的使用 今天在运行一个cmakelist.txt如下所示时候&#xff0c;发现一个问题&#xff1a; cmake_minimum_required(VERSION 3.28) project(l_trajectoryError CXX) option(USE_UBUNTU_20 "Set to ON if you are using Ubuntu 20.04" OFF) find…

论文略读:If Multi-Agent Debate is the Answer, What is the Question?

202502 arxiv 1 intro 多智能体辩论&#xff08;Multi-Agent Debate, MAD&#xff09;&#xff1a;通过让多个智能体在大模型推理时展开多轮辩论&#xff0c;可提升生成内容的事实准确性和推理质量 但论文认为&#xff0c;目前多智能体辩论在大多数情况下不敌简单的单智能体方…

使用RUST在Arduino上进行编程(MacOS,mega板)

近年来&#xff0c;RUST成为了嵌入式编程的热门语言&#xff0c;本文通过实现&#xff08;1&#xff09;LED闪灯&#xff0c;以及&#xff08;2&#xff09;在console&#xff08;终端&#xff09;实现“Hello Rust World”两项功能来完成实操的入门。 深入学习可以参考RUST语言…

(15)关于窗体的右键菜单的学习与使用,这关系到了信号与事件 event

&#xff08;1&#xff09;起因来源于 4.11 的老师讲的例题&#xff0c;标准的&#xff0c;规范的使用右键菜单的代码及参考资料如下&#xff1a; &#xff08;2&#xff09; 接着脱离上面的那个复杂的环境&#xff0c;用简单的例子测试一下 &#xff1a; 说明老师讲的都是对…

C 语言学习笔记(指针4)

内容提要 指针 函数指针与指针函数二级指针 指针 函数指针与指针函数 函数指针 定义 函数指针本质上是指针&#xff0c;是一个指向函数的指针。函数都有一个入口地址&#xff0c;所谓指向函数的指针&#xff0c;就是指向函数的入口地址。&#xff08;这里的函数名就代表…

C#串口打印机:控制类开发与实战

C#串口打印机&#xff1a;控制类开发与实战 一、引言 在嵌入式设备、POS 终端、工业控制等场景中&#xff0c;串口打印机因其稳定的通信性能和广泛的兼容性&#xff0c;仍是重要的数据输出设备。本文基于 C# 语言&#xff0c;深度解析一个完整的串口打印机控制类Printer&…

通过vue-pdf和print-js实现PDF和图片在线预览

npm install vue-pdf npm install print-js <template><div><!-- PDF 预览模态框 --><a-modal:visible"showDialog":footer"null"cancel"handleCancel":width"800":maskClosable"true":keyboard"…

SQL解析工具JSQLParser

目录 一、引言二、JSQLParser常见类2.1 Class Diagram2.2 Statement2.3 Expression2.4 Select2.5 Update2.6 Delete2.7 Insert2.8 PlainSelect2.9 SetOperationList2.10 ParenthesedSelect2.11 FromItem2.12 Table2.13 ParenthesedFromItem2.14 SelectItem2.15 BinaryExpressio…

安装完dockers后就无法联网了,执行sudo nmcli con up Company-WiFi,一直在加载中

Docker服务状态检查 执行 systemctl status docker 确认服务是否正常 若未运行&#xff0c;使用 sudo systemctl start docker && sudo systemctl enable docker 网络配置冲突 Docker会创建docker0虚拟网桥&#xff0c;可能与宿主机网络冲突 检查路由表 ip route sho…

Docker 运维管理

Docker 运维管理 一、Swarm集群管理1.1 Swarm的核心概念1.1.1 集群1.1.2 节点1.1.3 服务和任务1.1.4 负载均衡 1.2 Swarm安装准备工作创建集群添加工作节点到集群发布服务到集群扩展一个或多个服务从集群中删除服务ssh免密登录 二、Docker Compose与 Swarm 一起使用 Compose 三…

软媒魔方——一款集合多种系统辅助组件的软件

停更4年&#xff0c;但依旧吊炸天&#xff01; 亲们&#xff0c;是不是觉得电脑用久了就像老牛拉车&#xff0c;慢得让人着急&#xff1f;别急&#xff0c;我今天要给大家安利一个超好用的电脑优化神器——软媒魔方&#xff01; 软件介绍 首先&#xff0c;这货真心是免费的&a…

upload-labs通关笔记-第19关文件上传之条件竞争

目录 一、条件竞争 二、源码分析 1、源码分析 2、攻击原理 3、渗透思路 三、实战渗透 1、构造脚本 2、制作图片马 3、获取上传脚本URL 4、构造访问母狼脚本的Python代码 5、bp不断并发上传母狼图片马 &#xff08;1&#xff09;开启专业版bp &#xff08;2&#xf…

分布式消息队列kafka详解

分布式消息队列kafka详解 引言 Apache Kafka是一个开源的分布式事件流平台&#xff0c;最初由LinkedIn开发&#xff0c;现已成为处理高吞吐量、实时数据流的行业标准。Kafka不仅仅是一个消息队列&#xff0c;更是一个完整的分布式流处理平台&#xff0c;能够发布、订阅、存储…

uni-app(3):互相引用

1 绝对路径和相对路径 在日常开发中&#xff0c;经常会遇到使用绝对路径还是相对路径的问题&#xff0c;下面我们介绍下这两种路径。 1.1 绝对路径 绝对路径&#xff1a;是指从项目根目录开始的完整路径。它用于指定文件或目录的确切位置。绝对路径通常以斜杠&#xff08;/&am…

python与flask框架

一、理论 Flask是一个轻量级的web框架&#xff0c;灵活易用。提供构建web应用所需的核心工具。 Flask依赖python的两个库 Werkzeug&#xff1a;flask的底层库&#xff0c;提供了WSGI接口、HTTP请求和响应处理、路由等核心功能。 Jinja2&#xff1a;模板引擎&#xff0…

esp32-idf框架学习笔记/教程

esp32型号: 环境搭建 安装:就按这个来,别的试了好多次都不行,这个一次成功!!!! vscode下ESP32开发环境配置&#xff08;100%成功&#xff09;_哔哩哔哩_bilibili esp芯片的两种模式: ESP32 固件烧录教程_哔哩哔哩_bilibili 1.运行模式 2.下载模式 esp32s3程序下载 1.数据…

VKontakte(VK)注册教程

VKontakte&#xff08;简称VK&#xff09;是俄罗斯最大的社交网络平台&#xff0c;类似于Facebook&#xff0c;用户可以通过它进行社交、分享图片、视频、音乐等内容&#xff0c;并参与各类社群讨论&#xff0c;是与俄罗斯及其他东欧地区的朋友建立联系的便捷平台。对于做俄罗斯…

STM32+ESP8266+ONENET+微信小程序上传数据下发指令避坑指南

之前只做过类似的但是以为这种烂大街的功能应该不难结果还是踩了不少坑&#xff0c;记录几个需要注意的点 首先贴一个非常有用的视频&#xff0c;里面讲的很详细&#xff0c;给的资料也很全【【新版OneNet云平台】STM32ESP8266上传数据&#xff0c;简单易上手&#xff01;】 h…