iOS使用AVAudioPlayer播放data音频文件遇到的问题

最近使用tencent的IM由机器段向手机端传输音频文件并在手机端播放该文件,由于我们项目中的机器录音设备的录音类型有mp3、wav这2种。在使用AVAudioPlayer播放时发现,当录音类型为wav时可以顺利播放、但是当录音类型切换为mp3时,发现没有声音。

  1. 检查log发现
  2. 1     NSError *error;
    2     self.myPlay = [[AVAudioPlayer alloc] initWithData:vData error:&error];

    error => Domain=NSOSStatusErrorDomain Code=1954115647

   检查发现,code=1954115647的原因是:跟文件的检测有关、在下载文件时不完整,所以创建失败了!解决方案如下:

  1. 可以现将文件存储至本地再使用文件。如下:
  2.  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]; }

     

  3. 有的时候可能并不需要保存文件至本地,播放完成即可。如下:

    使用以下创建方法

  1. 1 NSError *error;
    2 self.myPlay = [[AVAudioPlayer alloc] initWithData:vData fileTypeHint:AVFileTypeWAVE error:&error];//AVFileTypeWAVE 为音频格式

    替换 

  2. 1 NSError *error;
    2 self.myPlay = [[AVAudioPlayer alloc] initWithData:vData error:&error];
posted @ 2017-06-09 10:15  isHakan  阅读(4678)  评论(0编辑  收藏  举报