1

パイプラインに入れるとデータを生成する要素を内部に持つ 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

これを(GStreamer Good Plug-insパッケージの)avisubtitleアドオンと比較すると、得られる情報ははるかに少なくなります。

たとえば、私のプラグインは次のように言っています。

  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 で記述されていますが、コードを別の実行可能ファイルに配置しても同じ結果が得られます。

4

2 に答える 2

2

ローダーがプラグインを見つけられないことが原因である可能性があります。プラグインが共有ライブラリ パスにあることを確認する必要があります。

LD_LIBRARY_PATHコンパイルしたプラグインを含むディレクトリに環境変数を設定したことを確認してください。

cygwin では、これを に追加する.profileか、プログラムを実行する前に実行します。

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

-Lリンカー オプションを使用して、コンパイル時に検索パスを指定することもできます。

于 2010-06-26T09:47:22.423 に答える
1

不足しているものがいくつかある可能性があるため、質問にどのように答えればよいかわかりません。解決されていないシンボルの依存関係 (プラグインを実際に調べることができるため、可能性は低いですが) や登録の誤り (間違いを犯すのも難しい) について考えます。

ただし、1 つ明確にしたいことがあります。GStreamer には、1 つまたは複数の要素を含めることができる「プラグイン」(別名、動的にロード可能なライブラリ) があります。プラグインまたは要素を gst-introspect すると、さまざまな出力が得られます。「avisubtitle」の場合は要素で、クラス階層を読み取ることができます。プラグイン (またはライブラリ) "avi" または "/usr/lib/gstreamer-0.10/libgstavi.so" (Unix の場合) をイントロスペクトすると、含まれる要素のリストといくつかの共通プロパティ (バージョン、プロジェクトなど) が得られます。 ..)。

たとえば、gst-introspect XYZ(XYZ ライブラリまたはライブラリへのパス) はgst-introspect XYZ(XYZ ライブラリ内のエレメントの名前) とは異なります。

おそらくそれはあなたを助けるでしょう。幸運を!ああ、エラー/警告は環境変数で表示できますGST_DEBUG=*:2

于 2010-06-28T21:18:35.493 に答える