2013-08-27 34 views
1

我正在用AVAudioPlayer播放歌曲。其实我是借助网址从服务器数据库流式传输歌曲。像这样如何识别AVAudioPlayer正在播放歌曲

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

虽然检索它需要几秒钟..所以想旋转ActivityIndi​​cator,直到歌曲播放。我怎么能做到这一点?

+0

我想你需要调用'play'方法才能开始播放歌曲。它不开始直接播放.. – NightFury

回答

0

你的问题是这样的:

NSData *data = [NSData dataWithContentsOfURL:url];

这是最糟糕的方式来下载iOS上的数据,有许多原因之一。首先,它是同步的,所以如果你在主线程中调用它,这是一个阻塞操作(意味着你的整个UI将冻结)。快速WiFi连接只需几秒钟,蜂窝连接可能需要一分钟或更长时间。

这也不好,因为它不会为您提供任何类型的进度或状态更新。如果下载失败,你将不知道为什么它出错了。你会在黑暗中看到它是否是你的用户的网络连接,服务器,完全不同的东西...

所以,即使你在后台线程上运行dataWithContentsOfURL,它仍然很不理想, t为您提供任何错误处理或进度更新。

远远好一点的方法是使用NSURLConnection,它提供基于块的异步下载方法以及完成故障处理程序。许多开发人员更喜欢使用更高层次的抽象NSURLConnection,比如流行的AFNetworking。这里有很多关于使用这两种方法的最佳实践的StackOverflow问题。

+0

好的谢谢你的回答...请你提供任何关于在线播放歌曲的链接 – datha

相关问题