2、开发环境搭建:Linux下GStreamer安装、Python绑定(Gst-Python)安装、验证开发环境、常用调试工具(gst-inspect-1.0、gst-launch-1.0)
好,咱们正式开始动手了。
这一章,我带你把开发环境搭起来。说白了,就是让GStreamer能在你的Linux机器上跑起来,并且能用Python调得动它。
我个人习惯用Ubuntu 20.04或22.04 LTS。如果你用的是CentOS或Debian,命令稍微改改就行,核心思路一样。
2.1 安装GStreamer核心库
先装核心库。GStreamer的组件分得很细,有核心库、基础插件、好插件、坏插件、丑插件……嗯,名字就是这么起的。
打开终端,执行:
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
这里我解释一下:
- base:基础插件,比如文件源、音频转换器。必装。
- good:质量好、许可证友好的插件。比如常见的视频解码器。
- bad:名字叫bad,其实只是维护得不够好,或者许可证有点争议。很多实用功能在这里。
- ugly:许可证有问题的,比如MP3、H.264的一些编码器。做多路同步时,经常需要。
- libav:基于FFmpeg的封装,能解几乎一切格式。
2.2 安装Python绑定(Gst-Python)
接下来装Python绑定。GStreamer的Python接口叫Gst-Python,它基于GObject Introspection。
执行:
sudo apt install python3-gi python3-gi-cairo gir1.2-gstreamer-1.0 gir1.2-gst-plugins-base-1.0
这里要注意:
python3-gi是Python的GObject Introspection绑定。gir1.2-gstreamer-1.0是GStreamer的接口描述文件。
装完之后,你可以用pip再装一个辅助库,方便调试:
pip3 install python-gst-1.0
不过说实话,这个不是必须的。核心绑定装好就够了。
2.3 验证开发环境
环境搭没搭好,跑个简单测试就知道了。
先试命令行工具:
gst-launch-1.0 videotestsrc ! autovideosink
如果弹出一个窗口,显示彩条测试画面,恭喜你——GStreamer核心跑起来了。
再试Python绑定。写一个最简单的脚本:
import gi
gi.require_version('Gst', '1.0')
from gi.repository import Gst
Gst.init(None)
pipeline = Gst.parse_launch("videotestsrc ! autovideosink")
pipeline.set_state(Gst.State.PLAYING)
# 等5秒后退出
import time
time.sleep(5)
pipeline.set_state(Gst.State.NULL)
保存为 test_gst.py,然后运行:
python3 test_gst.py
如果同样弹出彩条窗口,说明Python绑定也OK了。
gi.repository.Gst 找不到的错误,八成是 gir1.2-gstreamer-1.0 没装对。我曾经在虚拟环境里折腾了半天,最后发现是系统Python和虚拟环境的GI版本不一致。
2.4 常用调试工具
GStreamer自带两个非常实用的命令行工具,我几乎每天都会用到。
2.4.1 gst-inspect-1.0
这个工具用来查看插件信息。比如你想知道系统里有哪些视频源:
gst-inspect-1.0 | grep source
想看某个插件的详细参数:
gst-inspect-1.0 videotestsrc
它会输出这个插件的所有属性、信号、Pad信息。调试时特别有用。
举个例子,你想知道videotestsrc能生成什么图案:
gst-inspect-1.0 videotestsrc | grep pattern
输出会告诉你,pattern属性可以设置成smpte、ball、snow等等。
2.4.2 gst-launch-1.0
这个工具用来快速搭建和测试管道。语法就是GStreamer的管道描述语言。
几个常用例子:
- 播放视频文件:
gst-launch-1.0 filesrc location=test.mp4 ! decodebin ! autovideosink - 录制摄像头:
gst-launch-1.0 v4l2src ! videoconvert ! autovideosink - 查看管道状态:加
-v参数会打印详细信息
No such element—— 插件没装Internal data flow error—— 格式不匹配,需要加videoconvert或audioconvertNegotiation failed—— 两个插件的格式谈不拢
2.5 环境检查清单
为了方便你对照,我列了一个检查表:
| 检查项 | 命令 | 预期结果 |
|---|---|---|
| GStreamer版本 | gst-launch-1.0 --version |
显示1.16或更高版本 |
| Python绑定 | python3 -c "import gi; gi.require_version('Gst','1.0'); from gi.repository import Gst; print('OK')" |
输出OK |
| 基础插件 | gst-inspect-1.0 videotestsrc |
显示插件详细信息 |
| 视频输出 | gst-launch-1.0 videotestsrc ! autovideosink |
弹出彩条窗口 |
gst-launch-1.0 videotestsrc ! ximagesink。
2.6 小结
到这一步,你的开发环境应该已经就绪了。
核心就三件事:装GStreamer库、装Python绑定、验证能跑通。工具方面,记住gst-inspect-1.0查插件、gst-launch-1.0跑管道,这两个命令会陪你走完整个课程。
下一章,我们开始写第一个真正的多路视频管道。到时候你会发现,环境搭好了,后面的事情就顺了。