Как воспроизводить звуки, например звуковой сигнал, при использовании Callkit?

Я пытаюсь реализовать VoIP, используя webRTC и Callkit. Звук работает отлично во время вызова, но я хотел бы воспроизводить звуки для пользователя, пока пользователь инициирует вызов (исходящий вызов).

Когда пользователь инициирует вызов и ждет ответа получателя, я хотел бы воспроизвести звуковой сигнал ожидания (длинные гудки). Мне удается воспроизвести звук без использования Callkit, но когда я сообщаю Callkit об исходящем звонке, он каким-то образом отменяет звук. Я предполагаю, что это происходит потому, что IOS отключает звук при начале вызова.

Итак, мой вопрос: как я могу воспроизвести mp3-файл, когда Callkit активен. Или этот звук ожидания как-то интегрирован в Callkit или WebRTC?

Я возился с разными категориями для аудиосессии, но пока безуспешно. См. ниже сводку моего текущего кода.

public var audioPlayer: AVAudioPlayer?

private init() {
    do {
        audioPlayer = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: Bundle.main.path(forResource: "dialring", ofType: "mp3")!))
        audioPlayer!.prepareToPlay()
        audioPlayer!.numberOfLoops = -1 //loop
    } catch {
        print(error.localizedDescription)
    }
}

func provider(_ provider: CXProvider, perform action: CXStartCallAction) {
    configureAudioSession()
    audioPlayer?.play()
}

func configureAudioSession() {
    print("Configuring audio session")
    let session = AVAudioSession.sharedInstance()
    do {
        try AVAudioSession.sharedInstance().setCategory(.playAndRecord, options: [.mixWithOthers])
        try session.setMode(AVAudioSession.Mode.voiceChat)
    } catch (let error) {
        print("Error while configuring audio session: \(error)")
    }
}

Если бы кто-нибудь мог указать мне в правильном направлении, я был бы признателен.

Обновлено: у меня включен фоновый режим для звука.

Я не знаю, связано ли это с вашей проблемой, но вы должны вызвать action.fulfill() внутрь provider(_ provider: CXProvider, perform action: CXStartCallAction)

Marco 24.05.2019 13:18

@marco Да, это уже было в моем коде. Я не показывал это здесь, чтобы я мог сделать пост коротким. Это как-то связано с тем, что звонок заглушает другие мои звуки. Однако я понятия не имею, как обойти это.

daanabc 24.05.2019 15:15
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
2
2
1 307
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Немного перекинул конструкцию и теперь она работает. Я не совсем уверен, что изменило мышление. Если люди сталкиваются с той же проблемой. - Убедитесь, что вы держите сильную ссылку на аудиоплеер. - Убедитесь, что режим находится в .playback или .playAndRecord.

Другие вопросы по теме