我正在创建一个项目,在其中我使用 objective-c 中的以下代码合并视频和音频。
AVMutableComposition* mixComposition = [AVMutableComposition composition];
NSString *audio_inputFilePath = [libraryDirectory stringByAppendingPathComponent:@"SelectedSong.wav"];
NSURL *audio_inputFileUrl = [NSURL fileURLWithPath:audio_inputFilePath];
AVURLAsset* audioAsset = [[AVURLAsset alloc]initWithURL:audio_inputFileUrl options:nil];
NSString *videoOutputPath = [libraryDirectory stringByAppendingPathComponent:@"Video.mp4"];
NSURL *video_inputFileUrl = [NSURL fileURLWithPath:videoOutputPath];
AVURLAsset* videoAsset = [[AVURLAsset alloc]initWithURL:video_inputFileUrl options:nil];
CMTimeRange video_timeRange = CMTimeRangeMake(kCMTimeZero,videoAsset.duration);
AVMutableCompositionTrack *a_compositionVideoTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid];
[a_compositionVideoTrack insertTimeRange:video_timeRange ofTrack:[[videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] atTime:kCMTimeZero error:nil];
AVMutableCompositionTrack *b_compositionAudioTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
[b_compositionAudioTrack insertTimeRange:audio_timeRange ofTrack:[[audioAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0] atTime:kCMTimeZero error:nil];
AVAssetExportSession* _assetExport = [[AVAssetExportSession alloc] initWithAsset:mixComposition presetName:AVAssetExportPresetHighestQuality];
_assetExport.outputFileType = @"com.apple.quicktime-movie";
//_assetExport.outputFileType = AVFileTypeMPEG4 ;
//NSLog(@"support file types= %@", [_assetExport supportedFileTypes]);
_assetExport.outputURL = outputFileUrl;
[_assetExport exportAsynchronouslyWithCompletionHandler:^{
};
但
[[audioAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0]
它返回设备中的空数组。
当在模拟器中检查它可以正常工作。
所以请帮助我如何解决它。
最佳答案
在这种情况下[[audioAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0]
[b_compositionAudioTrack insertTimeRange:audio_timeRange ofTrack:[[audioAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0] atTime:nextClipStartTime error:nil];
这无法读取数组。
因为特定文件中没有声音/音频。仅在那些情况下,当垂直多媒体文件中没有声音/音频时,才会出现此错误。
关于ios - 如何在iPhone SDK中合并音频和视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20678117/