2010-04-18 15 views
1

Je crée une application en Objective-C et j'ai besoin d'obtenir les métadonnées d'un flux SHOUTcast. J'ai essayé ceci:Obtenir des métadonnées SHOUTcast sur le Mac

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]; 

Je devrais obtenir les en-têtes de cette demande afin d'obtenir les informations, non? Malheureusement, il continue de renvoyer ces en-têtes:

Date = "17 avr 2010 21:57:14 -0200";

"Max-Age" = 0; 

Ce que je fais mal?

+0

les métadonnées faites-vous référence? Le titre de la chanson, l'artiste et l'album? –

+0

Titre de la chanson et nom de l'artiste. –

Répondre

6

J'ai trouvé une réponse à cette question. Ajoutez simplement un 7.html à la fin de l'URL et analysez le fichier.

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

+1

cela ne marche plus –

0

Il semble que shoutcast ne respecte pas les normes d'échange HTTP et que ses en-têtes et corps de réponse ne soient pas séparés par deux retours à la ligne. NSURLConnection/NSURLResponse sont incapables d'analyser les en-têtes; Cependant, connection:didReceiveResponse: est toujours déclenché, juste avec une réponse NSURL vide. Cela devient clair si l'on regarde les données à venir en connection:didReceiveData:. Le premier bloc reçu contiendra des en-têtes de métadonnées.

+0

Merci! J'ai essayé cela et parfois il renvoie les métadonnées, parfois non. Y a-t-il un autre moyen de le faire? J'ai essayé ceci: - (void) connexion: (NSURLConnection *) connexion didReceiveData: (NSData *) données { \t NSString * metadata = [[NSString alloc] initWithData: codage de données: NSUTF8StringEncoding]; \t NSRange range = [metadata rangeOfString: @ "Options StreamTitle =": (NSCaseInsensitiveSearch | NSBackwardsSearch)]; \t if (plage.longueur> 0) { \t \t NSLog (@ "% @", métadonnées); \t} \t autre { \t \t NSLog (@ "% @ no range", métadonnées); \t} } –

+0

http://www.smackfu.com/stuff/programming/shoutcast.html - cela peut être utile. – freeatnet

+0

J'ai essayé cela sans aucune chance :( –

Questions connexes