Получение имени ключа на AVMetadataItem для AVAsset в iOS - PullRequest
8 голосов
/ 21 февраля 2011

Я пытаюсь определить различные элементы метаданных в видео на iPad. До сих пор я был в состоянии успешно использовать библиотеки AVAsset для поиска файла и генерировать массив AVMetadataItems, используя metadataForFormat:. В файле были найдены только форматы данных iTunes и Quicktime User. Теперь проблема в том, что у меня есть эта информация, и я не могу определить, что к чему. Я намеревался загрузить словарь с информацией, индексируемой ключом метаданных, но использование свойства key AVMetadataItem, похоже, не работает правильно, как будто возвращает число (отладчик говорит, что это NSCFNumber). Вот пример кода того, что я делаю:

ALAssetRepresentation *representation = [[valAsset defaultRepresentation] retain];
NSURL *url = [representation url];
AVURLAsset *aAsset = [[AVURLAsset URLAssetWithURL:url options:nil] retain];
metaDataDict = [[NSMutableDictionary dictionary] retain];
NSArray *fmtmetadata = [aAsset metadataForFormat:@"com.apple.itunes"];
for (AVMetadataItem* meta in fmtmetadata)
{
    [metaDataDict setObject:[meta stringValue]
             forKey:[meta key]];
    NSLog(@"metadata: key = %@", [meta key]);
}

Это приводит к следующему выводу в консоли отладчика:

metadata: key = -1452383891
metadata: key = -1452841618
metadata: key = 1684370275
metadata: key = 1818518899
metadata: key = 1937009003
metadata: key = -1453101708

Кстати, изменив строку NSLog следующим образом:

NSLog(@"metadata: %@", meta);

дает нам вывод как:

metadata: keySpace=itsk, key=desc, commonKey=(null), locale=(null), value=This is the Description of the Video, time={INVALID}, duration={INVALID}, extras={
    dataType = 1;
}

Любая помощь очень ценится!

1 Ответ

10 голосов
/ 21 февраля 2011

Похоже, эти ключи представляют собой закодированные теги ID3:

1684370275 = 0x64657363 = {'d', 'e', ​​'s', 'c'}

1818518899 = 0x6C646573 = {'l', 'd', 'e', ​​'s'}

1937009003 = 0x7374696B = {'s', 't', 'i', 'k'}

и т. д..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...