Получение метаданных SHOUTcast на Mac

Я создаю приложение на Objective-C, и мне нужно получить метаданные из потока SHOUTcast. Я пробовал это:

NSURL *URL = [NSURL URLWithString:@"http://202.4.100.2:8000/"];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL];
    [request addValue:@"1" forHTTPHeaderField:@"icy-metadata"];
    [request addValue:@"Winamp 5/3" forHTTPHeaderField:@"User-Agent"];
    [request addValue:@"audio/mpeg" forHTTPHeaderField:@"Content-Type"];
    [NSURLConnection connectionWithRequest:request delegate:self];

Мне нужно было бы получить заголовки из этого запроса, чтобы получить информацию, верно? К сожалению, он продолжает возвращать эти заголовки:

Дата = 17 апреля 2010 г. 21:57:14 -0200;

"Max-Age" = 0;

Что я делаю неправильно?


person Fernando Valente    schedule 18.04.2010    source источник
comment
Какие метаданные вы имеете в виду? Название песни, исполнитель и альбом?   -  person Peter Hosey    schedule 18.04.2010


Ответы (3)


Я нашел ответ на этот вопрос. Просто добавьте 7.html в конце URL-адреса и проанализируйте файл.

т.е. http://38.96.148.138:7534/7.html

person Community    schedule 08.10.2010

Решение Фернандо Валенте для этой проблемы

http://www.fvalente.org/blog/2012/03/15/shoutcast-metadata-the-easy-way/

person bugrasitemkar    schedule 27.11.2012

Кажется, что Shoutcast не следует стандартам обмена HTTP, а его заголовки и тело ответа не разделены двумя символами новой строки. NSURLConnection/NSURLResponse не могут проанализировать заголовки; однако connection:didReceiveResponse: по-прежнему запускается, только с пустым NSURLResponse. Это станет ясно, если мы посмотрим на данные, поступающие в connection:didReceiveData:. Первый полученный фрагмент будет содержать заголовки метаданных.

person freeatnet    schedule 18.04.2010
comment
Спасибо! Я пробовал это, и иногда он возвращает метаданные, иногда нет. Есть ли другой способ сделать это? Я пробовал это: -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{ NSString *metadata = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]; NSRange range = [metadata rangeOfString:@StreamTitle= options:(NSCaseInsensitiveSearch | NSBackwardsSearch)]; if(range.length › 0){ NSLog(@%@, метаданные); } else { NSLog(@%@ нет диапазона, метаданные); } } - person Fernando Valente; 19.04.2010