Мне нужно создать приложение, которое обеспечивает онлайн-радиопоток (icecast), желательно формат .ogg. Так что у меня следующие вопросы:
iOS online radio streaming вопросы
- Как я могу играть .ogg формат аудио потока? Есть ли поддерживаемые классы ? Потому что я не могу найти, так что я думаю, что это невозможно без многих поразрядных операций с использованием
CFNetwork
,CoreAudio
,AudioToolbox
и т.д. (я не смотрю на cocos2d, потому что это смешно) я не права? - Я сейчас играю в поток mp3 (для меня нет возможности для .ogg). Я пытался использовать
AVPlayer
,MPMovieMediaController
, AudioSreaming LIB по MattGallagher и DigitalDJ, и ни одно из этих решений не может предоставляет мне доступ метаданных.
Для AVPlayer:
-(void)playButtonPressed:(id)sender
{
NSURL *grindURL = [NSURL URLWithString:@"http://radio.goha.ru:8000/grind.fm"];
grindFMPlayer = [[AVPlayer alloc] initWithURL:grindURL];
[grindFMPlayer.currentItem addObserver:self forKeyPath:@"status" options:0 context:nil];
AVPlayerItem *item = grindFMPlayer.currentItem;
[grindFMPlayer play];
}
-(void)stopButtonPressed:(id)sender
{
AVURLAsset *ass = grindFMPlayer.currentItem.asset;
NSArray *arr = [ass commonMetadata];
NSArray *it_meta = [grindFMPlayer.currentItem timedMetadata];
[grindFMPlayer pause];
}
обр и it_meta подсчитывать всегда , ни песня \ группа \ любые метаданные.
То же самое для MPMovieMediaController
, metadataUpdate никогда не называли
streamAudioPlayer = [[MPMoviePlayerController alloc]
initWithContentURL:[NSURL URLWithString:@"http://radio.goha.ru:8000/grind.fm"];
streamAudioPlayer.movieSourceType = MPMovieSourceTypeStreaming;
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(MetadataUpdate:) name:MPMoviePlayerTimedMetadataUpdatedNotification object:nil];
[streamAudioPlayer play];
и стоп методом кнопки:
timedMeta = [streamAudioPlayer timedMetadata];
if ([streamAudioPlayer timedMetadata]!=nil && [[streamAudioPlayer timedMetadata] count] > 0)
{
NSLog(@"metadata count = %d", [[streamAudioPlayer timedMetadata] count]);
for (MPTimedMetadata *metadata in [streamAudioPlayer timedMetadata])
{
NSLog(@"description %@", metadata.allMetadata);
if ([[metadata.allMetadata valueForKey:@"key"] isEqualToString:@"title"])
{
NSString *text = [metadata.allMetadata valueForKey:@"value"];
NSString* filename = text;
}
}
}
[streamAudioPlayer timedMetadata]
всегда равна нулю.
Я попытался
Эти 2 проекта для пренадлежат и Icecast - http://www.mikejablonski.org/2009/04/17/reading-shoutcast-metadata-from-a-stream/
Но все-таки не везет, чтобы получить текущую информацию воспроизведения трека, который получен только в SHOUTcast app, как
первыйMetadata = 'StreamTitle='
,
второйmetadata = ''
и bitrate = '128000'
(Так что я думаю, что я должен иметь дело с байтами из HTTP заголовки ответа или что-то подобное? но wtf, это метаданные крики, но мой радиопоток - icecast. Не знаю)
Я был бы признателен за любую помощь!
и да, я видел какао с потоком сообщений «потоковое воспроизведение mp3» и HTTP Live Streaming Обзор – Aft3rmath
О метаданных ... На этот вопрос был дан ответ не реже одного раза в неделю. Поиск. Icecast построен для совместимости с SHOUTcast и возвращает метаданные таким же образом. – Brad
О, спасибо, я постараюсь его найти. – Aft3rmath