WEB_RTC SDK 开发指南
文档版本号:20230808-113
变更历史:
版本号 | 日期 | 更新内容 |
---|---|---|
master-6.26 | 2023/8/8 | 1、新增启动参数isIgonreKeyboardEvent,屏蔽sdk内置按键功能 2、新增启动参数isIgonreMouseEvent,屏蔽sdk内置鼠标功能 3、新增Cloudplay.removeCacheCid()方法 |
master-6.14 | 2022/11/22 | 1、新增 Cloudplay.getCapture() arm游戏截图 |
master-6.10.1 | 2022/9/23 | 1、新增更新用户信息和游戏时长方法 2、启动游戏时增加richData字段,供接入方业务控制透传 3、新增国际化 4、新增安卓、微信、QQ、微博分享场景回调agentShare,新增分享事件返回json字段介绍 5、新增 Cloudplay.startHangUp() 开始下载保活 6、新增 Cloudplay.stopHangUp() 结束保活 7、新增 Cloudplay.getBigFileList() 获取文件列表 8、新增 Cloudplay.updateGameUID() 更新用户信息和游戏时长 9、新增 Cloudplay.requestVideoFrameCallback() 注册监听帧变化 10、新增 Cloudplay.removeRequestVideoFrameCallback() 移除监听帧变化 11、新增自定义工具栏参数toolbarDomId 12、videoStreamInfo场景新增frameWidth、frameHeight字段 |
master-6.7.1 | 2022/7/25 | 1、排队场景新增排队总人数 2、sendMessage、getFileList、downLoadFile、cancelDownLoadFile等方法,新增true/false返回值 |
master-6.6 | 2022/6/29 | 1、支持X86游戏播流 2、新增 Cloudplay.captureGameImage() 游戏截图方法 3、新增 Cloudplay.controlPowerDistribute() 控制权分配方法 4、新增 Cloudplay.controlPowerQuery() 控制权查询方法 5、新增 Cloudplay.sendInputSwitch() 输入法切换方法 6、新增 Cloudplay.setMouseMoveRatio() 设置鼠标移动速度方法 |
master-3.30 | 2021/11/23 | 1、WASD等功能键支持随窗口大小变化而改 |
master-3.27 | 2021/9/5 | 1、键位配置说明 2、sdk支持下载功能 3、新增场景回调 newFileAppear、fileList、downLoadFileInfo、cancelDownLoadFail 4、新增接口 获取可下载文件列表 Cloudplay.getFileList(option) 5、新增接口 文件下载Cloudplay.downLoadFile(name,callback) 6、新增接口 取消文件下载 Cloudplay.cancelDownLoadFile(name) 7、新增接口 重置无操作时长计时器 Cloudplay.resetInputTimer() 8、新增启动参数 noInputTimeout |
master-3.21.1 | 2021/7/2 | 1、获取授权码 2、开启直播 3、关闭直播 4、检测是否支持直播 5、获取控制权 |
1 产品简介
欢迎使用海马云游戏服务,本文档主要介绍云游戏Web端SDK的接入流程及提供支持的API详情,开发者通过接入海马云游戏SDK,可以实现云游戏的播放、停止、状态回调等各类控制操作和数据交互,在海马云游戏端到端全栈云服务能力基础上,为用户带来顺畅的云游戏体验。在开始接入SDK前,请确认您已经拥有海马云游戏平台接入方ID并创建了渠道号,并已经完成了在海马云游戏平台上传游戏包等相关准备工作。
2 快速开始
欢迎使用云游戏SDK。为方便Web开发者调试和接入海马云游戏多产品API,这里向您介绍适用于Web开发的接入步骤。
🔘说明:
必须有一个唯一的DOM节点,SDK将在这个节点内加载游戏。
2.1 导入SDK
页面head中引用css及js,请注意文件引用路径是否正确。
代码示例:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>云游戏</title>
<link rel="stylesheet" href="./saas-sdk.css"/>
<script src="./saas-sdk.js"></script>
</head>
<body>
<div id="example"></div>
</body>
</html>
文件名说明
文件名 | 说明 |
---|---|
saas-sdk.css | 云游戏WebSDK依赖的css样式 |
saas-sdk.js | 云游戏WebSDK依赖的js插件 |
2.2 初始化
SDK初始化依赖accessKeyID等字段,请确认配置了正确的数据。
函数原型:
Cloudplay.initSDK({
accessKeyID: '',
channelId: '',
pkg_name: '',
isHideToolBar: false,
onSceneChanged: function(sceneId, extraInfo) {
console.log('sceneId:'+sceneId,extraInfo);
if(sceneId == 'play') {
alert('游戏开始了');
}
if(sceneId == 'vibf') {
alert('画面第一帧加载完成');
}
},
MessageHandler: function(message) {
console.log('got message:',message);
}
});
参数说明
参数 | 类型 | 必填项 | 说明 |
---|---|---|---|
accessKeyID | string | 是 | 接入方唯一ID |
channelId | string | 是 | 接入方自行定义,主要方便接入方推广需要,如一个APK,发布到不同的推广平台时用不同channelId |
pkg_name | string | 是 | 游戏包名称 |
isHideToolBar | boolean | 否 | 是否隐藏toolbar false:不隐藏(默认值) true:隐藏 |
toolbarDomId | string | 否 | 自定义工具栏节点id,(自定义dom需在#example内为子元素,否则窗口缩放时工具栏位置将无法跟随),sdk不处理工具栏位置,需接入方自行调整全屏非全屏工具栏位置 |
onSceneChanged | function | 是 | 场景切换回调函数。详情请参见场景切换回调 |
MessageHandler | function | 否 | 支付消息的回调函数。详情请参见消息回调 |
2.2.1 场景切换回调
游戏过程中的各个场景切换,会通过onSceneChanged回调函数传递,可以在场景回调时进行相应的处理操作。
参数说明
sceneId | sceneId说明 | extraInfo类型 | extraInfo属性名 | extraInfo属性说明 |
---|---|---|---|---|
init | 初始化中 | null | - | - |
play | 开始游戏 | object | cid | 本次游戏的cid |
videoState | 当前播放状态 | |||
videoId | 播放器domId(流类型为H5时为空) | |||
vibf | 游戏画面第一帧 | object | cid | 本次游戏的cid |
stop | 游戏结束 | object | interval | 当次游戏时间,单位为s |
reason | time_limit:本次游戏时间已到 no_operation:无操作超时,默认20分钟,可联系运营人员修改配置 instance_err:云端实例出错 multi_inst:超过实例数的申请上限 queue_limit:排队人数过多,禁止排队 network_off:网络断开 token_expire:token鉴权失败 normal:正常调用 stopSDK:主动停止游戏 low_bitrate:网速太慢 log_off:注销 request_error:ajax请求报错 load_game_failed:游戏加载失败 verify_failed:验证失败 internal_error:内部错误 |
|||
stateChangeReason | 通过调用服务端接口释放游戏时,透传的reason | |||
errorCode | 错误码 | |||
errorCodeWithoutCid | 错误码 | |||
cid | 本次游戏的cid | |||
timeout | 游戏时间结束,但不结束游戏 | object | interval | 本次游戏时间,单位为s |
reason | 提示信息 | |||
remainingTime | 剩余游戏时间 | object | time | 剩余可玩的游戏时间,单位为s |
countDown | true:需要倒计时 false:不需要倒计时 |
|||
wait | 排队 | object | reason | showQueueInfo:显示当前的排队信息 applyGame:排队完成,正在进入游戏 whetherToQueue:是否进入排队,如果进入排队调用Cloudplay.enterQueue(),否则调用Cloudplay.outQueue() |
message | 提示信息 | |||
waitingPeople | 等待人数 | |||
waitingTotalNum | 等待总人数 | |||
waitingTime | 预计等待时间,单位为s | |||
totalTime | 本次可玩游戏时间 | object | time | 单位为s |
message | 提示信息 | |||
evnt | 事件id | object | eventId | 事件id |
qqup | 云上调起了QQ应用 | null | - | - |
flsc | Flash加载 | object | result | 1:成功 0:失败 |
askn | 询问是否排队 | null | - | - |
crtp | 显示自动降低码率tips | object | minimum | 当前码率是否最低码率 0:否 1:是 |
delay_less_minimum | 是否低于最低码率 0:否 1:是 |
|||
crst | 切换码率开始 | object | source | 当前码率 |
des | 目标码率 | |||
cred | 切换码率完成 | object | result | 0:失败 1:成功 |
cur_rate | 当前码率 | |||
method | 自动手动模式 0:手动 1:自动 |
|||
resolutionList | 清晰度列表 | object | list | ist:数组 [{id:,name:}...] |
selected | 当前选中清晰度id | |||
delay | 延迟数据 | object | value | 当前延迟数据,单位为ms |
packetsLost | 丢包率 | object | value | 当前丢包率,格式为百分比 |
openGallery | 打开相册 | - | - | - |
openCamera | 打开摄像头 | - | - | - |
share | 分享 | - | - | - |
startLiveState | 开始直播 | object | result | 0:失败 1:成功 |
msg | 失败提示语 | |||
applyPinCode | 获取授权码 | object | result | 0:失败 1:成功 |
cid | 当前cid | |||
pinCode | 控制权转移所需授权码 | |||
msg | 失败提示语 | |||
endLiveState | 结束直播 | object | result | 0:失败 1:成功 |
msg | 失败提示语 | |||
seizingControl | 获取控制权事件 | object | result | 0:失败 1:成功 |
cid | 控制权抢夺者cid | |||
msg | 失败提示语 | |||
getControl | 获取控制权结果 | object | result | 0:失败 1:成功 |
msg | 失败提示语 | |||
newFileAppear | 有新的可下载文件 | object | image_name | 文件名称 |
fileList | 可下载文件列表 | object | list | 可下载文件列表,[name1,name2...] 排序为倒序 |
downLoadFileInfo | 下载文件状态 | object | success | 下载是否成功 true:成功 false:失败 |
msg | 失败时为错误信息描述 | |||
fileBold | 当前下载文件的二进制流 | |||
fileType | 当前下载文件的类型 | |||
fileSize | 当前下载文件的大小 | |||
fileName | 当前下载文件的名称 | |||
cancelDownLoadFail | 取消下载失败原因 | object | msg | 失败原因描述,只在取消失败时触发,成功不触发 |
videoStreamInfo | 视频流信息 | object | ||
videoFps | 视频帧率,取不到为-1 | |||
bitRate | 视频码率,取不到为-1 | |||
packetsLostRate | 丢包率,取不到为-1 | |||
currentDelayMs | 帧网络耗时,取不到为-1 | |||
decodeDelay | 帧解码耗时,取不到为-1 | |||
renderDelay | 帧渲染耗时,取不到为-1 | |||
frameSize | 帧大小,取不到为-1 | |||
jitterBuffer | 抖动,取不到为-1 | |||
framesReceived | 收到的总帧数,取不到为-1 | |||
receiveFrameSize | 收到帧的总大小,取不到为-1 | |||
delay | 网络延迟,取不到为-1 | |||
codecImplementationName | 编解码器名称,取不到为空字符串 | |||
codecName | 解码器名称,取不到为空字符串 | |||
frameWidth | 视频宽度,取不到为空字符串 | |||
frameHeight | 视频高度,取不到为空字符串 | |||
newBigFile | 新文件通知 | object | fileState | 文件状态。 0:文件开始创建 1:文件创建完成 |
name | 文件名称 | |||
url | 文件下载地址 | |||
type | 文件 | |||
duration | 文件时长(文件类型为视频格式时该属性生效),单位s | |||
size | 文件大小 (单位Byte) | |||
gps | 请求gps信息 | - | - | - |
storage | 云游戏中磁盘空间状态通知 | object | action | 当前Action |
usablePercentage | 当前可用空间占用百分比 | |||
intent | intent消息拦截通知 | - | - | - |
resizeDone | sdk处理resize事件结束 | - | - | - |
inputFocusNotify | 输入框获取焦点和失去焦点通知 | string | - | startIM:0.0000,0.9000:获取焦点及坐标 stopIM:失去焦点 |
playReady | 播流地址已准备就绪 | object | cid | 当前cid |
noInputTimeRemind | 即将到无操作超时提示 | object | noInputRemainingTime | 无操作超时所剩时长,单位s |
message | 提示信息 | |||
sensorList | sensor通知 | array | cmd | sensor开关 1:开启 0:关闭 |
samplingPeriodUs | sensor采样频率,单位μs | |||
sendPeriodMs | 发送sensor数据频率,单位ms | |||
sensorType | sensor对应的type 参考: https://developer.android.google.cn/reference/android/hardware/Sensor |
2.2.2 消息回调
游戏过程中的各种消息,都会通过MessageHandler回调函数传递,可以在消息回调时进行相应的处理操作。
参数说明
参数 | 类型 | 必填项 | 说明 |
---|---|---|---|
userId | string | 否 | 目标userId |
from | string | 是 | 消息发送方标识 |
to | string | 是 | 消息接收方标识 |
mid | string | 是 | 消息ID |
type | int | 是 | 消息类型,固定值为1 |
ack | int | 是 | 应答类型,固定值为0 |
payload | string | 是 | 消息内容 |
2.3 开始游戏
完成初始化设置后即可调用游戏启动接口来启动游戏,请确认游戏包名、渠道号等信息正确,并确保相应游戏已经在海马云平台成功完成游戏包的上架及相关配置信息设定。
函数原型:
Cloudplay.startSDK ('#example',{
userinfo: {
uId: '',
utoken: ''
uType:’’
},
pkg_name: '',
appChannel: '',
c_token: '',
rotate: '',
playingtime: '',
configinfo: '',
priority: 0,
isArchive: '',
extraId: '',
protoData: '',
payStr: ''
});
参数说明
参数名 | 类型 | 必填项 | 说明 |
---|---|---|---|
uId | string | 是 | 自行定义32位以内a-z,0-9字符串 |
utoken | string | 是 | 自行定义32位以内a-z,0-9字符串 |
uType | int | 是 | 0:默认值 5:超级账号 |
pkg_name | string | 是 | 游戏包名称 |
appChannel | string | 否 | 游戏渠道号 |
c_token | string | 是 | 用来校验参数的有效性 |
rotate | boolean | 是 | 游戏的横竖屏属性 true:竖屏游戏 false:横屏游戏 |
playingtime | int | 是 | 用户可以玩的总游戏时间,单位为ms,可联系营运人员配置 |
configinfo | string | 是 | 免登录功能所需信息,如不使用,传任意非空字符串 |
priority | int | 是 | 申请游戏服务的优先级,默认设置为0,值越大优先级越高 |
isArchive | boolean | 否 | 是否存档 true:存档 false:不存档 默认为true |
extraId | string | 否 | 预留字段,传空字符串 |
protoData | string | 否 | 透传字段,服务器端状态同步接口透传使用 |
payStr | string | 否 | 支付相关参数,默认为空字符串 |
archiveFromUserId | string | 否 | 被读取文档用户id |
archiveFromBid | string | 否 | 被读取文档bid |
noInputTimeout | number | 否 | 用户无操作断开时长,单位为s |
cid | string | 否 | 抢夺控制权使用,控制权拥有者cid |
pinCode | string | 否 | 抢夺控制权使用,抢夺控制权授权码 |
viewResolutionWidth | number | 否 | 游戏画面分辨率的宽度 |
viewResolutionHeight | number | 否 | 游戏画面分辨率的高度 |
richData | object | 否 | 接入方业务控制透传参数 |
resolutionId | number | 否 | 清晰度id |
isIgonreKeyboardEvent | boolean | 否 | 是否禁用sdk键盘事件处理 true:禁用 false:不禁用 默认不禁用 |
isIgonreMouseEvent | boolean | 否 | 是否禁用sdk鼠标事件处理 true:禁用 false:不禁用 默认不禁用 |
3 国际化
云游戏内部默认使用中文,若希望使用其他语言,则需要进行多语言设置。以英文为例,在导入SDK的html 中增加英文语言包。
示例代码:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>云游戏</title>
<link rel="stylesheet" href="./saas-sdk.css"/>
<script src="./language/saas-sdk-en-US.js"></script>
<script src="./saas-sdk.js"></script>
</head>
<body>
<div id="example"></div>
</body>
</html>
4 API说明
4.1 停止游戏方法
需要停止游戏时,请调用该接口。
函数原型:
Cloudplay.stopSDK(function(data){
console.log('stopSDK callback:',data);
});
4.2 停止所有游戏方法
停止该用户在云端正在运行的所有游戏。
函数原型:
Cloudplay.stopAll();
4.3 显示/隐藏键位设置菜单方法
切换进入键位设置。默认为不显示键位设置菜单,调用显示键位设置菜单,再次调用隐藏键位设置菜单。
函数原型:
Cloudplay.showKeyboardSet();
4.4 网页内全屏/退出网页内全屏方法(X86不支持)
切换进入网页内全屏状态,或退出网页内全屏。默认为非网页内全屏,切换后为网页内全屏。再次调用为退出网页内全屏。
函数原型:
Cloudplay.webPageFullScreenFn();
4.5 全屏/退出全屏方法
切换进入全屏状态,或退出全屏。 默认为非全屏,切换后为全屏。再次调用为退出全屏。
函数原型:
Cloudplay.fullScreenFn();
4.6 隐藏/显示丢包率方法
切换全屏状态下是否显示丢包率。 默认为显示,切换后为不显示。再次调用为显示。
函数原型:
Cloudplay.showDelayData();
4.7 切换清晰度方法
切换清晰度,传入清晰度id切换到对应的分辨率下。
函数原型:
Cloudplay.switchResolution(id);
参数说明
参数名 | 类型 | 必填项 | 说明 |
---|---|---|---|
id | string | 是 | 需要切换到的清晰度id |
5 进阶API
5.1 获取cid方法
获取当前游戏cid,游戏中调用返回 {cid:”00000000”} 游戏结束后调用返回 {cid:””}。
函数原型:
Cloudplay.getCid()
5.2 开始直播方法
开启直播。 传入房间号与直播推流地址开启直播。
函数原型:
Cloudplay.startLiving(roomId,streamerUrl);
参数说明
参数名 | 类型 | 必填项 | 说明 |
---|---|---|---|
roomId | string | 是 | 直播房间号 |
streamerUrl | string | 是 | 直播推流地址 |
5.3 停止直播方法
关闭直播。 传入房间号关闭直播。
函数原型:
Cloudplay.endLiving(roomId);
参数说明
参数名 | 类型 | 必填项 | 说明 |
---|---|---|---|
roomId | string | 是 | 直播房间号 |
5.4 获取视频流地址域名接口(X86不支持)
游戏中调用该方法返回当前游戏视频流地址域名。
函数原型:
Cloudplay.getStreamingDomain();
5.5 发送消息到服务器方法
用户需要发送消息到服务器时调用这个接口。
该方法会返回一个表示信息是否已发送的布尔值。
函数原型:
Cloudplay.sendMessage(payload);
参数说明
参数名 | 类型 | 必填项 | 说明 |
---|---|---|---|
payload | string | 是 | 发送的数据信息 |
5.6 上传图片到游戏方法(X86不支持)
上传图片到游戏实例相册中。大小限制 1~5120KB。
函数原型:
Cloudplay.upload({
file: files[0],
opType: 'upload_image',
onSuccess: function (opType, file) {
console.log(opType, file)
},
onError: function (opType, message) {
console.log('wxy', opType, message)
}
})
参数说明
参数名 | 类型 | 必填项 | 说明 |
---|---|---|---|
file | File | 是 | 要上传的⽂件 |
opType | string | 是 | ⽬前⽀持类型: upload_image |
onSuccess | function | 是 | 上传成功回调, |
onError | function | 是 | 上传失败回调 |
*onSuccess回调说明 *
参数名 | 类型 | 必填项 | 说明 |
---|---|---|---|
file | File | 是 | 上传成功的原始⽂件 |
opType | string | 是 | ⽬前⽀持类型: upload_image |
*onError回调说明 *
参数名 | 类型 | 必填项 | 说明 |
---|---|---|---|
message | File | 是 | 上传失败的原始⽂件 |
opType | string | 是 | 当前上传类型:upload_image |
5.7 获取可下载图片列表方法(X86不支持)
获取当前可下载图片列表。
函数原型:
Cloudplay.getFileList(option);
参数说明
参数名 | 类型 | 必填项 | 说明 |
---|---|---|---|
size | number | 否 | 图片列表数量,默认为 19 (最大值为20) |
offset | number | 否 | 第一个图片起始位置,默认为0 |
callback(fileList) | function | 否 | 获取图片列表回调函数,同场景“fileList”返回值 |
5.8 下载指定图片方法(X86不支持)
调用方法下载指定图片,下载动作结束时会触发场景回调。该方法会返回一个布尔值,表示下载请求是否已发送。
⚠注意:
使用此功能,须引入<script src=”https://cdn.bootcss.com/crypto-js/3.1.9-1/crypto-js.js">\。
函数原型:
Cloudplay.downLoadFile(name,function(file){});
参数说明
参数名 | 类型 | 必填项 | 说明 |
---|---|---|---|
name | string | 是 | 准备下载的图片名称 |
function(file) | function | 否 | 下载动作结束的回调函数 |
file | object | 否 | 同场景回调 downLoadFileInfo 返回值 |
5.9 取消下载图片方法(X86不支持)
调用接口取消下载图片,下载动作结束时会触发场景回调。
该方法会返回一个表示取消下载请求是否已发送的布尔值。
函数原型:
Cloudplay.cancelDownLoadFile(name);
参数说明
参数名 | 类型 | 必填项 | 说明 |
---|---|---|---|
name | string | 是 | 准备下载的文件名称 |
5.10 获取授权码方法
夺取控制权时使用。
函数原型:
Cloudplay.getPinCode();
🔘说明:
使用控制权转移功能时需要注意,抢夺者需使用被抢夺者cid、accessKeyID,以及被抢夺者提供的pinCode。抢夺控制权为游戏操控权限抢夺,不会重新启动游戏。
5.11 重置无操作时长计时器方法
游戏启动后,重置无操作超时计时器时调用此函数。
函数原型:
Cloudplay.resetInputTimer();
5.12 查询sdk版本号
调用此函数,可以查询sdk当前版本号。
函数原型:
Cloudplay.version();
5.13 游戏截图方法(仅X86支持)
示例代码:
Cloudplay.captureGameImage({
cid: 20153482,
opType: 1,
txId: "a71de3de53",
interval: "",
format: "png",
size: "1",
pixel: "1920x1080",
uploadType: "http",
uploadUrl: "https://www.haimacloud.com/",
}, function({code, errorMsg}){
console.log(code); // 0:请求成功
console.log(errorMsg); // 失败原因
});
参数说明
参数名 | 类型 | 必填项 | 说明 |
---|---|---|---|
cid | String|Integer | 是 | 当前游戏的cid |
opType | Integer | 是 | 业务类型,1-截图,2-开始周期性截图,3-停止周期性截图 |
txId | String | 是 | 事务ID,每次调用传入的值保持唯一性, 消息重发时该字段维持不变 |
interval | String | 是 | 指令间隔 单位毫秒,默认1000,最小1000毫秒,最大60000毫秒,代表间隔n毫秒执行一次截图。 当opType等于2时该字段有效 |
format | String | 是 | 图片格式,如:png |
size | String | 是 | 单张图片大小,单位MB, 默认1 当opType等于1或2该字段有效 |
pixel | String | 是 | 分辨率,格式宽x高, 默认1920x1080 当opType等于1或2该字段有效 |
uploadType | String | 是 | 图片上传协议类型,缺省为:http |
uploadUrl | String | 是 | 图片上传地址, 由租户业务侧指定,必须是post请求 |
5.14 控制权分配方法(仅X86支持)
示例代码:
Cloudplay.controlPowerDistribute({
cid: 20153482,
controlInfos: [{cid:"156315615", position: 1},{cid:"841651561", position: 0}]
}, function({code, controlInfos, errorMsg}){
console.log(code); // 0:请求成功
console.log(controlInfos); // 分配结果
console.log(errorMsg); // 失败原因
});
参数说明
参数名 | 类型 | 必填项 | 说明 |
---|---|---|---|
cid | String|Integer | 是 | 当前主控游戏的cid |
controlInfos | Object[] | 是 | 分配数据,cid: 主控或从控的cid;position:控制权位置 |
5.15 控制权查询方法(仅X86支持)
示例代码:
Cloudplay.controlPowerQuery({
cid: 20153482,
}, function({code, controlInfos, errorMsg}){
console.log(code); // 0:请求成功
console.log(controlInfos); // 分配结果
console.log(errorMsg); // 失败原因
});
参数说明
参数名 | 类型 | 必填项 | 说明 |
---|---|---|---|
cid | String|Integer | 是 | 当前主控游戏的cid |
5.16 输入法切换方法(仅X86支持)
示例代码:
Cloudplay.sendInputSwitch();
5.17 设置鼠标移动速度方法(仅X86支持)
示例代码:
Cloudplay.setMouseMoveRatio(ratio);
参数说明
参数名 | 类型 | 必填项 | 说明 |
---|---|---|---|
ratio | Float | 是 | 移动速度值:0.1 — 0.9 |
5.18 更新用户信息和游戏时长方法
在用户转换身份时,更新云玩用户的相关信息和游戏时长,并能够继续云玩
示例代码:
Cloudplay.updateGameUID(data, callback);
参数说明
参数 | 类型 | 必填项 | 说明 |
---|---|---|---|
data | object | 是 | 需要更新的信息,详见data参数说明 |
callback | function | 是 | 更新用户信息和游戏时长之后回调函数 |
data参数说明
参数 | 类型 | 必填项 | 说明 |
---|---|---|---|
playingTime | number | 是 | 游戏时长(单位:ms) |
userInfo | object | 是 | 用户信息 |
cToken | string | 是 | 更新的 cToken,用来校验参数的有效性 |
tip | string | 否 | totalTime 场景回调的提示信息 |
回调函数参数说明
参数 | 类型 | 必填项 | 说明 |
---|---|---|---|
code | number | 是 | 状态码(0: 成功) |
msg | string | 是 | 提示信息 |
5.19 云游戏中远端实例状态通知(X86不支持)
用户在云游戏中安卓分享、微信分享、QQ分享、微博分享,SDK透传场景值agentShare。
示例代码:
function sceneChanged(sceneId, extraInfo) {
if (sceneId == 'agentShare') {
console.log('sceneId: agentShare ', extraInfo);
}
}
分享事件返回json字段说明
key | value | 说明 |
---|---|---|
cid | String | 本次云玩cid |
bid | String | 本次云玩bid |
mid | String | 本次云玩mid |
action | String | 分享事件的action |
componentName | String | Intent 指定的组件 |
pkgName | String | intent指定包名,如系统分享指定包名进行分享 |
content | String | 分享的文本内容 |
fileList | Array | [/xxx/xxx/a.png,xxx/xxx/b.png],当分享图片的时候,由fileList返回,包含了每张图片的绝对路径信息,支持多张图片信息 |
scene | String | 微信分享的类型。好友分享、朋友圈分享,不是微信分享则为空。 friend:好友分享 moment:为朋友圈分享 android:分享无需传值 |
type | String | android_share:安卓系统分享事件 weixin_share:微信分享事件 weibo_share:微博分享事件 qq_shareQQ:分享事件 |
shareType | String | SHARE_IMAGE_WITH_TEXT:图文 SHARE_IMAGE_ONLY:纯图片 SHARE_TEXT:纯文本 SHARE_VIDEO:视频 share_link:链接 |
title | String | 分享的标题 |
extraInfo | String | webUrl:链接分享 mimeType:系统分享 videoUrl:视频分享 share_qq_ext_str:扩展字段 |
5.20 开始下载保活方法(X86不支持)
当需要下载文件时,调用Cloudplay.startHangUp()
,开始下载保活。
示例代码:
Cloudplay.startHangUp({
downloadList: ["fileName"],
hangUpTime: 60,
Cutoff: false
}, function (options) {
console.log(options);
})
5.21 结束保活方法(X86不支持)
需要结束下载保活状态时,调用Cloudplay.stopHangUp()
方法,结束当前下载保活,如果调用开始下载保活时选择的是断流模式,会恢复推流。
示例代码:
Cloudplay.stopHangUp(function (options) {
console.log("stopHangUp", options)
})
5.22 获取文件列表方法(X86不支持)
调用Cloudplay.getBigFileList()
获取文件列表。调用Cloudplay.getBigFileList()
方法后会通过回调函数返回当前可以下载的文件列表。
示例代码:
Cloudplay.getBigFileList(function (fileList) {
console.log(fileList);
});
5.23 注册监听帧变化方法
当需要监听帧变化时,调用Cloudplay.requestVideoFrameCallback()
,开始注册监听事件。
示例代码:
Cloudplay.requestVideoFrameCallback(function (options,frameInfo) {
console.log(options,frameInfo);//frameInfo为帧相关参数,受浏览器版本限制,非固定返回值,会缺失。
})
回调函数参数说明
参数 | 类型 | 必填项 | 说明 |
---|---|---|---|
code | number | 是 | 状态码。 0:正常 1:浏览器不支持 2:当前流类型不支持 |
number | number | 是 | 自增序号,number类型 |
timestamp | number | 是 | 当前帧对应的时间戳 |
isRestart | boolean | 是 | 是否重新开始播放视频 |
5.24 移除监听帧变化方法
当需要结束帧变化监听事件时,调用Cloudplay.removeRequestVideoFrameCallback()
,移除监听。
示例代码:
Cloudplay.removeRequestVideoFrameCallback()
5.25 发送消息到云端方法
当需要发送消息到云端时,调用Cloudplay.sendWSMessage(option)
,发送消息到游戏。该方法会返回一个布尔值,表示内容是否已发送。
示例代码:
Cloudplay.sendWSMessage({
type: 'clipboard',
data: [{itemType: 'text/plain', itemData: 'abc'}], // 剪切板
//data:{longitude: 116.23128, latitude: 40.22077}, // gps
mid: (Math.random() * 1000000).toString().replace('.', ''),
callback: function (messageId, successed, message) {
console.log('sendWSMessage id: ' + messageId + ', result: ' + successed + ', description: ' + message);
}
}
);
参数说明
参数 | 类型 | 必填项 | 说明 |
---|---|---|---|
type | String | 是 | 消息类型,目前支持:clipboard剪贴板、gps、intent |
data | Array | 是 | 发送的内容,根据消息类型自定义 |
mid | String | 是 | 消息唯一ID |
callback | function | 是 | 发送结果回调 |
*onSuccess回调说明 *
参数 | 类型 | 必填项 | 说明 |
---|---|---|---|
messageId | String | 是 | 发送是填入的消息ID |
successed | Boolean | 是 | 是否发送成功 |
message | String | 是 | 发送结果说明 |
5.26 arm游戏截图
当需要对游戏画面进行截图时,调用Cloudplay.getCapture()
,进行游戏截图。
示例代码:
Cloudplay.getCapture({
zoom:0.3,
callback:function(file){}
})
参数说明
参数 | 类型 | 必填项 | 说明 |
---|---|---|---|
zoom | number | 否 | 准备下载的图片名称 |
callback | function | 是 | 截图动作结束的回调函数 |
file | arrayBuffer | 是 | 当前下载文件的二进制流 |
5.27 发送操作指令到实例端
示例代码:
Cloudplay.sendMessageToRom(str)
5.28 当前页面播流
当申请游戏时传入了onlyApply,并且想在当前页面进行播流时使用Cloudplay.startPlayer()进行播流,新页面播流时,在新页面启动参数传入cid即可。
示例代码:
Cloudplay.startPlayer();
5.29 发送sensor信息
在触发场景回调中的sensorList
场景时,可使用Cloudplay.sendSensorData()
方法将本地采集到的sensor数据发送到游戏,发送间隔需要使用sensorList
场景中下发的sendPeriodMs
字段。
示例代码:
Cloudplay.sendSensorData({
"accuracy": 3,
"sensorType": 1,
"values": [0.1563701, 0.073616914, 9.840504]
});
参数说明
参数 | 类型 | 必填项 | 说明 |
---|---|---|---|
accuracy | number | 是 | 精度类型 |
sensorType | number | 是 | sensor类型,通过sensorList 场景查看当前游戏需要的类型 |
values | array | 是 | sensor数据分别是X、Y、Z |
5.30 重置无操作超时计时器
在触发场景回调中的noInputTimeRemind
场景时,可使用Cloudplay.resetInputTimer()
方法将无操作计时器进行重置。
示例代码:
Cloudplay.resetInputTimer();
5.31 移除缓存中的cid
当需要清理session中的cid时,可使用Cloudplay.removeCacheCid()
方法将session中的cid进行移除。此方法必须在初始化(Cloudplay.initSDK()
)之后,开始游戏(Cloudplay.startGame()
)之前调用。
示例代码:
Cloudplay.removeCacheCid();
6 场景说明(X86不支持)
6.1 排队管理
实例数不足时,会发生排队现象。通过SDK提供的方法,可以让用户选择是否进入排队队列,具体过程如下图所示。
示例代码:
function sceneChanged(sceneId, extraInfo) {
if (sceneId == 'wait' && extraInfo.reason == 'whetherToQueue') {
var queueOrNot = confirm("是否进入排队");//可以设计漂亮UI提示代替这部分内容
if (queueOrNot == true) {
Cloudplay.enterQueue();
} else {
Cloudplay.outQueue();
}
}
}
6.2 游戏时间
启动游戏时,可以设定可玩游戏时间。当可玩游戏时间用尽,系统会停止游戏,并通过回调函数通知SDK。可玩游戏时间可以通过Cloudplay.startSDK()中的playingtime来设置,单位为ms。
示例代码:
Cloudplay.startGame('example', {
pkgName: testPackageName,
userInfo: {
uId: testUserId,
uToken: testUserToken,
uType: 0
},
priority: 0,
extraId: '',
playingtime: 3600,
configInfo: 'a',
cToken: generateCToken(),
isArchive: false,
isPortrait: false,
appChannel: testAppChannel
});
在游戏过程中,可能收到sceneId为totalTime、remainingTime、timeout等场景,收到这些场景时,可以给用户相应的消息提示:
- totalTime:本次游戏可玩时长。
- remainingTime:游戏剩余时间。
- timeout:游戏时间结束,但不结束游戏。
示例代码:
function sceneChanged(sceneId, extraInfo) {
if (sceneId == 'totalTime') {
alert('你本次游戏可玩时长' + extraInfo.time + '秒。');
}
if (sceneId == 'remainingTime') {
alert('你的游戏时间还剩' + extraInfo.time + '秒。');
}
if (sceneId == 'timeout') {
alert('你已经玩了' + extraInfo.interval + '秒,游戏时间已用完。');
}
}
6.3 检测进行中的游戏
检测当前用户在云端运行的游戏,根据cid信息可进行启动游戏或者停止游戏操作。
示例代码:
function sceneChanged(sceneId, extraInfo) {
if (sceneId == 'stop' && extraInfo.reason == 'instanceLimit') {
//用户启动实例超限制时的场景
Cloudplay.checkPlayingGame({
//检测该用户在云端正在进行中的游戏
userInfo: {
uId: 'hmTest01',
uToken: 'hmTest',
uType: 0
},
playingGame: function (res) {
if (res.code == 0 && res.playingGame.length > 0) {
// 用户在云端有正运行的实例
var startGameData = {
userInfo: {
uId: "hmTest01",
uToken: "hmTest",
uType: 0
},
priority: 0,
extraId: '',
playingtime: 0,
configinfo: 'a',
isArchive: false,
rotate: false,
cid: res.playingGame[0].cid, // 处理请查询返回的数据
pkg_name: res.playingGame[0].pkgName, // 处理请查询返回的数据
appChannel: res.playingGame[0].appChannel, // 处理请查询返回的数据
c_token: generateCToken() //根据查询的数据生成cToken,生成cToken方法请参看demo
}
Cloudplay.startSDK('#example', startGameData); //利用查询的数据启动游戏
}
},
});
}
}
6.4 将游戏切换到前台
场景描述:
- 用户点击“与QQ好友玩”按钮后,QQ应用会被调起并在前台显示。
- QQ登录可能失败或用户不想继续登录,这时候系统不会把游戏切换到前台,需要接入方提供一个按钮,通过调用Cloudplay.bringUpApp()方法,把游戏切换到前台,并控制按钮的状态。
- QQ登录成功后,系统自动把游戏切换到前台,游戏在前台的时候,调用Cloudplay.bringUpApp(),不会有任何其它影响。
函数原型:
Cloudplay.bringUpApp()
示例代码:
var oBackBtn = document.getElementById('back_btn');
oBackBtn.onclick = function(){
Cloudplay.bringUpApp();
oBackBtn.style.display = "none";
sessionStorage.removeItem("qqupState");
}
6.5 QQ登录接入过程说明
用户在云游戏点击“与QQ好友玩”按钮后,SDK会通过接入方提供的onSceneChanged回调函数,通知接入方用户进入了 QQ 登录界面,此时接入方收到“qqup”消息后,提示用户QQ登录、以及QQ登录异地登录风控等信息。
示例代码:
var oBackBtn = document.getElementById('back_btn');
onSceneChanged: function(sceneId, extraInfo) {
if(sceneId == "qqup" || sessionStorage.getItem("qqupState")){
sessionStorage.setItem("qqupState", "true");
oBackBtn.style.display = "block";
// QQ登录 do something;
}
}