tencent cloud

文档反馈

最后更新时间:2024-02-28 14:17:54
    本文将介绍如何用最短的时间完成 TUICallKit 组件的接入,您将在一小时内完成如下几个关键步骤,并最终得到一个包含完备 UI 界面的视频通话功能。
    视频通话
    语音通话
    
    
    
    
    
    

    环境准备

    1. @vue/cli。
    2. @tencentcloud/call-uikit-vue2 如果使用源码集成需要:Vue2.7 + Typescript;如果使用 npm 包集成 Vue2 各版本都可以。
    3. @tencentcloud/call-uikit-vue 如果使用源码集成需要:Vue3 + Typescript。

    步骤一:开通服务

    TUICallKit 是基于腾讯云 即时通信 IM实时音视频 TRTC 两项付费 PaaS 服务构建出的音视频通信组件。为了您能更好地体验音视频通话 Call 功能,我们免费为每个 SDKAppID 提供了7天体验版(体验版不额外赠送通话时长),每个 SDKAppID 可免费体验2次,每次有效期均为7天;同时一个账号下所有 SDKAppID 的体验总次数为10次。
    您可以在 即时通信 IM 控制台中开通 Call 体验版,具体操作步骤如下:
    1. 访问 IM 控制台,选择数据中心并新建应用。若您已有应用可跳过该步骤。
    2. 单击目标应用卡片,进入应用的基础配置页面。
    3. 找到音视频通话能力(Call)卡片,单击免费体验。
    4. 确认弹窗内容后,单击立即体验,即可成功开通音视频通话体验版。开通完成后即可根据本文档进行集成。
    5. 如果您的业务上线,需要购买正式版本,可前往控制台进行购买,请参考:购买正式版

    步骤二:基础使用

    1. 创建项目。
    Vue3 + TypeScript
    使用 @vue/cli 方式创建项目。
    npm install -g @vue/cli
    通过 @vue/cli 创建项目,并选择下图中所选配置项。
    vue create call-demo
    
    
    
    创建项目完成后,切换到项目所在目录。
    cd call-demo
    2. 安装组件。
    Vue3
    ≥Vue2.7
    npm install @tencentcloud/call-uikit-vue
    npm install @tencentcloud/call-uikit-vue2
    3. 请修改下面示例代码中的必要信息,确保正常运行。
    SDKAppID:在腾讯云创建的音视频应用 SDKAppID,参考 开通服务
    userID:用户 ID,由您指定,字符串类型,只允许包含英文字母(a-z 和 A-Z)、数字(0-9)、连词符(-)和下划线(_)。
    userSig:使用 步骤一 的第 2 步中获取的 SecretKey 对 SDKAppID、UserID 等信息进行加密,就可以得到 UserSig,它是一个鉴权用的票据,用于腾讯云识别当前用户是否能够使用 TRTC 的服务。您可以通过控制台中的 辅助工具 生成一个临时可用的 UserSig。
    4. 参考以下示例代码。
    示例代码1(Vue3 + TypeScript + Composition API)
    示例代码2(Vue2 + JavaScript + Options API)
    <template>
    <div>
    <button @click="init()"> init </button>
    <button @click="call()"> 发起视频通话 </button>
    <details>
    <summary>自动接听等特性</summary>
    <button @click="accept()"> accept </button>
    <button @click="reject()"> reject </button>
    <button @click="hangup()"> hangup </button>
    </details>
    <div style="width: 50rem; height: 35rem; border: 1px solid salmon;">
    <TUICallKit
    :beforeCalling="beforeCalling"
    :afterCalling="afterCalling"
    :onMinimized="onMinimized"
    :allowedMinimized="true"
    :allowedFullScreen="true"
    :videoDisplayMode="VideoDisplayMode.CONTAIN"
    :videoResolution="VideoResolution.RESOLUTION_1080P"
    @kicked-out="handleKickedOut"
    @status-changed="handleStatusChanged" />
    </div>
    </div>
    </template>
    
    <script lang="ts" setup>
    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}`);
    }
    }
    </script>
    <template>
    <div>
    <button @click="init()"> 步骤 1: 初始化 </button>
    <button @click="call()"> 步骤 2: 发起视频通话 </button>
    <div style="width: 50rem; height: 35rem; border: 1px solid salmon;">
    <TUICallKit /> <!-- 组件默认显示空内容,进入通话后自动显示 -->
    </div>
    </div>
    </template>
    
    <script>
    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}`);
    }
    }
    },
    }
    </script>
    详细接口使用请参考 TUICallKit 接口文档

    步骤三:拨打通话

    1对1视频通话

    通过调用 TUICallKit 的 call 函数并指定通话类型和被叫方的 userID,就可以发起语音或者视频通话。
    import { TUICallKitServer, TUICallType } from "@tencentcloud/call-uikit-vue";
    await TUICallServer.call({
    userID: 'mike',
    type: TUICallType.VIDEO_CALL
    });
    参数
    类型
    含义
    userID
    String
    目标用户的 userID:"mike"
    type
    Number
    通话的媒体类型,语音通话(type = 1)、视频通话(type = 2)

    群内视频通话

    通过调用 TUICallKit 的 groupCall 函数并指定通话类型和被叫方的 userID 列表,就可以发起群内的语音或者视频通话。
    import { TUICallKitServer, TUICallType } from "@tencentcloud/call-uikit-vue";
    await TUICallServer.groupCall({
    groupID: "xxx",
    userIDList: ['jack', 'tom'],
    type: TUICallType.VIDEO_CALL
    });
    参数
    类型
    含义
    groupID
    String
    群组 Id,示例:"12345678"
    userIDList
    Array<string>
    目标用户的 UserID 列表,示例:["jane", "mike", "tommy"]
    type
    Number
    通话的媒体类型,语音通话(type = 1)、视频通话(type = 2)

    步骤四:更多特性

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

    通过 TUICallKitServer 组件的接口,可以灵活的控制 <TUICallKit/> 组件的状态,实现业务侧的更多需求。
    注意:在调用“接听/拒绝/挂断”等接口时,为了维护良好的用户体验,建议在 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}`);
    }

    常见问题

    1. 错误提示“The package you purchased does not support this ability”?

    如遇以上错误提示,是由于您当前应用的音视频通话能力包过期或未开通,请参见 步骤一:开通服务,领取或者开通音视频通话能力,进而继续使用 TUICallKit 组件。

    2、如何购买套餐?

    请参考购买链接 购买正式版

    3. 体验 Demo

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

    交流与反馈

    如果有任何需要或者反馈,您可以联系:info_rtc@tencent.com。
    
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持