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.

Respuestas a la pregunta(3)

Su respuesta a la pregunta