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];


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM