4

我已经安装了 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") 如何检查给定工厂是否存在?

4

1 回答 1

2

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

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

于 2014-07-31T10:28:20.607 回答