问题描述
我正在尝试使用Google的webRTC pod使用webRTC制作视频聊天应用。我面临的问题是尝试使用扬声器进行声音输出时。如果成功访问扬声器,则声音开始从所有扬声器发出,包括顶部的扬声器和扬声器。而且回声和噪音很多。但是有时候,它根本无法访问扬声器,我看到此错误:
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收发器中的所有远程轨道,没有运气。
非常感谢您的帮助。
解决方法
首先,我想到删除此问题,然后再考虑是否有人像我一样偶然发现了这个问题,所以:
以下内容解决了有时无法访问的问题。
self.rtcAudioSession.setCategory(AVAudioSession.Category.playAndRecord.rawValue,with: [.defaultToSpeaker,.allowBluetoothA2DP,.allowAirPlay,.allowBluetooth])
对于从听筒和扬声器发出的声音,我尝试使用多个VoIP应用程序,其行为相同。看起来这就是苹果希望它工作的方式,所以没有什么可干扰的。