Mi aplicación descarga un mp3 de nuestro servidor y lo reproduce para el usuario. El archivo es de 64 kbps (que está dentro del rango aceptable para iPhone si lo entiendo correctamente). He mirado cómo hacer esto en docenas de sitios y todos ellos sugieren que hago exactamente esto:iPhone: tipo de archivo no compatible con AVAudioPlayer
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://.../file.mp3"]];
NSError *e = nil;
AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithData:data error&e];
[player setDelegate:self];
Cuando ejecuto el código, el jugador vuelve nula y me sale este error:
2011-02-04 10:44:46.176 MyApp[6052:207] Error loading audio: Error Domain=NSOSStatusErrorDomain Code=1954115647 "The operation couldn’t be completed. (OSStatus error 1954115647.)"
2011-02-04 10:44:49.647 MyApp[6052:207] unsupported file type
He comprobado el archivo y sé que funciona. Jugará sin problemas en Windows Media Player y Quicktime en Mac. También he subido el archivo al emulador de iPhone y funciona sin problemas. El archivo está bien, pero por alguna razón AVAudioPlayer no le gusta.
¿Hay algo que deba cambiar? ¿Existe algún tipo de ajuste para que NSData especifique qué tipo de archivo es? ¿Alguien tiene alguna idea?
Oh, eso es muy interesante. Tal vez eso debería enviarse a Apple como un error? Al final opté por el archivo guardado de todos modos porque encajaba mejor con lo que estábamos tratando de hacer. ¡Gracias por el consejo! – mtmurdock
¿Cómo sabe exactamente qué bytes cortar y cómo lo hizo? – typeoneerror
@typeoneerror: tomé un archivo específico, lo miré con un editor hexadecimal y leí las especificaciones mp3 para ver cómo se definió el encabezado. Fue entonces cuando noté la discrepancia. No muy general, lo sé ... Programáticamente, podría ver los primeros bytes de NSData y omitir cualquiera que sea 0. – Don