Существует специфическая проблема с аудио 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 прервет его и звука не будет.
По умолчанию минимальный TTL для кэша составляет 1 день, я играл с ним, но по умолчанию я полагаю, что ключ реестра не там по умолчанию.
Это - ключ, который Вы ищете, по крайней мере, в XP:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DNSCache\Parameters
Необходимо добавить DWORD MaxCacheTtl - Это изменит минимальный TTL для хранения в кэше сопоставителя.
Так как это принимает значение по умолчанию к 86 400 (значение находится в секундах, значение по умолчанию = 1 день), что-либо короче, чем это просто не кэшируется. При понижении его для высказывания 300, Вы видели бы тонны, более кэшируемый на клиенте.
Взлом, который можно использовать, должен добавить записи в файл hosts в Windows, который заставил бы его не сделать запросы DNS для всех записей в файле. Можно периодически затем запрашивать снова для проверки записей.