设备静音且AVAudioSession设为ambient类别时仍压低其他音频如何解决
iOS AVAudioSession 后台音频异常压低问题解决方案
该问题并非iOS系统缺陷,是AVAudioSession配置的生效逻辑导致:你配置的
.duckOthers选项只要对应AVAudioSession处于激活状态,无论你的App是否实际播放音频,系统都会持续执行压低其他App音频的逻辑。你在静音模式下仅停止了自身音频播放,没有调整session配置或失活session,因此duck效果会一直保留。
修复步骤
- 调整session配置的触发时机,不要全局提前设置带
.duckOthers的category并长期激活:仅在你需要播放音频之前,再配置对应参数并激活session,示例代码如下:
// 播放前配置并激活session let session = AVAudioSession.sharedInstance() try session.setCategory(.ambient, mode: .default, options: [.duckOthers, .interruptSpokenAudioAndMixWithOthers]) try session.activate() // 之后再启动你的音频播放器
- 在音频播放结束、或检测到设备切至静音模式需要停播时,除了停止自身音频播放器外,同步失活session或重置category以取消duck效果,示例代码如下:
// 停止播放后重置session let session = AVAudioSession.sharedInstance() // 方法1:直接失活session,适合短时间内不会再次播放的场景 try session.deactivate(options: .notifyOthersOnDeactivation) // 方法2:仅移除duck相关选项,适合短时间内可能再次播放的场景 // try session.setCategory(.ambient, mode: .default)
内容的提问来源于stack exchange,提问作者Chris Vasselli
相关产品推荐
相关产品推荐

