在多人音视频通话前,设备的正确管理和配置是确保会议顺畅进行的关键。小鱼易连 Web SDK 提供强大的会前设备管理功能,支持以下操作:
通过这些功能,用户能够在会议开始前调试设备,确保会议过程的顺利进行和优质体验。
小鱼易连 Web SDK 支持通过调用 XYRTC.createClient 方法创建
事件
事件 | 描述 |
设备变更事件,获取全量设备列表和新切换设备信息 | |
设备权限变动事件 | |
监听轨道异常信息,例如音频/视频采集失败 |
方法
方法 | 描述 |
创建自定义日志Logger实例 | |
创建会议客户端 XYRTCClient 模块,提供实时音视频通话框架能力 | |
创建摄像头和麦克风轨道实例 | |
采集麦克风和摄像头流,支持分别采集 | |
获取本地麦克风实时音量大小,范围:0-100 | |
获取视频的流数据 | |
切换麦克风/摄像头/扬声器设备 | |
挂断会议,销毁资源 |
初始化日志和XYRTCClient模块
import XYRTC from '@xylink/xy-rtc-sdk';
let XYClient = null;
// 创建Logger模块
const logger = XYRTC.createLogger({
dbName: 'XYRTC_SETTING_LOG',
// 配置Scope字段,生成带有SETTING标示的日志数据
scope: 'SETTING',
// 最大存储10000条数据,覆盖存储
maxSize: 10000,
});
// 创建客户端模块
XYClient = XYRTC.createClient({}, logger);
let peopleTrack = null;
peopleTrack = await XYClient.createVideoAudioTrack();
// 初始化事件
initEvent();
await peopleTrack.capture();
// 监听事件
const initEvent = () => {
// 监听设备权限变动
peopleTrack.on('permission', (e) => {
console.log('permission event: ', e);
});
// 监听设备变动
peopleTrack.on('device', (e) => {
console.log('device event: ', e);
});
// 监听错误
peopleTrack.on('track-error', (e) => {
console.log('track-error event: ', e);
});
};
通过getVideoStream获取视频流,并绑定到video
元素上:
// 本地画面预览
const ele_preview_video = document.getElementById('preview_video');
const startPreviewVideo = () => {
// 调用getVideoStream获取MediaStream流
const videoMediaStream = XYClient.getVideoStream();
if (videoMediaStream) {
// 给video元素设置播放
ele_preview_video.srcObject = videoMediaStream;
}
};
// UI
<video id="preview_video" style="width: 200px; height: 100px" autoplay controls></video>
// 音量大小
const ele_audio_level = document.getElementById('audio_level');
let interval = null;
const startAudioLevel = () => {
interval = setInterval(async () => {
const level = await peopleTrack.getAudioLevel();
ele_audio_level.innerText = level;
}, 100);
};
// UI
<div>
<span>音量大小:</span>
<span id="audio_level"></span>
</div>
调用 VideoAudioTrack
模块的 switchDevice 方法切换扬声器、麦克风、摄像头设备即可;
提示
在业务中缓存用户选择的设备 ID,入会时直接使用缓存配置设备,提升用户体验。
上述介绍的完整的代码如下;
HTML内容:
<button id="startSetting">打开设置</button>
<button id="stopSetting">关闭设置</button>
<div id="preview">
<div>
<video id="preview_video" style="width: 200px; height: 100px" autoplay controls></video>
</div>
<div>
<span>音量大小:</span>
<span id="audio_level"></span>
</div>
</div>
Javascript内容:
import XYRTC from '@xylink/xy-rtc-sdk';
// 本地画面预览
const ele_preview_video = document.getElementById('preview_video');
// 音量大小
const ele_audio_level = document.getElementById('audio_level');
let XYClient = null;
let peopleTrack = null;
let interval = null;
const startSetting = async () => {
// 创建会前单独的Logger模块
const logger = XYRTC.createLogger({
dbName: 'XYRTC_SETTING_LOG',
// 配置Scope字段,生成带有SETTING标示的日志数据
scope: 'SETTING',
// 最大存储10000条数据,覆盖存储
maxSize: 10000,
});
XYClient = XYRTC.createClient({}, logger);
peopleTrack = await XYClient.createVideoAudioTrack();
initEvent();
await peopleTrack.capture();
startPreviewVideo();
startAudioLevel();
};
const stopSetting = async () => {
await XYClient.destroy();
if (interval) {
clearInterval(interval);
}
XYClient = null;
};
const startAudioLevel = () => {
interval = setInterval(async () => {
const level = await peopleTrack.getAudioLevel();
console.log('level: ', level);
ele_audio_level.innerText = level;
}, 100);
};
const startPreviewVideo = () => {
// 调用getVideoStream获取MediaStream流
const videoMediaStream = XYClient.getVideoStream();
if (videoMediaStream) {
// 给video元素设置播放
ele_preview_video.srcObject = videoMediaStream;
}
};
const initEvent = () => {
peopleTrack.on('permission', (e) => {
console.log('permission event: ', e);
});
peopleTrack.on('device', (e) => {
console.log('device event: ', e);
});
peopleTrack.on('track-error', (e) => {
console.log('track-error event: ', e);
});
};
document.getElementById('startSetting').addEventListener('click', startSetting);
document.getElementById('stopSetting').addEventListener('click', stopSetting);
提示
更多完整的会前设置功能参考:Demo示例程序,整体功能更丰富,UI更完善;
事件
方法