最近使用tencent的IM由机器段向手机端传输音频文件并在手机端播放该文件,由于我们项目中的机器录音设备的录音类型有mp3、wav这2种。在使用AVAudioPlayer播放时发现,当录音类型为wav时可以顺利播放、但是当录音类型切换为mp3时,发现没有声音。
- 检查log发现
-
1 NSError *error; 2 self.myPlay = [[AVAudioPlayer alloc] initWithData:vData error:&error];
error => Domain=NSOSStatusErrorDomain Code=1954115647
检查发现,code=1954115647的原因是:跟文件的检测有关、在下载文件时不完整,所以创建失败了!解决方案如下:
- 可以现将文件存储至本地再使用文件。如下:
-
1 NSData *audioData = [NSData dataWithContentsOfURL:someURL]; 2 NSString *docDirPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES) objectAtIndex:0]; 3 NSString *filePath = [NSString stringWithFormat:@"%@/%@.mp3", docDirPath , fileName]; 4 [audioData writeToFile:filePath atomically:YES]; 5 NSError *error; 6 NSURL *fileURL = [NSURL fileURLWithPath:filePath]; 7 player = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:&error]; 8 if (player == nil) 9 { NSLog(@"AudioPlayer did not load properly: %@", [error description]); } 10 else 11 { [player play]; }
- 有的时候可能并不需要保存文件至本地,播放完成即可。如下:
使用以下创建方法
-
1 NSError *error; 2 self.myPlay = [[AVAudioPlayer alloc] initWithData:vData fileTypeHint:AVFileTypeWAVE error:&error];//AVFileTypeWAVE 为音频格式
替换
-
1 NSError *error; 2 self.myPlay = [[AVAudioPlayer alloc] initWithData:vData error:&error];