Suponiendo que ya sabe qué tipo de metadatos se envía desde la transmisión (si no lo hace, use un reproductor multimedia como VLC), primero debe registrar una notificación para obtener los metadatos en intervalos de tiempo y luego un método para procesarlos.
A partir de la notificación, solo
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(MetadataUpdate:)
name:MPMoviePlayerTimedMetadataUpdatedNotification
object:nil];
después de la asignación MPMoviePlayerController.
A continuación, en el método metaDataUpdate
- (void)MetadataUpdate:(NSNotification*)notification
{
if ([streamAudioPlayer timedMetadata]!=nil && [[streamAudioPlayer timedMetadata] count] > 0) {
MPTimedMetadata *firstMeta = [[streamAudioPlayer timedMetadata] objectAtIndex:0];
metadataInfo = firstMeta.value;
}
}
donde streamAudioplayer es su MPMoviePlayerController y metadataInfo un NSString para almacenar el valor. Lo anterior obtendrá la información del artista y la pista de la canción que se está reproduciendo actualmente.
Este es el caso del envío de metadatos estándar por una transmisión shoutcast o icecast. (no se puede decir para otros porque no los he probado)
Tenga en cuenta que cada flujo puede manejar y enviar metadatos diferentes. Desde [streamAudioPlayer timedMetadata] es un NSArray que pueda
NSArray *metaArray = [streamAudioPlayer timedMetadata];
NSLog (@"%i", [metaArray count]); //to see how many elements in the array
MPTimedMetadata *firstMeta = [[streamAudioPlayer timedMetadata] objectAtIndex:0];
Uso entonces la consola de depuración para mostrar el contenido de los metadatos utilizando las propiedades clave, espacio de claves, fecha y hora, valor.
Todo lo anterior es solo un ejemplo. No hay una sola forma de manejar los metadatos. La información detallada se puede encontrar en
https://developer.apple.com/library/ios/#DOCUMENTATION/MediaPlayer/Reference/MPTimedMetadata_Class/Reference/Reference.html
para la referencia de clase MPTimedMetadata y desde allí ... en el código!
¡Increíble! ¡Gracias! – Genevios
Hola ... cuatro años después, pero aún así, ¿puedo preguntar ... hay algún caso en el que el método 'timedMetadata' devuelva una matriz con más de una instancia' MPTimedMetadata'? En este momento estoy usando un bucle 'for-in' para obtener todos ellos, pero me pregunto si eso es realmente necesario en lugar de simplemente usar el primer elemento de la matriz. ¡Gracias! –
Técnicamente hablando ... Podría. Esto requeriría una versión de Icecast compilada a medida o una nueva versión de Shoucast/Icecast que lo modifique. En casos especiales, * podría * devolver un segundo objeto con * probablemente * la dirección web de la estación.En mi experiencia, estoy 100% seguro de que los servidores estándar de Shoutcast/Icecast tendrán los metadatos en el primer objeto (índice 0). – Pericles