
摘要:腾讯云音视频通话SDK不仅支持iOS、Android、Web、小程序、Flutter、uni-app等平台全球互通,而且还支持标清、高清、超高清等多种画质,提供微信视频聊天同款 UI 组件快速集成方案,仅需3步,最快一天即可完成集成上线,配合低延时高质量的音视频服务,轻松应对语聊、客服、医疗通信等场景需求,帮助开发者快速搭建稳定可靠的音视频通话应用。
近几年的科技圈是非常活跃的,而且随着现代互联网科技的飞速发展,以及人们的生活习惯,尤其是现在最流行的一个说法:音视频将终结以内容为王的时代,可以见得音视频的重要性。另外,基于音视频的各种应用层出不穷,音视频改变了人们的生活方式,而且由于网络的不断更新迭代,音视频通话已经成为人们进行远程交流和沟通的常用工具,尤其是微信的音视频通话功能更是成为了人们生活中不可或缺的一部分。与此同时,腾讯云音视频产品作为一项强大的技术解决方案,为开发者和企业提供了稳定、高效的音视频相关服务。那么本文就来详细介绍如何借助腾讯云音视频SDK的Web端,实现类似微信的音视频通话功能,而且将深入探讨整个搭建过程的基本操作和细节,包括环境准备、SDK集成、音视频通话功能实现等。通过本文的分享,读者将能够全面了解如何使用腾讯云音视频SDK搭建高质量、稳定可靠的音视频通话系统。
使用过或者了解腾讯云音视频的开发者想必都清楚,腾讯云音视频通话 SDK 是基于通话场景深度定制的一款产品,提供了视频通话场景下常见的双人音视频通话、群组音视频通话、中途呼叫第三方、AI 通话降噪、通话卡顿优化等丰富功能。
腾讯云音视频通话SDK不仅支持iOS、Android、Web、小程序、Flutter、uni-app等平台全球互通,而且还支持标清、高清、超高清等多种画质,提供微信视频聊天同款 UI 组件快速集成方案,仅需3步,最快一天即可完成集成上线,配合低延时高质量的音视频服务,轻松应对语聊、客服、医疗通信等场景需求,帮助开发者快速搭建稳定可靠的音视频通话应用。
由于本文分享的是关于使用腾讯云音视频通话 SDK实现搭建微信同款音视频通话的使用心得,读者如果也想体验腾讯云音视频通话 SDK功能需要做一些前期工作,同时也为了让使用者能够快速进入开发状态,需要提前做一些环境准备工作,具体如下所示:
1、开发环境
其实腾讯云音视频通话的SDK兼容性非常不错,对硬件设备和软件系统的要求不高,开发和测试环境只要满足以下条件即可:
2、体验测试使用到的开发环境
3、本文的体验测试使用到的测试环境
4、其他
1、SDK集成
关于SDK 集成其实有两种集成方式,一种是自定集成到项目中,另一种是通过开发使用者手动拖入到项目中, 由于集成腾讯云音视频SDK是搭建微信同款音视频通话的关键步骤,具体集成步骤如下所示(注意:本文使用的是基于Web端的Vue2的SDK集成使用步骤):
a.自动集成
直接通过使用终端命令行执行即可,具体命令行如下所示:
npm install @tencentcloud/call-uikit-vue2
具体集成效果图如下所示:
b.手动集成
手动集成的话,需要先去腾讯云音视频通话的官方文档找到对应的Web端的SDK下载链接,直接下载,然后把下载的文件直接导入(即拖入)到实际使用的项目中即可,具体操作效果如下所示:
2、音视频通话功能实现
在上面完成 SDK 的集成之后,接下来我们就可以开始实现音视频通话的具体功能,本文只介绍基本的微信同款音视频通话功能的使用,所以这里只对核心代码进行展示。具体操作步骤如下所示:
a.首先,是在项目中填入四个核心且关键的参数,如下所示
b.接着是,具体的项目中参数的设置,以及当前使用的地方的核心代码,主要步骤分为初始化、发起视频通话、以及默认空内容显示进入通话后自动显示等组成。具体代码如下所示:
<template>
<div>
<button @click="init"> 1、初始化 </button>
<button @click="call"> 2、发起视频通话 </button>
<div style="width: 50rem; height: 40rem; border: 1px solid salmon;">
<TUICallKit /> <!-- 3、组件默认显示空内容,进入通话后自动显示 -->
</div>
</div>
</template>
<script>
import { TUICallKit, TUICallKitServer, TUICallType } from "@tencentcloud/call-uikit-vue2";
export default {
name: 'App',
data() {
return {
SDKAppID: 0, //应用 SDKAppID,int类型
userID: 'xxx', //用户 ID
userSig: 'xxx', //用户签名
callUserID: 'xxx', //想要呼叫的 userID
};
},
components: {
TUICallKit
},
methods: {
// 1、初始化
async init() {
try {
await TUICallKitServer.init({
SDKAppID: this.SDKAppID,
userID: this.userID,
userSig: this.userSig
});
alert("初始化成功");
} catch (error) {
alert(`初始化失败,失败原因:${error}`);
}
},
// 2、发起视频通话
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>c.基础使用详情
由于 是音视频通话的 UI 部分,负责展示通话组件,需要将其放置在页面代码中,不在通话状态时显示空内容,具体如下所示:
<script>
import { TUICallKit } from "@tencentcloud/call-uikit-vue";
<script>
<template>
<TUICallKit />
</template>而且TUICallKitServer 是通话状态实例,负责初始化组件和拨打电话等操作,大多数情况下由用户的操作触发,具体如下所示:
<script>
import { TUICallKitServer } from "@tencentcloud/call-uikit-vue";
async function init() {
try {
await TUICallKitServer.init({ SDKAppID, userID, userSig });
alert("初始化完成");
} catch (error) {
alert(`初始化失败,失败原因:${error}`);
}
}
<script>
<template>
<button @click="init()"> 1、初始化 </button>
</template>d.其他特性使用:通过接口设置自动接听
腾讯云音视频通话通过 TUICallKitServer 组件的接口,可以灵活的控制 组件的状态,实现业务方的更多需求,尤其是在调用“接听/拒绝/挂断”等接口的时候,为了给使用者提供更好的用户体验,需要在 UI 层面上给用户提醒当前通话已被自动处理。下面是三个状态及方法:
// 该接口需要确保在收到来电邀请后调用(status === STATUS.BE_INVITED)
try {
await TUICallKitServer.accept();
alert(`自动接听`);
} catch (error) {
alert(`自动接听失败,失败原因:${error}`);
}// 和上面的 accept() 相同,有一样的调用时机限制
try {
await TUICallKitServer.reject();
alert(`自动拒绝`);
} catch (error) {
alert(`自动拒绝失败,失败原因:${error}`);
}// 该接口需要确保已经在呼叫状态或接通状态(status !== STATUS.BE_INVITED && status !== STATUS.IDLE)
try {
await TUICallKitServer.hangup();
alert(`自动挂断`);
} catch (error) {
alert(`自动挂断失败,失败原因:${error}`);
}e.通话状态的回调
腾讯云音视频通话组件提供了通话状态回调,可以用于业务方实现更多交互逻辑,比如三个执行状态:
而且还提供了若干个功能开关,可以根据需要选择开启或关闭,常用的功能开关如下所示:
另外还提供了若干个事件,会在组件内触发通知到业务方,常用的事件如下所示:
通话状态的回调具体的核心代码如下所示:
<template>
<div>
<button @click="init"> 1、初始化 </button>
<button @click="call"> 2、发起视频通话 </button>
<details>
<summary>3、自动接听等特性</summary>
<button @click="accept"> accept </button>
<button @click="reject"> reject </button>
<button @click="hangup"> hangup </button>
</details>
<div style="width: 50rem; height: 40rem; 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>
import { TUICallKit, TUICallKitServer, TUICallType, VideoDisplayMode, VideoResolution } from "@tencentcloud/call-uikit-vue2";
export default {
name: 'App',
data() {
return {
SDKAppID: 0, //应用 SDKAppID,int类型
userID: 'xxx', //用户 ID
userSig: 'xxx', //用户签名
callUserID: 'xxx', //想要呼叫的 userID
VideoDisplayMode, //画面显示模式
VideoResolution //通话分辨率
};
},
components: {
TUICallKit
},
methods: {
async init() {
try {
await TUICallKitServer.init({
SDKAppID: this.SDKAppID,
userID: this.userID,
userSig: this.userSig
});
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("111");
},
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}`);
}
}
},
}
</script>这里分享一下关于腾讯音视频通话的具体实现效果,根据不同的方式进行了不同的验证测试,具体实现效果如下所示:
效果情景一
效果情景二
效果情景三
通过上面关于沉浸式搭建微信同款音视频通话功能全流程,以及核心代码和具体的方法使用,其实可以提炼总结一下,尤其是关于实现音视频通话的基本细节部门,可以在这些地方进行体现出来:
关于上文使用的用户签名的生成,如果对于腾讯云产品不熟悉的使用者可能会有所陌生,其实UserSig 是腾讯云为其云服务设计的一种安全保护签名,是一种登录凭证,由 SDKAppID 与 SecretKey 等信息组合加密得到,所以这里就详细来介绍一下用户签名的详细生成方法,其实有三种方式,具体如下所示。
方式一:直接去腾讯云控制台获取,可以获取一个临时 userSig,具体入口:https://console.cloud.tencent.com/trtc/usersigtool
方式二:部署临时生成脚本。(但是需要特别注意:该方式是在前端代码中配置 SECRETKEY,而且该方法中 SECRETKEY 很容易被反编译逆向破解,一旦你的密钥泄露,攻击者就会盗用你的腾讯云流量,所以该方法只使用你在进行本地跑通功能调试,如果是生产环境参见方式三。
作为前期开发使用的时候,为了方便功能调试,用户签名userSig可以临时使用 GenerateTestUserSig-es.js 中 genTestUserSig(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。
在实际的音视频通话集成及使用过程中,可能会遇到一些问题和故障,这里说一些常见的问题,并提供相应的解决方案。比如报错“获取设备权限失败”,请先确保页面已被授权使用麦克风或摄像头,以及对浏览器的详细支持度;再比如在本地开发测试能正常使用,但是部署到线上用 IP 访问后就无法正常视频/语音通话,首先要对网站域名协议的要求,出于对用户安全、隐私等问题的考虑,浏览器限制网页在 HTTPS 协议下才能正常使用本文档中所对接组件的全部功能。为确保生产环境中的用户能够顺畅体验产品功能,请将您的网站部署在 https:// 协议的域名下,以及在使用 TUICallKit 时,用户可能因防火墙限制导致无法正常进行音视频通话。
与此同时,腾讯云音视频服务还提供了技术支持和反馈渠道,可以及时解答和解决遇到的问题,更详细的腾讯云音视频通话接入指南请参考腾讯云官网产品文档,如下所示:
读者通过对本文的学习,尤其是本文详细介绍了如何借助腾讯云音视频SDK搭建微信同款的音视频通话系统的全流程,学会了如何快速接入音视频,涵盖了环境准备、SDK集成、音视频通话功能实现、测试和调优等基本操作和细节。通过合理的使用腾讯云音视频SDK,读者可以沉浸式构建高质量、稳定可靠的音视频通话系统,为用户提供优质的体验。腾讯云音视频服务的强大功能和稳定性,尤其是腾讯云音视频SDK提供了非常方便的操作和细节处理,只需要按照对应的流程进行操作即可实现微信同款的音视频通话功能,给使用者提供了出色的音视频使用体验,不管是个人开发者还是企业用户,通过腾讯云音视频服务,都能够轻松实现高质量的音视频通过应用。
最后请注意,由于篇幅限制,本文只能提供基本操作步骤和细节概述,具体的详细代码实现和细节请参考对应的腾讯云音视频SDK官方文档和示例demo,同时也希望本文对您在音视频接入方面有所帮助,让您的音视频应用创造之路更加顺畅和成功,快来尝试腾讯云音视频保姆级教程,祝您在搭建音视频通话系统的过程中取得成功,快来开启精彩的音视频体验之旅吧!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。