Получение метаданных из MPMoviePlayerController - PullRequest
6 голосов
/ 23 декабря 2011

Хорошо. Итак, у меня есть живой поток с URL-адреса с помощью MPMoviePlayerController.

Player = [[MPMoviePlayerController alloc] 
               initWithContentURL:[NSURL URLWithString:@"MY_URL_HERE_I_REMOVED"]];
Player.movieSourceType = MPMovieSourceTypeStreaming

Теперь поток дает метаданные (я так думаю, так все и называют).Например.Название трека и т. Д.

Я хочу получить эту информацию и отобразить ее на ярлыке.

Я понятия не имею, как его получить, я не могу перейти от MPMoviePlayerController и после поиска часов я нашел MPTimedMetadata ссылку на класс, но не знаю, как использовать, чтобы получить эту информацию.1011 * Замечательно, если вы можете упомянуть, как использовать уведомление также для запуска при каждом изменении этих данных.

1 Ответ

15 голосов
/ 15 марта 2012

Предполагая, что вы уже знаете, какие метаданные отправляются из потока (если вы этого не делаете, используйте для просмотра медиаплеер, например, VLC), вы должны сначала зарегистрировать уведомление, чтобы получать метаданные через определенные интервалы времени, а затем метод для их обработки.

Начиная с уведомления, просто

 [[NSNotificationCenter defaultCenter] addObserver:self
                                          selector:@selector(MetadataUpdate:)
                                              name:MPMoviePlayerTimedMetadataUpdatedNotification
                                            object:nil];

после выделения MPMoviePlayerController.

Затем по методу MetadataUpdate

- (void)MetadataUpdate:(NSNotification*)notification
{
    if ([streamAudioPlayer timedMetadata]!=nil && [[streamAudioPlayer timedMetadata] count] > 0) {
        MPTimedMetadata *firstMeta = [[streamAudioPlayer timedMetadata] objectAtIndex:0];
        metadataInfo = firstMeta.value;
    }
}

где streamAudioplayer - это ваш MPMoviePlayerController, а metadataInfo - строка NSS для хранения значения. Выше будет получена информация об исполнителе и треке текущей воспроизводимой песни.

Это относится к стандартным метаданным, отправляемым потоком shoutcast или icecast. (не могу сказать за других, потому что я их не пробовал)

Обратите внимание, что каждый поток может обрабатывать и отправлять разные метаданные. Поскольку [streamAudioPlayer timedMetadata] является NSArray, вы можете

NSArray *metaArray = [streamAudioPlayer timedMetadata];
NSLog (@"%i", [metaArray count]); //to see how many elements in the array
MPTimedMetadata *firstMeta = [[streamAudioPlayer timedMetadata] objectAtIndex:0];

Затем используйте консоль отладки для отображения содержимого метаданных с использованием свойств key, keyspace, timestamp, value.

Все вышеизложенное является лишь примером. Не существует единого способа обработки метаданных. Подробную информацию можно найти на

https://developer.apple.com/library/ios/#DOCUMENTATION/MediaPlayer/Reference/MPTimedMetadata_Class/Reference/Reference.html

для ссылки на класс MPTimedMetadata и оттуда ... код на!

...