0

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すると、エクスポーターが完了します。興味深いのは、から生成されたビデオ ファイルAVPlayerItemVideoOutputMPMoviePlayerViewController. 出力ファイルがコンポジションで使用されないように、IOS7 で、AVPlayerItemVideoOutputまたはIOS7 で何か変更がありましたか? AVAssetWriterInputPixelBufferAdaptorコンポジションに追加の仕様を追加する必要がありますか? 異なるフレームレートに対処する必要がありますか?

助けてくれてありがとう!

4

1 に答える 1