0

我在 IOS6 中有一个可以正常工作的应用程序,在使用 AVComposition 时会在 IOS7 中中断。

这是问题所在:在以前的视图控制器中,我使用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. AVPlayerItemVideoOutput在 IOS7 中或在 IOS7 中是否发生了一些变化AVAssetWriterInputPixelBufferAdaptor,会阻止输出文件在合成中使用?我需要在合成中添加额外的规格吗?它必须处理不同的帧速率吗?

谢谢您的帮助!

4

1 回答 1

0

这可能是特定于您的测试设备的低存储空间问题,其中 AVAssetExportSession 无法将最终电影资产(或一些中间数据)写入磁盘。我会检查其他设备上是否存在问题。在使用通用版本时,我在 iPhone 4 (iOS 7) 上遇到了同样的问题,但在 iPad 2 (iOS 7) 上却没有。

于 2013-10-02T13:40:27.427 回答