腾讯云音视频通话SDKWeb_音视频解决方案_同尘科技

音视频通话SDK 2年前 (2023-08-01) 浏览 107

说明:我们团队即将在 Web 端丰富更多不同的组件,以满足您的开发需求。希望您能抽出几分钟时间,为您自己的需求投上一票,我们将优先开发。问卷地址:TUICallKit Web 问卷调查。TUICallKit Web 是腾讯云推出的音视频通话 UI 组件,通过编写几行代码,就可以为您的 Web 应用添加音视频通话功能。

视频通话 语音通话
 

Demo

在接入前,您可以访问在线 Demo 1v1音视频通话体验馆 体验通话效果。如果想要跑通一个新工程,还可以直接阅读 Vue3 Demo 快速跑通 或者 Vue2 Demo 快速跑通。

API 文档

TUICallKit API 文档请参见 TUICallKit API。

安装

注意:注意:如果您的工程同时使用了 TUIChat UIKit,请直接移步 TUIKit 接入音视频通话 进行接入。Vue3Vue2

npm install @tencentcloud/call-uikit-vue
npm install @tencentcloud/call-uikit-vue2

基础使用

概念解释

是音视频通话的 UI 部分,负责展示通话组件,需要将其放置在页面代码中,不在通话状态时显示空内容,如:

import { TUICallKit } from "@tencentcloud/call-uikit-vue";

TUICallKitServer 是通话状态实例,负责初始化组件和拨打电话等操作,大多数情况下由用户的操作触发,如:

import { TUICallKitServer } from "@tencentcloud/call-uikit-vue";
async function init() { try { await TUICallKitServer.init({ SDKAppID, userID, userSig }); // 关于初始化所需参数,请查看下方基础示例代码 alert("初始化完成"); } catch (error) { alert(`初始化失败,原因:${error}`); }}

基础示例代码

1. 请修改下面示例代码中的必要信息,确保正常运行。SDKAppID:在腾讯云创建的音视频应用 SDKAppID,参考 开通服务。userID:用户 ID,由您指定,字符串类型,只允许包含英文字母(a-z 和 A-Z)、数字(0-9)、连词符(-)和下划线(_)。userSig:用户签名,参考 如何生成 userSig。callUserID:想要呼叫的 userID,需要已存在,参考文章尾部 常见问题 – 创建 userID。2. 参考以下示例代码:示例代码1(Vue3 + TypeScript + Composition API)示例代码2(Vue2 + JavaScript + Options API)

  
自动接听等特性

import { TUICallKit, TUICallKitServer, TUICallType, VideoDisplayMode, VideoResolution } from "@tencentcloud/call-uikit-vue";
// 以下 4 个变量需要在运行前修改const SDKAppID = 0; const userID = "";const userSig = "";const callUserID = "";
async function init() { try { await TUICallKitServer.init({ SDKAppID, userID, userSig }); // await TUICallKitServer.init({ tim, SDKAppID, userID, userSig}); // 如果工程中已有 tim 实例,需在此处传入 alert("初始化完成"); } catch (error: any) { alert(`初始化失败,原因:${error}`); }}
async function call() { try { await TUICallKitServer.call({ userID: callUserID, type: TUICallType.VIDEO_CALL }); // 1v1 通话 // TUICallKitServer.groupCall({ userIDList: ["xxx"], groupID: "xxx", type: 2 }); // 群组通话 } catch (error: any) { alert(`拨打失败,原因:${error}`); }}
function beforeCalling(type: string, error: any) { console.log("通话即将开始", type, error);}
function afterCalling() { console.log("通话已结束");}
function onMinimized(oldStatus: string, newStatus: string) { console.log("最小化状态变更: " + oldStatus + " -> " + newStatus);}
function handleKickedOut() { console.error("The user has been kicked out");}
function handleStatusChanged(args: { oldStatus: string; newStatus: string; }) { const { oldStatus, newStatus } = args; console.log("通话状态变更: " + oldStatus + " -> " + newStatus);}
async function accept() { try { await TUICallKitServer.accept(); alert("已自动接听"); } catch (error) { alert(`自动接听失败,原因:${error}`); }}
async function reject() { try { await TUICallKitServer.reject(); alert("已自动拒绝"); } catch (error) { alert(`自动拒绝失败,原因:${error}`); }}
async function hangup() { try { await TUICallKitServer.hangup(); alert("已自动挂断"); } catch (error) { alert(`自动挂断失败,原因:${error}`); }}
  

import { TUICallKit, TUICallKitServer, TUICallType } from "@tencentcloud/call-uikit-vue2";
export default { name: 'App', data() { return { SDKAppID: 0, userID: '', userSig: '', callUserID: '', }; }, components: { TUICallKit }, methods: { async init() { try { await TUICallKitServer.init({ SDKAppID: this.SDKAppID, userID: this.userID, userSig: this.userSig // tim: this.tim // 如果工程中已有 tim 实例,需在此处传入 }); alert("初始化完成"); } catch (error) { alert(`初始化失败,原因:${error}`); } }, async call() { try { // 1v1 通话 await TUICallKitServer.call({ userID: this.callUserID, type: TUICallType.VIDEO_CALL }); // 群组通话 // TUICallKitServer.groupCall({ userIDList: ["xxx"], groupID: "xxx", type: TUICallType.VIDEO_CALL }); } catch (error) { alert(`拨打失败,原因:${error}`); } } },}

详细接口使用请参考 TUICallKit 接口文档。

更多特性

1. 通过接口设置自动接听

通过 TUICallKitServer 组件的接口,可以灵活的控制 组件的状态,实现业务侧的更多需求。注意:在调用“接听/拒绝/挂断”等接口时,为了维护良好的用户体验,建议在 UI 层面上提醒用户该通话已被自动处理。accept(): 接听来电reject(): 拒绝来电hangup(): 挂断已接通的电话

// 此接口需确保在收到来电邀请后调用(status === STATUS.BE_INVITED),通话状态可以参考 `@status-changed` 的抛出。try {  await TUICallKitServer.accept();  alert(`已自动接听`);} catch (error: any) {  alert(`自动接听失败,原因:${error}`);}
// 与 accept() 相同,具有一样的调用时机限制。try {  await TUICallKitServer.reject();  alert(`已自动拒绝`);} catch (error: any) {  alert(`自动拒绝失败,原因:${error}`);}
// 调用此接口需确保已经在呼叫状态或接通状态(status !== STATUS.BE_INVITED && status !== STATUS.IDLE)。通话状态可以参考 `@status-changed` 的抛出。try {  await TUICallKitServer.hangup();  alert(`已自动挂断`);} catch (error: any) {  alert(`自动挂断失败,原因:${error}`);}

2. 通话状态回调与 UI 设置

本组件提供了通话状态回调,可以用于业务侧实现更多交互逻辑。beforeCalling: 通话前会执行afterCalling: 通话后执行onMinimized: 组件切换最小化后会执行本组件提供了若干个功能开关,可以根据需要选择开启或关闭。allowedMinimized: 是否允许最小化allowedFullScreen: 是否允许全屏videoDisplayMode: 画面显示模式videoResolution: 通话分辨率本组件提供了若干个事件,会在组件内触发通知到业务侧。kicked-out: 该用户被踢出(如重复登录),通话自动结束status-changed: 通话状态发生了变化,使用方式参照下方示例代码,status 种类参考 API 文档。完整示例代码1(Vue3 + TypeScript + Composition API)完整示例代码2(Vue2 + JavaScript + Options API)

import { TUICallKit, TUICallKitServer, TUICallType, VideoDisplayMode, VideoResolution } from "@tencentcloud/call-uikit-vue";
// 以下 4 个变量需要在运行前修改const SDKAppID = 0; const userID = "";const userSig = "";const callUserID = "";
async function init() { try { await TUICallKitServer.init({ SDKAppID, userID, userSig }); // await TUICallKitServer.init({ tim, SDKAppID, userID, userSig}); // 如果工程中已有 tim 实例,需在此处传入 alert("初始化完成"); } catch (error: any) { alert(`初始化失败,原因:${error}`); }}
async function call() { try { await TUICallKitServer.call({ userID: callUserID, type: TUICallType.VIDEO_CALL }); // 1v1 通话 // TUICallKitServer.groupCall({ userIDList: ["xxx"], groupID: "xxx", type: 2 }); // 群组通话 } catch (error: any) { alert(`拨打失败,原因:${error}`); }}
function beforeCalling(type: string, error: any) { console.log("通话即将开始", type, error);}
function afterCalling() { console.log("通话已结束");}
function onMinimized(oldStatus: string, newStatus: string) { console.log("最小化状态变更: " + oldStatus + " -> " + newStatus);}
function handleKickedOut() { console.error("用户被踢出了");}
function handleStatusChanged({ oldStatus, newStatus }) { console.log(`[Call Demo] ${oldStatus} -> ${newStatus}`);}
  
自动接听等特性

import { TUICallKit, TUICallKitServer, TUICallType, VideoDisplayMode, VideoResolution } from "@tencentcloud/call-uikit-vue2";
export default { name: 'App', data() { return { SDKAppID: 0, userID: '', userSig: '', callUserID: '', VideoDisplayMode, VideoResolution }; }, components: { TUICallKit }, methods: { async init() { try { await TUICallKitServer.init({ SDKAppID: this.SDKAppID, userID: this.userID, userSig: this.userSig // tim: this.tim // 如果工程中已有 tim 实例,需在此处传入 }); alert("初始化完成"); } catch (error) { alert(`初始化失败,原因:${error}`); } }, async call() { try { // 1v1 通话 await TUICallKitServer.call({ userID: this.callUserID, type: TUICallType.VIDEO_CALL }); // 群组通话 // TUICallKitServer.groupCall({ userIDList: ["xxx"], groupID: "xxx", type: TUICallType.VIDEO_CALL }); } catch (error) { alert(`拨打失败,原因:${error}`); } }, beforeCalling(type, error) { console.log("通话即将开始", type, error); }, afterCalling() { console.log("通话已结束"); }, onMinimized(oldStatus, newStatus) { console.log("最小化状态变更: " + oldStatus + " -> " + newStatus); }, handleKickedOut() { console.error("The user has been kicked out"); }, handleStatusChanged(args) { const { oldStatus, newStatus } = args; console.log("通话状态变更: " + oldStatus + " -> " + newStatus); }, async accept() { try { await TUICallKitServer.accept(); alert("已自动接听"); } catch (error) { alert(`自动接听失败,原因:${error}`); } }, async reject() { try { await TUICallKitServer.reject(); alert("已自动拒绝"); } catch (error) { alert(`自动拒绝失败,原因:${error}`); } }, async hangup() { try { await TUICallKitServer.hangup(); alert("已自动挂断"); } catch (error) { alert(`自动挂断失败,原因:${error}`); } } },}

详细接口使用请参考 TUICallKit 接口文档。

其他文档

TUICallKit APITUICallKit Vue3 Demo 快速跑通、Vue2 Demo 快速跑通TUICallKit 界面定制指引TUICallKit (Web) 常见问题欢迎加入 QQ 群:646165204,进行技术交流和反馈

常见问题

1. 如何生成 UserSig?

UserSig 是腾讯云为其云服务设计的一种安全保护签名,是一种登录凭证,由 SDKAppID 与 SecretKey 等信息组合加密得到。方式一:控制台获取,参考 获取临时 userSig。方式二:部署临时生成脚本。警告:此方式是在前端代码中配置 SECRETKEY,该方法中 SECRETKEY 很容易被反编译逆向破解,一旦您的密钥泄露,攻击者就可以盗用您的腾讯云流量,因此该方法仅适合本地跑通功能调试,生产环境请看方式三。为方便初期调试,userSig 可临时使用 GenerateTestUserSig-es.jsgenTestUserSig(params) 函数来计算 ,例如:

import { genTestUserSig } from "@tencentcloud/call-uikit-vue/debug/GenerateTestUserSig-es.js";const { userSig } = genTestUserSig({ userID: "Alice", SDKAppID: 0, SecretKey: "YOUT_SECRETKEY" });

方式三:正式环境使用正确的 UserSig 签发方式是将 UserSig 的计算代码集成到您的服务端,并提供面向项目的接口,在需要 UserSig 时由您的项目向业务服务器发起请求获取动态 UserSig。更多详情请参见 服务端生成 UserSig。

2. 如何创建 userID?

通过 userID 与 userSig 登录过一次,会默认创建该用户。还可以通过 即时通信 IM 控制台 进行创建和获取,单击目标应用卡片,进入应用的账号管理页面,即可创建账号并获取 userID。例如:

3. 如何获得 SDKAppID 与 SecretKey?

在使用 TUICallKit 发起通话前,您需要开通 TUICallKit 专属的音视频通话服务,详细步骤如下:1. 登录 腾讯云视立方控制台,单击 创建项目 按钮后,您可以根据自己的业务情况,选择合适的接入场景和集成方式,这里我们推荐“含 UI 快速集成”,即TUICallKit。
2. 在选定接入场景和集成方式以后,您就需要开通一下 音视频通话 SDK 使用的两项 腾讯云基础的 PaaS 能力,即 即时通信 IM 和 实时音视频 TRTC,开通后,单击 创建项目并下一步 按钮。
3. 在项目创建完成以后,您需要为该项目匹配一个 IM 应用,因为音视频通话 SDK 依赖了IM SDK 提供的基础能力,这里创建或者管理已有的 IM 应用均可,在关联成功后,就可以领取7天的免费体验版,用于后续的开发调试工作,当然如果您之前已经体验过,也可以直接在该页面 购买正式版本。
4. 单击 前往集成,选择 项目配置,查看详细的配置页面,找到 SDKAppID 和密钥并记录下来,它们会在后续的步骤三:生成 UserSig中被用到,至此音视频通话 SDK 服务开通完成。

对音视频的解决方案有疑惑?想了解解决方案收费? 联系解决方案专家

腾讯云限时活动1折起,即将结束: 马上收藏

同尘科技为腾讯云授权服务中心,购买腾讯云享受折上折,更有现金返利:同意关联,立享优惠

阿里云解决方案也看看?: 点击对比阿里云的解决方案

- 0人点赞 -

发表点评 (0条)

not found

暂无评论,你要说点什么吗?