iOS 13+ 应用程序的 AVAudioPlayer AVPlayer AVQueuePlayer MPMusicPlayerController MPRemoteCommandCenter MPN

Posted

技术标签:

【中文标题】iOS 13+ 应用程序的 AVAudioPlayer AVPlayer AVQueuePlayer MPMusicPlayerController MPRemoteCommandCenter MPNowPlayingInfoCenter 之间的区别【英文标题】:Difference between AVAudioPlayer AVPlayer AVQueuePlayer MPMusicPlayerController MPRemoteCommandCenter MPNowPlayingInfoCenter for an iOS 13+ app 【发布时间】:2020-07-23 15:49:16 【问题描述】:

关于这个主题的所有线程都非常老(5+ yo),我似乎无法形成一个清晰的现代方法,所以希望这可以在 2020 年总结(Swift 5,Xcode 11) .

如果您要使用 iOS 13 以前瞻性的方式为 iPhone 构建音频(不仅仅是音乐)播放器应用程序(不要关心任何不支持 ios 的东西14 - 所以没有低于 8),如果要求是......你会使用什么套件/类......

应用可以在本地存储和播放下载的 MP3 文件(不一定是流式传输或嵌入式)。 用户对音频有基本的播放器控制(播放/暂停/擦洗/音量)。 应用有一个音频队列(曲目播放顺序),可以随时通过应用或原生 iOS 控件进行调整。 用户可以遍历(向后/向前搜索)队列。 用户可以选择在手机配对的蓝牙音频设备上播放。 音频可以在后台播放(屏幕关闭时,或在其他应用中)。 应用可以在后台触发跟踪和调整队列(无需用户交互)。 音频与原生 iOS 控件 (RemoteControlEvents) 集成。 根据 Apple 的指南,该应用是“现在可播放的应用”。

奖金(如果可能的话):

应用音频可以像路线应用一样覆盖播放音乐(我意识到这可能会否定背景和“正在播放”功能,但也许它有助于讨论,以便更清晰地推理为应用开发者选择一种方法)。

那么你会使用 AVAudioPlayer 或 AVPlayer 或 MPMusicPlayerController 吗? MPRemoteCommandCenter 还是 MPNowPlayingInfoCenter?

也许有些要求是相互排斥的,甚至是不可能的,但我不明白为什么有这么多控制音频播放的方法,它们的用例之间没有明确的界限,或者为什么音频是音乐或语音,下载或流式传输。在 Apple,音频显然是视频的二等公民,尤其是语音,但我认为现在应该在某些类型的基本应用程序(如播放列表、播客和其他类型的音频应用程序)方面有一些方向。

【问题讨论】:

【参考方案1】:

我会尽我所能回答你的问题:

应用可以在本地存储和播放下载的 MP3 文件(不一定是流式传输或嵌入式)。

您可以使用AVPlayerAVAudioPlayerAVPlayer 具有更多功能。 检查 Apple 的文档 here 以获取 AVPlayer。 here 代表 AVAudioPlayer

用户对音频有基本的播放器控制(播放/暂停/擦洗/音量)。

AVAudioPlayer 对播放的声音文件拥有所有必需的控制。

应用有一个音频队列(曲目播放顺序),应用可以随时调整。

您需要使用继承自AVPlayerAVQueuePlayer。 查看苹果的文档here。

用户可以选择在手机配对的蓝牙音频设备上播放。

从上面选择哪一个并不重要。这个AVAudioSession 选项。 查看文档here。

音频可以在后台播放(屏幕关闭时,或在其他应用中)。

您需要为您的应用添加BackgroundMode 功能并检查音频、播放选项。

音频可以在后台触发轨道和调整队列(无需用户交互)。

您需要添加应用扩展来操作您的 queuePlayer。

音频与原生 iOS 控件 (RemoteControlEvents) 集成。

使用MPNowPlayingInfoCenter 并更新其信息,以便能够更新歌曲名称、艺术家、艺术作品等...Apple 的文档here。

除了MPRemoteCommandCenter 来监听事件并相应地更新您的播放器docs。

应用程序音频可以像方向应用程序那样覆盖播放音乐(我意识到这否定了背景和“正在播放”功能,但也许它有助于讨论更清晰的推理来为应用程序开发人员选择一种方法.

同样在AVAudioSession's类别选项中,添加.mixWithOthers选项。

那么你会使用 AVAudioPlayer 还是 AVPlayer 或 MPMusicPlayerController 呢? MPRemoteCommandCenter 还是 MPNowPlayingInfoCenter?

如果您从设备库播放,请使用MPMusicPlayerController

我认为以上总结了它的亮点。当您一起使用这些东西时,您应该关心很多事情,例如,并非所有选项都适用于所有AVAudioSession's 模式。 播放器内部有很多属性,其设置和错误组合可能会导致播放器无法正常工作。

【讨论】:

以上是关于iOS 13+ 应用程序的 AVAudioPlayer AVPlayer AVQueuePlayer MPMusicPlayerController MPRemoteCommandCenter MPN的主要内容,如果未能解决你的问题,请参考以下文章

音频和振动在模拟器中工作而不是在 ios 设备上

iPhone播放声音时如何操作?

当应用程序进入后台时停止 AVAudioPlayer 音乐

使用 IOS 13 编译的应用程序的 IOS14 跟踪权限

React Native 应用在 IOS 13 版本设备中崩溃

无法在 iOS 13.1.2 中下载应用程序