我已经安装了 gstreamer-1.4.0 以创建用于解码视频文件的简单应用程序。我尝试创建的管道看起来很简单:
filesrc location="file.h264" ! decodebin ! filesink location="file.raw"
当我使用 gst-launch-1.0 启动它时,该管道工作正常,但是当我尝试运行用 C 编写的程序时,它找不到名为“decodebin”的工厂。
GstElementFactory *factory;
factory = gst_element_factory_find("decodebin");
if( !factory )
// fail
上面的代码总是失败(工厂为 NULL)。gst-inspect-1.0 正确识别“decodebin”,所以我的猜测是 GST_PLUGIN_PATH 或类似的东西有问题,但我不知道应该如何正确配置它。但这只是我的猜测,因为我的应用程序从工厂创建了其他元素,例如位于名为 coreelements 的插件中的 filesrc 或 filesink,并且来自插件“播放”的 decodebin 仍然失败。
我的问题:如何修复我的 gstreamer 配置以识别所有插件,而不仅仅是核心元素?
如果我跳过了一些重要信息,请告诉我,以便我尽快附加:)
// 编辑:假设我已经从源代码安装了 gstreamer(我使用的是 ubuntu 14.04)。我还安装了所有插件(base、bag、good),也来自源代码。安装目录是/opt/gstreamer-1.4.0/,这可能会导致一些问题。
如果我执行命令:
echo $GST_PLUGINS_PATH
我得到的只是一个空行,当我尝试显示其他 GST_* 环境变量的值时,效果类似。
更具体的问题:为了使非核心元素插件工作,我应该将哪些目录附加到哪些变量?
如果这个问题太笼统,那么:
gst_element_factory_find("factory_name") 如何检查给定工厂是否存在?