AVAudioplayer时error解决 建立失败 ERror creating player: Error Domain=NSOSStatusErrorDomain Code=2003334207

AVAudioplayer 有两个初始化方法:网络

一、[[AVAudioPlayer alloc] initWithData:musicData error&e];
二、[[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]; }



局限性:recorder,player简单易用,可是有局限性。
对我项目影响最大的是,屡次录音时,并播放时,会出现文件错误。
在继续利用recorder,player的前提下,就须要将每次录音完成的文件进行数据追加。app

if ([[NSFileManager defaultManager] fileExistsAtPath:临时音频路径) { NSData *tempAudioData = [[NSData alloc] initWithContentsOfFile:临时音频路径]; if ([[NSFileManager defaultManager] fileExistsAtPath:音频路径]) { NSMutableData *newAudioData = [NSMutableData data]; NSData *audioData = [[NSData alloc] initWithContentsOfFile:[self configureAudioRecordFilePath:self.currentFileName]]; [newAudioData appendData:audioData]; [newAudioData appendData:tempAudioData]; PADebug(@"data length:%zd", [newAudioData length]); [newAudioData writeToFile:音频路径 atomically:YES]; }else { [tempAudioData writeToFile:[self configureAudioRecordFilePath:self.currentFileName] atomically:YES]; } [[NSFileManager defaultManager]removeItemAtPath:音频路径 error:nil]; }
相关文章
相关标签/搜索