Мне было довольно трудно извлечь информацию 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
, я получаю "sun" для первого и "tmet" для второго. Я предполагаю, что первая дорожка — это сами аудиоданные, а вторая дорожка — метаданные. Однако я вижу только пустой массив в commonMetadata
.
Я также проверяю состояние свойств, используя statusOfValueForKey:error
на дорожках, и ключ commonMetadata
всегда возвращается как AVKeyValueStatusLoaded
.
Любые идеи? Я тут в полной растерянности.
Кроме того, в настоящее время я запускаю это через симулятор iPhone 4 под управлением iOS 4.2.1. Я еще не могу установить его на устройство, так как Apple все еще утверждает учетную запись разработчика моей компании.