news 2026/4/22 7:21:13

瑞芯微(EASY EAI)RV1126B gstreamer使用介绍

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
瑞芯微(EASY EAI)RV1126B gstreamer使用介绍

1. GStreamer介绍

GStreamer 是用来构建流媒体应用的开源多媒体框架(framework)。其目标是要简化音/视频应用程序的开发。

1.1 基本概念

管线(pipeline):又称为管道或流水线,是一个完整的GStreamer工作流,即:一个多媒体任务处理的基本单元(必须要以source类【元素】开头,以sink类【元素】结尾)

元素(element):GStreamer工作流中的每一个节点,例如source类元素、filter类元素、sink类元素。元素与元素之间通过【管道】进行数据传递(而【管道】又通过【衬垫】与【元素】进行连接)。

衬垫(Pad):数据通过衬垫进入或离开这个元素,输入衬垫叫sinkPads,输出衬垫叫srcPads,每个元素都会至少一个衬垫,如source类元素和sink类元素。

有些元素会有多个衬垫,比如:解复用器(demuxer)和分流器(tee)。

1.2 Gstreamer工具

gst-launch-1.0:gst-launch-1.0是Gstreamer中一个常用和强大的工具,用于创建并启动多媒体管道图。它可以从标准命令行读取管道图的描述,用户可以在命令行中直接运行该描述。它不需要复杂的编程或脚本,使用户方便地测试和调试管道图。

gst-inspect-1.0:gst-inspect-1.0可以打印出可用 GStreamer 插件的信息、特定插件的信息或特定元素的信息。当在没有PLUGIN或ELEMENT参数的情况下执行时,gst-inspect-1.0将打印所有插件和元素的列表以及sumary。当使用PLUGIN或ELEMENT参数执行时,gst-inspect-1.0将打印有关该插件或元素的信息。

1.3 Gstreamer调试信息

使用GST_DEBUG环境变量,可查看调用Gstreamer时所产生的打印信息。比如在终端输入以下命令。

export GST_DEBUG=2

如果想看到更详细的信息,调试等级可设为3。

2. 编码

下文用到的video节点,可以通过以下几篇文章查询:

MIPI-CSI:《外设接口使用说明/摄像头/MIPI-CSI摄像头》

USB Camera:《外设接口使用说明/摄像头/USB摄像头》

2.1 保存录像

通过串口调试或ssh调试,进入开发板环境:

经查询,cam0的设备节点是video23。
输入下方命令,即可对video23节点进行录像。效果如下图所示。

gst-launch-1.0 v4l2src device=/dev/video23 ! mpph264enc ! mpegtsmux ! filesink location=./1.ts -e

按下组合键【Ctrl+C】后即可退出录像,并得到一个ts文件(MPEG-TS:MPEG Transport Stream)。可在PC端Ubuntu系统用scp的方式从板卡拉取ts文件,并且可以通过vlc对其解码播放。

调整帧率录制:

gst-launch-1.0 v4l2src device=/dev/video23 ! video/x-raw,framerate=30/1 ! videoconvert ! mpph264enc ! mpegtsmux ! filesink location=./1.ts -e

调整分辨率和帧率录制:

gst-launch-1.0 v4l2src device=/dev/video23 ! video/x-raw,width=1280,height=800,framerate=30/1 ! videoconvert ! mpph264enc ! mpegtsmux ! filesink location=./1.ts -e

除了ts格式,还有通过下方命令录制其它格式的视频:

-flv格式录制:

gst-launch-1.0 v4l2src device=/dev/video23 ! mpph264enc ! h264parse ! flvmux ! filesink location=./1.flv -e

-裸流录制:

gst-launch-1.0 v4l2src device=/dev/video23 ! mpph264enc ! filesink location=./1.h264 -e

2.2 UDP推流

首先创建一个名为gst_test.sdp的文件。

用记事本打开此文件,添加如下内容(注意两个IP地址均为用户电脑的IP地址)

v=0 o=- 0 0 IN IP4 192.168.3.191 s=H.264 Stream from RK3576 c=IN IP4 192.168.3.191 t=0 0 m=video 8554 RTP/AVP 96 a=rtpmap:96 H264/90000

然后通过vlc打开刚才设置的文件,如下图所示:

通过adb shell进入【开发板环境】,输入下方命令(注意命令中的IP地址为用户电脑的IP地址),即可对video节点编码,并通过UDP推流到PC的vlc上。

gst-launch-1.0 v4l2src device=/dev/video23 ! video/x-raw,framerate=30/1 ! mpph264enc ! h264parse ! rtph264pay config-interval=1 ! queue max-size-buffers=100 leaky=downstream ! udpsink host=192.168.3.191 port=8554 sync=false

执行现象如下:

2.3 rtsp服务器

如果要用gstreamer搭建rtsp服务器,则需要额外的库以及第三方基于此库开发的gstreamer应用。

首先,用apt-get安装rtspServer相关的库,命令如下:

sudo apt-get install libgstrtspserver-1.0-dev

安装【成功】后,获取rtspServer应用的源码,命令如下:

wget https://raw.githubusercontent.com/GStreamer/gst-rtsp-server/1.14/examples/test-launch.c

然后通过下方命令编译此源码:

gcc test-launch.c -o test-launch $(pkg-config --cflags --libs gstreamer-1.0 gstreamer-rtsp-server-1.0)

成功生成test-launch后,通过下方命令,运行此rtspServer。

./test-launch "v4l2src device=/dev/video23 ! mpph264enc ! rtph264pay name=pay0 pt=96"

最后用vlc通过8554端口拉取rtsp流。

若要指定分辨率和帧率,可以采用下方的例子:

./test-launch "v4l2src device=/dev/video23 ! video/x-raw,width=1920,height=1080,framerate=30/1 ! videoconvert ! mpph264enc ! rtph264pay name=pay0 pt=96"

2.4 注意事项

编码时要注意编码帧率,不能超过编码格式的最大能力。(假如编h.264的最大帧率只能到30帧,那么给h.264编到60帧。无论是录制还是推流,再解码端都会发生异常)

3. 解码

3.1 录像文件解码

如果录像文件名为1.ts,并且位于/userdata/目录中,就执行下方命令即可用gstreamer解码并播放。否则需要调整一下文件位置。

命令执行后,桌面系统会出现一个窗口,并播放文件的内容,效果如下所示。

gst-launch-1.0 filesrc location=/userdata/1.ts ! tsdemux ! queue ! h264parse ! mppvideodec ! videoflip method=1 ! autovideosink

注:如果无法满屏播放,请参考一下本文的==2.1保存录像==章节,调整一下分辨率。

同样文件在/userdata/目录中,播放flv格式视频:

gst-launch-1.0 filesrc location=./1.flv ! flvdemux ! h264parse ! mppvideodec ! videoconvert ! videoflip method=1 ! autovideosink

播放h.264裸流视频:

gst-launch-1.0 filesrc location=/userdata/1.h264 ! h264parse ! mppvideodec ! videoflip method=1 ! autovideosink sync=false

3.2 rtsp拉流解码

执行下方命令,即可对一个地址为rtsp://admin:a12345678@192.168.5.68的IPCamera进行拉流并显示。

gst-launch-1.0 rtspsrc location=rtsp://admin:a12345678@192.168.5.68 ! rtph264depay ! h264parse ! mppvideodec ! videoflip method=1 ! autovideosink sync=false

命令执行后,MIPI-DSI屏上会出现一个窗口,并播放IPCamera的内容,效果如下所示。

4. 分流器使用(tee)

tee是一个很常用的元素。比如有一个需要边用屏幕播放摄像头画面,又要边把摄像头的画面录下来应用场景,就需要用到分流器。

命令如下:

gst-launch-1.0 v4l2src device=/dev/video23 ! video/x-raw,framerate=30/1 ! tee name=t t. ! queue ! videoflip method=1 ! autovideosink sync=false t. ! queue ! mpph264enc ! mpegtsmux ! filesink location=./1.ts

节点图解:

命令可拆分为三个部分理解:

第一部分,取视频流:

gst-launch-1.0 v4l2src device=/dev/video23 ! video/x-raw,framerate=30/1 ! tee name=t

第二部分,复制一份视频流到显示窗口(autovideosink):

t. ! queue ! videoflip method=1 ! autovideosink sync=false

第三部分,复制一份视频流到编码器,最终打包成ts文件:

t. ! queue ! mpph264enc ! mpegtsmux ! filesink location=./1.ts

4.1 注意事项

分流器的实现原理是通过CPU复制一份,送入管道,因此如果用于处理原格式(YUV/RGB等)数据,将会加大CPU以及内存的开销。

5. gst-inspect-1.0使用

5.1 列出所有元素

直接输入gst-inspect-1.0命令即可列出所有元素,及其简要描述,如下所示。

gst-inspect-1.0

5.2 查看元素信息

采用gst-inspect-1.0加元素名的方式,即可查看这个元素的详细信息,如下所示。

gst-inspect-1.0 v4l2src

5.3 使用技巧

gst-inspect-1.0可以配合grep来初步筛选自己感兴趣的【元素】,比如pcma格式相关的音频插件元素,如下所示。

gst-inspect-1.0 | grep pcma gst-inspect-1.0 | grep law

6. Gstreamer文档

Gstreamer文档的官网地址:

https://gstreamer.freedesktop.org/documentation/?gi-language=c

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/22 7:14:30

XUnity.AutoTranslator完全指南:5分钟实现Unity游戏实时翻译

XUnity.AutoTranslator完全指南:5分钟实现Unity游戏实时翻译 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 你是否曾经遇到过一款精彩的Unity游戏,但因为语言障碍而无法完全享受游…

作者头像 李华
网站建设 2026/4/22 6:53:05

如何快速对比两个SQL查询结果_使用EXCEPT或差集逻辑

MySQL不支持EXCEPT,需用LEFT JOINIS NULL或NOT EXISTS替代;EXCEPT按位置匹配列,要求列数相同、类型兼容,NULL值影响结果,性能依赖子查询优化。EXCEPT 在 PostgreSQL 和 SQL Server 里能直接用,MySQL 不行My…

作者头像 李华
网站建设 2026/4/22 6:32:45

解析RAL颜色代码与JavaScript

在日常的Web开发中,处理颜色是一个常见任务,尤其是当我们需要从数据中提取特定颜色值时。本文将通过一个实例,演示如何在JavaScript中使用JSON解析和访问RAL颜色代码。 背景介绍 RAL(Reichs-Ausschu fr Lieferbedingungen und Gtesicherung)是一个在工业和建筑设计中广泛…

作者头像 李华
网站建设 2026/4/22 6:12:37

告别GPIO模拟!用STM32G431的SPI+DMA驱动WS2812B灯带,实测5Mbps稳定运行

STM32G431 SPIDMA驱动WS2812B灯带:从时序优化到5Mbps超频实战 当你在深夜调试第37次GPIO模拟时序失败时,或许该换个思路了。WS2812B这颗"倔强"的LED芯片,用传统的GPIO翻转方式驱动时就像在钢丝上跳舞——编译器优化级别、中断响应、…

作者头像 李华