CXPlayDTMFCallAction не воспроизводит локальный звук DTMF
Я интегрирую CallKit с приложением VOIP. Я был в состоянии сделать входящие и исходящие звонки. Я следовал за шагом:
- ConfigureAudioSession
- startAudio in (didActivate)
- stopAudio in (didDeActivate)
Я реализовал обратные вызовы для делегата поставщика DTMF, как показано ниже:
func provider(_ provider: CXProvider, perform action: CXPlayDTMFCallAction) {
print("Provider - CXPlayDTMFCallAction")
let dtmfDigts:String = action.digits
for (index, _) in dtmfDigts.characters.enumerated() {
let dtmfDigit = dtmfDigts.utf8CString[index]
print("Processing dtmfDigit:\(dtmfDigit)" )
self.softphone.dtmf(on:dtmfDigit)
}
self.softphone.dtmfOff()
// Signal to the system that the action has been successfully performed.
action.fulfill()
}
Я не слышу звук нажатия клавиш, т. Е. Местный звук dtmf, когда я нажимаю номер на собственном интерфейсе вызова во время разговора.
С https://developer.apple.com/reference/callkit/cxplaydtmfcallaction:
"CallKit автоматически воспроизводит соответствующие частоты DTMF для любых цифр, передаваемых по вызову. Приложение отвечает за управление синхронизацией и обработку цифр как часть выполнения действия".
Это известная проблема или callkit не воспроизводит звуки нажатия клавиш местной dtmf?
2 ответа
Я смог заставить это работать:
func provider(_ provider: CXProvider, perform action: CXPlayDTMFCallAction) {
print("Provider - CXPlayDTMFCallAction")
self.softphone.audioController.configureAudioSession()
let dtmfDigts:String = action.digits
for (index, _) in dtmfDigts.characters.enumerated() {
let dtmfDigit = dtmfDigts.utf8CString[index]
print("Processing dtmfDigit:\(dtmfDigit)" )
self.softphone.dtmf(on:dtmfDigit)
}
self.softphone.dtmfOff()
// Signal to the system that the action has been successfully performed.
action.fulfill()
}
Примечание. Я добавил self.softphone.audioController.configureAudioSession().
-(void) configureAudioSession
{
// Configure the audio session
AVAudioSession *sessionInstance = [AVAudioSession sharedInstance];
// we are going to play and record so we pick that category
NSError *error = nil;
[sessionInstance setCategory:AVAudioSessionCategoryPlayAndRecord error:&error];
if (error) {
NSLog(@"error setting audio category %@",error);
}
// set the mode to voice chat
[sessionInstance setMode:AVAudioSessionModeVoiceChat error:&error];
if (error) {
NSLog(@"error setting audio mode %@",error);
}
NSLog(@"setupAudioSession");
return;
}
CallKit должен воспроизводить тональные сигналы DTMF локально при нажатии клавиш на кнопке "клавиатура" встроенного интерфейса вызова. Но приложение CallKit отвечает за отправку тонов DTMF через собственный сетевой интерфейс на удаленную сторону.
Если вы не слышите тональные сигналы, воспроизводимые локально из встроенного пользовательского интерфейса, то сообщите об ошибке в Apple.