Получение метаданных из аудиопотока
Я хотел бы получить имя файла и, если возможно, изображение альбома из потокового URL-адреса в AVPlayerItem, который я играю с AVQueuePlayer, но я не знаю, как это сделать.
также, если окажется, что мой потоковый URL-адрес не имеет метаданных, я могу поместить метаданные в свой NSURL*
прежде чем передать его в AVPlayerItem?
спасибо.
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
вы только что нашли.
надеюсь, что это помогает любому, кто может оказаться с той же проблемой.
при получении определенного элемента я бы использовал константу общих ключей метаданных, объявленную в 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;