说话人问题 - WebRTC和iOS

3

我正在尝试使用谷歌的WebRTC Pod制作视频聊天应用程序。我面临的问题是在尝试使用扬声器进行声音输出时。如果成功访问扬声器,则声音将从所有扬声器(包括顶部和扬声器上的扬声器)中传出,并且会有很多回声和噪音。有时,它根本无法访问扬声器,我会看到这个错误:

Error Domain=NSOSStatusErrorDomain Code=-50 

我主要使用了这个仓库中的webRTC部分:https://github.com/lg-tawsenior/WebRTC-iOS/blob/master/WebRTC-Demo-App/Sources/Services/WebRTCClient.swift

试图通过扬声器输出的函数是:

func speakerOn() {
      self.audioQueue.async { [weak self] in
          guard let self = self else {
              return
          }
        
          self.rtcAudioSession.lockForConfiguration()
          do {
            
            try self.rtcAudioSession.setCategory(AVAudioSession.Category.playAndRecord.rawValue)
            try self.rtcAudioSession.overrideOutputAudioPort(AVAudioSession.PortOverride.speaker)
            try self.rtcAudioSession.setActive(true)
            
          } catch let error {
            
            debugPrint("Couldn't force audio to speaker: \(error)")
          }
          self.rtcAudioSession.unlockForConfiguration()
      }
  }


我尝试设置 rtcAudioSession 为不活动状态,但是无法实现,因为有 I/O 操作正在进行。我尝试暂停 WebRTC transceivers 中的所有远程轨道,但没有成功。
非常感谢您提前的帮助。
1个回答

6

起初我想删除这个问题,但是后来我想如果有人像我一样碰到了这个问题:

以下方法解决了无法访问的问题。

self.rtcAudioSession.setCategory(AVAudioSession.Category.playAndRecord.rawValue, with: [.defaultToSpeaker, .allowBluetoothA2DP, .allowAirPlay, .allowBluetooth])

关于耳机和扬声器同时发出声音的问题,我尝试了多个VoIP应用程序,表现都一样。看来这是苹果想让它工作的方式,所以没有什么可以干涉的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接