1

ケース
ファイルから継続的に読み取り、appsrc 要素にフィードします。ソース - apprc

PLAYING 状態の GStreamer パイプラインがあります。apprcキューをクリアする必要があることを意味するボタンを押したときに、パイプラインをフラッシュ/クリーンする必要があります。再生は、現在追加されているバッファまたはフラッシュ後に追加されたバッファから開始する必要があります。

使用した API を発行
すると、false が返されました。フラッシュできません。

fprintf(stderr, "The flush event start was <%d>",gst_element_send_event(GST_ELEMENT (pipe), gst_event_new_flush_start());    
fprintf(stderr, "The flush event stop was  <%d>",gst_element_send_event(GST_ELEMENT (pipe), gst_event_new_flush_stop()));

上記は両方とも 0 を返しました。これは false を意味します。この false の理由は何ですか?

API を使用してパイプライン内のデータをフラッシュするにはどうすればよいですか? または、再生をスキップするための他の API はありますか?

試した

  • 数ミリ秒のギャップがある場合とない場合のパイプラインへの 送信gst_event_new_flush_start () と送信gst_event_new_flush_stop ()
  • gst_event_new_seek (1.0, GST_FORMAT_TIME, GST_SEEK_FLAG_FLUSH, GST_SEEK_TYPE_SET, 0, GST_SEEK_TYPE_SET, 0);
  • パイプラインを NULL に設定してから、もう一度 PLAYING に設定します

これらはすべて機能しませんでした。

4

1 に答える 1

3

0.10 v の gstreamerを使用していたため、うまくいきませんでした。0.10 バージョンの を使用する制約がない場合は、 1.2バージョンの gstreamergstreamerを使用してください。

ただし、v 0.10 では、フラッシュ シークは通常、パイプラインをフラッシュする代わりに機能します。

1.2v を使用している間、2 つの API gst_event_new_flush_start ()gst_event_new_flush_stop ()動作します。その場合、フラッシュを直接使用できます。

どちらの方法でも、フラッシュできるはずです。フラッシュシークを行う内部 API を作成し、それをフラッシュ API として使用します。

gstreamer-devel メーリング リストに投稿があり、2 つのバージョンでのフラッシュの動作について説明しています。

于 2014-10-08T11:23:50.317 に答える