我尝试使用AVAssetExportSession
设置AVFileTypeMPEG4
类型文件的元数据,但它
不起作用,如果我将文件类型更改为AVFileTypeQuickTimeMovie
,它就可以工作。但是我需要mp4文件,我找不到任何文件说AVFileTypeMPEG4
文件无法设置元数据,有没有人成功设置meta?
这是我使用的代码:
NSMutableArray *metadata = [NSMutableArray array];
AVMutableMetadataItem *metaItem = [AVMutableMetadataItem metadataItem];
metaItem.key = AVMetadataCommonKeySource;
metaItem.keySpace = AVMetadataKeySpaceCommon;
metaItem.value = @"Test metadata";
[metadata addObject:metaItem];
AVAssetExportSession *exportSession = [AVAssetExportSession exportSessionWithAsset:composition presetName:AVAssetExportPresetMediumQuality];
exportSession.metadata = metadata;
exportSession.audioMix = audioMix;
exportSession.videoComposition = videoComposition;
exportSession.outputFileType = AVFileTypeMPEG4;//AVFileTypeQuickTimeMovie;
NSString *outputFilePath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"testMetadata.mp4"];
exportSession.outputURL = [NSURL fileURLWithPath:outputFilePath];
[exportSession exportAsynchronouslyWithCompletionHandler:^{
dispatch_async(dispatch_get_main_queue(), ^{
if (exportSession.status == AVAssetExportSessionStatusCompleted) {
//todo
}else{
//todo
}
});
}];
答案 0 :(得分:1)
尝试
metaItem.key = AVMetadataiTunesMetadataKeyDescription; metaItem.keySpace = AVMetadataKeySpaceiTunes;
尝试了其他键空间,但只有iTunes才能为我工作。
答案 1 :(得分:1)
Apple会根据输出类型过滤元数据。他们不认为iTunes元数据对MPEG4输出有效,因此他们将其剥离。
一些选项:
使用AVFileTypeQuickTimeMovie> MOV与MP4密切相关,通常兼容。这取决于您的目标。
尝试其他类型(有些人报告使用MPV类型成功)
使用库来编写自定义数据/原子(例如mp4v2)。很多工作,但唯一真正的方法来实现它。