AVCompositionを使用するとIOS7で壊れるIOS6で完全に機能するアプリがあります。
問題は次のとおりです。以前のビュー コントローラーでは、AVPlayerItemVideoOutput
&を使用してユーザーの画面をキャプチャしAVAssetWriterInputPixelBufferAdaptor
、ビデオ出力ファイルを生成していました。現在のビュー コントローラーでは、その生成されたビデオ ファイルを取得して AVComposition に追加し、このファイルと一部のオーディオの間でビデオ コンポジションを生成します。IOS6 では、このプロセスは完全に機能し、AVExportSession が完了します。IOS7 では、エクスポート プロセスは完了しません (終了ハンドラーは呼び出されず、ステータスは常にAVAssetExportSessionStatusExporting
です)。
ここに私の疑似コードがあります:
AVURLAsset *asset = [AVURLAsset URLAssetWithURL:self.metaInfo.videoCaptureFile options:nil];
AVMutableComposition* mixComposition = [[AVMutableComposition alloc] init];
AVMutableCompositionTrack *track = [mixComposition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid];
[track insertTimeRange:CMTimeRangeMake(kCMTimeZero, firstAsset.duration) ofTrack:[[asset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] atTime:kCMTimeZero error:&error];
AVMutableCompositionTrack *audioTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
[audioTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, secondAsset.duration) ofTrack:[[audioAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0] atTime:kCMTimeZero error:&error];
AVMutableVideoCompositionInstruction * MainInstruction = [AVMutableVideoCompositionInstruction videoCompositionInstruction];
/// Code for processing the composition
AVAssetExportSession *exporter = [[AVAssetExportSession alloc] initWithAsset:mixComposition presetName:AVAssetExportPreset640x480];
// Code for setting up exporter
[exporter exportAsynchronouslyWithCompletionHandler:^
{
dispatch_async(dispatch_get_main_queue(), ^{
[self exportDidFinished:exporter];
});
}];
コードをデバッグした後、問題は使用されていた生成されたビデオ ファイルに帰着しました。ハードコードされたファイルに変更asset
すると、エクスポーターが完了します。興味深いのは、から生成されたビデオ ファイルAVPlayerItemVideoOutput
がMPMoviePlayerViewController
. 出力ファイルがコンポジションで使用されないように、IOS7 で、AVPlayerItemVideoOutput
またはIOS7 で何か変更がありましたか? AVAssetWriterInputPixelBufferAdaptor
コンポジションに追加の仕様を追加する必要がありますか? 異なるフレームレートに対処する必要がありますか?
助けてくれてありがとう!