2010-04-18 70 views
1

我在Objective-C中创建应用程序,我需要从SHOUTcast流中获取元数据。我试过这个:在Mac上获取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]; 

我将不得不从这个请求头获取信息,对不对?不幸的是,它不断返回这些标头:

Date =“2010年4月17日21:57:14 -0200”;;

"Max-Age" = 0; 

我做错了什么?

+0

你指的是什么的元数据解决方案?歌曲名称,艺术家和专辑? – 2010-04-18 01:32:38

+0

歌名和艺人姓名。 – 2010-04-18 23:15:57

回答

6

我找到了这个问题的答案。只需在URL末尾附加一个7.html并解析文件即可。

I.E. http://38.96.148.138:7534/7.html

+1

这不工作了 – 2015-09-14 19:19:58

0

似乎shoutcast不遵循HTTP交换标准,它的响应标头和正文不会被两条换行符分开。 NSURLConnection/NSURLResponse无法解析出标题;然而,connection:didReceiveResponse:仍然被解雇,只是一个空的NSURLResponse。如果我们看看connection:didReceiveData:中的数据,这变得很清楚。收到的第一个块将包含元数据标题。

+0

谢谢!我试过这个,有时它会返回元数据,有时它不会。还有另一种方法可以做到吗?我尝试过: - (void)连接:(NSURLConnection *)连接didReceiveData:(NSData *)数据NSPtring * metadata = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; \t NSRange range = [metadata rangeOfString:@“StreamTitle =”options:(NSCaseInsensitiveSearch | NSBackwardsSearch)];如果(range.length> 0){ \t { \t \t NSLog(@“%@”,metadata); (@“%@ no range”,元数据);其他{ } \t} \t else { \t \t NSLog \t} } – 2010-04-18 23:33:43

+0

http://www.smackfu.com/stuff/programming/shoutcast.html - 这可能会有所帮助。 – freeatnet 2010-04-19 01:45:04

+0

我试过这个没有运气:( – 2010-04-19 01:51:15