iOS 13+应用程序中AVAudioPlayer、AVPlayer、AVQueuePlayer、MPMusicPlayerController、MPRemoteCommandCenter和MPNowPlayingInfoCenter之间的区别

9

此主题的所有线程都非常古老(5+年),我似乎无法形成一个明确的现代方法,所以希望可以在2020年(Swift 5,Xcode 11)进行总结。

如果您要为 iOS 13 构建一个音频(不仅仅是音乐)播放器应用程序,并以前瞻性的方式进行构建(不关心不支持iOS 14的任何内容-因此不包括8以下版本),那么如果要求是...

  • 应用可以通过本地存储和播放下载的MP3文件(不一定要流式传输或嵌入式)。
  • 用户可以对音频进行基本的播放控制(播放/暂停/快进/音量)。
  • 应用具有可以随时由应用程序或本机iOS控件调整的音频队列(曲目播放顺序)。
  • 用户可以遍历(向后/向前跳过)队列。
  • 用户可以选择在已配对的蓝牙音频设备上播放。
  • 当屏幕关闭或在其他应用程序中时,音频可以在后台播放。
  • 应用程序可以在后台触发轨道并调整队列(无需用户交互)。
  • 音频与本机iOS控件(RemoteControlEvents)集成。
  • 应用程序符合苹果《现在可播放应用》的指南。

奖励(如果可能):

  • 应用音频可以作为定向应用程序重叠播放音乐(我意识到这可能会使背景和“正在播放”功能无效,但也许它可以帮助开发人员更清晰地选择应用程序的方法)。

那么,您会使用AVAudioPlayer、AVPlayer还是MPMusicPlayerController?MPRemoteCommandCenter还是MPNowPlayingInfoCenter?

也许一些要求是互相排斥的,甚至是不可能实现的,但是我无法理解为什么有如此多的控制音频播放的方法,没有明确的界限以区分它们的使用情况,或者为什么它对于音乐或语音而言都很重要,下载或流式传输。显然,在苹果公司,音频显然是视频的二等公民,特别是语音,但我认为对于像播放列表、播客和其他类型的音频应用程序这样的基本应用程序应该有一些方向。

1个回答

9
我会尽我所知来回答你的问题:
应用程序可以本地存储和播放已下载的MP3文件(不一定是流式传输或嵌入式)。
您可以使用AVPlayer或AVAudioPlayer。AVPlayer拥有更多功能。请查看苹果公司的文档here以获取AVPlayer。并且here适用于AVAudioPlayer。
用户对音频具有基本的播放控制(播放/暂停/快进/音量)。
AVAudioPlayer具有所有所需的控制,可控制播放的声音文件。
应用程序具有音频队列(曲目播放顺序),可以随时由应用程序进行调整。
  • 您需要使用继承自AVPlayerAVQueuePlayer。 请查看苹果文档此处

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

  • 您可以使用AVAudioSession选项,无论选择哪一个都没有关系。 查看文档此处

音频可以在后台播放(当屏幕关闭或在另一个应用程序中时)。

  • 您需要将BackgroundMode功能添加到您的应用程序,并检查音频、airplay选项。

音频可以在后台触发跟踪并调整队列(无需用户交互)。

  • 您需要添加应用程序扩展来操作您的队列播放器。

音频与本机iOS控件(RemoteControlEvents)集成。

  • 使用MPNowPlayingInfoCenter并更新其信息以更新歌曲标题、艺术家、封面等... Apple的文档在此处

除了使用MPRemoteCommandCenter监听事件并相应地更新播放器 文档

应用程序音频可以像导航应用程序一样覆盖正在播放的音乐(我意识到这将抵消后台和“现在播放”功能,但也许它有助于更清晰地选择应用程序开发人员的方法。

  • 还在AVAudioSession的类别选项中添加.mixWithOthers选项。

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

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

我认为上面总结了它的亮点。当您将这些内容一起使用时,有许多事情需要注意,并非所有选项都适用于所有AVAudioSession模式,例如。播放器内部有许多属性,设置错误的组合可能会导致您的播放器无法工作。

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