如何在 Web 实现支持虚拟背景的视频会议

news2025/2/26 19:17:02

前言

众所周知,市面上有比如飞书会议、腾讯会议等实现视频会议功能的应用,而且随着这几年大环境的影响,远程协作办公越来越成为常态,关于视频会议的应用也会越来越多,且在远程办公的沟通协作中对沟通软件的使用要求会越来越严格。正是因为外部大环境的原因直接促进了远程办公从起步逐渐走向成熟,打破了传统的以场地办公为主的模式,这使得视频会议的应用呈现出一派繁荣发展的景象。

这些关于视频会议的功能怎么实现呢?本文就来聊聊关于视频会议的实现分析,主要通过视频会议的核心两点拆分来看,即虚拟背景实现和AI降噪两个方面,以及基于声网Web SDK的简单使用体验。

01 使用前的准备工作

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

1、开发环境

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

  • Chrome
  • Firefox
  • Safari
  • Edge

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

  • MacBook Pro
  • Visual Studio Code

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

  • Chrome

4、其他

  • 在使用声网Web SDK的时候,如果没有声网账号,需要先去注册一个声网账号,然后进入声网后台管理平台创建你要使用的AppID、获取 Token等操作。

  • 提前下载声网官方的关于视频会议的Web SDK,点击这里进行下载。

02 虚拟背景实现

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

1、过程原理介绍

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

  • 实时通讯情形:主要是为了保护使用者的隐私,如视频远程会议;

  • 直播情形:主要是为了营造气氛,如技术直播、公司线上年会;

  • 互动娱乐情形:主要是为了增强趣味性,如短视频中人物特性。

2、具体步骤

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

那么接下来就来看看虚拟背景的功能怎么实现吧,具体使用步骤如下所示:
(1)首先实现音视频功能,初始化下载之后的demo,具体如下所示:

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

上面引入之后,需要在使用的项目中导入AgoraRTC 模块,具体如下所示:

上面引入之后,实现客户端的用户使用的界面之后,在具体的地方创建AgoraRTCClient 对象,具体如下所示:

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

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

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

(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、小结

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

03 AI降噪实现

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

1、过程原理介绍

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

2、具体步骤

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

那么接下来就来看看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降噪插件同样非常的好用,不仅集成使用很简单,而且实现的效果也很不错,感兴趣的读者快来体验吧!

04 结束语

通过本文关于实现基于声网Web SDK的视频会议的使用体验,从视频会议的核心部分来做实现分析,是不是可以上手来开发一个属于视频会议应用了呢?

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

(正文完)


参考资料

• 注册声网账号:

https://sso2.agora.io/cn/v4/signup/with-sms

• 声网文档中心–SDK下载:

https://docs.agora.io/cn/video-call-4.x/downloads?platform=Web

• Demo下载:

https://github.com/AgoraIO/API-Examples-Web/tree/main/Demo

• 声网文档中心–虚拟背景文档:

https://docs.agora.io/cn/video-call-4.x/virtual_background_web_ng?platform=Web

• 声网文档中心–AI 降噪文档:

https://docs.agora.io/cn/video-call-4.x/noise_reduction_web_ng?platform=Web

• 声网音视频官方文档:

https://docs.agora.io/cn/video-call-4.x/start_call_web_ng?platform=Web

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/427225.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ARMv8-A非对齐数据访问支持(Alignment support)

目录 1,对齐传输和非对齐传输 2,AArch32 Alignment support 2.1 Instruction alignment 指令对齐 2.2 Unaligned data access 非对齐数据访问 2.3 SCTLR.A Alignment check enable 3,AArch64 Alignment support 3.1 Instruction align…

Text to image论文精读GigaGAN: 生成对抗网络仍然是文本生成图像的可行选择

GigaGAN是Adobe和卡内基梅隆大学学者们提出的一种新的GAN架构,作者设计了一种新的GAN架构,推理速度、合成高分辨率、扩展性都极其有优势,其证明GAN仍然是文本生成图像的可行选择之一。 文章链接:https://arxiv.org/abs/2303.0551…

大数据周会-本周学习内容总结07

目录 01【hadoop】 1.1【编写集群分发脚本xsync】 1.2【集群部署规划】 1.3【Hadoop集群启停脚本】 02【HDFS】 2.1【HDFS的API操作】 03【MapReduce】 3.1【P077- WordCount案例】 3.2【P097-自定义分区案例】 历史总结 01【hadoop】 1.1【编写集群分发脚本xsync】…

【vue3】关于ref、toRef、toRefs那些事

😉博主:初映CY的前说(前端领域) 📒本文核心:ref、toRef、toRefs的使用方法 【前言】我们在上一节的学习当中,使用了reactive()函数将vue3中的数据变成响应式的数据,本文中所讲的三个方法也能实现将数据转化…

安全防御之IPsec VPN篇

目录 1.什么是数据认证,有什么用,有哪些实现的技术手段? 2.什么是身份认证,有什么用,有哪些实现的技术手段? 3.什么是VPN技术? 4.VPN技术有哪些分类? 5.IPsec技术能够提供哪些安…

走进小程序【八】微信小程序中使用【Vant组件库】

文章目录🌟前言🌟Vant介绍🌟Vant安装🌟npm 支持🌟使用Vant🌟引入组件🌟页面使用组件🌟样式覆盖🌟介绍🌟解除样式隔离🌟使用外部样式类&#x1f31…

基于冯洛伊曼拓扑的鲸鱼算法用于滚动轴承的故障诊断研究(Matlab代码实现)

👨‍🎓个人主页:研学社的博客💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密…

【YOLO】YOLOv8实操:环境配置/自定义数据集准备/模型训练/预测

YOLOv8实操:环境配置/自定义数据集准备/模型训练/预测引言1 环境配置2 数据集准备3 模型训练4 模型预测引言 源码链接:https://github.com/ultralytics/ultralytics yolov8和yolov5是同一作者,相比yolov5,yolov8的集成性更好了&a…

C++面向对象丨1. 内存分区模型

Author:AXYZdong 硕士在读 工科男 有一点思考,有一点想法,有一点理性! 定个小小目标,努力成为习惯!在最美的年华遇见更好的自己! CSDNAXYZdong,CSDN首发,AXYZdong原创 唯…

图解NLP模型发展:从RNN到Transformer

图解NLP模型发展:从RNN到Transformer 自然语言处理 (NLP) 是深度学习中一个颇具挑战的问题,与图像识别和计算机视觉问题不同,自然语言本身没有良好的向量或矩阵结构,且原始单词的含义也不像像素值那么确定和容易表示。一般我们需…

【随笔记】Win11、RTX3070、CUDA117的深度学习机器学习环境配置

文章目录一、创建深度学习 Conda 虚拟环境二、安装 Pytorch-Gpu三、安装 PyTorch Geometric四、安装 Sklearn五、Jupyter 配置5.1 将虚拟环境加入内核5.2 插件配置5.3 主题、字体、字号配置假设你已经安装了Anaconda3(最新Anaconda3的安装配置及使用教程&#xff08…

里程碑,ChatGPT插件影响几何?

目录插件发布网络浏览器代码解释器平台生态微软魄力总结3月15日OpenAI推出了GPT-4,引起了全球轰动,仅仅过去一周多时间,OpenAI又宣布推出插件功能。如果说ChatGPT是AI的“iPhone时刻”,那么插件就是ChatGPT的“App Store”。超强的…

SpringBoot整合Flink(施耐德PLC物联网信息采集)

SpringBoot整合Flink(施耐德PLC物联网信息采集)Linux环境安装kafka前情:施耐德PLC设备(TM200C16R)设置好信息采集程序,连接局域网,SpringBoot订阅MQTT主题,消息转至kafka&#xff0c…

【chatgpt-01】部署学术神器chatgpt_academic

目录1 chatgpt_academic简介2 前置准备3 项目下载/配置4 安装依赖5 项目配置6 运行7 测试实验性功能1 chatgpt_academic简介 chatgpt_academic是一个科研工作专用ChatGPT拓展,特别优化学术Paper润色体验,支持自定义快捷按钮,支持markdown表格…

Jenkins部署与自动化构建

Jenkins笔记 文章目录Jenkins笔记[toc]一、安装Jenkinsdocker 安装 JenkinsJava启动war包直接安装二、配置mavenGit自动构建jar包三、自动化发布到测试服务器运行超时机制数据流重定向编写清理Shell脚本四、构建触发器1. 生成API token2. Jenkins项目配置触发器3. 远程Git仓库配…

Elasticsearch:配置选项

Elasticsearch 带有大量的设置和配置,甚至可能让专家工程师感到困惑。 尽管它使用约定优于配置范例并且大部分时间使用默认值,但在将应用程序投入生产之前自定义配置是必不可少的。 在这里,我们将介绍属于不同类别的一些属性,并讨…

【风光场景生成】基于改进ISODATA的负荷曲线聚类算法(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。⛳座右铭&#…

《计算机网络-自顶向下》04. 网络层-数据平面

文章目录网络层数据平面和控制平面两者的概述数据平面控制平面控制平面:传统方法控制平面:SDN 方法网络服务模型路由器工作原理通用路由器体系结构输入端口的功能基于目标的转发交换结构内存交换方式总线交换方式纵横式交换方式输出端口的功能何时何处出…

YOLOV8改进:如何增加注意力模块?(以CBAM模块为例)

YOLOV8改进:如何增加注意力模块?(以CBAM模块为例)前言YOLOV8nn文件夹modules.pytask.pymodels文件夹总结前言 因为毕设用到了YOLO,鉴于最近V8刚出,因此考虑将注意力机制加入到v8中。 YOLOV8 代码地址&am…

ChatGPT能代替Oracle DBA吗?用Oracle OCP(1z0-083)的真题测试一下。

让我们来看看ChatGPT不能通过Oracle OCP的考试? 文章目录引言测试过程总结和分析关于博主,姚远:Oracle ACE(Oracle和MySQL数据库方向)。Oracle MAA 大师。华为云MVP。《MySQL 8.0运维与优化》的作者。拥有 Oracle 10g和…