在iOS 7上阅读视频元数据 - 始终为空

时间:2014-01-03 12:39:23

标签: ios iphone objective-c ipad alassetslibrary

我正在使用AVExporterSession导出Quicktime视频,并按如下方式设置元数据:

AVMutableMetadataItem *newMetaDataCommentItem = [[AVMutableMetadataItem alloc] init];
[newMetaDataCommentItem setKeySpace:AVMetadataKeySpaceQuickTimeMetadata];
[newMetaDataCommentItem setKey:AVMetadataQuickTimeMetadataKeyComment];
[newMetaDataCommentItem setValue:@"Test metadata value"];

NSMutableArray *metaData = [NSMutableArray array];
[metaData addObject:newMetaDataCommentItem];

exporter = [[AVAssetExportSession alloc] initWithAsset:mutableComposition
                                            presetName:AVAssetExportPresetHighestQuality];
exporter.outputURL=[[SNMovieManager instance] urlForFinalMovie];
exporter.metadata = metaData;
exporter.outputFileType = AVFileTypeQuickTimeMovie;
exporter.shouldOptimizeForNetworkUse = YES;
exporter.videoComposition = video;

然后我将文件视频导入我的Mac并在其上运行mdls并看到值已正确设置:kMDItemComment = "Test metadata value"

我不能做的是读回那个值。我使用以下内容来读取文件。资产是正确的,但元数据属性始终是空字典。

[group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {
            if([[result valueForProperty:@"ALAssetPropertyType"] isEqualToString:@"ALAssetTypeVideo"])
            {
                ALAssetRepresentation *rep = result.defaultRepresentation;
                NSDictionary *metadata = rep.metadata;
               [images addObject:(id)rep.fullScreenImage];
            }

有谁知道我是否采取了正确的方法,如果没有让我知道正确的方法来阅读这个评论是什么?

由于 西蒙

2 个答案:

答案 0 :(得分:0)

如果您能提供与PhotoLibrary保存流程相关的更多代码库,我将不胜感激。

否则只有一个答案,如果代表系统无法解释,则元数据将返回nil

返回的字典将视频的属性保存在文件源中的指定位置。

答案 1 :(得分:0)

我认为你的问题在于获取元数据脚本 您应首先获取AVURLAsset并从中获取元数据ALAssetRepresentation元数据不同

[group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {
        if([[result valueForProperty:@"ALAssetPropertyType"] isEqualToString:@"ALAssetTypeVideo"])
        {
            AVURLAsset *videoAset = [AVURLAsset assetWithURL:[[asset defaultRepresentation] url]];
                if ([[videoAset metadataForFormat:AVMetadataFormatQuickTimeMetadata] count]) {
                    AVMutableMetadataItem *meta = [[videoAset metadataForFormat:AVMetadataFormatQuickTimeUserData] objectAtIndex:0];
                    NSLog(@"%@",meta);
                    NSLog(@"%lu",(unsigned long)[[videoAset metadataForFormat:AVMetadataFormatQuickTimeMetadata] count]);
                }

        }