微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Twilio iOS SDK:连接房间后更新麦克风/扬声器

如何解决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 举报,一经查实,本站将立刻删除。