AVAudioSession в bluetooth странно переключается при прерывании воспроизведения других приложений - PullRequest
1 голос
/ 14 июня 2019

Я работаю над приложением 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.

...