Opentok 和 CallKit 的问题

Posted

技术标签:

【中文标题】Opentok 和 CallKit 的问题【英文标题】:Issue with Opentok and CallKit 【发布时间】:2018-05-24 06:36:20 【问题描述】:

我正在尝试使用 OpentokCallKit 进行音频和视频通话,我已按照 OpenTok https://github.com/opentok/CallKit/tree/master/CallKitDemo 提供的这个演示进行操作

我面临的问题是,当我与另一个人进行音频通话时,它会启动扬声器而不是内置接收器。我试过他们的演示,它也有同样的问题。

然后我尝试了Apple提供的https://developer.apple.com/library/content/samplecode/Speakerbox/Introduction/Intro.html#//apple_ref/doc/uid/TP40017290,但是在实现AudioController之后,新的通话以Built-in-Speaker开始,并自动切换到Speaker,无法更改输出。

【问题讨论】:

【参考方案1】:

你是如何发布你的流的?

 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)

【讨论】:

是的,我也做了同样的事情。【参考方案2】:

我需要通过设置 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))
        

【讨论】:

以上是关于Opentok 和 CallKit 的问题的主要内容,如果未能解决你的问题,请参考以下文章

Cordova OpenTok 集成 Chrome 问题

OpenTok 在音频/视频会议会话中缺少音频

Callkit 来电未在旧 iphone 的背景中显示 (Pushkit/Callkit)

CallKit 在 iPad 上可用吗?

OpenTok 视频聊天

opentok cordova 应用程序需要任何优化吗?