2010-06-21 17 views
1

我已經創建了一個gstreamer插件,裏面有一個元素,當它被放入一個流水線時,會生成一些數據(按照GStreamer Plugin Writer's Guide)。如何在加載gstreamer插件時診斷問題?

我的問題是,我無法加載我的插件在測試應用程序。當我撥打gst_element_factory_make("myextractor", NULL)時,結果始終爲NULL。

更多的數據(我不知道這是有關):

當我在我的DLL運行gst-inspect我會得到不完整的輸出(輸出使用Cygwin的生成):

[email protected] /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

這可能是因爲加載器無法找到你的插件,你應該檢查你的插件是共享庫路徑:

請確保您已設置包含您的LD_LIBRARY_PATH環境變量的目錄編譯插入。

Cygwin中,將它添加到您的.profile,或者運行它,你運行程序之前:

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

你也可以使用-L鏈接器選項來指定在編譯時的搜索路徑。

0

我不知道如何回答你的問題,因爲可能有幾件事缺失。我想到了一些未解決的符號依賴問題(雖然不太可能,因爲你實際上可能會檢查你的插件)或者錯誤的註冊,但也可能會出錯(也很難弄錯),或許我會忽略鳴鳥或windows。

但是,我只想清楚一件事:GStreamer有「插件」(又名動態可加載庫),可以包含一個或多個元素。當你反思插件或元素時,你會得到不同的輸出結果!在「avisubtitle」的情況下,它是一個元素,您可以閱讀類層次結構。如果你反思插件(或庫)「avi」或「/usr/lib/gstreamer-0.10/libgstavi.so」(在Unix上),你會得到它包含的元素列表和一些常見的屬性(版本,項目等..)。

例如,gst-introspect XYZ(XYZ一個庫或庫的路徑)比gst-introspect XYZ(XYZ中XYZ庫的元素的名稱)

也許這將幫助您不同的。祝你好運!哦,並且可以使用環境變量GST_DEBUG=*:2

顯示錯誤/警告