2011-12-22 14 views
1

"-1"レートパラメータでビデオファイルを巻き戻そうとしています。 少し巻き戻して再生を停止します。最後に、プレイヤーは殺される。 ただし、同じビデオファイルの早送りは正常に動作します。私はそれを "2倍速"と "4倍速"でテストしました。一定の時間(レートが「1.0」)で後方を追いかけると、それはそのタイムスタンプに進み、期待どおりに再生を開始します。私が理解からGstreamer:ビデオファイルの高速巻き戻し

、イベントをシークは、前記パイプラインのデマルチプレクサ要素に処理されます。

  1. これは、シークから更新された値を持つ新しいセグメントを作成します
  2. 現在キューに入ってストリームデータをフラッシュイベント。
  3. 新しいセグメントに新しいストリームデータが準備されると、再生が開始されます。 新しいセグメントに設定された新しいパラメータに基づいて、ここから再生が開始されます。

逆再生の場合、パイプラインが実際にブロックされている場所を特定できません。 私はdemuxer要素がデータを取得して、それを新しいセグメントにプッシュしているのを見ることができます。 誰かが問題の原因を示唆したり指摘したりすることはできますか?

答えて

3

逆再生が正しく実装されていない可能性があります。バグを報告し、フォーマットに関する詳細(例:gst-discovererを使用)、可能であればファイルにリンクしてください。

+0

これを試したフォーマットはMKVでした。巻き戻しは、シークイベントの送信中に使用するシークフラグに応じて、特定のケースで機能します。 例:GstSeekFlags :: GST_SEEK_FLAG_KEY_UNITまたはGST_SEEK_FLAG_NONEを使用すると、リワインドが表示されます(再生時間は逆方向の値で更新され、巻き戻し後は実際の位置から再生を開始します)。 GstSeekFlags :: GST_SEEK_FLAG_FLUSHを使用すると巻き戻しに失敗する 巻き戻し中にキーフレームが表示されないように、どこを調べる必要があるか教えてください。 –

+0

スクラビング(またはシークイベントをたくさん送信する場合)_KEY_UNITは、時間を無駄にしないで正確な位置に移動するためにフレームをデコードして捨てるかのように、良いアイデアです。 Flushは、速度を変更するときに必要ではないパイプラインを単純に排水します。 – ensonic

関連する問題