iOS 13+ 应用程序的 AVAudioPlayer AVPlayer AVQueuePlayer MPMusicPlayerController MPRemoteCommandCenter MPNowPlayingInfoCenter 之间的区别
Difference between AVAudioPlayer AVPlayer AVQueuePlayer MPMusicPlayerController MPRemoteCommandCenter MPNowPlayingInfoCenter for an iOS 13+ app
关于这个主题的所有线程都非常老(5+ 哟),我似乎无法形成清晰的现代方法,所以希望这可以在 2020 年进行总结(Swift5,Xcode11).
如果您要使用前瞻性思维为 iPhone 和 iOS 13 构建一个音频(不仅仅是音乐)播放器应用程序(不要关心任何不支持 iOS 14 的东西 - 所以不低于 8),如果要求是...
,你会使用什么 Kits/Classes
- 应用程序可以在本地存储和播放下载的 MP3 文件(不一定是流式传输或嵌入)。
- 用户对音频具有基本的播放器控制(play/pause/scrub/volume)。
- 应用程序有一个音频队列(曲目播放顺序),可以随时通过应用程序或本机 iOS 控件进行调整。
- 用户可以遍历(backwards/forward查找)队列。
- 用户可以select在已配对的蓝牙音频设备phone上播放。
- 音频可以在后台播放(当屏幕关闭时,或在另一个应用程序中)。
- 应用程序可以在后台触发曲目并调整队列(无需用户交互)。
- 音频与原生 iOS 控件 (RemoteControlEvents) 集成。
- 根据 Apple 的指南,该应用程序是“现在可玩的应用程序”。
奖金(如果可能的话):
- 应用程序音频可以像导航应用程序那样覆盖正在播放的音乐(我意识到这可能会否定背景和“正在播放”功能,但也许它有助于讨论更清晰的推理 selecting 一种方法应用程序开发人员)。
那么你会使用 AVAudioPlayer 还是 AVPlayer 或 MPMusicPlayerController? MPRemoteCommandCenter 或 MPNowPlayingInfoCenter?
也许有些要求是相互排斥的,甚至是不可能的,但我不明白为什么有这么多控制音频播放的方法,它们的用例之间没有明确的划分,或者为什么如果音频是音乐或语音,下载或流式传输。在 Apple,音频显然是视频的第二个 class 公民,尤其是语音,但我认为现在应该在某些类型的基本应用程序(如播放列表、播客和其他类型的音频应用程序)上有一些方向。
我会尽我所知回答您的问题:
应用程序可以在本地存储和播放下载的 MP3 文件(不一定是流式传输或嵌入)。
- 您可以使用
AVPlayer
或 AVAudioPlayer
。
AVPlayer
拥有更多功能。
查看 Apple 的文档 here 以获得 AVPlayer
。
here AVAudioPlayer
.
用户对音频具有基本的播放器控制(play/pause/scrub/volume)。
AVAudioPlayer
对播放的声音文件具有所有必需的控制。
应用程序有一个音频队列(曲目播放的顺序),可以由应用程序随时调整。
- 您需要使用继承自
AVPlayer
的 AVQueuePlayer
。
查看苹果的文档 here.
用户可以select在已配对的蓝牙音频设备phone上播放。
- 以上选择哪一个都无所谓。这
AVAudioSession
个选项。
检查文档 here.
音频可以在后台播放(当屏幕关闭时,或在另一个应用程序中)。
- 您需要为您的应用程序添加
BackgroundMode
功能并检查音频、播放选项。
音频可以在后台触发曲目和调整队列(无需用户交互)。
- 您需要添加应用程序扩展来操作您的 queuePlayer。
音频与原生 iOS 控件 (RemoteControlEvents) 集成。
- 使用
MPNowPlayingInfoCenter
并更新其信息,以便能够更新歌曲名称、艺术家、艺术作品等...Apple 文档 here。
除了 MPRemoteCommandCenter
之外,还可以监听事件并相应地更新您的播放器 docs。
应用程序音频可以像导航应用程序那样叠加播放音乐(我意识到这否定了背景和“正在播放”功能,但也许它有助于讨论更清晰的推理select为应用开发者提供方法。
- 同样在
AVAudioSession's
类别选项中,添加 .mixWithOthers
选项。
那么你会用AVAudioPlayer还是AVPlayer或者MPMusicPlayerController? MPRemoteCommandCenter 或 MPNowPlayingInfoCenter?
如果您从设备库播放,请使用 MPMusicPlayerController
。
我觉得以上总结了它的亮点。例如,当您将这些东西一起使用时,您应该注意很多事情,并非所有选项都适用于所有 AVAudioSession's
模式。
播放器里面有很多属性,它的设置和错误的组合可能会阻止你的播放器工作。
关于这个主题的所有线程都非常老(5+ 哟),我似乎无法形成清晰的现代方法,所以希望这可以在 2020 年进行总结(Swift5,Xcode11).
如果您要使用前瞻性思维为 iPhone 和 iOS 13 构建一个音频(不仅仅是音乐)播放器应用程序(不要关心任何不支持 iOS 14 的东西 - 所以不低于 8),如果要求是...
,你会使用什么 Kits/Classes- 应用程序可以在本地存储和播放下载的 MP3 文件(不一定是流式传输或嵌入)。
- 用户对音频具有基本的播放器控制(play/pause/scrub/volume)。
- 应用程序有一个音频队列(曲目播放顺序),可以随时通过应用程序或本机 iOS 控件进行调整。
- 用户可以遍历(backwards/forward查找)队列。
- 用户可以select在已配对的蓝牙音频设备phone上播放。
- 音频可以在后台播放(当屏幕关闭时,或在另一个应用程序中)。
- 应用程序可以在后台触发曲目并调整队列(无需用户交互)。
- 音频与原生 iOS 控件 (RemoteControlEvents) 集成。
- 根据 Apple 的指南,该应用程序是“现在可玩的应用程序”。
奖金(如果可能的话):
- 应用程序音频可以像导航应用程序那样覆盖正在播放的音乐(我意识到这可能会否定背景和“正在播放”功能,但也许它有助于讨论更清晰的推理 selecting 一种方法应用程序开发人员)。
那么你会使用 AVAudioPlayer 还是 AVPlayer 或 MPMusicPlayerController? MPRemoteCommandCenter 或 MPNowPlayingInfoCenter?
也许有些要求是相互排斥的,甚至是不可能的,但我不明白为什么有这么多控制音频播放的方法,它们的用例之间没有明确的划分,或者为什么如果音频是音乐或语音,下载或流式传输。在 Apple,音频显然是视频的第二个 class 公民,尤其是语音,但我认为现在应该在某些类型的基本应用程序(如播放列表、播客和其他类型的音频应用程序)上有一些方向。
我会尽我所知回答您的问题:
应用程序可以在本地存储和播放下载的 MP3 文件(不一定是流式传输或嵌入)。
- 您可以使用
AVPlayer
或AVAudioPlayer
。AVPlayer
拥有更多功能。 查看 Apple 的文档 here 以获得AVPlayer
。 hereAVAudioPlayer
.
用户对音频具有基本的播放器控制(play/pause/scrub/volume)。
AVAudioPlayer
对播放的声音文件具有所有必需的控制。
应用程序有一个音频队列(曲目播放的顺序),可以由应用程序随时调整。
- 您需要使用继承自
AVPlayer
的AVQueuePlayer
。 查看苹果的文档 here.
用户可以select在已配对的蓝牙音频设备phone上播放。
- 以上选择哪一个都无所谓。这
AVAudioSession
个选项。 检查文档 here.
音频可以在后台播放(当屏幕关闭时,或在另一个应用程序中)。
- 您需要为您的应用程序添加
BackgroundMode
功能并检查音频、播放选项。
音频可以在后台触发曲目和调整队列(无需用户交互)。
- 您需要添加应用程序扩展来操作您的 queuePlayer。
音频与原生 iOS 控件 (RemoteControlEvents) 集成。
- 使用
MPNowPlayingInfoCenter
并更新其信息,以便能够更新歌曲名称、艺术家、艺术作品等...Apple 文档 here。
除了 MPRemoteCommandCenter
之外,还可以监听事件并相应地更新您的播放器 docs。
应用程序音频可以像导航应用程序那样叠加播放音乐(我意识到这否定了背景和“正在播放”功能,但也许它有助于讨论更清晰的推理select为应用开发者提供方法。
- 同样在
AVAudioSession's
类别选项中,添加.mixWithOthers
选项。
那么你会用AVAudioPlayer还是AVPlayer或者MPMusicPlayerController? MPRemoteCommandCenter 或 MPNowPlayingInfoCenter?
如果您从设备库播放,请使用 MPMusicPlayerController
。
我觉得以上总结了它的亮点。例如,当您将这些东西一起使用时,您应该注意很多事情,并非所有选项都适用于所有 AVAudioSession's
模式。
播放器里面有很多属性,它的设置和错误的组合可能会阻止你的播放器工作。