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

时间:2011-11-25 04:28:23

标签: ios avfoundation avcapturesession

所有

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

我的策略是使用元数据,但我没有太多运气。有人可以告诉我,首先:

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

b)如果我可以存储任意数组,这个技巧有什么关键?如果没有,我可以将我的元数据存储在评论字段中(丑陋,但我可以足够快地解析20-30分)。

c)下面显示的代码似乎不起作用,因为无论我为item.key(AVMetadataQuickTimeMetadataKeyArtist,AVMetadataCommonKeyArtist或以Artist结尾的各种其他内容)放入什么内容,我从未在iTune中看到任何内容获取信息窗口。

    - (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;

}

非常感谢任何建议。

谢谢!

1 个答案:

答案 0 :(得分:1)

通过AVCaptureMovieFileOutput&存储QuickTime文件中的元数据AVMutableDataItems仅允许您存储AVMetadataKeySpaceCommon密钥空间中预定义的密钥的值,即。即AVMetadataCommonKey *类似于键

所有其他数据都忽略了