У меня есть приложение для записи видео для iPhone. Я использую AVAssetWriter
для записи записанных видеоданных в файл. Я также заинтересован во внедрении пользовательских метаданных в файл. Например: я хочу определить свое приложение как создателя видео.
Следовательно, после создания средства записи активов я добавляю значение создателя с помощью ключа AVMetadataCommonKeyCreator
к метаданным средства записи активов.
Фрагмент кода выглядит следующим образом:
AVAssetWriter *assetWrtr = [[AVAssetWriter alloc] initWithURL:inURL fileType:AVFileTypeQuickTimeMovie error:&error];
self.assetWriter = assetWrtr;
[assetWrtr release];
NSArray *existingMetadataArray = self.assetWriter.metadata;
NSMutableArray *newMetadataArray = nil;
if (existingMetadataArray)
{
newMetadataArray = [existingMetadataArray mutableCopy]; // To prevent overriding of existing metadata
}
else
{
newMetadataArray = [[NSMutableArray alloc] init];
}
AVMutableMetadataItem *item = [[AVMutableMetadataItem alloc] init];
item.keySpace = AVMetadataKeySpaceCommon;
item.key = AVMetadataCommonKeyCreator;
item.value = @"My App";
[newMetadataArray addObject:item];
self.assetWriter.metadata = newMetadataArray;
[newMetadataArray release];
[item release];
После завершения записи я пытаюсь прочитать содержимое файла с помощью AVURLAsset.
NSURL *outputFileURL = [self.assetWriter outputURL];
AVURLAsset *asset = [AVURLAsset URLAssetWithURL:outputFileURL options:nil];
NSArray *keys = [NSArray arrayWithObject:@"commonMetadata"];
[asset loadValuesAsynchronouslyForKeys:keys completionHandler:^(void) {
NSError *error = nil;
AVKeyValueStatus durationStatus = [asset statusOfValueForKey:@"commonMetadata" error:&error];
switch (durationStatus) {
case AVKeyValueStatusLoaded:
NSLog(@"AVKeyValueStatusLoaded");
NSLog(@"commonMetadata:%@", [asset commonMetadata]);
break;
case AVKeyValueStatusFailed:
NSLog(@"AVKeyValueStatusFailed");
break;
case AVKeyValueStatusCancelled:
NSLog(@"AVKeyValueStatusCancelled");
break;
}
}];
Однако [asset commonMetadata]
не возвращает AVMetadataItems
. Возвращает пустой массив.
Я могу установить значения других объектов метаданных, таких как AVMetadataCommonKeyTitle
, AVMetadataCommonKeyModel
, AVMetadataCommonKeySource
. Эти значения получены правильно. Проблема только с AVMetadataCommonKeyCreator
. Пожалуйста, дайте мне знать причину такого поведения. Разве невозможно установить конкретное значение приложения для AVMetadataCommonKeyCreator
? Что на самом деле представляет этот ключ?