为什么gst_element_factory_find找不到工厂“decodebin”?

时间:2014-07-30 16:04:52

标签: c plugins gstreamer missing-features

我已经安装了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或类似的东西出了问题,但我不知道应该如何正确配置它。但这只是我的猜测基于这样一个事实:我的应用程序创建了其他元素来自工厂,例如filesrc或filesink,这些元素在插件中称为coreelements,而仍然是来自插件'播放的解码器。 failes。

我的问题:我如何修复我的gstreamer配置以识别所有插件,而不仅仅是共同点?

如果我跳过一些重要信息,请告诉我,以便我可以尽快添加:)

//编辑: 让我们说我已经从源头安装了gstreamer(我使用的是ubuntu 14.04)。 我也安装了所有插件(底座,包,好),也来自源。 安装目录是/opt/gstreamer-1.4.0/,这可能会导致一些问题。

如果我执行命令:

echo $GST_PLUGINS_PATH

我得到的只是一个空行,当我尝试显示其他GST_ *环境变量的值时效果类似。

更具体的问题:我应该将哪些目录附加到哪些变量以使非辅助插件工作?

如果这个问题过于笼统,那么:

gst_element_factory_find(" factory_name")如何检查给定工厂是否存在?

1 个答案:

答案 0 :(得分:1)

不知道我做了什么修复了一切,但是现在我通过将libplayback.so和其他已编译的插件二进制文件复制到libcoreelements.so文件夹来解决我的问题

问题似乎是由非标准安装目录引起的, 所以我的解决方案是一个修补程序,因为我仍然不知道gst-inspect-1.0如何识别所有插件,而gst_element_factory_find()不能。任何进一步的内部将不胜感激:)