Zakładając, że już wiesz, jakie rodzaje metadanych są wysyłane ze strumienia (jeśli nie, użyj odtwarzacza multimedialnego, takiego jak VLC, aby zobaczyć), musisz najpierw zarejestrować powiadomienie, aby uzyskać metadane w określonych odstępach czasu i to metoda ich przetwarzania.
Począwszy od zgłoszenia, tylko
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(MetadataUpdate:)
name:MPMoviePlayerTimedMetadataUpdatedNotification
object:nil];
po alokacji MPMoviePlayerController.
Następnie na metodzie MetadataUpdate
- (void)MetadataUpdate:(NSNotification*)notification
{
if ([streamAudioPlayer timedMetadata]!=nil && [[streamAudioPlayer timedMetadata] count] > 0) {
MPTimedMetadata *firstMeta = [[streamAudioPlayer timedMetadata] objectAtIndex:0];
metadataInfo = firstMeta.value;
}
}
gdzie streamAudioplayer jest Twój MPMoviePlayerController i metadataInfo NSString do przechowywania wartości. Powyższe spowoduje wyświetlenie informacji o wykonawcy i ścieżce aktualnie odtwarzanej piosenki.
Dotyczy to standardowych wysyłanych metadanych w strumieniu wiadomości lub wiadomości. (nie mogę powiedzieć o innych, ponieważ ich nie próbowałem)
Należy pamiętać, że każdy strumień może obsługiwać i wysyłać różne metadane. Od [streamAudioPlayer timedMetadata] jest NSArray możesz
NSArray *metaArray = [streamAudioPlayer timedMetadata];
NSLog (@"%i", [metaArray count]); //to see how many elements in the array
MPTimedMetadata *firstMeta = [[streamAudioPlayer timedMetadata] objectAtIndex:0];
Zastosowanie wówczas konsola debugowania, aby pokazać zawartości metadanych za pomocą właściwości klucz, KEYSPACE, datownika, wartości.
Wszystkie powyższe to tylko przykład. Nie ma jednej metody radzenia sobie z metadanymi. Szczegółowe informacje można znaleźć na stronie
https://developer.apple.com/library/ios/#DOCUMENTATION/MediaPlayer/Reference/MPTimedMetadata_Class/Reference/Reference.html
na odniesienie klasy MPTimedMetadata a stamtąd ... na kod!
Niesamowite !!! Dzięki! – Genevios
Cześć ... cztery lata później, ale czy mogę zapytać ... czy istnieje przypadek, w którym metoda 'timedMetadata' zwraca tablicę z więcej niż jedną instancją' MPTimedMetadata'? W tej chwili używam pętli 'for-in', aby uzyskać wszystkie z nich, ale zastanawiam się, czy to naprawdę konieczne, zamiast używać tylko pierwszego elementu tablicy. Dzięki! –
Technicznie rzecz biorąc ... Mogłoby. Wymagałoby to albo skompilowanej na zamówienie wersji Icecast albo nowej wersji Shoucast/Icecast, która to zmienia. W szczególnych przypadkach może * zwrócić * drugi obiekt z * prawdopodobnie * adresem sieci stacji.Z mojego doświadczenia wynika, że jestem w 100% pewna, że standardowe serwery Shoutcast/Icecast będą miały metadane na pierwszym obiekcie (indeks 0). – Pericles