AVAudioplayer时error解决 创建失败
AVAudioplayer 有两个初始化方法: 1、[[AVAudioPlayer alloc] initWithData:musicData error&e]; 2、[[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:&error]; 第一种是使用将音频文件的data文件初始化,但是data必须是一个完整的文件。 第二种是从url获取,但是这里的url是本地的file URL。
所以AVAudioplayer无法直接从网络url上获取音频文件,所以可以用: data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@”http://…/file.mp3“]];
将网络上音频down下来,再用initWithData初始化player。但是这样down下来的文件有时是不完整的,所以出现创建失败问题,出现: Error Domain=NSOSStatusErrorDomain Code=1954115647 解决这个问题的方法就是将data保存在本地,在通过initWithContentsOfURL,找到该文件,这样就可以成功创建了。
NSData *audioData = [NSData dataWithContentsOfURL:someURL]; NSString *docDirPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES) objectAtIndex:0]; NSString *filePath = [NSString stringWithFormat:@"%@/%@.mp3", docDirPath , fileName]; [audioData writeToFile:filePath atomically:YES]; NSError *error; NSURL *fileURL = [NSURL fileURLWithPath:filePath]; player = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:&error]; if (player == nil) { NSLog(@"AudioPlayer did not load properly: %@", [error description]); } else { [player play]; }