AVPlayerItemVideoOutput 文件不能在 AVComposition IOS7 中使用

Posted

技术标签:

【中文标题】AVPlayerItemVideoOutput 文件不能在 AVComposition IOS7 中使用【英文标题】:AVPlayerItemVideoOutput file cannot be used in AVComposition IOS7 【发布时间】:2013-09-22 19:13:02 【问题描述】:

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

问题来了: 在之前的视图控制器中,我使用AVPlayerItemVideoOutputAVAssetWriterInputPixelBufferAdaptor 捕获用户屏幕以生成视频输出文件。在我当前的视图控制器中,我将生成的视频文件添加到 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 中的AVPlayerItemVideoOutputAVAssetWriterInputPixelBufferAdaptor 是否发生了一些变化,会阻止输出文件在合成中使用?我需要在合成中添加额外的规格吗?它必须处理不同的帧速率吗?

感谢您的帮助!

【问题讨论】:

我遇到了同样的问题 - 这在 iOS6 中运行良好。我自己还在寻找解决方案。 谢谢吉姆。我正在针对 sdk 提交一个错误。如果你有什么发现,请告诉我。 【参考方案1】:

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

【讨论】:

我会检查这个,但我认为这不太可能。 1. 我有很多空间 2. 如果我将第一个输出(约 10 秒)替换为另一个输出,一切正常。这复制了 100% 的时间。 @kungfoo - 这很有趣;我有预感。您是否使用您的代码尝试过不同的设备/型号?让我感到困惑的是,我类似的 AVAssetExportSession 错误(到目前为止)是特定于 iPhone 4 的。关于苹果错误的任何其他新发展或动向?

以上是关于AVPlayerItemVideoOutput 文件不能在 AVComposition IOS7 中使用的主要内容,如果未能解决你的问题,请参考以下文章

OSX 上的 AVFoundation:来自视频的 OpenGL 纹理,无需访问像素数据

2014广东高考分数线

文本域的HTML文本域几种样式

软文推广的方法有哪些,硬广告最有效的软文推广策略

获取推文作者对特定推文的推文回复

SpringBoot + Vue实现博文上传+展示+博文列表