场景实践

有奖调研

实时视频通话(Web)

最近更新时间:2021-10-09 16:30:52

本文介绍如何实现一套可以在浏览器上运行的视频通话解决方案,文章分成两个部分:

  • 第一部分:介绍如何开通服务并跑通我们提供的演示 Demo。
  • 第二部分:介绍如何使用 TRTCCalling 组件快速搭建自己的视频通话功能。

环境要求

请使用最新版本的 Chrome 浏览器。目前桌面端 Chrome 浏览器支持 TRTC Web SDK 的相关特性比较完整,因此建议使用 Chrome 浏览器进行体验。

TRTCCalling 依赖以下端口进行数据传输,请将其加入防火墙白名单,配置完成后,您可以通过访问并体验 官网 Demo 检查配置是否生效。

  • TCP 端口:8687
  • UDP 端口:8000,8080,8800,843,443,16285
  • 域名:qcloud.rtc.qq.com

目前该方案支持如下平台:

操作系统 浏览器类型 浏览器最低版本要求
Mac OS 桌面版 Safari 浏览器 11+
Mac OS 桌面版 Chrome 浏览器 56+
Mac OS 桌面版 Firefox 浏览器 56+
Mac OS 桌面版 Edge 浏览器 80+
Windows 桌面版 Chrome 浏览器 56+
Windows 桌面版 QQ 浏览器(极速内核) 10.4+
Windows 桌面版 Firefox 浏览器 56+
Windows 桌面版 Edge 浏览器 80+
...

详细兼容性查询,具体请参见 浏览器支持情况。同时,您可通过 TRTC 检测页面 在线检测。

跑通测试 Demo

步骤1:创建新的应用

  1. 注册腾讯云 账号,并完成实名认证。
  2. 登录实时音视频控制台,选择 开发辅助>快速跑通Demo
  3. 输入应用名称,例如 TestTRTC ,单击 创建

步骤2:下载 SDK 和 Demo 源码

  1. 根据实际业务需求下载 SDK 及配套的 Demo 源码。
  2. 下载完成后,单击 已下载,下一步

步骤3:配置 Demo 工程文件

  1. 进入修改配置页,根据您下载的源码包,选择相应的开发环境。
  2. 找到并打开 Web/js/debug/GenerateTestUserSig.js 文件。
  3. 设置 GenerateTestUserSig.js 文件中的相关参数:
    • SDKAPPID:默认为0,请设置为实际的 SDKAppID。
    • SECRETKEY:默认为空字符串,请设置为实际的密钥信息。
  4. 粘贴完成后,单击 已复制粘贴,下一步 即创建成功。
  5. 编译完成后,单击 回到控制台概览 即可。
注意:

  • 本文提到的生成 UserSig 的方案是在客户端代码中配置 SECRETKEY,该方法中 SECRETKEY 很容易被反编译逆向破解,一旦您的密钥泄露,攻击者就可以盗用您的腾讯云流量,因此该方法仅适合本地跑通 Demo 和功能调试
  • 正确的 UserSig 签发方式是将 UserSig 的计算代码集成到您的服务端,并提供面向 App 的接口,在需要 UserSig 时由您的 App 向业务服务器发起请求获取动态 UserSig。更多详情请参见 服务端生成 UserSig

步骤4:运行 Demo

  1. 在 Demo 目录下依次输入如下命令:
    npm install
    npm run serve
  2. 启动 Chrome 浏览器中打开链接 http://localhost:8080/ ,如果一切正常,Demo 运行界面如图所示:
  3. 输入用户 userid,单击 登录,并选择 视频通话
  4. 输入呼叫用户 userid,单击 呼叫
  5. 即可进行视频通话:

搭建自己的视频通话

步骤1:集成 TRTCCalling 组件

说明:

  • 从v0.6.0起,需要手动安装依赖 trtc-js-sdktim-js-sdk 以及 tsignaling
  • 为了减小 trtc-calling-js.js 的体积,避免和接入侧已使用的 trtc-js-sdk 和 tim-js-sdk 以及 tsignaling 发生版本冲突,trtc-calling-js.js 将 trtc-js-sdk,tim-js-sdk,tsignaling 打包为外部依赖,在使用前您需要手动安装。
// npm 方式安装
npm install trtc-js-sdk --save

npm install tim-js-sdk --save

npm install tsignaling --save

npm install trtc-calling-js --save
// 如果您需要通过 script 方式使用 trtc-calling-js,需要按顺序引入以下资源

<script src="./trtc.js"></script>
<script src="./tim-js.js"></script>
<script src="./tsignaling.js"></script>
<script src="./trtc-calling-js.js"></script>

步骤2:创建 TRTCCalling 对象

创建 TRTCCalling 对象,并将 SDKAppID 参数设置为您自己的 SDKAppID。

import TRTCCalling from 'trtc-calling-js';

let options = {
SDKAppID: 0, // 接入时需要将0替换为您的 SDKAppID
// 从v0.10.2起,新增 tim 参数
// tim 参数适用于业务中已存在 TIM 实例,为保证 TIM 实例唯一性
tim: tim
};
const trtcCalling = new TRTCCalling(options);

步骤3:完成登录

调用 login 函数完成登录操作,参数中的 userID 为用户名,userSig 为用户签名,userSig 的计算方式请参见 如何计算 userSig

trtcCalling.login({
  userID,
  userSig,
});

步骤4:实现 1v1 通话

  • 主叫方:呼叫某个用户
    trtcCalling.call({
      userID,  //用户 ID
      type: 2, //通话类型,0-未知, 1-语音通话,2-视频通话
      timeout  //邀请超时时间, 单位 s(秒)
    });
  • 被叫方:接听新的呼叫
    // 接听
    trtcCalling.accept({
      inviteID, //邀请 ID, 标识一次邀请
      roomID,   //通话房间号 ID
      callType  //0-未知, 1-语音通话,2-视频通话
    });
    //拒绝
    trtcCalling.reject({ 
      inviteID, //邀请 ID, 标识一次邀请
      isBusy //是否是忙线中, 0-未知, 1-语音通话,2-视频通话
      })
  • 打开本地摄像头
    trtcCalling.openCamera()
  • 展示远端的视频画面
    trtcCalling.startRemoteView({
      userID, //远端用户 ID
      videoViewDomID //该用户数据将渲染到该 DOM ID 节点里
    })
  • 展示本地的预览画面
    trtcCalling.startLocalView({
      userID, //本地用户 ID
      videoViewDomID //该用户数据将渲染到该 DOM ID 节点里
    })
  • 挂断
    trtcCalling.hangup()
目录