I am trying to use Opentok
and CallKit
for audio and video calling purpose, I have followed this demo provided by OpenTok https://github.com/opentok/CallKit/tree/master/CallKitDemo
The issue I am facing is when I am doing audio call to another person it starts speaker instead of Built-in-Receiver. I tried their demo and it also has the same issue.
Then I tried https://developer.apple.com/library/content/samplecode/Speakerbox/Introduction/Intro.html#//apple_ref/doc/uid/TP40017290 which is provided by Apple, but after implementing the AudioController
, the new call starts with Built-in-Speaker and it automatically switched to Speaker and there is no way to make output change.
How are you publishing your stream?
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)
I need to implement a custom audio driver with setting up the 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))
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.