我们正在将 WebRTC M110 与 iOS 16.5 一起用于音频通话应用程序,并希望允许我们的用户将音频静音,以便操作系统提供的“橙色指示器”消失。我们还没有找到有效的解决方案。 我们像这样初始化音频会话
RTCAudioSession.sharedInstance().useManualAudio = true
RTCAudioSession.sharedInstance().lockForConfiguration()
try! RTCAudioSession.sharedInstance().setCategory(
AVAudioSession.Category.playAndRecord.rawValue,
with: []
)
try! RTCAudioSession.sharedInstance().setMode(AVAudioSession.Mode.voiceChat.rawValue)
try! RTCAudioSession.sharedInstance().setActive(true)
RTCAudioSession.sharedInstance().unlockForConfiguration()
RTCAudioSession.sharedInstance().isAudioEnabled = true
为了静音和取消静音我们的音频流,我们将
isEnabled
设置为用户设置的当前静音状态
peerConnection.transceivers.compactMap { $0.sender.track as? RTCAudioTrack }
.forEach { $0.isEnabled = isEnabled }
这似乎是此问题的一般解决方案,例如在 StackOverflow[1]
[2] 上进行了描述,并在 示例项目 中使用,但它也不起作用。此后不再发送音频,但仍显示橙色麦克风指示器。这在其他应用程序(例如 Signal)中不是标准的,我们希望也不要显示橙色麦克风指示器。我们如何实现这一目标? 此外,我们还尝试了以下方法:
AVAudioSession.Category.playAndRecord.rawValue
。然而,这不起作用,并且 AVAudioSession 会抛出错误,除非我们在启用音频会话之前执行此操作。使用
RTCAudioSession.sharedInstance().isAudioEnabled = false
禁用并随后启用音频会话也不起作用。
isEnabled
设置为 false (
github.com/signalapp/ringrtc/)。然而,随着他们的实施,橙色麦克风指示器几乎立即消失。