这些关于视频会议的功能怎么实现呢?本文就来聊聊关于视频会议的实现分析,主要通过视频会议的核心两点拆分来看,即虚拟背景实现和AI降噪两个方面,以及基于声网Web SDK的简单使用体验。
1、开发环境
其实声网的Web SDK兼容性非常不错,对硬件设备和软件系统的要求不高,开发和测试环境只要满足以下条件即可:
Chrome
Firefox
Safari
Edge
MacBook Pro
Visual Studio Code
Chrome
在使用声网Web SDK的时候,如果没有声网账号,需要先去注册一个声网账号,然后进入声网后台管理平台创建你要使用的AppID、获取 Token等操作。注册地址在这里:
https://sso2.agora.io/cn/v4/signup/with-sms
提前下载声网官方的关于视频会议的Web SDK。
随着视频会议应用的功能不断更新发展,为了迎合实际的用户需求,各大视频会议应用的厂商都推出了个性化的功能。在视频会议应用的使用中,关于虚拟背景的功能就是比较重要的一环,虚拟背景可以说是视频会议应用必备功能,而且虚拟背景对应的功能随着用户的需求变的越来越复杂。
1、过程原理介绍
从技术层面来看,虚拟背景主要是依托于人像分割技术,通过把图片中的人像分割出来,再对背景图片进行替换的操作。从实际的使用情况分为三种:
实时通讯情形:主要是为了保护使用者的隐私,如视频远程会议;
直播情形:主要是为了营造气氛,如技术直播、公司线上年会;
互动娱乐情形:主要是为了增强趣味性,如短视频中人物特性。
本文以声网对应的虚拟背景功能的集成使用为例来讲,用到的就是虚拟背景插件agora-extension-virtual-background,然后结合声网的Web SDK搭配使用,可以将使用者人像和背景分离开,虚化使用者的实际背景,或者使用自定义内容来替代实际背景,可以很好的保护使用者隐私,以及避免杂乱的背景对其他观众造成不好的视觉体验。声网关于虚拟背景的技术实现原理也有很清晰的介绍,如下所示:

(1)首先实现音视频功能,初始化下载之后的demo,具体如下所示:


在前端demo中集成声网音视频SDK,主要通过npm来操作,具体操作步骤如下所示:

上面引入之后,需要在使用的项目中导入AgoraRTC 模块,具体如下所示:
上面引入之后,实现客户端的用户使用的界面之后,在具体的地方创建AgoraRTCClient 对象,具体如下所示:

接下来是麦克风采集和摄像头采集的方法,创建本地对应的轨道对象,具体如下所示:

具体的运行效果如下所示:

具体的其他内容,可以参看声网音视频官方文档。

(2)在前端demo中引入虚拟背景插件,具体的命令行:
npm install agora-extension-virtual-background
import VirtualBackgroundExtension from "agora-extension-virtual-background"; //这里示例以通过import的方式来引入
(4)需要注意的一点就是声网的虚拟背景插件依赖与Wasm文件,使用的时候需要把Wasm文件放在CDN或者静态服务器中,本示例只在本地运行,所以无需发布在CDN上,但是实际使用的时候要记得放在CDN上,切记!
// 创建 Clientvar client = AgoraRTC.createClient({mode: "rtc", codec: "vp8"});// 创建 VirtualBackgroundExtension 实例const extension = new VirtualBackgroundExtension();// 检查兼容性if (!extension.checkCompatibility()) {// 当前浏览器不支持虚拟背景插件,可以停止执行之后的逻辑console.error("该版本暂不支持该功能!");}// 注册插件AgoraRTC.registerExtensions([extension]);
(6)初始化虚拟背景插件,具体代码段:
// 初始化async function getProcessorInstance() {processor = extension.createProcessor(); //创建 VirtualBackgroundProcessor 实例。try {await processor.init("./assets/wasms"); // 初始化插件,传入 Wasm 文件路径} catch(e) {//捕获异常并进行相应处理。console.log("Fail");return null;}localTracks.videoTrack.pipe(processor).pipe(localTracks.videoTrack.processorDestination); // 将插件注入 SDK 内的视频处理管道}
processor.setOptions({type: 'color', color: '#FF0000'}); //type表示背景类型为颜色;对应的是颜色色值的参数。(其实还有img、blur、video等类型,这里不在一一列举)
(8)打开虚拟背景功能,通过processor.enable()方法:
await processor.enable();
processor.disable();
localTracks.videoTrack.unpipe();
3、小结
npm install agora-extension-ai-denoiser
import {AIDenoiserExtension} from "agora-extension-ai-denoiser";
const denoiser = new AIDenoiserExtension({assetsPath:'./external'}); //注意路径结尾不带 “/”// 检查兼容性if (!denoiser.checkCompatibility()) {// 当前浏览器可能不支持 AI 降噪插件,可以停止执行之后的逻辑console.error("该版本暂不支持该功能!");}// 注册插件AgoraRTC.registerExtensions([denoiser]);denoiser.onloaderror = (e) => {//捕获异常并进行相应处理。console.log(e);}
const processor = denoiser.createProcessor(); // 创建 processorprocessor.enable(); // 设置插件为默认开启
processor.disable(); // 设置插件为默认关闭
const audioTrack = await AgoraRTC.createMicrophoneAudioTrack(); // 创建音频轨道audioTrack.pipe(processor).pipe(audioTrack.processorDestination); // 将插件注入音频处理管道await processor.enable(); // 设置插件为开启
if (processor.enabled) { //已经开启状态await processor.disable(); // 设置插件为关闭} else {await processor.enable(); // 设置插件为开启}
(9)调整降噪模式和等级,具体代码段:
// 用来监听降噪处理耗时过长的事件processor.onoverload = async (elapsedTime) => {// 调整为稳态降噪模式,临时关闭 AI 降噪await processor.setMode("STATIONARY_NS");或者// 完全关闭 AI 降噪,用浏览器自带降噪// await processor.disable()}
processor.dump(); //调用dump方法
3、小结
声网的虚拟背景实现和AI降噪两个核心功能,不仅使用的步骤很简单,而且实现出来的效果很不错,完全可以满足想要开发视频会议相关应用的需求。整体操作下来,个人还是觉得声网对应的API文档写的太好了,很详细,步骤也很清晰,还有就是声网产品的集成步骤也很简单,节省了集成插件的时间,从集成到调用,再到体验,用了不到一小时就搞定了虚拟背景实现和AI降噪两个模块的体验。所以,有在开发音视频相关的朋友可以看过来了,声网的相关产品不仅成熟,还很好用,快来体验使用吧!
https://sso2.agora.io/cn/v4/signup/with-sms
关注实时互动领域的
技术实践、行业洞察、人物观点
☟☟☟

