Tutorial: 动态关闭打开本地音频或视频

动态关闭打开本地音频或视频

功能说明

本文主要介绍如何在通话过程中动态地开关摄像头及麦克风。

实现方案

方案一:使用 mute/unmute 方法

在通话过程中使用 muteAudio()unmuteAudio()muteVideo()unmuteVideo() 方法开关摄像头及麦克风。

代码示例:

// 关闭音频,远端会收到 'mute-audio' 事件
localStream.muteAudio();
// 打开音频,远端会收到 'unmute-audio' 事件
localStream.unmuteAudio();
// 关闭视频,远端会收到 'mute-video' 事件
localStream.muteVideo();
// 打开视频,远端会收到 'unmute-video' 事件
localStream.unmuteVideo();
  • 优点:耗时短,兼容性强。
  • 缺点:使用 muteVideo/muteAudio 不会停止设备采集,此时摄像头、麦克风的灯任然是亮着的。

方案二:使用 addTrack/removeTrack/replaceTrack 方法

通话过程中使用 addTrack()removeTrack() 开关摄像头。

代码示例:

// 关闭摄像头
const videoTrack = localStream.getVideoTrack();
if (videoTrack) {
  await localStream.removeTrack(videoTrack)
  // 停止采集,关闭摄像头
  videoTrack.stop();
}
// 打开摄像头
const videoStream = TRTC.createStream({ userId, audio: false, video: true });
await videoStream.initialize();
await localStream.addTrack(videoStream.getVideoTrack());

注意:

  • 由于 removeTrack() 不支持 remove audio track,需使用下述方式实现开关麦克风。

通话过程中使用 replaceTrack() 开关麦克风。

代码示例:

// 关闭麦克风
localStream.muteAudio();
const audioTrack = localStream.getAudioTrack();
if (audioTrack) {
  audioTrack.stop();
}
// 打开麦克风,重新采集麦克风并替换 audio track
const stream = TRTC.createStream({ audio: true, video:false });
await stream.initialize();
localStream.unmuteAudio();
await localStream.replaceTrack(stream.getAudioTrack());
  • 优点:关闭摄像头、麦克风时,会停止采集,摄像头及麦克风灯不会继续亮着。
  • 缺点:开关麦克风方案的兼容性稍差于方案一,可参考:replaceTrack() 中关于兼容性的描述。