控制本地音视频推流有两种粒度不同的操作,选错方式会导致不必要的资源浪费或功能异常:
enableLocalTrack / disableLocalTrack
这两个方法仅控制媒体数据的发送,底层 WebRTC 连接仍然保持。适合需要快速切换静音/取消静音的场景。
注意: disableLocalTrack 后麦克风采集仍在进行(指示灯仍亮),只是不往频道推数据。
如果希望完全停止采集以释放麦克风,请使用 unpublishLocalTrack + stopCapture。
unpublishLocalTrack / publishLocalTrack
彻底停止/重启推流,会触发远端的 USER_TRACK_REMOVE / USER_TRACK_ADD 事件。适合用户离开舞台、会议中「停止分享」等场景。
重新发布前要确保上一条同 desc 的轨道已经 unpublishLocalTrack 完成——同一个频道内一个 desc 只允许一条轨道在发布,用另一条轨道重复发布同一个 desc 会抛错。尤其别让「关麦」和「开麦」两个动作交错执行:如果在上一次 publishLocalTrack 的 await 窗口里又发起一次开麦,两条麦克风轨会同时推流,而你手上只留得下后创建的那条引用,先发的那条既取消不掉、采集也停不了,对端会一直听到声音。给这类入口加个串行队列或按钮 loading 态。
选择建议
- 会议麦克风静音按钮 → 用
disableLocalTrack / enableLocalTrack,响应快,体验流畅
- 停止分享屏幕 → 用
unpublishLocalTrack + stopCapture,彻底释放资源
- 摄像头暂时关闭(画面变黑) → 用
disableLocalTrack
- 摄像头彻底关闭(释放设备) → 用
unpublishLocalTrack + stopCapture