6

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

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

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

奖金(如果可能的话):

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

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

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

4

1 回答 1

7

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

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

  • 您可以使用AVPlayerAVAudioPlayerAVPlayer有更多的能力。在此处查看 Apple 的文档以获取AVPlayer. 这里AVAudioPlayer。_

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

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

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

  • 您需要使用AVQueuePlayerwhich 继承自AVPlayer. 在此处查看苹果的文档。

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

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

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

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

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

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

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

  • 使用MPNowPlayingInfoCenter并更新其信息,以便能够更新歌曲标题、艺术家、艺术作品等... Apple 的文档在此处

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

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

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

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

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

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

于 2020-04-11T15:53:46.303 回答