常见问题

产品 / 插件
平台 / 框架

如何在通话中切换音视频输入设备?

产品 / 插件:实时音视频 / 实时语音 / 低延迟直播

平台 / 框架:Web

更新时间:2021-09-09 19:57


Web 桌面端切换音视频输入设备

音视频输入设备通过设备 ID(deviceId) 标识,每个音视频设备均有一个唯一的设备 ID,可以通过 enumDevices 接口获取。设备 ID 是随机生成的,部分情况下同一个设备的 ID 可能会改变,因此我们建议每次切换设备时都先调用 enumDevices 接口获取设备 ID。

为了保护用户隐私,Chrome 81 及以上版本、Safari 和 Firefox 浏览器需要在获得媒体设备权限后才能获取设备 ID。可以通过创建临时的流采集音视频,触发媒体设备权限申请,以获得完整的设备信息。通过如下代码触发麦克风和摄像头的权限申请。

const stream = zg.createStream();
zg.destroyStream(stream);
  1. 调用 enumDevices 获取设备 ID。

  2. 调用如下接口实时切换设备。


const deviceInfo = await zg.enumDevices();

//切换摄像头
const cameras = deviceInfo.cameras;

const res = await zg.useVideoDevice(localStream, cameras[1].deviceID);

//切换麦克风
const microphones = deviceInfo.microphones;

const res = await zg.useAudioDevice(localStream, microphones[1].deviceID);

Web 移动端切换视频输入设备

移动端切换音频输入设备的操作与桌面端一致,详情请参考上一章节 桌面端切换音视频输入设备。

如果要在移动端切换视频输入设备,例如从后置摄像头切换为前置摄像头,在调用切换设备接口之前必须先关闭当前视频轨道。

如果要在移动端切换视频输入设备,例如从后置摄像头切换为前置摄像头,在调用 useVideoDevice 接口之前必须先关闭当前视频轨道。

//关闭当前视频轨道
localStream.getVideoTracks().forEach(track => track.stop());
zg.useVideoDevices(localStream, deviceID);