(У меня не было роскоши времени для тестирования каждого из 23 AVMetadataCommonKeys ..)

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

Ответы на вопрос(2)

Ваш ответ на вопрос