2009-10-22 9 views
17

Mi problema es el siguiente. Tengo este código y supongo que un NSURL corrupta ya que el AVAudioPlayer es nula después de inicializar:AVAudioPlayer con URL externa a * .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]; 

Cualquier sugerencia lo que está mal aquí?

El error & muestra esto:

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

¿De dónde vino la URL? – mahboudz

Respuesta

9

probé este principio, pero ha obtenido un error 2003334207:

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

Parece que AVAudioPlayer realmente quiere un archivo. Primero coloco los datos en un archivo:

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

Muchas gracias, esto resolvió el primer paso :) Pero me parece que el AVAudioPlayer no puede reproducir el archivo m4p :(... no comienza a reproducirse ni responde a ningún método de delegado :( – tommy

+0

nuevo código de prueba. Lo tengo para jugar por un momento breve y luego se detuvo. Todavía estoy investigando. ¿De dónde es la URL? – mahboudz

+0

Gracias a su fantástica respuesta, puedo solucionar un problema similar. – zono

6

En lugar de usar el AVAudioPlayer, puede usar el AVPlayer. El AVPlayer funciona también con URL remotas

Cuestiones relacionadas