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为各依次排列的元件的组成的容器元件。




gst-play-1.0 video-audio-stereo.mp4gst-launch-1.0 filesrc location=video-audio-stereo.mp4 ! qtdemux ! h264parse ! avdec_h264 ! videoconvert ! autovideosinkfilesrc: 读文件qtdemux: 解封装h264parse: 解析h264avdec_h264: 解码h264videoconvert: 格式转换autovideosink: 窗口显示
gst-launch-1.0.exe playbin uri=file:///D://video-audio-stereo.mp4gst-launch-1.0 mfvideosrc ! video/x-raw,width=1280,height=720 ! videoconvert ! autovideosinkgst-launch-1.0 -e mfvideosrc ! video/x-raw,width=1280,height=720 ! videoconvert ! x264enc ! mp4mux ! filesink location=my_record.mp4gst-launch-1.0 mfvideosrc ! video/x-raw,width=1280,height=720 ! videoconvert ! x264enc tune=zerolatency ! h264parse ! rtspclientsink location=rtsp://server/stream
夜雨聆风