Проблема с Opentok и CallKit - PullRequest
0 голосов
/ 24 мая 2018

Я пытаюсь использовать Opentok и CallKit для целей аудио- и видеозвонков. Я следовал этой демонстрации, предоставленной OpenTok https://github.com/opentok/CallKit/tree/master/CallKitDemo

Проблема, с которой я сталкиваюсь, заключается в том, что я делаю аудиопозвонить другому человеку, он начинает динамик вместо встроенного приемника.Я попробовал их демо, и у него тоже есть та же проблема.

Затем я попробовал https://developer.apple.com/library/content/samplecode/Speakerbox/Introduction/Intro.html#//apple_ref/doc/uid/TP40017290, предоставленный Apple, но после реализации AudioController новый вызов начинается со встроенногоДинамик, и он автоматически переключается на динамик, и нет возможности изменить выход.

Ответы [ 2 ]

0 голосов
/ 26 мая 2018

Мне нужно реализовать собственный аудиодрайвер с настройкой AVAudioSession

         var audioOptions: UInt {
            if isSpeaker {
                return AVAudioSessionCategoryOptions.defaultToSpeaker.rawValue |
                    AVAudioSessionCategoryOptions.mixWithOthers.rawValue |
                    AVAudioSessionCategoryOptions.allowBluetooth.rawValue |
                    AVAudioSessionCategoryOptions.allowAirPlay.rawValue

            } else {
                return AVAudioSessionCategoryOptions.mixWithOthers.rawValue |
                    AVAudioSessionCategoryOptions.allowBluetooth.rawValue |
                    AVAudioSessionCategoryOptions.allowAirPlay.rawValue |
                    AVAudioSessionCategoryOptions.duckOthers.rawValue
            }
        }
        if isSpeaker {
            try session.setCategory(AVAudioSessionCategoryPlayAndRecord, mode: AVAudioSessionModeVoiceChat, options: AVAudioSessionCategoryOptions(rawValue: audioOptions))
        } else {
            try session.setCategory(AVAudioSessionCategoryPlayAndRecord, mode: AVAudioSessionModeVoiceChat, options: AVAudioSessionCategoryOptions(rawValue: audioOptions))
        }
0 голосов
/ 25 мая 2018

Как вы публикуете свой поток?

 let settings = OTPublisherSettings()
 settings.name = "\(userID)"
 guard let publisher = OTPublisher(delegate: self, settings: settings) 
  else {
        return
    }
    yourStream = publisher
    yourStream?.publishAudio = false
    yourStream?.publishVideo = true
    var error: OTError?
    session?.publish(publisher, error: &error)
    guard error == nil else {
        print(error!)
        return
    }

    guard let publisherView = publisher.view else {
        return
    }
   participantVideoView.addSubview(publisherView)
...