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]; }
相關文章
相關標籤/搜索