2012-08-10 8 views
11

AVPlayerでビデオを後方に再生したい。私は、レートプロパティを-1.0に変更しようとしましたが、動作しましたが、スムーズではありませんでした。動画をスムーズに再生できる方法はありますか?iOSでのビデオの逆再生

+4

ビデオは、すべてのXフレームでキーフレームを持っているので、ビデオの再生が興味深いのは、ある、とキーフレーム間のフレームだけでの変更を保存しています(フレーム全体ではなく)前のフレームからの画像。ビデオを後方に再生することは、フレームが前のフレームとは関係があり(次のフレームとは関係ないため)、フレームの順序を変更することだけではありません。一般的に、取得するフレームの順序は変更しませんほとんどの場合、ビデオを再レンダリングする必要があります。これはあなたがビデオに問題がある一般的な理由です。 – holex

+0

非常に興味深い質問です。 – Daniel

+1

ありがとうございます。あなたは私にビデオの逆再生のための解決策を提案してもらえますか? –

答えて

6

コメントに記載されているように、問題はキーフレームと、ほとんどのコーデックが逆方向に再生するように設計されていないという事実にあります。編集中に実際にビデオを逆にする必要がないビデオを再エンコードする2つのオプションがあります。

  1. すべてのフレームをキーフレームにします。キーフレームに依存しているH.264のようなコーデックでは、この機能がうまく機能しています。基本的に、すべてのフレームがキーフレームである場合、各フレームは前のフレームに頼ることなくデコードすることができます。
  2. キーフレームと非キーフレームを使用しないコーデックを使用します(基本的にすべてのフレームは常にキーフレームです)。 PhotoJPEGはそのようなオプションの1つですが、iOSで再生するかどうかは完全にはわかりません。私はそう思うだろう。それはMac上でうまく動作します。

このオプションのいずれかが、一般的な「xフレームごとのキーフレーム」エンコードされたビデオに比べてファイルサイズが大きくなることに注意してください。

0

現在のアイテムの最後に到達してから、レートを負の値に設定する必要があります。このような何か:

-(void)reversePlay { CMTime durTime = myPlayer.currentItem.asset.duration; if (CMTIME_IS_VALID(durTime)) { [myPlayer seekToTime:durTime toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero]; [myPlayer setRate:-1.0]; } else NSLog(@"Invalid time"); }

ソース:https://stackoverflow.com/a/16104363/701043

関連する問題