我正在使用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];
}
有谁知道我是否采取了正确的方法,如果没有让我知道正确的方法来阅读这个评论是什么?
由于 西蒙
答案 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]);
}
}