Extrayendo etiquetas ID3 de MP3 sobre HTTP Live Streaming
Me ha resultado bastante difícil extraer información ID3 de un MP3 que se transmite a través de Live HTTP Streaming (utilizando el servidor de medios Wowza, si alguien tiene curiosidad). Sé que las etiquetas (en este momento, la etiqueta del álbum y la etiqueta de la carátula del álbum) se están incrustando correctamente en cada uno de los segmentos del archivo porque cuando las descargo manualmente puedo verlas en cada segmento como se enumera en.m3u
archivo de índice generado por el servidor.
Estoy usando laAVFoundation
clases para hacer esto, y lo tengo configurado como tal:
- (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];
}
Una vez que se activa mi método KVO, empiezo a jugarself.musicPlayer
y llamoaddPeriodicTimeObserverForInterval
en él por cada 1/4 de segundo. Es en este método que trato de extraer los metadatos ID3.
He intentado todo lo que puedo pensar en el lado de iOS para lograr esto, incluida la impresión de
self.musicPlayer.currentItem.asset.commonMetadata
así como iterar sobre cada una de lasAVAssetTrack
instancias e impresións metadatos.
for (AVAssetTrack *track in self.musicPlayer.currentItem.asset.tracks) {
NSLog(@"Media type of track: %@", track.mediaType);
NSLog(@"Track metadata: %@", track.commonMetadata);
}
Lo interesante es que el activo siempre dice que tiene 2 pistas. Cuando imprimo sumediaType
propiedad obtengo "soun" para el primero y "tmet" para el segundo. Mi suposición es que la primera pista son los datos de audio en sí y la segunda pista son los metadatos. Sin embargo, solo veo una matriz vacía encommonMetadata
.
También verifico el estado de las propiedades usandostatusOfValueForKey:error
en las pistas y elcommonMetadata
clave siempre vuelve comoAVKeyValueStatusLoaded
.
¿Algunas ideas? Estoy completamente perdido aquí.
Además, actualmente estoy ejecutando esto a través del simulador de iPhone 4 con iOS 4.2.1. Todavía no puedo ponerlo en un dispositivo ya que Apple todavía está aprobando la cuenta de desarrollador de mi empresa.