簡體   English   中英

如何識別AVAudioPlayer正在播放歌曲

[英]How to identify AVAudioPlayer is streaming the song

我正在用AVAudioPlayer播放歌曲。 實際上,我正在URL的幫助下從服務器數據庫流式傳輸歌曲。 像這樣

NSURL * url = [NSURL URLWithString:@"myAudioURl"];
  NSData *data = [NSData dataWithContentsOfURL:url];    
  audioplayer = [[AVAudioPlayer alloc] initWithData:data error:nil];

同時檢索它需要幾秒鍾。.因此,要旋轉ActivityIndi​​cator直到播放歌曲。 我該怎么做?

您的問題是這樣的:

NSData *data = [NSData dataWithContentsOfURL:url];

由於多種原因,這是在iOS上下載數據的最糟糕的方法之一。 首先,它是同步的,因此,如果您在主線程上調用它,則這是一個阻塞操作(意味着您的整個UI都將凍結)。 快速WiFi連接僅需幾秒鍾,而蜂窩連接可能需要一分鍾或更長時間。

這也很糟糕,因為它不會為您提供任何進度或狀態更新。 如果下載失敗,您將不知道為什么出錯。 對於用戶的網絡連接,服務器還是其他完全不一樣的東西,您將一無所知。

因此,即使您在后台線程上運行dataWithContentsOfURL ,由於它不會為您提供任何錯誤處理或進度更新,因此仍遠非理想。

更好的方法是使用NSURLConnection ,它提供了基於塊的異步下載方法以及完成失敗處理程序。 許多開發人員更喜歡使用NSURLConnection的更高級別的抽象,例如流行的AFNetworking 在StackOverflow上有很多關於使用這兩種方法的最佳實踐的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM