avdec_h264とavenc_mpeg4という2つの要素のリンクに問題があります。どういうわけか、これらの要素がデータの機能をネゴシエートできないと私は思います。GStreamer:キャップネゴシエーションの失敗
Iは、GST-打ち上げと私のパイプラインをテストしてみた:
gst-launch-1.0 rtspsrc location="rtsp://camera" ! rtph264depay ! h264parse ! avdec_h264 ! avenc_mpeg4 ! fakesink
それがうまく働いています。成功し
pipeline_ = gst_pipeline_new("default");
if (!pipeline_)
{
return false;
}
receiver_ = gst_element_factory_make("rtspsrc", "receiver");
demuxer_ = gst_element_factory_make("rtph264depay", "demuxer");
parser_ = gst_element_factory_make("h264parse", "parser");
decoder_ = gst_element_factory_make("avdec_h264", "decoder");
encoder_ = gst_element_factory_make("avenc_mpeg4, "encoder");
output_ = gst_element_factory_make("fakesink", "output");
if (!receiver_ || !demuxer_ || !parser_ ||
!decoder_ || !encoder_ || !output_)
{
return false;
}
g_object_set(GST_OBJECT(receiver_), "location", "rtsp://camera", nullptr);
// On this signal source pad of the receiver is being connected to
// the sink pad of the demuxer.
g_signal_connect(receiver_, "pad-added", G_CALLBACK(on_pad_added), this);
gst_bin_add_many(GST_BIN(pipeline_), receiver_, demuxer_, parser_,
decoder_, encoder_, output, nullptr);
if (!gst_element_link_many(demuxer_, parser_, decoder_,
encoder_, output_, nullptr))
{
return false;
}
すべてのリンク:私はパイプラインが実装されている自分のアプリケーションを使用し
。すべての要素は状態をPLAYINGに変更しますが、何も得られません。パイプラインのバスでGST_MESSAGE_STREAM_STARTを取得しません。私はエンコーダではありませんvideoconvert要素、にavenc_mpeg4変更すると、うまく機能がある場合、すべて
:ここ
は、GST-打ち上げと私のアプリケーションからのグラフです。私は他のエンコーダを置く場合、私はまだ現在の問題があります。
おそらく、私はエンコーダの操作方法についていくつかのことについてはわかりません。しかし、私は解決策を見つけることができませんでした。
ありがとうございます。
私は要点を作成しました:https://gist.github.com/simonenkos/9e31fc66b38a09afea362f1180c8296d 私はvideoconvert要素を追加しようとしましたが、何も変わりません。 また、私はデコードビンについても理解していません。私は私のパイプラインにそのような要素を持っていません。私は時々ソースパッドを持っているrtspsrc用の「パッド付きの」シグナルハンドラだけを持っています。 –
私はdemuxerを読んで騙されましたが、これはデパイローダですので、実際には動作します(パート1))。 – ensonic
申し訳ありませんが、demuxはデパイローダです。これは機能しますので、ポイント1を無視してください。交渉のためには、デバッグログをチェックする必要があります:/ – ensonic