Получение метаданных из аудиопотока

Я хотел бы получить имя файла и, если возможно, изображение альбома из потокового URL-адреса в AVPlayerItem, который я играю с AVQueuePlayer, но я не знаю, как это сделать.

Кроме того, если выяснится, что мой потоковый URL-адрес не имеет метаданных, могу ли я поместить метаданные в свой NSURL* перед передачей его в AVPlayerItem?

Спасибо.


person raixer    schedule 10.10.2011    source источник
comment
Я использую API Dropbox для получения URL-адреса потока   -  person raixer    schedule 10.10.2011
comment
аудио да. но я думаю, что не имеет значения, если это аудио или видео. Они оба обрабатываются одним и тем же AVPlayerItem.   -  person raixer    schedule 10.10.2011
comment
stackoverflow.com/questions/44535465/ Помогите мне Спасибо заранее....   -  person Divyesh Gondaliya    schedule 14.06.2017


Ответы (2)


Что ж, я удивлен, что никто не ответил на этот вопрос. На самом деле никто не ответил ни на один из моих других вопросов. Заставляет меня задаться вопросом, сколько знаний люди здесь действительно имеют.

В любом случае, я продолжу и отвечу на свой вопрос. Я узнал, как получить метаданные, выполнив следующие действия:

AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:url];
NSArray *metadataList = [playerItem.asset commonMetadata];
for (AVMetadataItem *metaItem in metadataList) {
    NSLog(@"%@",[metaItem commonKey]);
}

Что дает мне список следующим образом:

title
creationDate
artwork
albumName
artist

Теперь с этим списком я знаю, как получить доступ к метаданным из моего аудиопотока. Просто просмотрите NSArray и найдите AVMetadataItem, у которого есть commonKey, который мне нужен (например, title). Затем, когда я нахожу AVMetadataItem, просто получаю от него свойство value.

Теперь это прекрасно работает, но возможно, что когда вы попытаетесь получить данные, это займет некоторое время. Вы можете загрузить данные асинхронно, отправив loadValuesAsynchronouslyForKeys:completionHandler: только что найденному AVMetadataItem.

Надеюсь, что это поможет всем, кто может столкнуться с той же проблемой.

person raixer    schedule 20.10.2011
comment
по какой-то причине мои общие метаданные имеют значение 0. Принимая во внимание, что timedmetadata имеет одно значение [название] - person Yestay Muratov; 28.12.2016
comment
Хорошая работа по проведению собственного исследования и поиску ответа. Слава :) - person James Walker; 09.08.2020

При извлечении определенного элемента я бы использовал константу общих ключей метаданных, объявленную в AVMetadataFormat.h, то есть: AVMetadataCommonKeyTitle.

NSUInteger titleIndex = [avItem.asset.commonMetadata indexOfObjectPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
    AVMutableMetadataItem *metaItem = (AVMutableMetadataItem *)obj;
    if ([metaItem.commonKey isEqualToString:AVMetadataCommonKeyTitle]) {
        return YES;
    }
    return NO;
}];

AVMutableMetadataItem *item = [avItem.asset.commonMetadata objectAtIndex:titleIndex];
NSString *title = (NSString *)item.value;
person Korey Hinton    schedule 09.04.2014
comment
stackoverflow.com/questions/44535465/ Помогите мне Спасибо заранее.... - person Divyesh Gondaliya; 14.06.2017