Opentok 和 CallKit 问题
Issue with Opentok and CallKit
我正在尝试使用 Opentok
和 CallKit
进行音频和视频通话,我已经按照 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,没办法改变输出。
你如何发布你的流?
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)
我需要通过设置 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
进行音频和视频通话,我已经按照 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,没办法改变输出。
你如何发布你的流?
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)
我需要通过设置 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))
}