2

ビデオの録画中に一時停止機能を備えた iFile というアプリがあるようです。彼らはどのようにこれを行うのですか?AVMutableComposition クラスを使用してみました。ユーザーが一時停止すると、新しいビデオをカットして最後にビデオをマージしましたが、ビデオをマージする処理時間は望ましくありません。

誰かがこれを行う方法について他の良いアイデアを教えてもらえますか? iFile の方法が非常にシームレスであることに気付きました。

ありがとう

4

1 に答える 1

2

ここにいくつかのアイデアがあります。私はこれらのいずれも試していません。

AVAssetWriter を使用してキャプチャした画像を書き込んでいる場合は、一時停止中にフレームをドロップするだけです。最後に使用されたプレゼンテーション タイム スタンプ (PTS) を追跡する必要があります。次に、記録を再開するときに、この最後のタイムスタンプに基づいて次の画像 PTS を計算する必要があります。これをオーディオでも行うと、少しトリッキーになるかもしれません。

別の方法は、空の編集を使用することです。AVAssetWriter を使用してトラックの途中に空の編集を挿入する方法がわかりません。最初と最後に挿入できることは知っています。AVMutableCompositionTrack を使用すると、insertEmptyTimeRange: を使用できます。時間範囲は次のように構築されます

CMTime delta = CMTimeSubtract(new_sample_time, last_sample_time)
CMTimeRangeMake(last_sample_time, delta)

ここで、new_sample_time は一時停止解除後の最初のサンプルの時間であり、last_sample_time は一時停止前の最後のサンプルの時間です。オーディオのバッファには通常 1024 個のサンプルが含まれているため、オーディオの場合は少し難しいかもしれません。CMSampleBufferGetPresentationTimeStamp によって返される CMTime は、最初のサンプルの時間です。

これが解決に役立つか、解決につながることを願っています。

于 2011-04-23T22:06:45.017 に答える