2009-10-22 6 views
17

Mon problème est le suivant. Je suis arrivé ce code et je suppose un NSURL corrompu depuis le AVAudioPlayer est nul après l'initialisation:AVAudioPlayer avec URL externe vers * .m4p

NSString *dummyURLString = @"http://a825.phobos.apple.com/us/r2000/005/Music/d8/a8/d2/mzi.jelhjoev.aac.p.m4p"; 
NSError *error; 
NSURL *url = [NSURL URLWithString:dummyURLString]; 
AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error]; 
[player play]; 

Toutes les suggestions ce qui ne va pas ici?

L'erreur & montre ceci:

Error Domain=NSOSStatusErrorDomain Code=-43 "Operation could not be completed. (OSStatus error -43.)" 
+0

D'où vient l'URL? – mahboudz

Répondre

9

J'ai essayé cette première mais eu erreur 2003334207:

NSData *soundData = [NSData dataWithContentsOfURL:URL]; 
AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithData:soundData error:&error]; 

Il semble que AVAudioPlayer veut vraiment un fichier. Donc, je mets les données dans un fichier premier:

NSURL *url = [NSURL URLWithString:@"http://a825.phobos.apple.com/us/r2000/005/Music/d8/a8/d2/mzi.jelhjoev.aac.p.m4p"]; 
NSData *soundData = [NSData dataWithContentsOfURL:url]; 
NSString *filePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 
         NSUserDomainMask, YES) objectAtIndex:0] 
         stringByAppendingPathComponent:@"sound.caf"]; 
[soundData writeToFile:filePath atomically:YES]; 
player = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL 
       fileURLWithPath:filePath] error:NULL]; 
NSLog(@"error %@", error); 
+0

Merci beaucoup, cela a résolu la première étape :) Mais il me semble que AVAudioPlayer ne peut pas lire le fichier m4p :(... il ne commence pas à jouer ou répondre à une méthode déléguée :( – tommy

+0

Donner le nouveau code un essai Je l'ai eu pour jouer pendant un bref moment et puis il s'est arrêté.Enquêtant encore.Où est l'URL de? – mahboudz

+0

Merci à votre réponse fantastique, je peux résoudre un problème similaire. – zono

6

Au lieu d'utiliser la AVAudioPlayer vous pouvez utiliser le AVPlayer. L'AVPlayer fonctionne également avec les URL distantes

Questions connexes