如何通过AVAssetExportSession为AVFileTypeMPEG4文件设置元数据?

时间:2014-10-17 05:50:04

标签: ios avfoundation

我尝试使用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
                }
            });
        }];

2 个答案:

答案 0 :(得分:1)

尝试


    metaItem.key = AVMetadataiTunesMetadataKeyDescription;
    metaItem.keySpace = AVMetadataKeySpaceiTunes;

尝试了其他键空间,但只有iTunes才能为我工作。

答案 1 :(得分:1)

Apple会根据输出类型过滤元数据。他们不认为iTunes元数据对MPEG4输出有效,因此他们将其剥离。

一些选项:

  • 使用AVFileTypeQuickTimeMovie> MOV与MP4密切相关,通常兼容。这取决于您的目标。

  • 尝试其他类型(有些人报告使用MPV类型成功)

  • 使用库来编写自定义数据/原子(例如mp4v2)。很多工作,但唯一真正的方法来实现它。