ローカル ビデオ ファイルを処理するプログラムに処理ロジックを追加しようとしていますが、次の (成功した) gst-launch コマンドをコードに変換する方法を理解するのに苦労しています (そして、" pad-added" コールバック):
gst-launch filesrc location=/path/to/my/video.avi ! decodebin2 ! autovideosink
の代わりに使用して、gstreamer のbasic-tutorial-3を試してみました。decodebin2
audioconvert
data.source = gst_element_factory_make("filesrc", "source");
data.convert = gst_element_factory_make("decodebin2", "uridecoder");
data.sink = gst_element_factory_make("autovideosink", "autodetect");
ただし、例で概説されているように、にリンクdata.convert
することはできません。data.sink
はgst_element_link(data.convert, data.sink)
常に失敗します。には特別な扱いがあると思いdecodebin2
ます。一部の gstreamer ユーザーは、ゴーストパッドと個別のビンを使用して言及していますが、これも迅速な試行の後、成功しませんでした:
data.bin = gst_bin_new("processing-bin");
gst_bin_add_many(GST_BIN(data.bin), data.decoder, data.sink, NULL);
gst_element_add_pad(data.bin,
gst_ghost_pad_new("bin_sink",
gst_element_get_static_pad(data.decoder,"sink")));
デバッグを続行する方法について少し混乱しています。他の誰かがポインタを持っていますか?
以下は、現在のコードの要点を要約したものです: ( gist )
====
更新: コールバックが起動しています。filesrc の場所のファイル名が間違っていたためだと思います (おっと)
以下のアドバイスに従った後、オーディオとビデオのキャップ タイプを取得していることを確認し、パッドが追加されたコールバックでそれらをチェックすることができます。ただし、パッド処理の 1 フレーム後に、次の「リンクされていません」というエラーが表示されます。
Debugging information: gstavidemux.c(5187): gst_avi_demux_loop (): /GstPipeline:gstreamer-test/GstBin:processing-bin/GstDecodeBin2:uridecoder/GstAviDemux:avidemux0:
streaming stopped, reason not-linked