【问题标题】:Getting SHOUTcast metadata on the Mac在 Mac 上获取 SHOUTcast 元数据
【发布时间】:2012-11-27 20:12:10
【问题描述】:

我正在用 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];

我必须从此请求中获取标头才能获取信息,对吗?不幸的是,它一直返回这些标题:

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

"Max-Age" = 0;

我做错了什么?

【问题讨论】:

  • 你指的是什么元数据?歌名、艺术家和专辑?

标签: objective-c cocoa stream metadata shoutcast


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    费尔南多·瓦伦特对这个问题的解决方案

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

    【讨论】:

      【解决方案3】:

      看起来,shoutcast 不遵循 HTTP 交换标准,并且它的响应标头和正文没有被两个换行符分隔。 NSURLConnection/NSURLResponse 无法解析出标头;然而,connection:didReceiveResponse: 仍然被触发,只是带有一个空的 NSURLResponse。如果我们看一下来自connection:didReceiveData: 的数据,这一点就会变得很清楚。收到的第一个块将包含元数据标头。

      【讨论】:

      • 谢谢!我试过这个,有时它会返回元数据,有时它不会。还有另一种方法吗?我试过这个:-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{ NSString *metadata = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]; NSRange range = [元数据 rangeOfString:@"StreamTitle=" options:(NSCaseInsensitiveSearch | NSBackwardsSearch)]; if(range.length > 0){ NSLog(@"%@", metadata); } else { NSLog(@"%@ no range", metadata); } }
      猜你喜欢
      • 1970-01-01
      • 2014-10-28
      • 1970-01-01
      • 2012-03-03
      • 2023-03-19
      • 1970-01-01
      • 2015-10-07
      • 2022-01-23
      • 2010-12-03
      相关资源
      最近更新 更多