如何解决Twilio iOS SDK:连接房间后更新麦克风/扬声器
我有一个基于 iOS Twilio SDK 的应用程序,需要在聊天/房间进行时更改音频输入/输出中间。所以麦克风/扬声器需要更改为内置耳机/扬声器。
我构建了代码来复制切换文档,但是当音频输入/输出改变时,它会工作一秒钟,然后音频会中断,直到您重新开始聊天。
这里是初始化序列和设备切换的代码。
private func setupAudioTrack() {
self.audioDevice = DefaultAudioDevice()
TwilioVideoSDK.audioDevice = self.audioDevice!
if(self.deviceManager.headphonesConnected) {
self.pttMicrophone()
} else {
self.pttSpeaker()
}
self.audioTrack = LocalAudioTrack(options: nil,enabled: true,name: "Microphone")
self.audioTrack?.addSink(self)
}
private func pttSpeaker() {
print("SessionManager: pttSpeaker")
self.audioDevice?.block = {
do {
DefaultAudioDevice.DefaultAVAudioSessionConfigurationBlock()
let audioSession = AVAudioSession.sharedInstance()
try? audioSession.setActive(false)
try? audioSession.setCategory(.playAndRecord,mode: .videoChat,options: [.allowBluetoothA2DP,.defaultToSpeaker])
for port in audioSession.availableInputs ?? [] {
print(port.portType.rawValue,AVAudioSession.Port.headsetMic.rawValue)
if port.portType == AVAudioSession.Port.builtInSpeaker {
print("Setting microphone to speaker")
try? audioSession.setPreferredInput(port)
break
}
}
try? audioSession.overrideOutputAudioPort(.speaker)
try? audioSession.setActive(true)
}
}
self.audioDevice?.block()
}
private func pttMicrophone() {
print("SessionManager: pttMicrophone")
self.audioDevice?.block = {
do {
DefaultAudioDevice.DefaultAVAudioSessionConfigurationBlock()
let audioSession = AVAudioSession.sharedInstance()
try? audioSession.setActive(false)
try? audioSession.setCategory(.playAndRecord,options: [.allowBluetoothA2DP])
for port in audioSession.availableInputs ?? [] {
print(port.portType.rawValue,AVAudioSession.Port.headsetMic.rawValue)
if port.portType == AVAudioSession.Port.headsetMic {
print("Setting microphone to headset")
try? audioSession.setPreferredInput(port)
break
}
}
try? audioSession.setActive(true)
}
}
self.audioDevice?.block()
}
这是我们复制的文档:https://www.twilio.com/docs/video/ios-v2-configuring-audio-video-inputs-and-outputs
这是我们复制的代码片段
// Change the audio route after connecting to a Room.
self.audioDevice.block = {
do {
kDefaultAVAudioSessionConfigurationBlock()
let audioSession = AVAudioSession.sharedInstance()
try audioSession.setMode(AVAudioSessionModeVoiceChat)
} catch let error as NSError {
print("Fail: \(error.localizedDescription)")
}
}
self.audioDevice.block();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。