- RevueSDK
- AudioCompositor
Class
AudioCompositor
音訊混音器 — 將多路 AudioTrack 混音為一路輸出(獨立工具)
class AudioCompositorOverview
不綁定 Room,用戶自己建立、管理輸入、發布。 內部使用 AVAudioEngine 離線手動渲染模式(offline manual rendering)進行混音。
MCU 場景需要為每個參與者建立獨立的 AudioCompositor(個別化混音,排除該人自己的聲音)。
// === 四人 MCU(Host + A, B, C)完整案例 ===
var mixers: [String: AudioCompositor] = [:] // 給每個人的專屬混音
var localMix = AudioCompositor() // 本地播放用
try localMix.start()
// --- 參與者加入 ---
func room(_ room: Room, participantDidConnect participant: RemoteParticipant) {
// 1. 為新人建立專屬混音器(排除新人自己的聲音)
let mixer = AudioCompositor()
try mixer.start()
mixer.addTrack(localParticipant.microphoneTrack) // Host 自己的聲音
// 加入其他已在房間的人的聲音
for (id, remote) in room.remoteParticipants where id != participant.identity {
mixer.addTrack(remote.audioTrack)
}
mixers[participant.identity] = mixer
// 2. 把新人的聲音加進其他人的混音器
for (id, existingMixer) in mixers where id != participant.identity {
existingMixer.addTrack(participant.audioTrack)
}
// 3. 本地播放也加入新人
localMix.addTrack(participant.audioTrack)
// 4. 發布給該參與者
localParticipant.publish(audioTrack: mixer.outputTrack, to: participant)
}
// --- 參與者離開 ---
func room(_ room: Room, participantDidDisconnect participant: RemoteParticipant) {
// 1. 停止並移除此人的專屬混音器
if let mixer = mixers.removeValue(forKey: participant.identity) {
mixer.stop()
}
// 2. 從其他人的混音器中移除此人的聲音
for (_, existingMixer) in mixers {
existingMixer.removeTrack(participant.audioTrack)
}
// 3. 本地播放也移除
localMix.removeTrack(participant.audioTrack)
}
// --- 離開房間:完整釋放所有資源 ---
func leaveRoom() {
// 1. 停止所有專屬混音器
for (_, mixer) in mixers {
mixer.stop()
}
mixers.removeAll()
// 2. 停止本地播放混音器
localMix.stop()
// 3. 斷開所有遠端參與者
Room.shared.disconnectAll()
}
// --- 穩定後四人房間狀態 ---
// mixers["A"] = Host + B + C → publish to A
// mixers["B"] = Host + A + C → publish to B
// mixers["C"] = Host + A + B → publish to C
// localMix = A + B + C → 本地播放
Topics
Initializers
Instance Properties
var autoOutputSilentBuffer: Bool啟動無聲音頻輸出(在沒有任何輸入時也補幀輸出),預設 false
var isRunning: Bool混音器是否運行中(唯讀)
var localPlaybackEnabled: Bool是否將混音結果送到本地喇叭播放(測試/監聽用,預設 false)
var onMixerOutput: ((String) -> Void)?mixer output 診斷 callback(可選,供 UI 顯示混音器輸出狀態)
var outputTrack: LocalAudioTrack?混音輸出 Track(用於本地播放或發布)
var tracks: [AudioTrack]當前所有輸入 Track(唯讀)
Instance Methods
func addTrack(AudioTrack)加入音訊 Track 到混音
func removeTrack(AudioTrack)從混音中移除音訊 Track
func start() throws啟動混音器
func stop()停止混音器,釋放所有資源