Gstreamer工具以及MPP插件
本章节主要介绍Gstreamer工具及相关插件测试方法。
1. Gstreamer简介
GStreamer是一个开源的多媒体框架,用于构建音频和视频处理应用程序。它提供了丰富的功能,可以处理各种格式的媒体流,包括录制、播放、编辑和流式传输。通过其插件架构,GStreamer支持许多编解码器和容器格式,使开发者能够轻松地构建复杂的多媒体应用,适用于桌面、嵌入式系统和服务器环境。
2. Gstreamer常用命令
2.1. gst-launch-1.0
gst-launch-1.0
是GStreamer框架中的一个命令行工具,用于快速创建和测试多媒体管道。它允许用户构建数据流管道,以处理音频和视频数据,进行实时流处理、编码、解码、转码等操作。简单示例如下:
# 使用videotestsrc生成一段视频,并使用xvimagesink显示
gst-launch-1.0 videotestsrc ! xvimagesink
2.2. gst-play-1.0
gst-play-1.0
是GStreamer的一个简单媒体播放器工具,旨在快速播放音频和视频文件。它支持多种媒体格式,并能够使用 GStreamer 的插件架构进行扩展。通过命令行参数,用户可以轻松地播放本地文件或流式媒体,非常适合测试和演示多媒体功能。
# 播放test.mp4,并通过xvimagesink显示
gst-play-1.0 test.mp4 --videosink=xvimagesink
2.3. gst-inspect-1.0
gst-inspect-1.0
是 GStreamer 的一个工具,用于查看 GStreamer 中可用的插件、元素和它们的属性。通过这个工具,用户可以获取有关特定插件的信息,例如支持的格式、属性、信号和功能。
# 不带任何参数,列出所有插件
gst-inspect-1.0
# 列出xvimagesink插件的所有信息
gst-inspect-1.0 xvimagesink
3. Gstreamer常用插件
3.1. Source
GStreamer的Source插件用于生成和提供媒体数据流。它们可以从不同的数据源读取音频或视频,比如文件、网络、设备等。常见的Source插件包括文件源(如 filesrc
)、网络源(如 tcpserversrc
)、设备源(如 v4l2src
),这些插件允许开发者灵活地构建多媒体管道,以满足不同的应用需求。通过配置Source插件,用户可以轻松获取和处理多种类型的媒体数据。
3.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
3.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
3.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
3.1.4. rtspsrc和rtspclientsink
rtspsrc
和rtspclientsink
是GStreamer中用于处理RTSP流的两个不同元素。
rtspsrc
:这是一个源元素,用于接收RTSP流。它可以从RTSP服务器拉取音视频流,并将其传递给管道的下游元素进行处理。rtspclientsink
:这是一个接收元素,用于将处理后的音视频流发送到RTSP服务器。
系统默认没有安装插件,需要进行安装:
# 安装插件
sudo apt install gstreamer1.0-rtsp
具体使用方法,参考本章节推流、拉流部分。
3.2. Sink
GStreamer的Sink插件用于接收和处理媒体数据流,通常用于输出到不同的目标,例如文件、音频设备、视频显示等。常见的Sink插件包括文件接收器(如filesink
)、音频输出(如alsasink
)、视频显示(如ximagesink
)。这些插件使开发者能够灵活地将媒体数据导出到所需的格式或设备,方便实现多媒体播放和录制功能。
3.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
3.2.2. fakesink
将收到的数据全部丢弃,示例如下:
gst-launch-1.0 filesrc location=/tmp/test ! fakesink
3.2.3. xvimagesink
视频Sink,接收视频并显示,使用X11接口实现,示例如下:
gst-launch-1.0 videotestsrc ! xvimagesink
3.2.4. kmssink
视频Sink,接收视频并显示,使用kms接口实现,需要独占硬解图层,示例如下:
gst-launch-1.0 videotestsrc ! kmssink
# 常用命令
connector-id #指定屏幕
plane-id #指定硬件图层
render-rectangle #指定渲染范围
3.2.5. waylandsink
视频Sink,接收视频并显示,使用wayland接口实现,示例如下:
gst-launch-1.0 videotestsrc ! waylandsink
3.2.6. rkximagesink
视频Sink,接收视频并显示,使用drm接口实现零拷贝等功能,性能较好,但需要独占硬解图层。示例如下:
gst-launch-1.0 videotestsrc ! rkximagesink
3.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
4. Rockchip MPP插件
基于MPP的硬件编解码插件,基于Gstreamer原有GstVideoDecoder
类和GstVideoEncoder
类开发。
解码支持的格式
- JPEG
- MPEG
- VP8
- VP9
- H264
- H265