Извлечение тегов ID3 ​​из MP3 через HTTP Live Streaming

Мне было довольно трудно извлекать информацию ID3 из MP3, передаваемого через Live HTTP Streaming (используя медиа-сервер Wowza, если кому-то интересно). Я знаю, что теги (сейчас тег альбома и тег обложки альбома) правильно встроены в каждый из сегментов файла, потому что, когда я загружаю их вручную, я вижу их в каждом сегменте, как указано в .m3u индексный файл, сгенерированный сервером.

Я использую классы AVFoundation для этого, и у меня он настроен как таковой:

- (void)initializeAudioStream {
    NSURL *streamUrl = [NSURL URLWithString:self.urlField.text];
    AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:streamUrl];
    self.musicPlayer = [AVPlayer playerWithPlayerItem:playerItem];
    self.musicPlayer.actionAtItemEnd = AVPlayerActionAtItemEndNone;
    [self.musicPlayer addObserver:self forKeyPath:@"status" options:NSKeyValueObservingOptionNew context:NULL];
}

Как только мой метод KVO запускается, я начинаю играть self.musicPlayer , и я вызываю на нем addPeriodicTimeObserverForInterval каждые 1/4 секунды. Именно этим методом я пытаюсь извлечь метаданные ID3.

Я испробовал все, что мог придумать для iOS, чтобы добиться этого, включая печать

self.musicPlayer.currentItem.asset.commonMetadata

, а также итерацию по каждому из экземпляров AVAssetTrack и распечатку их метаданных.

for (AVAssetTrack *track in self.musicPlayer.currentItem.asset.tracks) {
    NSLog(@"Media type of track: %@", track.mediaType);
    NSLog(@"Track metadata: %@", track.commonMetadata);
}

Что интересно, в активе всегда указано, что у него 2 дорожки. Когда я распечатываю их свойство mediaType , я получаю «soun» для первого и «tmet» для второго. Я предполагаю, что первая дорожка - это сами аудиоданные, а вторая - метаданные. Однако я вижу только пустой массив в commonMetadata .

Я также проверяю статус свойств, используя statusOfValueForKey: error на дорожках и commonMetadata всегда возвращается как AVKeyValueStatusLoaded .

Есть идеи? Я здесь в полной растерянности.

Кроме того, В настоящее время я запускаю это через симулятор iPhone 4 под управлением iOS 4.2.1. Я пока не могу поставить его на устройство, поскольку Apple все еще утверждает учетную запись разработчика моей компании.

12
задан Marc W 23 February 2011 в 00:17
поделиться