Я работаю над приложением VoIP, и я обработал прерывание AVAudioSession в обычных случаях. Но я обнаружил, что в режиме Bluetooth, когда я начинаю вызов, процесс переключения с PlayBack на PlayAndRecord не завершится мгновенно.Во время переключения будет короткая игра с низким качеством и громкой громкостью.После этого воспроизведение не возобновится, даже если вызов завершен. Это явление появляется случайно.В основном в начале, а потом все ок.Но после нескольких звонков это происходит снова, что меня очень смущает.
Вначале я догадался, что это может быть проблемой категории Bluetooth, поэтому я добавил опции [.allowBluetooth, .allowBluetoothA2DP],Но это не сработало.Вот мой код.
// setting of AVAudioSession
public static let voipCall: AudioSessionScenario = {
if #available(iOS 10.0, *) {
return AudioSessionScenario("voip", category: .playAndRecord, mode: .voiceChat, options: [.allowBluetooth, .allowBluetoothA2DP])
} else {
return AudioSessionScenario("voip", category: .playAndRecord, mode: .voiceChat, options: [.allowBluetooth])
}
}()
// when user starts a call
AVAudioSession.queue.async {
AVAudioSession.entry(AudioSessionScenario.voipCall)
}
// the entry method does nothing but set the setting of sharedInstance
if #available(iOS 10.0, *) {
try session.setCategory(category, mode: scenario.mode, options: scenario.options)
} else {
AVAudioSession.sharedInstance().perform(NSSelectorFromString("setCategory:withOptions:error:"), with: category, with: scenario.options)
}
Я ожидаю, что в процессе переключения нет странного воспроизведения, и воспроизведение возобновится после вызова. Хорошо работает в обычных случаях, включая динамик и проводную гарнитуру.Устройства Bluetooth, такие как Bose QC30 или Airpods, имеют нестабильную проблему. Кто-нибудь знает причину?Thx.