gpt4 book ai didi

iphone - 在 iOS 中实现背景音频并排除故障

转载 作者:行者123 更新时间:2023-12-03 18:23:32 24 4
gpt4 key购买 nike

There are a lot of questions relating to background music playback in iOS on StackOverflow. None fully explore all edge cases, the aim of this question is to be the final word in background audio question on iOS

定义和假设

所有代码、问题和示例均引用 .

“背景” - 当用户按下主页按钮或电源按钮(以便设备显示锁定屏幕)时应用程序进入的状态。还可以使用多任务切换器或 iPad 上的多任务手势将该应用程序置于后台。

"audio" — 使用 AudioQueue(包括 AVAudioPlayer)播放音频

先决条件

据我了解,要让应用程序在后台播放音频有两个要求。

  1. Info.plist 中将 UIBackgroundModes 设置为 audio
  2. [[AVAudioSession共享实例] setCategory:AVAudioSessionCategoryPlayback错误:nil];

要求

我的用例是在后台播放相对较长的音频(音乐)。可能有数百首轨道,应用程序将按顺序播放它们。可以认为音频会无限期地播放。

应用程序将通过暂停播放来处理中断。

问题

我在以下方面取得了不同程度的成功:

[[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:...];

允许音频在后台播放。但我很困惑它是否是必需的以及它与以下内容有何不同:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];

边缘情况

  1. 打扰。如果您注册为获得音频中断通知(电话等),请成为 AVAudioPlayer 的代表。例如,如果您在中断开始时暂停或停止音频并在中断结束时恢复,如果中断超过 10 分钟(允许后台任务完成的最长时间),您的应用是否会被暂停?

  2. 如果在使用时调用 Lock 或 Home,模拟器将停止音频:

    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];

但是这在设备上有效。这是一个已知问题吗?

最佳答案

我对 GPS 背景模式和背景音频有一些经验。这与您的情况不完全相同(您想播放长音频文件,而我播放短信),但我可以告诉您的是:

  • beginBackgroundTaskWithExpirationHandler 在后台调用此选择器时有一个目的:避免应用程序返回到无法再调用任何代码的挂起状态(您被“卡住”) )。因此,只要您调用 beginBackgroundTaskWithExpirationHandler 并在使用 beginBackgroundTaskWithExpirationHandler 终止长时间运行的任务之前,您就会使用 CPU,并消耗电池。
    我真的怀疑在后台播放文件是否应该像运行应用程序一样使用 iPhone 的电池,因此我怀疑 beginBackgroundTaskWithExpirationHandler 是否真的参与了您的流程。

  • 模拟器:不要依赖模拟器:它没有完全实现后台模式。实际上,当您单击主页按钮时,您的应用程序会进入后台,但在此阶段,您仍然可以在应用程序中执行代码。一段时间后,您的应用程序将被暂停(=卡住),并且您的代码执行将被暂停以节省电池。这种暂停状态永远不会在模拟器上发生。

  • 打扰。来电时暂停/恢复播放不是由您决定的。平台负责此操作,您只需使用 AVAudioSessionDelegate 对此使用react即可。 。但是,您可以通过设置 Audio Session 的属性来影响 session 与其他音频声音交互的方式(例如,请参阅kAudioSessionProperty_OverrideCategoryMixWithOthers)。因此流程更多:您描述 Audio Session 应与系统其余部分交互的方式,系统将相应地混合声音,如果您的 session 被中断,您将收到 AVAudioSessionDelegate 通知。

希望这有帮助。

关于iphone - 在 iOS 中实现背景音频并排除故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11968130/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com