Нет звука после подключения к WebRTC, когда приложение запускается в фоновом режиме с помощью PushKit и CallKit на экране блокировки

Я хотел бы добавить что-то к приведенным выше ответам.

Да, вы можете определять функции в файлах исходного кода (вне класса). Но лучше, если вы определяете статические функции внутри класса с помощью Companion Object, потому что вы можете добавить больше статических функций, используя расширения Kotlin.

class MyClass {
    companion object { 
        //define static functions here
    } 
}

//Adding new static function
fun MyClass.Companion.newStaticFunction() {
    // ...
}

И вы можете вызывать выше определенную функцию, как вы вызовете любую функцию внутри объекта Companion.

1
задан sidslog 28 March 2019 в 05:59
поделиться

1 ответ

Существует специфическая проблема с аудио I / O и CallKit. Когда вы собираетесь получать входящий вызов, вы должны настроить аудио сеанс для вызовов VoIP, но не активировать его, просто установить категорию, режим и буфер.

Пример настройки аудиосеанса для CallKit входящего вызова:

func configureAudioSession() {
    let sharedSession = AVAudioSession.sharedInstance()
    do {
        try sharedSession.setCategory(AVAudioSessionCategoryPlayAndRecord)
        try sharedSession.setMode(AVAudioSessionModeVoiceChat)
        try sharedSession.setPreferredIOBufferDuration(TimeInterval(0.005))
        try sharedSession.setPreferredSampleRate(44100.0)
    } catch {
        debugPrint("Failed to configure `AVAudioSession`")
    }
}

Затем, когда вы отвечаете на входящий вызов, CallKit активирует аудиосеанс для вас, и вы будете получить обратный вызов от CXProvider:

func provider(_ provider: CXProvider, didActivate audioSession: AVAudioSession) {
    // Start call audio I/O here
}

В этом обратном вызове делегата вы должны начать звук вызова, а не раньше. Если ввод / вывод аудио через WebRTC был запущен ранее, CallKit прервет его и звука не будет.

0
ответ дан Miki 28 March 2019 в 05:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: