实时音视频-TRTC_01.jpg实时音视频-TRTC_02.jpg实时音视频-TRTC_03.jpg实时音视频-TRTC_04.jpg实时音视频-TRTC_05.jpg实时音视频-TRTC_06.jpg实时音视频-TRTC_07.jpg实时音视频-TRTC_08.jpg

腾讯云实时音视频(Tencent Real-Time Communication,TRTC)是腾讯云基于 QQ 十多年在音视频通话技术上的积累,结合腾讯浏览服务 TBS WebRTC 能力与腾讯实时音视频 TRTC SDK ,为客户提供跨终端、多平台互通、低成本、高品质、可定制的实时音视频通信服务的产品。

产品架构

腾讯云实时音视频 TRTC 产品架构如下图所示:

平台支持

实时音视频是业界真正实现全平台互通的解决方案,具体平台支持情况如下表所示:

平台SDK 及兼容性Demo 体验Demo 源码下载
iOS支持;兼容 iOS 9.0 及以上版本的 iPhone 或者 iPad 真机。支持支持
Android支持;最低兼容 Android 4.1(SDK API Level 16),建议使用 Android 5.0 (SDK API Level 21)及以上版本。支持支持
Windows支持;兼容 Windows 7 及以上版本。支持支持
Mac OS支持;兼容 Mac OS X10.10 及以上版本的 Mac 真机。支持支持
Web支持;详细兼容情况请参见 快速集成(Web)支持支持
微信小程序支持;兼容小程序基础库版本1.7.0及以上、微信 iOS 版本6.5.21及以上、微信 Android 版本6.5.19及以上。支持支持
说明:


  • 下载各平台 SDK 请参见 SDK 下载

  • 体验各平台 Demo 请参见 Demo 体验

  • 下载各平台 Demo 源码请访问 实时音视频控制台,在应用列表页面选择已经创建的应用卡片,进入应用详情页面,然后单击【快速上手】。

产品优势

低延时

实时音视频 TRTC 提供覆盖全球的高连通、高可靠、强安全的网络连接通道,自研多重最优寻址算法,具有全网调度能力。终端在海外登录时,TRTC SDK 会访问就近接入点或加速点。丰富的高带宽资源储备,全球节点布局,保证国际链路端到端平均时延 < 300ms

低卡顿

通过智能网络质量调控和编码优化降低卡顿率,实测抗丢包率超过40%抗网络抖动超过1000ms。即使是在弱网环境下,仍然能够保证高质量的音视频通信,确保音视频通话过程顺畅稳定。

高品质

杜绝回声和啸叫,无损音质媲美 CD ,支持最高分辨率至1920 × 1080的超高清画质。采用腾讯云视频处理算法,配合腾讯浏览服务(Tencent Browsing Service,TBS)内核底层兼容性支持,优化视频清晰度,降低马赛克,使用户通过 H5 页面也能获得客户端级别的体验。

全平台互通

业界真正实现全平台互通的解决方案,5000+终端完美适配。实时音视频支持在微信、手机 QQ、QQ 浏览器通过 H5 页面或微信小程序发起/接受/断开音视频通话,也支持直接在网页或通过 SDK 集成的方式在 PC、Mac 和 App 中实现音视频通话。

因为有一些客户公司内部有外网访问限制,需要添加防火墙白名单才能访问,相关的规则如下:

客户端 Native SDK

防火墙端口:

TRTC SDK(Native)白名单项目
TCP 端口443
UDP 端口8000

域名白名单:

official.opensso.tencent-cloud.comquery.tencent-cloud.comyun.tim.qq.com

WebRTC

防火墙端口:

WebRTC(H5)白名单项目
TCP 端口8687
UDP 端口8000;8800;843;443

域名白名单:

qcloud.rtc.qq.com

微信小程序

<webrtc - room> 域名白名单:

https://official.opensso.tencent-cloud.comhttps://yun.tim.qq.comhttps://cloud.tencent.comhttps://webim.tim.qq.com

注意:

因为腾讯云服务端 IP 地址是动态更新的,并不是固定的一批 IP 地址,所以我们无法提供固定的一组 IP 列表给您。

iOS 平台

1. 只打包 arm64 架构(推荐)

苹果 iPhone 5s 以后的手机都可以支持只打包 x64 架构,在 XCode 中的 Build Setting 里将 Build Active Architecture Only 设置为 YES,同时将 Valid Architectures 里只写 arm64 即可,TRTC SDK 的单架构 ipa 增量只有1.9M。

如果您不想放弃 iPhone 5s 这样的早期机型,可以考虑开启 BitCode 来解决问题。

2. 开启 BitCode

2016年开始,苹果在其 XCode 开发环境中开始支持 BitCode 编译选项,开启 BitCode 之后,编译器会对 App 生成中间代码而非实际的汇编机器码,用户从 applestore 下载安装的是针对具体手机 CPU 架构生成的机器码,所以该方式能够大幅减少安装包体积。

  • 如何开启?
    在 Build Settings => Build Options 里将 Enable Bitcode 选项打开,即可开启 BitCode。

  • 编译问题?
    成功开启 BitCode 的一个前提条件是您项目中的所有第三方库都支持 BitCode,只要有一个不支持,就会报编译错误。所以我们更推荐您采用仅打包 arm64 架构的方案来节省安装包体积。

Android 平台

1. 只打包部分 so

如果您的 App 只在中国大陆地区使用,可以只打包 armeabi-v7a 架构的 so 文件,这样可以将安装包增量压缩到5M以内;如果您的 App 希望上架 Google Play,可以打包 armeabi-v7a 和 arm64-v8a 两个架构的 so 文件。

具体操作方法是在当前项目的 build.gradle 里添加 abiFilters "armeabi-v7a" 来指定打包单架构的 so 文件,或添加 abiFilters "armeabi-v7a","arm64-v8a" 来指定打包双架构的 so 文件。

  • 如果不打算上架 Google Play:

  • 如果希望上架到 Google Play:

2. 安装后下载 so(只打包 jar)

Android 版 SDK 的体积主要来自于 so 文件,如果您希望将安装包增量压缩到1M以内,可以考虑采用安装后再下载 so 的方式:

  • Step1:下载指定架构的 so 文件
    在 Github 文件夹下,您可以找到类似 LiteAVSDK_TRTC_x.x.xxx.zip 命名的压缩包,将其解压开,并找到指定架构的 so 文件。

  • Step2:将 so 文件上传到服务器
    上传 Step1 中下载到的 so 文件,上传到您的服务器(或腾讯云 COS 对象存储服务)上,并记录下载地址,例如 http://xxx.com/so_files.zip

  • Step3:首次启动 SDK 前下载 so 文件
    在用户启动 SDK 相关功能前,例如开始播放视频之前,先用 loading 动画提示用户“正在加载相关的功能模块”。

    在用户等待过程中,App 就可以到 http://xxx.com/so_files.zip 下载 so 文件,并存入应用目录下(例如应用根目录下的 files 文件夹),为了确保这个过程不受运营商 DNS 劫持的影响,请在文件下载完成后校验 so 文件的完整性,防止 zip 压缩包被运营商篡改。

  • Step4:使用 API 加载 SO 文件
    等待所有 so 文件就位以后,调用 TXLiveBase 类(LiteAVSDK 最早的一个基础模块)中的 setLibraryPath() 接口,将下载 so 的目标路径设置到 SDK。之后,SDK 会到这些路径下加载需要的 so 文件并启动相关功能。

注意:

如果您的 App 希望上架 Google Play,请不要使用该方案,有可能会无法上架。

版本区别

差异项旧版本 V1新版本 V2
内核架构iLiveSDKLiteAVSDK
IM SDK内嵌不内嵌
API 接口V1V2
CDN 推流使用 RESTAPI 开启支持客户端开启
云端线路V1 线路V2 线路

旧版本(iLiveSDK)文档访问及 SDK 下载申请

升级方案

情况一:如果您的项目从未集成过 TRTC SDK

强烈推荐 V2,因为 V2 在通话质量、线路规格、接入难度以及功能扩展上均有优势。

情况二:如果您的项目已经稳定并且没有问题

由于 V1 和 V2 的云端线路目前是不互通的,所以如果您的项目已经进入稳定运营阶段,可以暂时不升级。

情况三:如果您的项目正在对接旧版本 V1

推荐您可以直接对接一下 V2 版本,V2 版本的 API 接口采用全新设计,对接时间上相比于旧版本要减少很多。

情况三:如果您已经在使用旧版本 V1 并希望提升通话质量

由于 V1 和 V2 的云端线路目前是不互通的,所以升级新版本 SDK 需要经过一个“SDK 集成”、“放量铺开”以及“云端切换”的过程,大致步骤如下:

  • step1:在现有的项目中集成新版本的 SDK,并通过测试。

  • step2:在房间列表中增加 SDK 版本号字段,App 根据服务端的字段决定使用 V1 版本还是 V2 版本。

  • step3:发布新版本 App 并等待版本逐渐覆盖您的用户群。

  • step4:将房间列表中的 SDK 版本号字段从 V1 切换到 V2,完成线路的切换。

TRTC V1(iLiveSDK) 和 V2(LiteAVSDK) 版本同时集成兼容方案

TRTC V2 版本与 V1 版本因为底层部分模块使用了同样的公共组件,因此当您希望实现将二者同时集成到项目中存时,会遇到一些冲突问题,这篇文档将指导您实现 TRTC V2 与 V1 版本的兼容共存。

Android 端 LiteAVSDK 和 iLiveSDK 兼容方案

iLiveSDK 和 LiteAVSDK 都使用到了 TRAE 来进行回声消除和降噪等音频处理,LiteAVSDK 中使用的 TRAE 版本更新,且包含了 iLiveSDK 中使用的全部功能接口,因此您只需要配置项目中使用 LiteAVSDK 中的 TRAE 库即可。

工程配置

使用 aar 方式集成工程,修改您子项目(app 目录)下的 build.gradle,在 android{} 节点中进行如下配置:

注意:

添加引用时,LiteAVSDK 必须要在 iLiveSDK 前面。

android{//1、在gradle配置packagingoptionspackagingOptions {pickFirst 'lib/armeabi-v7a/libTRAECodec.so'pickFirst 'lib/armeabi-v7a/libstlport_shared.so'pickFirst 'lib/armeabi/libTRAECodec.so'pickFirst 'lib/armeabi/libstlport_shared.so'}//2、引入dempendenciesimplementation(name:'LiteAVSDK_TRTC_6.4.7108', ext:'aar')   // 注意,TRTC必须要在iLiveSDK前面implementation 'com.tencent.ilivesdk:ilivesdk:1.9.4.6.4'}

iOS 端 LiteAVSDK + iLiveSDK + BeautySDK 兼容方案

TRTC V1 版本中,使用了 BeautySDK 来实现美颜及动效等功能,TRTC V2 版本里,我们将 BeautySDK 的功能内嵌到了 LiteAVSDK 之中,更加方便用户使用。如果已经集成了 iLiveSDK,且在您的工程中已引入了 BeautySDK,就会遇到文件冲突,解决办法如下:

版本处理办法
BeautySDK 基本版(不带 P 图版本)您仅需在 Xcode 工程配置 BeautySDK 的头文件搜索路径,并取消链接 BeautySDK。
BeautySDK 高级版(带 P 图版本)您需要使用 LiteAVSDK 企业版,并在 Xcode 工程配置 BeautySDK 的头文件搜索路径,同时取消链接 BeautySDK(LiteAVSDK 企业版中带有 P 图组件,可以直接使用您之前购买的 P 图 licence,您无须再次付费)。

Windows 端 LiteAVSDK 和 iLiveSDK 兼容方案

Windows 端的 LiteAVSDK 和 iLiveSDK 都使用到了 TRAE 来进行回声消除和降噪等音频处理,但 LiteAVSDK 使用的 TRAE 版本更新,且在功能使用上有差异,因此不能直接替换,您可以按以下方法进行处理。

工程结构

建议您的工程采用如下结构:

||- 主程序.exe|- 主程序.exe依赖的其他文件|- iLiveSDK.dll|- iLiveSDK.dll依赖的其他文件|- LiteAV|        |- liteav.dll|        |- liteav.dll依赖的其他文件

初始化方法

使用时,iLiveSDK 可以直接用 .lib 链接,也可以使用如下代码动态加载:

HMODULE hiLive = LoadLibrary("iLiveSDK.dll");

当您需要使用 LiteAVSDK 时,使用如下代码加载并进行初始化:

typedef ITRTCCloud* (*getTRTCShareInstanceMtd)();typedefvoid(*destroyTRTCShareInstanceMtd)();TCHAR dllPath[MAX_PATH];GetModuleFileName(nullptr, dllPath, MAX_PATH);PathRemoveFileSpec(dllPath);wcscat(dllPath, L"\\LiteAV\\");SetDllDirectory(dllPath);HMODULE hLiteAV = LoadLibrary(L"liteav.dll");if (!hLiteAV) {printf("载入liteav.dll失败: %d", GetLastError());return;}getTRTCShareInstanceMtd pGetTRTCShareInstance = (getTRTCShareInstanceMtd)GetProcAddress(hLiteAV, "getTRTCShareInstance");if (!pGetTRTCShareInstance) {printf("载入函数getTRTCShareInstance失败");return;}destroyTRTCShareInstanceMtd pDestroyTRTCShareInstance = (destroyTRTCShareInstanceMtd)GetProcAddress(hLiteAV, "destroyTRTCShareInstance");if (!pDestroyTRTCShareInstance) {printf("载入函数destroyTRTCShareInstance失败");return;}ITRTCCloud *pTrtcCloud = m_pGetTRTCShareInstance();if (!pTrtcCloud) {printf("创建TRTC实例失败");return;}SetDllDirectory(nullptr);pTrtcCloud->enterRoom(...);

UserSig 介绍

UserSig 是腾讯云设计的一种安全保护签名,目的是为了阻止恶意攻击者盗用您的云服务使用权。

目前,腾讯云的实时音视频(TRTC)、即时通信(IM)以及移动直播(MLVB)等服务都采用了该套安全保护机制。要使用这些服务,您都需要在相应 SDK 的初始化或登录函数中提供 SDKAppID,UserID 和 UserSig 三个关键信息。

其中 SDKAppID 用于标识您的应用,UserID 用于标识您的用户,而 UserSig 则是基于前两者计算出的安全签名,它由 HMAC SHA256 加密算法计算得出。只要攻击者不能伪造 UserSig,就无法盗用您的云服务流量。

UserSig 的计算原理如下图所示,其本质就是对 SDKAppID、UserID、ExpireTime 等关键信息进行了一次哈希加密:

//UserSig 计算公式,其中 secretkey 为计算 usersig 用的加密密钥usersig = hmacsha256(secretkey, (userid + sdkappid + currtime + expire +                                  base64(userid + sdkappid + currtime + expire)))

密钥获取

访问腾讯实时音视频 控制台可以查询计算 UserSig 用的密钥,方法如下:

  1. 单击应用卡片,进入【快速上手】页面。

  2. 单击【第二步 获取签发UserSig的密钥】区域的【查看密钥】,即可获取用于计算 UserSig 的加密密钥。

  3. 单击【复制密钥】,将密钥拷贝到剪贴板中。

客户端计算

我们在 TRTC SDK 的示例代码中提供了一个叫做 GenerateTestUserSig 的开源模块,您只需要将其中的 SDKAPPID、EXPIRETIME 和 SECRETKEY 三个成员变量修改成您自己的配置,就可以调用 genTestUserSig() 函数获取计算好的 UserSig,从而快速跑通 SDK 的相关功能:

适用平台文件源码链接文件相对路径
iOSGithubiOS/TRTCDemo/TRTC/GenerateTestUserSig.h
MacGithubMac/TRTCDemo/TRTC/GenerateTestUserSig.h
AndroidGithubAndroid/TRTCDemo/app/src/main/java/com/tencent/liteav/demo/trtc/debug/GenerateTestUserSig.java
Windows(C++)GithubWindows/DuilibDemo/GenerateTestUserSig.h
Windows(C#)GithubWindows/CSharpDemo/GenerateTestUserSig.cs
WebGithubWeb/js/debug/GenerateTestUserSig.js
微信小程序GithubWXMini/pages/webrtc-room/debug/GenerateTestUserSig.js

注意:

该方案仅适用于调试,如果产品要正式上线,不推荐采用这种方案,因为客户端代码(尤其是 Web 端)中的 SECRETKEY 很容易被反编译逆向破解。一旦您的密钥泄露,攻击者就可以盗用您的腾讯云流量。

正确的做法是将 UserSig 的计算代码放在您的业务服务器上,然后由您的 App 在需要的时候向您的服务器获取实时算出的 UserSig。

服务端计算

采用服务端计算 UserSig 的方案,可以最大限度地保障计算 UserSig 用的密钥不被泄露,因为攻破一台服务器的难度要高于逆向一款 App。具体的做法如下:

  1. 您的 App 在调用 SDK 的初始化函数之前,首先要向您的服务器请求 UserSig。

  2. 您的服务器根据 SDKAppID 和 UserID 计算 UserSig,计算源码见文档前半部分。

  3. 服务器将计算好的 UserSig 返回给您的 App。

  4. 您的 App 将获得的 UserSig 通过特定 API 传递给 SDK。

  5. SDK 将 SDKAppID + UserID + UserSig 提交给腾讯云服务器进行校验。

  6. 腾讯云校验 UserSig,确认合法性。

  7. 校验通过后,会向 TRTCSDK 提供实时音视频服务。

为了简化您的实现过程,我们提供了多个语言版本的 UserSig 计算源代码:

语言版本签名算法关键函数下载链接
JavaHMAC-SHA256genSigGithub
GOHMAC-SHA256GenSigGithub
PHPHMAC-SHA256genSigGithub
NodejsHMAC-SHA256genSigGithub
PythonHMAC-SHA256gen_sigGithub
C#HMAC-SHA256GenSigGithub

老版本算法

为了简化签名计算难度,方便客户更快速地使用腾讯云服务,实时音视频自2019.07.19开始启用新的签名算法,从之前的 ECDSA-SHA256 升级为 HMAC-SHA256,也就是从2019.07.19之后创建的 SDKAppID 均会采用新的 HMAC-SHA256 算法。

如果您的 SDKAppID 是 2019.07.19 之前创建的,可以继续使用老版本的签名算法,算法的源码下载链接如下:

语言版本签名算法下载链接
JavaECDSA-SHA256Github
C++ECDSA-SHA256Github
GOECDSA-SHA256Github
PHPECDSA-SHA256Github
NodejsECDSA-SHA256Github
C#ECDSA-SHA256Github
PythonECDSA-SHA256Github



  • 名称: 实时音视频TRTC
  • 关键词: 实时音视频RTC.视频通话方案,腾讯云