AVPlayerItemVideoOutput 文件不能在 AVComposition IOS7 中使用
Posted
技术标签:
【中文标题】AVPlayerItemVideoOutput 文件不能在 AVComposition IOS7 中使用【英文标题】:AVPlayerItemVideoOutput file cannot be used in AVComposition IOS7 【发布时间】:2013-09-22 19:13:02 【问题描述】:我有一个在 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
更改为硬编码文件,则导出器完成。有趣的是,从AVPlayerItemVideoOutput
生成的视频文件在MPMoviePlayerViewController
中可以正常播放。 IOS7 中的AVPlayerItemVideoOutput
或AVAssetWriterInputPixelBufferAdaptor
是否发生了一些变化,会阻止输出文件在合成中使用?我需要在合成中添加额外的规格吗?它必须处理不同的帧速率吗?
感谢您的帮助!
【问题讨论】:
我遇到了同样的问题 - 这在 iOS6 中运行良好。我自己还在寻找解决方案。 谢谢吉姆。我正在针对 sdk 提交一个错误。如果你有什么发现,请告诉我。 【参考方案1】:这可能是您的测试设备特有的存储空间不足问题,其中 AVAssetExportSession 无法将最终电影资产(或某些中间数据)写入磁盘。我会检查其他设备上是否存在问题。在使用通用版本时,我在 iPhone 4 (iOS 7) 上遇到了同样的问题,但在 iPad 2 (iOS 7) 上却没有。
【讨论】:
我会检查这个,但我认为这不太可能。 1. 我有很多空间 2. 如果我将第一个输出(约 10 秒)替换为另一个输出,一切正常。这复制了 100% 的时间。 @kungfoo - 这很有趣;我有预感。您是否使用您的代码尝试过不同的设备/型号?让我感到困惑的是,我类似的 AVAssetExportSession 错误(到目前为止)是特定于 iPhone 4 的。关于苹果错误的任何其他新发展或动向?以上是关于AVPlayerItemVideoOutput 文件不能在 AVComposition IOS7 中使用的主要内容,如果未能解决你的问题,请参考以下文章