Ios AVFoundation AVMutableComposition-带音频的视频-冻结视频
我有一个录音带。将其添加到AVMutableComposition并导出时,播放声音时视频将冻结。我错过了什么 我有两首歌:Ios AVFoundation AVMutableComposition-带音频的视频-冻结视频,ios,avfoundation,avmutablecomposition,Ios,Avfoundation,Avmutablecomposition,我有一个录音带。将其添加到AVMutableComposition并导出时,播放声音时视频将冻结。我错过了什么 我有两首歌: _compositionVideoTrack = [self.composition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid]; _compositionAudioTrack = [self.composition addMuta
_compositionVideoTrack = [self.composition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid];
_compositionAudioTrack = [self.composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
然后创建轨迹:
AVAssetTrack *clipVideoTrack = [[sourceAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0];
AVAssetTrack *clipAudioTrack = [[sourceAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0];
[_compositionVideoTrack insertTimeRange:editRange ofTrack:clipVideoTrack atTime:self.composition.duration error:&editError];
[_compositionAudioTrack insertTimeRange:editRange ofTrack:clipAudioTrack atTime:self.composition.duration error:&editError];
然后我插入曲目:
AVAssetTrack *clipVideoTrack = [[sourceAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0];
AVAssetTrack *clipAudioTrack = [[sourceAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0];
[_compositionVideoTrack insertTimeRange:editRange ofTrack:clipVideoTrack atTime:self.composition.duration error:&editError];
[_compositionAudioTrack insertTimeRange:editRange ofTrack:clipAudioTrack atTime:self.composition.duration error:&editError];
最后,我导出它:
AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:urlAsset presetName:AVAssetExportPresetPassthrough];
exportSession.outputFileType = AVFileTypeQuickTimeMovie;
文件是.mp4。可能是文件格式吗?尝试使用下面的方法导出
AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:self.inputAsset presetName:AVAssetExportPresetLowQuality];
exportSession.outputFileType = AVFileTypeQuickTimeMovie;
我认为您应该添加AVMutableVideoCompositionInstruction您可以尝试这样做:
AVMutableComposition *mutableComposition = [AVMutableComposition composition];
AVMutableCompositionTrack *videoCompositionTrack = [mutableComposition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid];
[videoCompositionTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, asset.duration) ofTrack:clipVideoTrack atTime:kCMTimeZero error:nil];
AVMutableCompositionTrack *audioCompositionTrack = [mutableComposition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
[audioCompositionTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, asset.duration) ofTrack:[[asset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0] atTime:kCMTimeZero error:nil];
然后使用可变组合初始化AVAssetExportSession
AVAssetExportSession* exporter = [[AVAssetExportSession alloc] initWithAsset:mutableComposition presetName:AVAssetExportPresetHighestQuality];
希望这将帮助您我已尝试将AVAssetExportPresetPassthrough更改为AVAssetExportPresetMediumQuality。也不起作用。你保存了你的视频吗??或者您刚刚导出??视频是否每次都冻结在特定帧上?可能是视频曲目的时间范围不正确。您正在插入从{clipVideoTrack}和{clipAudioTrack}到从构图持续时间开始的构图轨迹的时间范围。当声音开始时,视频开始冻结。音频和视频不能同时播放。是的,我希望添加到comp的所有剪辑都在前一个剪辑之后,这就是为什么我将其添加到comp的持续时间中。如果没有看到更多的代码,很难说。我猜在声音开始时,AVMUTABLEVEOCompositionInstruction中AVMUTABLEVEOCompositionLayerInstructions的顺序有问题。您找到了什么解决方案?或者你找到了吗?我应该在说明书中添加什么?