腾讯云云渲染对接使用完全指南:从开通到上线全流程解析
一、云渲染是什么?
云渲染(Cloud Real-time Rendering,CRTR)是一种以云计算为基础的新型渲染方式。简单来说,就是将应用(游戏、3D软件、桌面系统等)运行在云端GPU服务器上,把渲染完毕的画面及声音编码后,以音视频流的方式通过网络实时传输给终端用户。
与传统的离线云渲染(渲染农场)不同,腾讯云云渲染属于实时云渲染——用户的操作会即时回传至云端,云端实时渲染并推流,从而实现低延迟的交互体验。
云渲染的核心价值
- 终端设备轻量化:将图形计算需求移到云端,大幅降低终端硬件要求,实现终端轻量化、移动化。
- 跨平台无缝衔接:用户可通过各种终端设备访问云渲染服务,不受特定操作系统或平台限制。
- 即点即用:用户无需漫长下载或安装等待,立即加载出应用或场景。
- 数据安全:渲染计算和数据置于云端,用户端仅处理音视频流数据,降低应用数据被盗风险。
需要先登录腾讯云控制台,点击:腾讯云控制台,还没有账号,点击:注册后再关联,已有账号点击:登录后再关联
二、腾讯云云渲染的三个子产品
腾讯云云渲染包含三个子产品,需要根据业务需求选择:
| 子产品 | 适用场景 |
|---|---|
| 应用云渲染(CAR) | 上传自己的UE/Unity应用,做虚拟活动、数字孪生、虚拟展厅、直播间弹幕游戏等 |
| 云游戏(GS) | 做云游戏,用户即点即玩,支持端游+手游 |
| 云桌面(CVD) | 远程虚拟桌面服务,用于办公、开发、实训 |
本文重点介绍应用云渲染(CAR)的对接使用流程。
三、对接前的准备工作
3.1 开通腾讯云账号
访问腾讯云官网注册页面,完成手机号验证。企业客户建议完成企业实名认证,以便开具发票和享受企业优惠。新注册用户会自动获得2路中国大陆L型并发资源×30天免费体验,默认绑定到测试项目。
3.2 开通CRTR服务
登录腾讯云控制台后,找到云渲染(CRTR)产品页,点击开通服务。建议将腾讯云账号进行企业实名认证,以便获得更好的服务支持。
3.3 理解三个核心概念
在开始对接之前,需要先理解应用、项目、并发三个基础概念的关系:
- 应用:你开发好的应用程序(EXE/APK),需要确保可在Windows Server或Android环境下稳定运行。你需在控制台上传应用,让它在云端运行。
- 项目:通过项目将并发分组,并通过关联应用来指定可以使用这些并发的应用。可针对一个应用新建不同项目,满足不同的测试、上线场景而无需重复上传应用。
- 并发:应用云渲染的唯一计费项,一个并发即一台虚拟化的云端实例(包括CPU、带宽、磁盘、GPU等虚拟计算资源),用于在云端运行你的应用。
四、应用上传与并发配置
4.1 上传应用
以应用云渲染→云3D为例,操作步骤如下:
- 进入控制台"应用管理"页面
- 点击"上传应用",填写应用名称、版本号等基本信息
- 上传应用EXE文件(以及所需的资源文件)
- 配置应用启动参数(如exe路径、启动参数等)
- 提交后等待应用处理完成
官方承诺支持应用自助上传、全球节点自动分发,1小时内可完成部署。
注意事项:
- 应用需为EXE格式(云3D/云VR)
- 确保应用可以在无显示器环境下正常运行(云端服务器无物理显示器)
- 如应用依赖特定运行库,需在上传时一并打包或通过启动脚本安装
4.2 应用全屏与自适应分辨率配置
在上传至云渲染平台前,建议先将应用设置为无边框全屏模式并开启自适应桌面分辨率,便于后续使用自适应分辨率功能,实现画面全屏、自适应终端设备分辨率且无黑边的效果。
UE应用配置示例:可以将下面蓝图加到Map的BeginPlay里面开启自适应桌面分辨率,其中In Fullscreen Mode应配置为Windowed Fullscreen(窗口化全屏)。
Unity应用配置示例:可以配置为全屏模式,或者增加应用启动参数 -screen-fullscreen 1。
注意:应用独占全屏不属于无边框全屏模式。云渲染的自适应分辨率功能是通过修改"云端桌面分辨率"来实现的,应用独占全屏时显示器分辨率由应用控制,强行修改桌面分辨率可能导致应用崩溃。
4.3 购买并配置并发
应用上传完成后,需要购买并发实例,应用才能被用户访问。
操作步骤:
- 进入控制台"并发管理"页面
- 根据预估同时在线用户数,购买对应数量的并发
- 将购买的并发绑定到已上传的应用
并发数量估算公式:
所需并发数 ≈ 预期同时在线用户数 ÷ 单用户占用实例数(通常为1)五、接入架构概览
很多开发者第一次接触云渲染SDK时,会被"接入"二字吓到,以为要改大量应用代码。实际情况是:大多数基于UE、Unity开发的应用,不需要任何改造。CRTR在云端直接运行原始应用包(EXE/APK),SDK只负责"建立连接"和"传输音视频流"。
完整的接入工作分为两大块:
- 后台接入:调用腾讯云API,完成并发资源分配、会话管理等后台逻辑
- 前端接入:集成对应平台的SDK(Web/小程序/iOS/Android),实现音视频流呈现和用户操作回传
六、后台接入:调用云API
无论前端使用哪个平台(Web、小程序、iOS、Android),后台接入的逻辑是统一的——都是通过调用腾讯云CRTR的云API来完成。应用云渲染的API接口均为API 3.0接口。
6.1 后台需要实现的核心功能
- 应用管理:通过控制台或API上传和更新应用(EXE/APK等格式)
- 并发分配:调用API请求并发资源,为即将开始的云渲染会话分配GPU实例
- 会话管理:创建会话、查询会话状态、结束会话
- 令牌生成:为前端生成连接令牌(Token),用于建立SDK与云端的音视频连接
6.2 API调用示例
可以使用API Explorer工具在线调用API。以申请并发(ApplyConcurrent)为例:
腾讯云API签名v3示例(Python):
import hashlib
import hmac
import json
import time
from datetime import datetime
def sign_request(secret_id, secret_key, service, action, payload):
algorithm = "TC3-HMAC-SHA256"
timestamp = int(time.time())
date = datetime.utcfromtimestamp(timestamp).strftime("%Y-%m-%d")
http_request_method = "POST"
canonical_uri = "/"
canonical_querystring = ""
canonical_headers = "content-type:application/json; charset=utf-8\nhost:car.tencentcloudapi.com\n"
signed_headers = "content-type;host"
hashed_request_payload = hashlib.sha256(json.dumps(payload).encode()).hexdigest()
canonical_request = f"{http_request_method}\n{canonical_uri}\n{canonical_querystring}\n{canonical_headers}\n{signed_headers}\n{hashed_request_payload}"
credential_scope = f"{date}/{service}/tc3_request"
hashed_canonical_request = hashlib.sha256(canonical_request.encode()).hexdigest()
string_to_sign = f"{algorithm}\n{timestamp}\n{credential_scope}\n{hashed_canonical_request}"
secret_date = hmac.new(f"TC3{secret_key}".encode(), date.encode(), hashlib.sha256).digest()
secret_service = hmac.new(secret_date, service.encode(), hashlib.sha256).digest()
secret_signing = hmac.new(secret_service, b"tc3_request", hashlib.sha256).digest()
signature = hmac.new(secret_signing, string_to_sign.encode(), hashlib.sha256).hexdigest()
authorization = f"{algorithm} Credential={secret_id}/{credential_scope}, SignedHeaders={signed_headers}, Signature={signature}"
return authorization, timestamp
secret_id = "您的SecretId"
secret_key = "您的SecretKey"
payload = {
"ProjectId": "您的项目ID",
"ConcurrentCount": 1,
"ConcurrentSpec": "L"
}
authorization, timestamp = sign_request(secret_id, secret_key, "car", "ApplyConcurrent", payload)
headers = {
"Authorization": authorization,
"Content-Type": "application/json; charset=utf-8",
"Host": "car.tencentcloudapi.com",
"X-TC-Action": "ApplyConcurrent",
"X-TC-Timestamp": str(timestamp),
"X-TC-Version": "2022-01-01"
}七、前端接入:四端SDK详解
7.1 Web端接入(JavaScript SDK)
适用场景:网页端即点即用,用户无需下载安装,点击链接即可进入云渲染应用。
接入流程:
- 引入SDK:在HTML页面中引入CRTR Web SDK的JS文件
- 初始化:创建SDK实例,传入配置参数(如服务器地址、令牌等)
- 启动会话:调用SDK的启动方法,建立与云端的音视频流连接
- 绑定操作事件:将网页中的鼠标、键盘、触摸事件绑定到SDK,回传至云端
- 呈现画面:SDK自动在指定的DOM元素中呈现云端传来的视频流
关键配置参数:
- 服务端地址:腾讯云CRTR分配的服务端接入地址
- 令牌(Token):由企业后台通过云API生成,用于鉴权和会话建立
- 容器元素:网页中用于承载视频流的DOM元素(通常是一个div)
- 操作模式:支持鼠标模式、键盘模式、触摸模式等,根据应用类型选择
Web端代码示例:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>云渲染Web端示例</title>
</head>
<body>
<div id="render-container" style="width:100%;height:100vh;"></div>
<script src="https://您的SDK地址/TCGSDK.js"></script>
<script>
const config = {
serverUrl: "wss://您的服务端地址",
token: "由后台API生成的令牌",
container: document.getElementById('render-container'),
mode: 'mouse'
};
const sdk = new TCGSDK(config);
sdk.init().then(() => {
console.log('SDK初始化成功');
return sdk.getClientSession();
}).then((session) => {
console.log('获取ClientSession成功:', session);
return sdk.start();
}).then(() => {
console.log('云渲染应用启动成功');
}).catch((error) => {
console.error('启动失败:', error);
});
sdk.on('onConnectSuccess', () => {
console.log('云渲染连接建立成功');
});
sdk.on('onDisconnect', () => {
console.log('云渲染连接已断开');
});
</script>
</body>
</html>7.2 微信小程序端接入
适用场景:微信生态内传播,用户在小程序中点击即可进入云渲染应用,利用微信社交裂变能力快速获客。小程序场景使用JavaScript SDK,同套SDK也覆盖H5。
接入流程:
- 引入SDK:在小程序项目中引入CRTR小程序SDK
- 初始化:在Page的onLoad中初始化SDK实例
- 启动会话:用户点击"开始体验"按钮后,调用SDK启动方法
- 绑定操作事件:将小程序的触摸事件回传至云端
- 呈现画面:SDK在小程序页面中呈现视频流
小程序端代码示例:
// pages/index/index.js
const TCGSDK = require('../../utils/TCGSDK.js');
Page({
data: {
isConnected: false,
isLoading: false
},
onLoad() {
this.sdk = new TCGSDK({
serverUrl: "wss://您的服务端地址",
token: "由后台API生成的令牌",
container: this,
mode: 'touch'
});
this.sdk.on('onConnectSuccess', this.onConnectSuccess.bind(this));
this.sdk.on('onDisconnect', this.onDisconnect.bind(this));
},
startExperience() {
this.setData({ isLoading: true });
this.sdk.init()
.then(() => this.sdk.getClientSession())
.then((session) => {
console.log('获取ClientSession成功');
return this.sdk.start();
})
.then(() => {
this.setData({ isLoading: false, isConnected: true });
})
.catch((error) => {
console.error('启动失败:', error);
this.setData({ isLoading: false });
wx.showToast({ title: '启动失败', icon: 'none' });
});
},
onConnectSuccess() {
console.log('云渲染连接建立成功');
this.setData({ isConnected: true });
},
onDisconnect() {
console.log('云渲染连接已断开');
this.setData({ isConnected: false });
},
onUnload() {
if (this.sdk) {
this.sdk.stop();
}
}
});7.3 iOS端接入
应用云渲染解决方案全面覆盖iOS生态,提供标准化、模块化的云端渲染能力接入体系。云渲染iOS SDK支持在iOS端展示云端渲染的视频流,处理好的视频流通过腾讯云TRTC实时音视频通道低延迟推送到iOS端展示。
iOS端接入要点:
- 配置SDK鉴权参数,调用initSDK进行初始化(initSDK仅做参数存储,不会发起网络请求)
- 实际建流调用open接口
- 调用后可使用listSessionOfUin、listSessionOfProjectid、listSessionOfAssetVK等查询接口
iOS端代码示例(Swift):
import UIKit
import TCGSDK
class ViewController: UIViewController {
var sdk: TCGSDK?
override func viewDidLoad() {
super.viewDidLoad()
let config = TCGConfig(
serverUrl: "wss://您的服务端地址",
token: "由后台API生成的令牌",
container: self.view
)
sdk = TCGSDK(config: config)
sdk?.delegate = self
sdk?.initSDK()
}
@IBAction func startButtonTapped(_ sender: UIButton) {
sdk?.open { [weak self] success, error in
if success {
print("云渲染连接建立成功")
self?.showConnectedState()
} else {
print("启动失败: \(error?.localizedDescription ?? "未知错误")")
}
}
}
}
extension ViewController: TCGSDKDelegate {
func onConnectSuccess() {
print("连接成功回调")
}
func onDisconnect() {
print("连接断开回调")
}
}7.4 Android端接入
应用云渲染解决方案全面覆盖Android移动端,提供标准化、模块化的云端渲染能力接入体系。Android入门Demo提供了基础的云试玩能力,包含简单示例、虚拟键盘和一些常见API的使用。
Android端接入要点:
- 初始化云渲染SDK,初始化成功会回调onInitSuccess
- 启动云渲染,启动成功会回调onConnectSuccess
- 先通过TCGSDK.getAndroidInstance()获取安卓实例
Android端代码示例(Kotlin):
import com.tencent.tcg.TCGSDK
import com.tencent.tcg.TCGConfig
class MainActivity : AppCompatActivity() {
private lateinit var sdk: TCGSDK
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val config = TCGConfig(
serverUrl = "wss://您的服务端地址",
token = "由后台API生成的令牌",
container = findViewById(R.id.render_container)
)
sdk = TCGSDK(config)
sdk.setListener(object : TCGSDK.TCGListener {
override fun onInitSuccess() {
Log.d("TCGSDK", "初始化成功")
}
override fun onConnectSuccess() {
Log.d("TCGSDK", "连接建立成功")
runOnUiThread {
Toast.makeText(this@MainActivity, "连接成功", Toast.LENGTH_SHORT).show()
}
}
override fun onDisconnect() {
Log.d("TCGSDK", "连接已断开")
}
})
sdk.init()
}
fun startCloudApp(view: View) {
sdk.getClientSession { session, error ->
if (error == null) {
Log.d("TCGSDK", "获取ClientSession成功: $session")
sdk.start()
} else {
Log.e("TCGSDK", "获取ClientSession失败: ${error.message}")
}
}
}
override fun onDestroy() {
super.onDestroy()
sdk.stop()
}
}八、应用类型选择
应用云渲染支持四种应用类型,需要根据应用格式选择合适的类型:
| 应用类型 | 应用格式 | 适用场景 |
|---|---|---|
| 云3D | EXE(非VR) | UE/Unity虚拟应用、PC游戏等,键鼠或触摸操控 |
| 云VR | EXE(VR) | VR应用,双手柄操控,适配Pico/Oculus等设备 |
| 云Web | 云端运行浏览器 | 需要在云端运行浏览器并打开指定网页地址 |
| 云APK | APK | Android应用(白名单开放,需申请) |
九、进阶功能
9.1 数据通道
数据通道用于与云端运行的应用直接进行通信。当业务需要建立客户端与云端应用通信时,可以使用数据通道功能。
使用流程:
- 业务云端应用创建UDP服务
- 业务客户端调用TCGSDK.start()接口启动云渲染应用,SDK完成应用连接后会触发回调onConnectSuccess(),建议业务客户端在这之后创建数据通道
- 业务客户端调用TCGSDK.createCustomDataChannel()接口创建透传通道,接口里的目标端口参数应为云端应用监听的端口
数据通道代码示例:
sdk.on('onConnectSuccess', () => {
const channel = sdk.createCustomDataChannel({
targetPort: 8080,
onMessage: (data) => {
console.log('收到云端消息:', data);
}
});
channel.send(JSON.stringify({
type: 'control',
payload: { action: 'move', x: 100, y: 200 }
}));
});9.2 排队功能
当用户在线数大于资源并发数量时,建议业务引入用户排队系统,提升用户体验。
排队功能流程:
- 业务客户端调用TCGSDK.init()接口完成初始化构建
- 初始化完成后,调用TCGSDK.getClientSession()获取Client端的ClientSession
- 如果并发资源不足,SDK会自动进入排队状态,并通过回调通知用户当前排队位置
9.3 云端推流
当云端应用在运行弹幕互动游戏、虚拟活动、虚拟展厅等场景时,需要同步将应用云渲染并发上的画面实时推流到直播间。
云端推流支持两种方式:
- 通过绑定云直播域名推流至云直播
- 传递目标推流地址,将画面推流至指定地址
十、并发规格选型
应用云渲染支持x86和ARM架构并发混合调度:
- x86架构并发:性能强,桌面级显卡算力,一般适用于PC桌面应用
- ARM架构并发(白名单开放):性价比高,应用适配成本低,一般适用于Android应用
x86 GPU并发规格:
| 规格 | vCPU | 内存 | GPU性能 | 显存 | 带宽 | 适用场景 |
|---|---|---|---|---|---|---|
| S型(小型) | 4核+ | 8GB+ | 2 TF SP | 4GB+ | 6Mbps | 小型桌面应用 |
| M型(中型) | 4核+ | 16GB+ | 4 TF SP | 6GB+ | 8Mbps | 中型桌面应用 |
| L型(大型) | 10核+ | 32GB+ | 8.1 TF SP | 12GB+ | 8Mbps | 大型桌面应用 |
| L2型(大型) | 10核+ | 40GB+ | 13.45 TF SP | 11GB+ | 8Mbps | 大型桌面应用 |
| XL型(超大型) | 12核+ | 44GB+ | 16 TF SP | 24GB+ | 10Mbps | 超大型桌面应用 |
说明:应用云渲染并发已是虚拟化后的概念,1路并发支持1个用户同时访问使用。不同规格并发间的差别在于架构和配置,与并发用户数量无关。
十一、计费模式
目前应用云渲染并发支持预付费(即先付费再使用)包月、包天和预付费资源包的计费模式。
| 计费模式 | 适用场景 |
|---|---|
| 预付费包月 | 平稳型业务或多个业务共享资源,如虚拟营业厅、虚拟卖场、展厅等长期有用户访问的业务场景 |
| 预付费包天 | 短期活动、临时业务场景 |
| 预付费资源包 | 按需使用,灵活组合 |
成本优化建议:
- 先用2折包月的S型并发跑通PoC(概念验证)
- 再按真实流量切换到1折包天或企业专享5折资源包
- 资源包如100小时L型1824.5元、6个月有效,几乎等同于把"固定成本"彻底变成了"可控的变动成本"
十二、常见问题与最佳实践
12.1 网络与安全
- 云渲染服务提供的外网IP不固定,需要业务放开对所有来源IP使用UDP 8000端口的限制,如无特殊安全问题,建议放开所有UDP端口限制
- 如接入了云渲染SDK,云API返回值中包含RequestId,建议业务后台记录下来用于问题排查
- 应用云渲染服务会根据UserIP选择最优接入区域,不需要业务指定
12.2 "No idle concurrency"错误处理
当调用并发API接口时提示"No idle concurrency",表示所有可用渲染资源或并发槽位当前正在使用中。解决方案:
- 检查已分配的并发槽位或渲染资源数量
- 增加并发购买数量
- 引入排队功能管理用户等待
12.3 接入时间预估
官方提供SDK接入Demo,按文档复用最快1天就能完成接入上线,2-3天搭出一版可演示的Demo。支持通过控制台0开发自定义配置前端页面,亦提供SDK接入Demo。
十三、总结
腾讯云云渲染(CRTR)为开发者提供了一套完整的应用云化解决方案。通过本文的梳理,可以看到整个对接流程清晰可控:
- 开通服务:注册腾讯云账号,开通CRTR服务
- 上传应用:将EXE/APK应用上传至云端,配置启动参数
- 购买并发:根据业务需求选择合适的并发规格和计费模式
- 后台接入:调用云API完成并发分配、会话管理、令牌生成
- 前端接入:集成Web/小程序/iOS/Android SDK,实现音视频流呈现和用户操作回传
大多数基于UE、Unity开发的应用不需要任何改造即可在云端运行。云渲染技术将图形计算需求移到云端,大幅降低终端硬件要求,实现终端轻量化、跨平台无缝衔接和即点即用的用户体验。无论你是游戏开发者、数字孪生厂商还是直播传媒从业者,腾讯云云渲染都能帮助你快速实现业务云化转型。
常见问题问答
问1:接入腾讯云云渲染需要修改我的应用代码吗?
答:大多数基于UE、Unity开发的应用不需要任何改造。CRTR在云端直接运行原始应用包(EXE/APK),SDK只负责建立连接和传输音视频流。
问2:云渲染支持哪些前端平台?
答:腾讯云CRTR提供Web、小程序、iOS、Android四端SDK,覆盖PC浏览器、移动端H5页面、小程序内嵌WebView、原生App等多种场景。
问3:如何估算我需要购买多少并发?
答:所需并发数≈预期同时在线用户数÷单用户占用实例数(通常为1)。1路并发支持1个用户同时访问使用。
问4:云渲染的计费方式有哪些?
答:应用云渲染并发支持预付费包月、包天和预付费资源包三种计费模式。包月适用于平稳型业务,包天和资源包适用于短期活动或弹性业务。
问5:接入云渲染需要多长时间?
答:官方提供SDK接入Demo,按文档复用最快1天就能完成接入上线,2-3天搭出一版可演示的Demo。
问6:云渲染与离线云渲染有什么区别?
答:腾讯云云渲染属于实时云渲染,所有渲染工作都在服务器端运行,并将渲染完毕的画面及声音编码后以音视频流的方式通过网络实时传输给用户。而离线云渲染(渲染农场)是提交渲染任务后等待结果返回,不具备实时交互能力。




