乐于分享
好东西不私藏

Gstreamer安装与基础教程

Gstreamer安装与基础教程
一、Gstreamer简介:

GStreamer 是一个开源的、跨平台的多媒体框架,用于构建各种多媒体处理应用。从简单的媒体播放器、视频编辑器,到复杂的流媒体服务器、视频会议系统,GStreamer 都能胜任。

简单来说,GStreamer 就像一个“多媒体乐高”:它提供了大量的功能模块(称为“元素”),你可以像搭积木一样将这些模块连接起来,构建出一条完整的媒体处理流水线(称为“管道”)。

Gstreamer架构

Gstreamer是基于管线的架构,管线由若个各元件支撑,例如source元件,处理元件和输出元件。元件之间是以pad作为接口完成数据的连接。

图中的元件都是以插件的形式实现的,Gstreamer中实现了多种元件插件,各部分元件对应的插件如下图所示:

Gstreamer中的重要概念

1. 元件模型(Element Model)

GStreamer 通过一系列 Element(元件) 组成完整的媒体管线,每个 Element 执行特定功能,例如读取文件、解码、视频转换或输出显示。

2. Pad 与 Caps

  • Pad(插口)
     是 Element 之间的数据接口,分为src pad(输出) 与 sink pad(输入)
  • Caps(Capabilities)
     描述了数据的类型和格式,用于确保两端连接兼容。

当两个元件连接时,会进行 Caps 协商(Capability Negotiation),确认视频流格式(如 NV12、YUYV、RGB)一致。

3. Pipeline(管线)

GStreamer 以「管线」为运行单元:多个 Element 顺序连接,形成一个端到端的数据处理路径。整个管线由GstPipeline 对象管理,可以随时启动、暂停、停止。

录制摄像头的管线流程如下所示,其中bin为各依次排列的元件的组成的容器元件。

二、安装教程
Gstreamer链接:https://gstreamer.freedesktop.org/download/,z在王章中选择合适的版本进行安装,windows下推荐安装MSVC版本。
安装完成后,将bin目录添加到环境变量path中,Gstreamer默认安装路径为:C:\Program Files
bin目录下提供了多个可供使用的可执行文件,具体说明如下:
三、运行测试:
1、打开并播放指定的视频
方法1:使用gst-play-1.0
类似于ffplay,gst-play-1.0是一个媒体播放程序,可以直接播放媒体文件。
gst-play-1.0 video-audio-stereo.mp4
方法2:使用gst-launch构建媒体播放管线。
gst-launch-1.0 filesrc location=video-audio-stereo.mp4 ! qtdemux ! h264parse ! avdec_h264 ! videoconvert ! autovideosink
说明:
这个指令是只播放视频,而没有音频,命令通过管道的方式完成从读取、解析,解码,转换到渲染的一个完整流程:
filesrc: 读文件qtdemux: 解封装h264parse: 解析h264avdec_h264: 解码h264videoconvert: 格式转换autovideosink: 窗口显示
方法3:使用gst-launch-1.0+playbin
这种方法等效于方法2,playbin是将从filesrc到audiovideosink这完整管线中的各个元件整理为一个可直接调用的元件容器,操作更为便利。因此,在实际开发时,我们可以考虑将多个元件添加到一个元件容器中,作为一个可调用的元件组合。
gst-launch-1.0.exe playbin uri=file:///D://video-audio-stereo.mp4
说明:
使用uri指定文件路径,如果是本地文件则使用“file:///文件路径”,如果是网络文件uri=网络地址,例如uri=https://example.com/text.mp4。
2、打开本地摄像头
gst-launch-1.0 mfvideosrc ! video/x-raw,width=1280,height=720 ! videoconvert ! autovideosink
说明:
mfvideosrc:表示本地摄像头,linux下该参数为v4l2src。
video/x-raw:表示未压缩的视频,使用摄像头时必须用这个来指定视频格式,在参数后方和下一个管道前可以设置视频分辨率和帧率等参数。
3. 录制摄像头画面
gst-launch-1.0 -e  mfvideosrc ! video/x-raw,width=1280,height=720 ! videoconvert ! x264enc ! mp4mux ! filesink location=my_record.mp4
说明:
- e: 告诉GStreamer在收到中断信号时,等待所有数据流处理完毕(即到达文件末尾)后再优雅地退出。避免使用Ctrl+c结束程序后,MP4文件无法播放。
filesink:将数据以文件的方式输出,即录制到文件。
4. rtsp推流
gst-launch-1.0 mfvideosrc ! video/x-raw,width=1280,height=720 ! videoconvert ! x264enc tune=zerolatency ! h264parse ! rtspclientsink location=rtsp://server/stream
说明:
rtspclientsink:客户端推rtsp流输出元件。