iPhone - 我的应用程序需要哪种适合的音频播放器?

5
我正在设计一款音乐应用程序,可以从用户的iPhone音乐库中播放音乐,但我无法确定使用哪种音频播放器(AVAudioPlayer、AVPlayer或MPMusicPlayer)才是正确的选择。
我的应用程序需要执行以下操作:
- 播放来自iPhone音乐库的音乐 - 分别控制应用程序音乐音量和设备/系统音量 - 在应用程序转到后台时继续播放应用程序音乐 - 捕获歌曲切换到下一首或完成时的事件
根据我的研究,似乎上述三个音频播放器都可以执行我应用程序所需的某些任务,但没有一个能够全部满足。AVPlayer似乎最接近要求,但其音量依赖于设备/系统音量。
是否有人有任何建议或解决方法来实现这一点?我已经为此苦苦思索了相当长的时间,因此任何帮助都将不胜感激。
1个回答

1

编辑

MPMusicPlayerController类实际上不支持通过+ applicationMusicPlayer获取其实例时播放后台音频。因此,最好的选择是仅使用MPMusicPlayer来查询iPod音乐库。一旦用户选择了一首歌曲,就可以查询生成的MPMediaItem的资源URL,并将其提供给AVPlayer的+playerWithURL,从而完全控制播放参数。

--

我建议使用MPMusicPlayerController。
1. MPMusicPlayerController处理在iTunes库中播放音频文件的低级细节。 2. 您可以使用类方法-applicationMusicPlayer获取iPod单例的本地副本;从那里,您可以通过设置其volume属性来控制其音量,仅适用于您的应用程序。 3. 我认为MPMusicPlayerController已经内置了后台音频支持。如果没有,您可以更改应用程序的音频会话上下文以使其工作(请参见http://www.sagorin.org/2011/11/29/ios-playing-audio-in-background-audio/中的“播放背景音频”)。 4. 您可以设置任何对象作为KVO观察器,观察您特定于应用程序的MPMusicPlayerController对象。这样,每当nowPlayingItem属性更改时,您都会收到通知。
希望这个高级描述足够了解。如果您需要进一步澄清,请告诉我。

这些都听起来大致正确,但是 MPMusicPlayer 的 appmusicplayer 方法不支持应用程序进入后台后的音频播放。在您列出的链接示例中,他使用的是 AVPlayer,因此我不确定背景音频会与 appmusicplayer 兼容。有什么建议吗? - md-aintright
嗨,马特。很抱歉我错过了那个文档。那么,下一步最好的做法可能是使用MPMusicPlayer来访问和查询iPod库。一旦用户选择了一首歌曲,您可以通过MPMediaItem类的MPMediaItemPropertyAssetURL属性获取歌曲的URL,并将该URL提供给AVPlayer的+ playerWithURL方法。从那里开始,您只需使用AVPlayer来实际播放歌曲即可。这样,您就可以在仍然可以访问iPod库的同时获得对播放的精细控制。 - Dany Joumaa
谢谢Nessup。这种方法唯一的问题是,由于我们正在使用AVPlayer播放音乐,所以仍然无法单独控制应用程序音乐和设备音量。不过听起来这已经是最接近的了。 - md-aintright
没问题,马特。你确定 AVPlayer 上的 volume 属性控制设备音量,而不是播放器音量吗?我在类参考中找不到任何表明这种情况的东西。 - Dany Joumaa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接