以下の要素を使用してTeeでGStreamerパイプラインを実装しようとしています。2つのシンクを含むTeeを含むGStreamerパイプラインが失敗する
gst_bin_add_many(GST_BIN (pipeline), <rpicamsrc>, <capsfilter>, <h264parse>, tee, <queue>, <rtph264pay>, <fakesink>, <queue>, <avdec_h264>, <videoconvert>, <capsfilter>, <customplugin>, <fakesink>, nullptr);
わかりやすくするために、要素名を提供しました。
rpicamsrc ! capsfilter ! h264parse ! tee name=t t. ! queue ! rtph264pay ! fakesink t. ! queue ! avdec_h264 ! videoconvert ! capsfilter ! customplugin ! fakesink
しかし、これは常に失敗し、エラーは報告されません。しかし、ビデオフレームはキャプチャされません。いくつかのテストでも、この単純なパイプラインのために失敗したことが確認された後:
gst_element_link_many (<rpicamsrc>, <capsfilter>, <h264parse>, <rtph264pay>, <fakesink>, nullptr))
興味深い、私はそれが動作するコードのgst_bin_add_manyライン以上のことから、第二fakesinkを削除する場合です。これで何が問題なのかよく分かりません。 autovideosinkのような別のシンクを使用しようとしましたが運がありません。それが失敗すると、gstメッセージタイプGST_MESSAGE_ASYNC_DONEがgstバスに受信されませんが、成功ケースの場合は実行されます。 GST_STREAM_STATUS_TYPE_CREATE、GST_STREAM_STATUS_TYPE_ENTERとGST_MESSAGE_STREAM_STARTは、失敗と成功事例の両方を取得します。私は何を間違えているのですか?
ターミナルでgst-launchを使用してパイプラインを実行し、GST_DEBUG = 4に設定してログを取得してください。 – cxphong