2、开发环境搭建:Linux下GStreamer安装、Python绑定(Gst-Python)安装、验证开发环境
好,咱们正式开始动手了。这一章我带你搭环境。
说实话,做流媒体开发,环境搭不好,后面全是坑。我自己刚入行那会儿,光装GStreamer就折腾了两天,版本冲突、依赖缺失、Python绑定死活找不到……嗯,后来才发现是源的问题。所以这一章,我尽量把踩过的坑都给你指出来。
2.1 Linux下GStreamer安装
我个人习惯用Ubuntu,如果你用的是CentOS或Debian,命令稍微改一下就行,核心思路一样。
2.1.1 通过包管理器安装(推荐)
这是最省心的方式。GStreamer在主流发行版里都有现成的包,直接装就好。
# Ubuntu / Debian
sudo apt update
sudo apt install libgstreamer1.0-0 gstreamer1.0-tools gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav
# CentOS / RHEL / Fedora
sudo yum install gstreamer1 gstreamer1-plugins-base gstreamer1-plugins-good gstreamer1-plugins-bad-free gstreamer1-plugins-ugly-free
这里我多说一句:plugins-bad和plugins-ugly 这两个包名字听着吓人,其实不是代码质量差。bad是指还没完全稳定或专利有争议的插件,ugly是指那些版权限制比较严格的编解码器(比如MP3、H.264)。做录制回放,这两个基本必装。
gstreamer1.0-vaapi,CentOS下是 gstreamer1-vaapi。
2.1.2 从源码编译安装(进阶)
如果你需要定制化编译选项,或者想用最新的开发版,那就得自己编译了。我曾经为了一个特定的RTSP补丁,不得不从源码编译,那叫一个酸爽。
# 安装编译依赖
sudo apt install build-essential meson ninja-build libglib2.0-dev liborc-dev
# 下载源码
git clone https://gitlab.freedesktop.org/gstreamer/gstreamer.git
cd gstreamer
# 编译(meson是GStreamer现在推荐的构建系统)
meson build
ninja -C build
sudo ninja -C build install
编译时间比较长,大概十几分钟。如果你只是做应用开发,我个人建议用包管理器,省时间。
2.2 Python绑定(Gst-Python)安装
咱们课程主要用Python写应用,所以Gst-Python必须装好。
2.2.1 安装Gst-Python
# Ubuntu / Debian
sudo apt install python3-gi python3-gi-cairo gir1.2-gstreamer-1.0
# CentOS / RHEL / Fedora
sudo yum install python3-gobject gstreamer1-python3-plugin-loader
这里有个容易踩的坑:gir1.2-gstreamer-1.0 这个包是GObject Introspection的绑定文件,没有它,Python里就找不到GStreamer的API。我曾经在一台新服务器上折腾了半天,最后发现是漏了这个包。
dpkg -L gir1.2-gstreamer-1.0 查看它到底装了哪些文件,方便排查问题。
2.2.2 验证Python绑定是否正常
写个最简单的脚本测试一下:
import gi
gi.require_version('Gst', '1.0')
from gi.repository import Gst
Gst.init(None)
# 打印版本信息
print("GStreamer版本:", Gst.version_string())
# 创建一个简单的pipeline
pipeline = Gst.Pipeline.new("test-pipeline")
print("Pipeline创建成功:", pipeline.get_name())
如果输出类似下面这样,说明绑定成功了:
GStreamer版本: GStreamer 1.20.3
Pipeline创建成功: test-pipeline
2.3 验证开发环境
光能import还不够,咱们得确认核心功能都能用。
2.3.1 检查插件列表
用 gst-inspect-1.0 命令查看已安装的插件:
# 查看所有插件
gst-inspect-1.0 | grep -i "video\|audio\|rtsp\|rtmp\|filesink\|filesrc"
# 查看特定插件详情
gst-inspect-1.0 filesink
gst-inspect-1.0 rtspclientsink
我个人习惯先检查这几个关键插件:filesink(文件写入)、rtspclientsink(RTSP推流)、h264parse(H.264解析)、mp4mux(MP4封装)。如果这些都在,录制存储和回放的基础就有了。
2.3.2 测试录制功能
咱们用命令行快速验证一下录制能力:
# 从摄像头录制10秒视频到文件
gst-launch-1.0 v4l2src ! videoconvert ! x264enc ! mp4mux ! filesink location=test.mp4 -e
# 播放刚才录制的文件
gst-launch-1.0 filesrc location=test.mp4 ! qtdemux ! h264parse ! avdec_h264 ! videoconvert ! autovideosink
如果画面能正常显示,说明录制和回放链路都通了。
- Python能import Gst并创建pipeline
- gst-inspect-1.0能列出关键插件
- gst-launch-1.0能完成录制和播放
2.3.3 常见问题排查
| 问题现象 | 可能原因 | 解决方法 |
|---|---|---|
Python报错 gi.repository.Gst not found |
gir1.2-gstreamer-1.0未安装 | 安装对应包 |
gst-launch-1.0 提示 No such element |
缺少对应插件包 | 安装 gstreamer1.0-plugins-* |
| 录制文件无法播放 | 缺少解码器或封装格式不对 | 检查 mp4mux 和 avdec_h264 是否可用 |
嗯,到这里环境就算搭好了。下一章咱们开始写真正的录制代码,到时候你会看到这些插件是怎么串起来的。