- RevueSDK
- LocalParticipant
- setMicrophone(enabled:)
Instance Method
setMicrophone(enabled:)
啟用/停用麥克風硬體擷取(不 publish、不改 isMuted)
@discardableResult func setMicrophone(enabled: Bool) -> LocalAudioTrack?Parameters
- enabled
true = 開硬體擷取、false = 關硬體擷取
Return Value
麥克風 LocalAudioTrack(後續可透過 publish(audioTrack:to:options:) 發布給指定對象)
Discussion
只開關麥克風硬體(AudioManager 依此切換 AudioSession category),不發布、 不翻任何 isMuted 旗標,也不觸發 mute 事件。
與 mute 的關係
mute 分兩層(軌道層、publication 層),和本方法是不同的 API:
| API | 作用範圍 | 硬體 | isMuted |
|---|---|---|---|
setMicrophone(enabled:) | 不針對接收者處理 | 開/關 | 不改 |
set(source: .microphone, enabled:) / microphoneTrack.mute() | 整條軌道,所有接收者收到全 0 的聲音 | 不停 | 改 Track.isMuted |
LocalTrackPublication.mute() / unmute() | 只有那一份 publication 的接收者收到全 0 的聲音 | 不碰 | 改那一份的 isMuted |
mute 狀態不另外送訊號:接收端從收到的聲音判斷(全 0 即視為 mute)。
內部走 publication.mute/unmute → mediaTrack.isEnabled = false(WebRTC 內部把 audio 取樣填零)。 AudioUnit / AudioDeviceModule 持續運轉,AudioSession 維持 .playAndRecord。
RevueSDK
setMicrophone(enabled:)真的會關 mic 硬體擷取。 差異原因:RevueSDK 有「預覽錄影檔」等場景需要切回.playbackaudio session category 取得正常喇叭音量; 只要 mic 硬體還在跑就必須維持.playAndRecord,喇叭音量會被系統壓低(防回授)。 要「關麥克風但不停硬體」,用set(source: .microphone, enabled: false)。
// 停硬體(例如要預覽錄影檔,AudioSession 可切回 .playback)
localParticipant.setMicrophone(enabled: false)
// 只對 A 靜音:A 收到全 0 的聲音,其他人照常
try await publicationToA.mute()
// 對所有人靜音(mute 軌道,硬體不停,可快速恢復)
try await localParticipant.set(source: .microphone, enabled: false)