twilio-video-app-react

twilio-video-app-react

基于Twilio的多人视频会议和实时聊天React应用

这是一个基于Twilio SDK的开源React应用,支持多人视频会议、实时聊天和屏幕共享。它可快速部署到Twilio Serverless,并提供主讲人检测、网络质量指示等功能。该项目展示了如何构建高质量的视频通话应用,适合开发者学习和参考。

Twilio视频应用React实时通信多方视频Github开源项目

Twilio视频 React应用

CircleCI

[!警告]
我们不再允许新客户加入Twilio视频服务。自2026年12月5日起,Twilio视频将结束生命周期(EOL),并将停止为所有客户提供服务。有关此EOL的更多信息,请参阅我们帮助中心此处

这是什么

本应用程序展示了一个基于Twilio的可编程视频JS SDKTwilio的对话JS SDKCreate React App构建的多方视频应用。

  • 只需几分钟即可部署到Twilio无服务器平台
  • 无需其他基础设施
  • 首次部署前无需更改代码
  • 部署应用程序不产生任何费用
  • Go房间的使用是免费的,但在使用其他所有房间类型时,应用程序将按标准使用费率收费。聊天功能基于对话API构建,每月活跃用户数不超过200时免费,此后按标准使用费率收费。

应用预览

先决条件

您必须安装以下内容:

您可以使用以下命令检查当前安装的Node.js和NPM版本:

node --version
npm --version

克隆存储库

克隆此存储库并进入项目目录:

git clone https://github.com/twilio/twilio-video-app-react.git
cd twilio-video-app-react

安装依赖项

在主项目文件夹内运行npm install以安装NPM的所有依赖项。

如果您想使用yarn安装依赖项,请先运行yarn import命令。这将确保yarn安装package-lock.json中指定的包版本。

添加噪音消除

Twilio视频与Krisp Technologies Inc.合作,为本地音频轨道添加了噪音消除功能。此功能根据Twilio的Krisp插件许可。要将此功能添加到您的应用程序中,请在上一步之后立即运行npm run noisecancellation:krisp

安装Twilio CLI和RTC插件

安装Twilio CLI

该应用程序使用Twilio CLI部署到Twilio。您可以在Mac上使用Homebrew或npm安装Twilio CLI

要使用npm安装twilio-cli,请运行以下命令:

npm install -g twilio-cli

注意:如果在使用npm install -g命令全局安装twilio-cli时遇到权限错误,您可能需要更改全局node_modules目录的权限,或配置npm使用不同的目录来全局安装npm包。请参阅此StackOverflow帖子,其中包含有关这两个选项的更多信息。GitHub中的这个代码示例也是一个有用的指南,介绍了如何在不需要更改目录权限和不使用sudo的情况下全局安装npm包。

登录Twilio CLI

登录Twilio CLI。系统将提示您输入Account SID和Auth Token,这两个信息都可以在Twilio控制台的仪表板上找到。

twilio login

注意:如果您使用npm安装了Twilio CLI,但收到找不到twilio命令的错误,您可能需要更新Node安装前缀。有关更多信息,请参阅此StackOverflow帖子

安装RTC插件

此应用程序需要一个额外的插件。使用以下命令安装CLI插件:

twilio plugins:install @twilio-labs/plugin-rtc

注意:如果您之前已安装@twilio-labs/plugin-rtc插件,请确保使用最新版本。您可以通过运行twilio plugins:update来升级插件。聊天功能需要@twilio-labs/plugin-rtc的0.8.1或更高版本。

将应用程序部署到Twilio

在部署应用程序之前,请确保您在Twilio CLI上使用的是正确的账户(使用twilio profiles:list命令检查)。 使用单个命令将应用程序部署到Twilio:

npm run deploy:twilio-cli

这将执行以下步骤:

  • src目录中构建React应用程序
  • 生成用于访问视频应用程序的随机代码
  • 将React应用程序和令牌服务器功能部署为Twilio无服务器服务
  • 打印应用程序的URL和密码

注意: 通过密码提供访问令牌的Twilio函数不应在生产环境中使用。此令牌服务器支持无缝启动协作应用程序,虽然方便,但密码对于生产环境来说不够安全。您应该使用身份验证提供程序来安全地为客户端应用程序提供访问令牌。您可以在本教程中找到有关可编程视频访问令牌的更多信息。作为预防措施,密码将在一周后过期。要生成新密码,请重新部署应用程序:

npm run deploy:twilio-cli -- --override

查看应用程序详情

使用以下命令查看视频应用程序的URL和密码:

 twilio rtc:apps:video:view

删除应用程序

使用以下命令删除应用程序:

twilio rtc:apps:video:delete

这将从Twilio中删除无服务器应用程序。这将确保不再因应用程序产生任何费用。

Twilio CLI故障排除

如果在运行Twilio CLI RTC插件命令后出现任何错误,请尝试以下步骤。

  1. 运行twilio plugins:update将rtc插件更新到最新版本。
  2. 运行twilio rtc:apps:video:delete删除任何现有的视频应用程序。
  3. 运行npm run deploy:twilio-cli部署新的视频应用程序。

不同房间类型的应用程序行为

在运行将应用程序部署到Twilio的命令后,房间类型将在命令行输出中返回。每种房间类型提供不同的视频体验。有关这些房间类型的更多详细信息,可以在这里找到。本节的其余部分将解释这些房间类型如何影响视频应用程序的行为。

Group - Group房间类型允许最多五十名参与者加入应用程序中的视频房间。网络质量级别(NQL)指示器、主导发言人和开始-停止录音在此房间类型中得到演示。此外,默认设置了启用模拟广播的VP8视频编解码器以及带宽配置文件,以提供最佳的群组视频应用体验。

Small Group - 这是一种旧版房间类型;在开发多方应用程序时,我们建议使用Group房间。 Small Group房间类型提供相同的群组视频应用体验,只是参与者数量限制较小,为四人。 点对点 - 虽然最多可以有十名参与者加入使用点对点(P2P)房间类型的房间,但它最适合一对一的视频体验。网络质量指标、带宽配置、主导发言人和开始停止录制等功能无法在此房间类型中使用。因此,这些功能在视频应用中未展示。此外,为了提供最佳的一对一视频应用体验,默认设置了禁用联播的VP8视频编解码器和720p最小视频捕捉尺寸。如果超过十名参与者加入此类型的房间,视频应用将显示错误。

Go - Go房间类型提供类似的点对点视频应用体验,但参与者限制更少,只有两人。如果超过两名参与者加入此类型的房间,视频应用将显示错误。

对于所有房间类型,如果超过最大参与者数量,视频应用都将显示错误。

功能

该视频应用具有以下功能:

  • 具有实时视频和音频的视频会议
  • 支持文字和文件消息的聊天功能
  • 开启/关闭摄像头
  • 麦克风静音/取消静音
  • 屏幕共享
  • 主导发言人指示器
  • 网络质量指示器
  • 使用带宽配置API定义参与者带宽使用
  • 使用录制规则API开始和停止录制

浏览器支持

请参阅twilio-video.js SDK的浏览器支持表。

深入探讨

运行本地令牌服务器

本应用程序需要访问令牌来连接视频房间和聊天对话。随附的本地令牌服务器为应用程序提供访问令牌。此令牌服务器可用于本地运行应用程序,并在使用npm start以开发模式运行应用程序时使用。执行以下步骤设置本地令牌服务器:

  • 在Twilio控制台创建账户。
  • 点击"设置"并记下您的账户SID。
  • 在Twilio控制台的可编程视频工具下的API密钥部分创建新的API密钥。记下新API密钥的SID和密钥。
  • 在Twilio控制台的对话选项卡下的服务部分创建新的对话服务。记下生成的SID。
  • 将您的账户SID、API密钥SID、API密钥密钥和对话服务SID存储在应用程序根目录下的新文件.env中(示例如下)。
TWILIO_ACCOUNT_SID=ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
TWILIO_API_KEY_SID=SKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
TWILIO_API_KEY_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
TWILIO_CONVERSATIONS_SERVICE_SID=ISxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

现在本地令牌服务器可以分发访问令牌以连接房间和对话。有关可用附加环境变量的信息,请参阅.env.example。

注意: Twilio对话的使用是可选的。如果您希望选择退出,只需在设置REACT_APP_DISABLE_TWILIO_CONVERSATIONS环境变量为true的情况下运行或构建此应用程序。

本地运行应用程序

使用以下命令在本地运行应用程序:

npm start

这将启动本地令牌服务器并以开发模式运行应用程序。在浏览器中打开http://localhost:3000即可看到应用程序。

如果您对src/中的源代码进行更改,页面将重新加载。 您还将在控制台中看到任何lint错误。使用以下命令在本地启动令牌服务器:

npm run server

令牌服务器在8081端口上运行,并期望在/token路由上收到具有以下JSON参数的POST请求:

{
  "user_identity": string, // 用户身份
  "room_name": string, // 房间名称
}

响应将是可用于连接房间的令牌。本应用程序提供的服务器使用与用于部署应用程序的Twilio CLI插件plugin-rtc相同的端点。有关服务器端点的更详细信息,请参阅plugin-rtc README。

房间中的多个参与者

如果您想了解应用程序如何处理多个参与者,只需在浏览器中打开多个localhost:3000标签,并使用不同的用户名连接到同一个房间即可。

此外,如果您想邀请其他参与者加入房间,每个参与者都需要安装此应用程序,并使用相同的房间名称和账户SID(API密钥和密钥可以不同)。

构建

使用以下命令构建React应用程序:

npm run build

此脚本将在build/目录中构建应用程序的静态资产。

测试

本应用程序有单元测试(使用Jest)和端到端测试(使用Cypress)。您可以使用以下脚本运行测试。

单元测试

使用以下命令运行单元测试:

npm test

这将使用Jest运行所有单元测试,并将结果输出到控制台。

端到端测试

使用以下命令运行端到端测试:

npm run cypress:open

这将打开Cypress测试运行器。打开后,选择要运行的测试文件。

注意: 在运行这些测试之前,请确保完成"入门"部分。这些Cypress测试将连接到真实的Twilio房间和对话,因此您可能会被收取使用的时间费用。

应用程序架构

本应用程序的状态(除少数例外)由SDK提供的房间对象管理。房间对象包含用户所连接房间的所有信息。可以在这里查看房间对象的类层次结构。

了解房间对象的一个好方法是在浏览器控制台中探索它。当您连接到房间时,应用程序会将房间对象作为窗口变量公开:window.twilioRoom。

由于Twilio Video SDK管理房间对象状态,因此可以将其用作真实来源。无需使用Redux等工具来跟踪房间状态。房间对象及其大多数子属性都是事件发射器,这意味着我们可以订阅这些事件以在房间状态变化时更新React组件。

React钩子可用于订阅事件并触发组件重新渲染。本应用程序经常使用useState和useEffect钩子来订阅房间状态的变化。以下是一个简单的示例:

import { useEffect, useState } from 'react';

export default function useDominantSpeaker(room) {
  const [dominantSpeaker, setDominantSpeaker] = useState(room.dominantSpeaker);

  useEffect(() => {
    room.on('dominantSpeakerChanged', setDominantSpeaker);
    return () => {
      room.off('dominantSpeakerChanged', setDominantSpeaker);
    };
  }, [room]);

  return dominantSpeaker;
}

在这个钩子中,useEffect钩子用于订阅房间对象发出的dominantSpeakerChanged事件。当这个事件被发出时,setDominantSpeaker函数被调用,它将更新dominantSpeaker变量并触发使用这个钩子的任何组件的重新渲染。 有关如何将React钩子与Twilio Video SDK一起使用的更多信息,请参阅此教程:https://www.twilio.com/blog/video-chat-react-hooks。要查看此应用程序使用的所有钩子,请查看`src/hooks`目录。

VideoProvider组件包含了许多与连接视频房间和获取本地输入设备相关的逻辑。VideoProvider组件通过useVideoContext钩子向应用程序的其他部分公开了许多属性和方法。同样,ChatProvider包含了与连接Twilio Conversation相关的逻辑,并通过useChatContext钩子公开属性和方法。

配置

SDK中的connect函数接受一个配置对象。此应用程序的配置对象可以在src/utils/useConnectionOptions/useConnectionOptions.ts中找到。在这个对象中,我们1)启用主导发言者检测,2)启用网络质量API,以及3)提供各种选项来配置带宽配置文件

轨道优先级设置

此应用程序动态改变远程视频轨道的优先级,以提供最佳的协作体验。任何将在主视频区域显示的视频轨道在组件挂载时都会调用track.setPriority('high')(参见VideoTrack组件)。这个更高的优先级使轨道能够以高分辨率渲染。当组件卸载时调用track.setPriority(null),使轨道的优先级设置为其发布优先级(低)。

使用Firebase进行Google身份验证(可选)

可以配置此应用程序在用户使用应用程序之前进行身份验证。一旦用户使用Google凭据登录应用程序,他们的Firebase ID Token将包含在用于获取访问令牌的HTTP请求的Authorization头中。然后,分发连接房间访问令牌的服务器可以验证Firebase ID Token。

有关启用Google身份验证必须设置的环境变量的说明,请参见.env.example

相关

许可

有关详细信息,请参阅LICENSE文件。

编辑推荐精选

蛙蛙写作

蛙蛙写作

AI小说写作助手,一站式润色、改写、扩写

蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。

AI辅助写作AI工具蛙蛙写作AI写作工具学术助手办公助手营销助手AI助手
Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

热门AI助手AI对话AI工具聊天机器人
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

下拉加载更多