Debian 9.4下GStreamer命令行工具缺失autovideosink问题求助
问题梳理
你遇到的这个情况确实有点反常:
- 包含
autovideosink的C程序可以正常编译并运行 - 但执行
gst-inspect-1.0 autovideosink时,返回No such element or plugin 'autovideosink' - 运行
gst-launch-1.0 videotestsrc ! autovideosink时,报错WARNING: erroneous pipeline: no element 'autovideosink' - 系统为Debian 9.4,已通过
sudo apt-get install libgstreamer1.0-0 gstreamer1.0-plugins-base gstreamer1.0-plugins-good ...安装了GStreamer基础组件
排查与解决步骤
1. 检查插件路径环境变量
命令行工具和你的C程序可能使用了不同的插件搜索路径。先查看当前命令行环境下的GStreamer插件路径:
echo $GST_PLUGIN_PATH
如果该变量为空,或者未包含autovideosink所在的目录,那大概率是问题所在。autovideosink属于gstreamer1.0-plugins-good包,它的插件通常安装在/usr/lib/x86_64-linux-gnu/gstreamer-1.0/(64位系统)或/usr/lib/i386-linux-gnu/gstreamer-1.0/(32位系统)。
可以先临时设置环境变量测试:
export GST_PLUGIN_PATH=/usr/lib/x86_64-linux-gnu/gstreamer-1.0/
设置完成后再运行gst-inspect-1.0 autovideosink,如果能正常找到元素,就把这个环境变量添加到~/.bashrc或/etc/profile中,实现永久生效。
2. 重新安装good插件包
有可能gstreamer1.0-plugins-good包未完整安装,或者存在文件损坏的情况。可以彻底卸载后重新安装:
sudo apt-get purge gstreamer1.0-plugins-good sudo apt-get install gstreamer1.0-plugins-good
安装完成后,再次用gst-inspect-1.0检查是否能找到autovideosink。
3. 确认版本一致性
要确保你的C程序链接的GStreamer库,与命令行工具使用的版本一致。分别查看:
- 命令行工具版本:
gst-inspect-1.0 --version - 程序链接的库版本:用
ldd命令查看程序二进制文件,比如:
ldd 你的程序文件名 | grep gstreamer
如果版本不一致,就会出现这种行为差异,此时需要确保系统内的GStreamer组件版本统一。
4. 手动注册插件
有时候插件未被正确注册,可尝试手动触发注册操作:
sudo gst-inspect-1.0 --register
该命令会重新扫描所有插件并更新注册信息,完成后再测试命令行工具是否能找到autovideosink。
总结
这种命令行与程序行为不一致的情况,大多是环境变量配置或插件注册的小问题,按照上述步骤逐一排查,应该很快就能解决。
内容的提问来源于stack exchange,提问作者M. P.

