如何诊断加载gstreamer插件时出现的问题?

时间:2010-06-21 10:13:33

标签: c++ gstreamer songbird

我创建了一个gstreamer插件,里面有一个元素,当放入管道时会生成一些数据(通过跟GStreamer Plugin Writer's Guide)。

我的问题是我无法在测试应用中加载我的插件。当我调用gst_element_factory_make("myextractor", NULL)时,结果始终为NULL。

更多数据(我不确定这是否相关):

当我在我的dll上运行gst-inspect时,输出不完整(使用cygwin生成的输出):

beq11049@beqleuleu1nb028 /cygdrive/c/work
$ /cygdrive/c/OSSBuild/GStreamer/v0.10.6/bin/gst-inspect.exe MyProject/Release/gstxyzlibrary.dll
Plugin Details:
  Name:                 myextractor
  Description:          XYZ Library
  Filename:             MyProject/Release/gstxyzlibrary.dll
  Version:              1.0
  License:              LGPL
  Source module:        myextractor
  Binary package:       MyProject
  Origin URL:           http://www.example.com/

  myextractor: XYZExtractor

  1 features:
  +-- 1 elements

如果我将它与avisubtitle插件(来自GStreamer Good Plug-ins包)进行比较,我得到的信息就少了很多。

例如,我的插件说:

  1 features:
  +-- 1 elements

avisubtitle插件说(使用$ /cygdrive/c/OSSBuild/GStreamer/v0.10.6/bin/gst-inspect.exe avisubtitle生成):

GObject
 +----GstObject
       +----GstElement
             +----GstAviSubtitle

我的问题:我需要有关如何调试此内容的建议/确定我缺少的内容(启用调试输出,设置和检查路径等)。我的测试代码(对gst_element_factory_make的调用)是用Songbird adon编写的,但如果我把代码放在一个单独的可执行文件中,我会得到相同的结果。

2 个答案:

答案 0 :(得分:2)

可能是因为加载程序无法找到您的插件,您应该检查您的插件是否位于共享库路径中:

确保已将LD_LIBRARY_PATH环境变量设置为包含已编译插件的目录。

在cygwin中,将其添加到.profile,或在运行程序之前运行它:

export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/cygdrive/c/path/to/your/plugin/"

您还可以使用-L链接器选项在编译时指定搜索路径。

答案 1 :(得分:0)

我不知道如何回答你的问题,因为可能会遗漏几件事。我认为未解决的符号依赖(虽然不太可能,因为你实际上可以检查你的插件)或错误的注册,不知何故(它也很难弄错),也许是我忽略的鸣鸟或窗口问题。

但是,我只想清除一件事:GStreamer有“插件”(也称为动态可加载库),可以包含一个或多个元素。当您对插件或元素进行内省时,您会得到不同的输出!在“avisubtitle”的情况下,它是一个元素,您可以读取类层次结构。如果您反省插件(或库)“avi”或“/usr/lib/gstreamer-0.10/libgstavi.so”(在Unix上),您将获得它包含的元素列表和一些常见属性(版本,项目等) ..)。

例如,gst-introspect XYZ(XYZ是库或库的路径)与gst-introspect XYZ不同(XYZ是XYZ库中元素的名称)

也许这会对你有所帮助。祝好运!哦,可以使用环境变量GST_DEBUG=*:2

显示错误/警告