Events 概览
方式一:通过 init 参数传入。
TCGSDK.init({...,onInitSuccess: (res) => {console.log(res);}})
方式二:事件监听。
TCGSDK.on('InitSuccess', (res) => {console.log(res);})
方法 | 描述 |
初始化成功回调,触发此回调之后才能调用后面的 API。 | |
连接成功回调。 | |
连接失败回调,连接断开,重连中会回调该接口。 | |
WebRTC 状态回调。 | |
连接断开回调,断开/被踢触发此回调。 | |
触摸事件回调,移动端适用,移动端触摸事件回调。 | |
页面显隐回调,页面显示/隐藏发生变化,status 包含 visible 以及 hidden。 | |
推流分辨率变化回调。 | |
复合类事件回调。 | |
云手机事件回调。 | |
截图回调,连接成功后会根据 image.interval 间隔时间,截取屏幕画面,并通过 onImageEvent 回调。 |
初始化成功回调
初始化成功回调(InitSuccess),触发此回调之后才能调用后面的 API。
返回值
参数名称 | 类型 | 描述 |
code | Number | code = 0,成功。 code = -1,localOffer 无法获取H264 编码 。 code = -2,peerConnection 未断开,需要先调用 TCGSDK.destroy() 。 |
msg | String | - |
description | String | 相关描述。 |
示例
TCGSDK.on('InitSuccess', (res) => {console.log(res);// 启动TCGSDK.access({instanceId: 'cai-xxxx-xxxx'});});
连接成功回调
连接成功回调(ConnectSuccess)。
示例
TCGSDK.on('ConnectSuccess', (res) => {console.log(res);});
连接失败回调
连接失败回调(ConnectFail),连接断开,重连中会回调该接口。
通常重连时间超过两分钟(例如连接断开/移动端切后台,两分钟后触发重连),系统会自动回收实例,表现为返回 code > 0,建议该情况下重新 init + createSession。
返回值
参数名称 | 类型 | 描述 |
code | Number | code = -3,超出重连次数。 code = -2,自动重连中 。 code = -1,连接失败,触发了限频操作 5s,可稍后再连接。 code > 0,Proxy 返回的重连错误,通常连不上,需重新 init + createSession。 |
msg | String | - |
示例
TCGSDK.on('ConnectFail', (res) => {console.log(res);});
WebRTC 状态回调
WebRTC 状态回调(WebrtcStatusChange)。
返回值
参数名称 | 类型 | 描述 |
code | Number | code = -2,获取 H264 编码失败。 code = -1,setRemoteDescription 失败。 code = 0,成功。 code = 1,系统繁忙。 code = 2,票据不合法。 code = 3,用户带宽不足。 code = 4,资源不足,没有可用机器。 code = 5,session 失效,需要重新登录。 code = 6,媒体描述信息错误。 code = 7,游戏拉起失败。 code = 100,Proxy 错误 。 code = 255,设备不支持 WebRTC。 |
msg | String | - |
示例
TCGSDK.on('WebrtcStatusChange', (res) => {console.log(res);});
连接断开回调
连接断开回调(Disconnect),断开/被踢触发此回调,如果持续连接不上,可以看回调 onConnectFail 相关错误码,在里面完善相关逻辑。
返回值
参数名称 | 类型 | 描述 |
code | Number | code = -2,创建 local offer 失败,需要重新 init + createSession。 code = -1,需要重连,通常出现在码率掉0,收不到推流,连接超时,ICE 断开,SDK 会自动重连。 code = 0,主动关闭。 code = 1,用户重复连接(该消息不可靠)。 code = 2,用户心跳超时,WebRTC 服务端主动断开,这个消息有可能丢失 init + createSession。 |
msg | String | - |
示例
TCGSDK.on('Disconnect', (res) => {console.log(res);});
触摸事件回调
移动端适用,移动端触摸事件回调(TouchEvent),返回 OnTouchEventResponse[],对应当前屏幕触控点数,可根据 array 长度判断多指操作。
返回值
OnTouchEventResponse
参数名称 | 类型 | 描述 |
id | Number | 触控事件的 ID。 |
type | TouchType | 事件类型,可选择 'touchstart','touchmove','touchend','touchcancel' 四种之一。 |
x | Number | 触控点在视频区域内的 x 坐标。 |
y | Number | 触控点在视频区域内的 y 坐标。 |
pageX | Number | 触控点在当前网页内的 x 坐标。 |
pageY | Number | 触控点在当前网页内的 y 坐标。 |
movementX | Number | 触控点相对上次坐标的 x 偏移值。 |
movementY | Number | 触控点相对上次坐标的 y 偏移值。 |
示例
TCGSDK.on('TouchEvent', (res) => {const [{ id, type, pageX, pageY }] = res;TCGSDK.mouseMove(id, type, pageX, pageY);if (type === 'touchstart') {TCGSDK.sendMouseEvent({ type: 'mouseleft', down: true });}if (type === 'touchend' || type === 'touchcancel') {TCGSDK.sendMouseEvent({ type: 'mouseleft', down: false });}});
页面显隐回调
页面显示/隐藏发生变化(VisibilityChange),status 包含 visible 以及 hidden。
返回值
参数名称 | 类型 | 描述 |
status | String | 'visible' | 'hidden' |
示例
TCGSDK.on('VisibilityChange', ({status) => {console.log(status);});
推流分辨率变化回调
推流分辨率变化回调(VideoStreamConfigChange)。
返回值
参数名称 | 类型 |
width | Number |
height | Number |
示例
TCGSDK.on('Disconnect', ({width, height}) => {console.log(width, height);});
复合类事件回调
复合类事件回调(Event)。
返回值
参数名称 | 类型 | 描述 |
type | String | 事件名称 autoplay:自动播放 video_state :视频状态 idle:idle 次数 noflow noflowcenter openurl:云端回传的 URL pointerlockerror:锁定鼠标失败 readclipboarderror:获取剪切板失败 webrtc_stats latency |
data | String | 不同 type可能 data 不同,参考下表。 |
type 对应 data 如下表:
type | data |
autoplay | Object<{code: number; message: string;}> code: 0:success -1:failed |
video_state | Object<{code: number; message: string;}> code : 0:playing 1:pause 2:ended |
idle | Object<{times: number;}> |
noflow | - |
noflowcenter | - |
openurl | Object<{value: string;}> |
pointerlockerror | - |
readclipboarderror | Object<{message?: string;}> |
webrtc_stats | Object<{ bit_rate: number; // 客户端接收的码率,单位:Mbps cpu: number; // 云端 CPU 占用率,单位:百分比 gpu: string; // 云端 GPU 占用率,单位:百分比 delay: number; // 客户端收到图像帧到解码显示的延时,单位:ms,iOS 可能收不到 fps: number; // 客户端显示帧率 load_cost_time: number; // 云端加载时长,单位:ms nack: number; // 客户端重传次数 packet_lost: number; // 客户端丢包次数 packet_received: number; // 客户端收到的包总数 rtt: number; // 客户端到云端,网络端数据包往返耗时 timestamp: number; // 此数据回调的时间戳,单位:ms }> |
latency | Object<{value: number; message: string;}> value: 0:NETWORK_NORMAL 1:NETWORK_CONGESTION 2:NACK_RISING 3:HIGH_DELAY 4:NETWORK_JITTER |
ice_state | Object<{value: string;}> value: connected:已连接 disconnected:连接断开 |
示例
TCGSDK.on('Event', ({type, data}) => {// 云端打开浏览器if (type === 'openurl') {const { value } = data;window.open(value);console.log('openurl', value);}if (type === 'autoplay') {console.log('autoplay', data);}});
云手机事件回调
云手机事件回调(AndroidInstanceEvent)。
返回值
参数名称 | 类型 | 描述 |
type | String | 事件名称 trans_message:云端回传消息 system_usage:系统用量 clipboard_event:剪切板事件 notification_event |
data | String | 不同 type可能 data 不同,参考下表。 |
type 对应 data 如下表:
type | data |
trans_message | Object<{msg: string; package_name: string;}> |
system_usage | Object<{cpu_usage: number; mem_usage: number; gpu_usage: number;}> |
clipboard_event | Object<{text: string; writeText?: boolean}> writeText boolean 是否已写入剪切板 |
notification_event | Object<{package_name: string; title: string; text: string;}> |
system_status | Object<{ nav_visible: boolean; music_volume: number;}> |
示例
TCGSDK.on('AndroidInstanceEvent', ({type, data}) => {console.log('AndroidInstanceEvent', type, data);});
截图回调
截图回调(ImageEvent)连接成功后会根据 image.interval 间隔时间,截取屏幕画面,并通过 onImageEvent 回调。
返回值
参数名称 | 类型 | 描述 |
type | String | 事件名称 'screenshot'。 |
data | String | 不同 type可能 data 不同,参考下表。 |
type 对应 data 如下表:
type | data |
screenshot | Object<{instanceId: string, url: string;}>[] |
示例
TCGSDK.on('ImageEvent', (res) => {console.log(res);});