我有一個完全可用的IOS6應用程序,在使用AVComposition時會在IOS7中中斷。AVPlayerItemVideoOutput文件不能用於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中運行良好。我仍然在尋找解決方案。 –
謝謝吉姆。我正在提交bugist sdk。讓我知道如果你想出任何東西。 – kungfoo