Ios 通过AVCaptureMovieFileOutput在QuickTime文件中存储任意元数据&;AVMutableDataItems

Ios 通过AVCaptureMovieFileOutput在QuickTime文件中存储任意元数据&;AVMutableDataItems,ios,avfoundation,avcapturesession,Ios,Avfoundation,Avcapturesession,全部: 我正在使用AVCaptureMovieFileOutput录制一部电影。随着各种事件的发生,我希望将事件的标题/时间存储在正在编写的QuickTime电影中。因此,我可能有20-30个数据点,我希望与特定电影相关联 我的策略是使用元数据,但我运气不太好。有谁能告诉我,首先: a) 我可以存储任意元数据,还是只存储AVMetadataFormat.h中定义的那些键和值?我希望能够存储一个数组 b) 如果我可以存储任意数组,关键是什么?如果没有,我可以将元数据存储在注释字段中(很难看,但我可

全部:

我正在使用AVCaptureMovieFileOutput录制一部电影。随着各种事件的发生,我希望将事件的标题/时间存储在正在编写的QuickTime电影中。因此,我可能有20-30个数据点,我希望与特定电影相关联

我的策略是使用元数据,但我运气不太好。有谁能告诉我,首先:

a) 我可以存储任意元数据,还是只存储AVMetadataFormat.h中定义的那些键和值?我希望能够存储一个数组

b) 如果我可以存储任意数组,关键是什么?如果没有,我可以将元数据存储在注释字段中(很难看,但我可以足够快地解析20-30个点)

c) 下面显示的代码似乎不起作用,因为无论我为item.key(avMetadataQuickTimeMetadataKeyArtister、avMetadataCommonKeyArtister或以Artister结尾的所有其他东西)输入什么,我都不会在iTunes的“获取信息”窗口中看到任何内容

    - (IBAction)recordEvent:(id)sender {

NSLog(@"Record a metadata point here ...");

// is there any metadata associated with the file yet?
NSArray * existingMetaData = self.aMovieFileOutput.metadata;
NSMutableArray * newMetadataArray = nil;
if(existingMetaData){
    newMetadataArray = [existingMetaData mutableCopy];
} else {
    newMetadataArray = [[NSMutableArray alloc]init];
}

AVMutableMetadataItem * item = [[AVMutableMetadataItem alloc]init];

item.keySpace = AVMetadataKeySpaceCommon;
item.key = AVMetadataQuickTimeMetadataKeyArtist;

item.value = @"Enya, really!"; // in practice this will be the title of (UIButton *)sender

item.time = CMTimeMake(0.0,1.0);

[newMetadataArray addObject:item];
self.aMovieFileOutput.metadata = newMetadataArray;
}

如有任何建议,将不胜感激


谢谢

通过
AVCaptureMovieFileOutput
AVMutableDataItems
在QuickTime文件中存储元数据只允许您存储
AVMetadataKeySpaceCommon
keyspace中预定义的键的值,即。EAVMetadataCommonKey*类键


所有其他数据都被忽略了

迈克尔,你在这方面有什么进展吗?我正在尝试插入章节标记,我相信它们也是元数据,但也没有太多运气。