我正在尝试混合音频源,这样就不会出现音频闪避。我试图解决的用例是在后台进行音频通话,同时播放音乐和/或收听应用程序音频,没有任何音频闪避。音频闪避是指音频稍微降低并失真以帮助收听另一个音频会话。我可以取消音频和音频混合(或 iOS)吗?
我已经尝试过以下代码。我也尝试将其包装在 DispatchQueue.main.async 闭包中,但仍然没有运气。
// I have also tried this code with this block uncommented
// do {
// try audioSession.setActive(false, options: .notifyOthersOnDeactivation)
//
// } catch let activationError {
// print(activationError)
// print(activationError.localizedDescription)
// }
let audioSession = AVAudioSession.sharedInstance()
do {
try audioSession.setCategory(
AVAudioSession.Category.playAndRecord,
mode: AVAudioSession.Mode.voiceChat,
options: [.allowBluetoothA2DP, .allowBluetooth, .mixWithOthers, .allowAirPlay]
)
} catch let setCategoryError {
print(setCategoryError)
print(setCategoryError.localizedDescription)
}
do {
try audioSession.setActive(true, options: .notifyOthersOnDeactivation)
} catch let activationError {
print(activationError)
print(activationError.localizedDescription)
}
答案似乎是AVAudioSession.Mode
正在自动设置一些选项。苹果似乎已经做出了这样的设计决定:.voiceChat
模式应该始终避开其他模式以获得最佳体验。这同样适用于.videoChat
模式,这两种模式都是 Agora 通话中使用的明显模式。使用这些模式似乎会自动设置.duckOthers
flag.
我能够通过将模式设置为来解决这个问题.videoRecording,它是为录制音频和视频的应用程序设计的,因此不会自动设置.duckOthers
。因为这实际上不是您正在做的事情,所以它绝对是一种解决方法,并且可能会产生其他副作用。
考虑到您对 AVAudioSession 所做的事情,您可能还想阻止 Agora 从您的手下更改它。您可以致电agoraKit.setAudioSessionOperationRestriction(.all)防止 Agora 在未经您许可的情况下更改全局 AVAudioSession,这可能是完成此操作所必需的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)