如何在 iOS 中使用 WebRTC 将麦克风静音并删除橙色麦克风指示灯

问题描述 投票:0回答:1

我们正在将 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)中不是标准的,我们希望也不要显示橙色麦克风指示器。我们如何实现这一目标? 此外,我们还尝试了以下方法:

    我们尝试在禁用音轨时更改音频会话并将类别设置为
  1. AVAudioSession.Category.playAndRecord.rawValue

    。然而,这不起作用,并且 AVAudioSession 会抛出错误,除非我们在启用音频会话之前执行此操作。使用

    RTCAudioSession.sharedInstance().isAudioEnabled = false
    禁用并随后启用音频会话也不起作用。
    
    

  2. 我们查看了 Signals RingRTC,看起来他们正在做同样的事情,只是在静音时将
  3. isEnabled

    设置为 false (

    github.com/signalapp/ringrtc/
    )。然而,随着他们的实施,橙色麦克风指示器几乎立即消失。

  4. 我们尝试直接删除对等连接上的曲目。但这也改变不了任何事情。
ios audio webrtc webrtc-ios
1个回答
0
投票

© www.soinside.com 2019 - 2024. All rights reserved.