Gstreamer(バージョン0.10)では、「Appsrc」要素を使用して外部データをロードできます。
Appsrcには、キューがいっぱいであると見なす前にappsrcでキューに入れることができるデータの量を定義する制御プロパティがあります。これは「max-bytes」という名前です。
キューサイズが「十分なデータ」信号で事前定義された制限appsrc信号に達したとき。
アプリケーションがあります:
- ファイルシステムからデータを読み取るフィード機能Xがあります。
関数Xの実行を担当する「開始」および「停止」関数。appsrcに登録されている両方の関数:
g_signal_connect(app->appsrc_v, "need-data", G_CALLBACK(start_feed), app); g_signal_connect(app->appsrc_v, "enough-data", G_CALLBACK(stop_feed), app);
「max-bytes」プロパティで定義されたキュー制限:40960バイト
すべてがうまく定義されているようです-piplineが実行され、appsrcがデータを消費し、フィードが機能し、appsrcが「必要」と「十分な」信号を発します。
しかし時々私は次を見ることができます:
appsrc gstappsrc.c:1451:gst_app_src_push_buffer_full:<appsrc_v> queue filled (**890033** >= **40960**)
appsrc gstappsrc.c:1451:gst_app_src_push_buffer_full:<appsrc_v> queue filled (**898225** >= **40960**)
appsrc gstappsrc.c:1451:gst_app_src_push_buffer_full:<appsrc_v> queue filled (**898225** >= **40960**)
キューの制限に達しましたが、「十分な」信号が発信されていません。フィード機能は引き続きデータをappsrcにプッシュし、40Kの代わりに最大1Mb以上をプッシュできます。
この原因を理解するのを手伝ってもらえますか?