我在IOS6中有一个完全正常工作的应用程序,它在使用AVComposition时中断了IOS7。
这就是问题所在:在前面的视图控制器中,我使用AVPlayerItemVideoOutput & AVAssetWriterInputPixelBufferAdaptor捕获用户屏幕以生成视频输出文件。在我当前视图控制器中,我将生成的视频文件添加到AVComposition中,以便在该文件和一些音频之间生成视频合成。在IOS6中,这个过程工作得很好,AVExportSession完成了。在IOS7中,导出过程不会完成(从不调用finish处理程序,状态始终为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或AVAssetWriterInputPixelBufferAdaptor是否发生了某些更改,导致无法在合成中使用输出文件?我需要在组合中添加额外的规格吗?它必须处理不同的帧率吗?
谢谢你的帮助!
发布于 2013-10-02 21:40:27
这可能是特定于您的测试设备的低存储空间问题,其中AVAssetExportSession无法将最终电影资产(或某些中间数据)写入磁盘。我会检查其他设备上是否存在此问题。我在iPhone 4 (iOS 7)上遇到了同样的问题,但在iPad 2 (iOS 7)上使用通用构建时就没有了。
https://stackoverflow.com/questions/18947745
复制相似问题