代码之家  ›  专栏  ›  技术社区  ›  Alec.

iOS-使用Opus编解码器的WebRTC单向音频

  •  0
  • Alec.  · 技术社区  · 4 年前

    我有一个使用GoogleWebRTC pod的swift项目。

    在尝试协商音频呼叫的OPUS编解码器时,我发现对等连接已成功设置,但我遇到了单向音频。SRTP已成功从我的iPhone发送到另一方,SRTP也从另一方发送到我的iPhone,但我的手机/应用程序没有向用户播放传入的SRTP。 如果我协商任何其他编解码器(例如G722),那么我会得到双向音频,只是当我尝试协商OPUS时,我在iPhone上听不到任何传入的音频。

    在日志中看不到任何相关内容,但正在寻找一些关于如何排除此问题或可能导致此问题的原因的指针。

    我正在使用谷歌WebRTC iOS SDK。

    这是我的webrtc类中的代码,如果有帮助,我会在其中初始化音频会话。

       private func configureAudioSession() {
            self.rtcAudioSession.lockForConfiguration()
            do {
                try self.rtcAudioSession.setCategory(AVAudioSession.Category.playAndRecord.rawValue)
                try self.rtcAudioSession.setMode(AVAudioSession.Mode.voiceChat.rawValue)
            } catch let error {
                debugPrint("Error changeing AVAudioSession category: \(error)")
            }
            self.rtcAudioSession.unlockForConfiguration()
        }
    
    0 回复  |  直到 4 年前
        1
  •  1
  •   Alec.    4 年前

    对于其他偶然发现这一点的人来说,我没有使用callkit在callprovider协议的didActivate方法中提供的音频会话。

    这是我修改后的配置音频会话

    private func configureAudioSession() {
        self.rtcAudioSession.lockForConfiguration()
        do {
             self.rtcAudioSession.useManualAudio = true
             self.rtcAudioSession.isAudioEnabled = false
            try self.rtcAudioSession.setCategory(AVAudioSession.Category.playAndRecord.rawValue)
            try self.rtcAudioSession.setMode(AVAudioSession.Mode.voiceChat.rawValue)
        } catch let error {
            debugPrint("Error changeing AVAudioSession category: \(error)")
        }
        self.rtcAudioSession.unlockForConfiguration()
    }
    

    然后在我的提供者代表中

     func provider(_ provider: CXProvider, didActivate audioSession: AVAudioSession) {
            print("Received \(#function)")
            
            webRTCClient.rtcAudioSession.audioSessionDidActivate(audioSession)
            webRTCClient.rtcAudioSession.isAudioEnabled = true
            // Start call audio media, now that the audio session has been activated after having its priority boosted.
            //   startAudio()
        }