1. 程式人生 > >使用AVAudioPlayer播放網路音樂

使用AVAudioPlayer播放網路音樂

  iOS中的AVAudioPlayer不支援邊下邊播,所以只能下載到本地再播放。

方法:

NSString *urlStr = @"http://…………xxx.mp3";
NSURL *url = [[NSURL alloc]initWithString:urlStr];
NSData * audioData = [NSData dataWithContentsOfURL:url];

//將資料儲存到本地指定位置         
NSString *docDirPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *filePath = [NSString stringWithFormat:@"%@/%@.mp3", docDirPath , @"temp"];
[audioData writeToFile:filePath atomically:YES];
      
//播放本地音樂          
NSURL *fileURL = [NSURL fileURLWithPath:filePath];
player = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:nil];
[player play];

注意程式碼中的player是類的私有變數,因為在ARC模式下如果定義區域性變數,出了作用域後物件會被銷燬。這個問題也是糾結了好久才搞明白。參見連結 

當然也可以不儲存檔案,只是將player的構造方法改為用data例項化即可。

總結:

下面說一下我遇到的各種問題:

1、由於添加了All Exception斷點,導致每次都在初始化的時候自動斷到,因為不是OC異常,又無異常資訊顯示。這時應該編輯斷點,將其型別由All改為OC。這個異常並不會導致程式的崩潰,所以可以不作處理。

2、網上有的說不能播放,解決方案是應該在 AppDelegate.m檔案中的

application  didFinishLaunchingWithOptions 新增這樣一句程式碼:

[[AVAudioSessionsharedInstance]setCategory:AVAudioSessionCategoryPlaybackerror:nil];

我也沒看到效果,但有很多人支援,就暫且記下地址:連結 

附:

另外,流式播放,也就是邊下邊播,是別人的例子:下載