实现基于声网Web SDK的视频会议的使用体验

引导语

众所周知,市面上有比如飞书会议、腾讯会议等实现视频会议功能的应用,而且随着这几年大环境的影响,远程协作办公越来越成为常态,关于视频会议的应用也会越来越多,且在远程办公的沟通协作中对沟通软件的使用要求会越来越严格。正是因为外部大环境的原因直接促进了远程办公从起步逐渐走向成熟,打破了传统的以场地办公为主的模式,这使得视频会议的应用呈现出一派繁荣发展的景象。这些关于视频会议的功能怎么实现呢?那么本文就来聊聊关于视频会议的实现分析,主要通过视频会议的核心两点拆分来看,即虚拟背景实现和AI降噪两个方面,以及基于声网Web SDK的简单使用体验。

使用前的准备工作

由于本文分享的是关于声网Web SDK的视频会议的使用心得,读者如果也想体验声网的这个Web SDK,需要提前准备使用前的工作,具体如下所示:

1、开发环境

其实声网的Web SDK兼容性非常不错,对硬件设备和软件系统的要求不高,开发和测试环境只要满足以下条件即可:

  • Chrome
  • Firefox
  • Safari
  • Edge

2、本文的体验测试使用到的开发环境

  • MacBook Pro
  • Visual Studio Code

3、本文的体验测试使用到的测试环境

  • Chrome

4、其他

一、虚拟背景实现

随着视频会议应用的功能不断更新发展,为了迎合实际的用户需求,各大视频会议应用的厂商都推出了个性化的功能。在视频会议应用的使用中,关于虚拟背景的功能就是比较重要的一环,虚拟背景可以说是视频会议应用必备功能,而且虚拟背景对应的功能随着用户的需求变的越来越复杂。

1、过程原理介绍

从技术层面来看,虚拟背景主要是依托于人像分割技术,通过把图片中的人像分割出来,再对背景图片进行替换的操作。从实际的使用情况分为三种:

  • 实时通讯情形:主要是为了保护使用者的隐私,如视频远程会议;
  • 直播情形:主要是为了营造气氛,如技术直播、公司线上年会;
  • 互动娱乐情形:主要是为了增强趣味性,如短视频中人物特性。

2、具体步骤

本文以声网对应的虚拟背景功能的集成使用为例来讲,用到的就是虚拟背景插件agora-extension-virtual-background,然后结合声网的Web SDK搭配使用,可以将使用者人像和背景分离开,虚化使用者的实际背景,或者使用自定义内容来替代实际背景,可以很好的保护使用者隐私,以及避免杂乱的背景对其他观众造成不好的视觉体验。声网关于虚拟背景的技术实现原理也有很清晰的介绍,如下所示:


0

那么接下来就来看看虚拟背景的功能怎么实现吧,具体使用步骤如下所示:

(1)首先实现音视频功能,在前端demo中集成声网音视频SDK,主要通过npm来操作,具体操作步骤这里不在赘述,可以参看声网音视频官方文档:https://docs.agora.io/cn/video-call-4.x/start_call_web_ng?platform=Web

(2)在前端demo中引入虚拟背景插件,具体的命令行:

npm install agora-extension-virtual-background

(3)在对应的具体使用的地方引入虚拟背景插件,具体操作:

import VirtualBackgroundExtension from "agora-extension-virtual-background"; //这里示例以通过import的方式来引入

(4)需要注意的一点就是声网的虚拟背景插件依赖与Wasm文件,使用的时候需要把Wasm文件放在CDN或者静态服务器中,本示例只在本地运行,所以无需发布在CDN上,但是实际使用的时候要记得放在CDN上,切记!

(5)在实际的前端页面中实现虚拟背景插件的注册操作,具体代码段:

// 创建 Client
var 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 内的视频处理管道
}

(7)通过processor.setOptions()方法设置虚拟背景类型和对应的参数,示例:

processor.setOptions({type: 'color', color: '#FF0000'}); //type表示背景类型为颜色;对应的是颜色的色值的参数。(其实还有img、blur、video等类型,这里不在一一列举)

(8)打开虚拟背景功能,通过processor.enable()方法:

await processor.enable();

(9)短暂关闭虚拟背景功能,通过processor.disable()方法:

processor.disable();

(10)结束关闭虚拟背景功能,通过videoTrack.unpipe()方法:

localTracks.videoTrack.unpipe();

3、小结

通过上面关于引入虚拟背景的核心步骤,可以看到声网的虚拟背景插件使用起来非常简单,只需简单的几步,就可以在前端音视频项目中实现虚拟背景的功能,而且关于虚拟背景的虚拟效果有很多个选项,完全可以满足实际使用中的需求。个人觉得声网这个虚拟背景插件非常好用,不仅集成使用很简单,而且实现的效果也很不错,感兴趣的读者快来下手试一下吧!

二、AI降噪实现

在视频会议应用的使用中,另外一个比较重要的环节就是降噪。因为在实际的线上会议中,如果参会人员都是处在比较安静的环境下还好说,但是一般在线上会议的时候参会人员所处的环境都不相同,且所处的环境会有各种噪音,往往这些噪音会直接降低在线会议中的音质,从而影响会议的体验。所以通过使用降噪,就可以把在线会议过程中的噪音去掉,进而提高参会人员的良好体验。

1、过程原理介绍

依然从技术层面来看,降噪其实就是获取音频信号并且消除音频中的噪音的过程。由于声音是由空气中的压力波组成,关于人所能感知到的实际声音只是一小部分,其中还包括各种回声、噪音、周围的其他环境音,声网推出的关于降噪的功能:基于AI降噪,通过使用AI降噪可以解决上述的痛点问题。

2、具体步骤

这里还是以声网对应的AI降噪功能的集成使用为例来讲,用到的就是AI降噪插件agora-extension-ai-denoiser,然后结合声网的Web SDK搭配使用,可以降低上百种噪声,减少多人同时说话时的人声失真等问题。对于在线会议、语聊房、远程问诊、游戏语音等场景,AI 降噪插件能够让远程交流和面对面交谈一样实时。声网关于AI降噪的技术实现原理也有很清晰的介绍,如下所示:


0

那么接下来就来看看AI降噪的功能怎么实现吧,具体使用步骤如下所示:

(1)首先还是要实现音视频功能,具体步骤同虚拟背景实现的步骤1;

(2)在前端demo中引入AI降噪插件,具体的命令行:

npm install agora-extension-ai-denoiser

(3)在项目.js 文件中加入导入 AI 降噪模块,具体操作:

import {AIDenoiserExtension} from "agora-extension-ai-denoiser";

(4)还是要注意的是AI降噪插件依赖与Wasm文件,使用的时候需要把Wasm文件放在CDN或者静态服务器中,本示例只在本地运行,所以无需发布在CDN上,但是实际使用的时候要记得放在CDN上,切记!

(5)在实际的前端页面中实现AI降噪景插件的注册操作,具体代码段:

const denoiser = new AIDenoiserExtension({assetsPath:'./external'}); //注意路径结尾不带 “/”
// 检查兼容性
if (!denoiser.checkCompatibility()) {
    // 当前浏览器可能不支持 AI 降噪插件,可以停止执行之后的逻辑
    console.error("该版本暂不支持该功能!");
}
// 注册插件
AgoraRTC.registerExtensions([denoiser]); 
denoiser.onloaderror = (e) => {
     //捕获异常并进行相应处理。
      console.log(e);
}

(6)创建实例,具体代码段:

const processor = denoiser.createProcessor();  // 创建 processor
processor.enable(); // 设置插件为默认开启

或者

processor.disable(); // 设置插件为默认关闭

(7)把AI降噪插件注入到音频处理管道中,具体代码段:

const audioTrack = await AgoraRTC.createMicrophoneAudioTrack();   // 创建音频轨道 
audioTrack.pipe(processor).pipe(audioTrack.processorDestination);  // 将插件注入音频处理管道
await processor.enable();  // 设置插件为开启

(8)设置AI降噪的开启或者关闭状态,具体代码段:

    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()
}

(10)转储降噪处理中的音频数据,具体代码段:

processor.dump(); //调用dump方法

3、小结

通过上面关于引入AI降噪的核心步骤,可以看到声网的AI降噪插件使用起来非常简单,只需简单几步就可在前端音视频项目中实现AI降噪的功能。个人觉得声网这个AI降噪插件同样非常的好用,不仅集成使用很简单,而且实现的效果也很不错,感兴趣的读者快来体验吧!

结束语

通过本文关于实现基于声网Web SDK的视频会议的使用体验,从视频会议的核心部分来做实现分析,是不是可以上手来开发一个属于视频会议应用了呢?声网的虚拟背景实现和AI降噪两个核心功能,不仅使用的步骤很简单,而且实现出来的效果很不错,完全可以满足想要开发视频会议相关应用的需求。整体操作下来,个人还是觉得声网对应的API文档写的太好了,很详细,步骤也很清晰,还有就是声网产品的集成步骤也很简单,节省了集成插件的时间,从集成到调用,再到体验,用了不到一小时就搞定了虚拟背景实现和AI降噪两个模块的体验。所以,有在开发音视频相关的朋友可以看过来了,声网的相关产品不仅成熟,还很好用,快来体验使用吧!

参考文献

  1. 声网文档中心--SDK下载:https://docs.agora.io/cn/video-call-4.x/downloads?platform=Web
  2. Demo下载:https://github.com/AgoraIO/API-Examples-Web/tree/main/Demo
  3. 声网文档中心--虚拟背景文档:https://docs.agora.io/cn/video-call-4.x/virtual_background_web_ng?platform=Web
  4. 声网文档中心--AI 降噪文档:https://docs.agora.io/cn/video-call-4.x/noise_reduction_web_ng?platform=Web
推荐阅读
相关专栏
声网产品与方案
42 文章
本专栏仅用于分享音视频相关的技术文章,与其他开发者和声网 研发团队交流、分享行业前沿技术、资讯。发帖前,请参考「社区发帖指南」,方便您更好的展示所发表的文章和内容。