Проблема с установкой и получением значения AVMetadataCommonKeyCreator

У меня есть приложение для записи видео для 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 ? Что на самом деле представляет этот ключ?

9
задан Stop Harming Monica 22 December 2014 в 02:05
поделиться