API接口说明
本文档描述了云手机 Web H5 SDK 提供的接口。
API概览
初始化
初始化用户信息参数、云手机链接参数。
const engine = new ArmcloudEngine(params)
params 字段描述如下:
关键字 | 值类型 | 是否必填 | 说明 |
---|---|---|---|
deviceInfo | object | 是 | 连接云手机所需信息 |
viewId | string | 是 | 页面挂载点的 div 元素 ID |
callbacks | object | 否 | 回调函数集合,详见回调函数详细说明 |
deviceInfo 字段描述如下:
关键字 | 值类型 | 是否必填 | 说明 |
---|---|---|---|
appId | string | 是 | 从后台服务申请实例返回的结果 |
roomCode | string | 是 | 从后台服务申请实例返回的结果 |
roomToken | string | 是 | 从后台服务申请实例返回的结果 |
clientId | string | 是 | 房间号 |
userId | string | 是 | 用户id |
autoRecoveryTime | number | 否 | 无操作回收时间,范围 1s~7200s,默认值:300 |
isFullScreen | number | 否 | 是否全屏 0:自适应缩放(非全屏);1:填充屏幕(全屏),默认值:1 |
mediaType | number | 否 | 媒体流类型 1:只控制音频 2:只控制视频 3:同时控制音频和视频,默认值:3 |
rotateType | number | 否 | 旋转屏幕 0:竖屏, 1:横屏,默认值:0 |
keyboard | string | 否 | 键盘类型 'local':本机键盘,'pad':云机键盘,默认值:'pad' |
云机操控接口
方法名 | 方法描述 |
---|---|
isSupported | 浏览器是否支持RTC服务 |
start | 加入房间 |
stop | 离开房间 |
setKeyboardStyle | 切换本地/云机输入法类型 |
setStreamConfig | 设置分辨率,码率,帧率 |
resumeAllSubscribedStream | 恢复接收来自远端的媒体流 |
pauseAllSubscribedStream | 暂停接收来自远端的媒体流 |
saveScreenShotToLocal | 截图保存到本地 |
saveScreenShotToRemote | 截图保存到云机 |
setPhoneRotation | 设置横竖屏播放 |
setGPS | 自定义GPS信息 |
setAutoRecycleTime | 设置无操作回收时间 |
getAutoRecycleTime | 获取无操作回收时间 |
sendCommand | 发送按键指令 |
muted | 静音 |
unmuted | 取消静音 |
increaseVolume | 云机音量增加 |
decreaseVolume | 云机音量减少 |
sendInputClipper | 将字符串发送到云手机的粘贴板中 |
sendInputString | 将字符串发送到云手机的输入框中 |
saveCloudClipboard | 是否接收云机粘贴板内容回调 |
sendShake | 发送摇一摇指令 |
setMicrophone | 是否开启麦克风 |
setCamera | 是否开启摄像头 |
executeAdbCommand | 执行ADB命令 |
joinGroupRoom | 群控加入房间 |
kickItOutRoom | 踢出群控房间 |
API详情
云机操控接口
浏览器是否支持
方法:
engine.isSupported()
类型:
() => Promise<boolean>
// true: 支持,false: 不支持
代码示例:
// 浏览器是否支持rtc服务监听
const isSupported = await armCloud.value.isSupported();
if (!isSupported) {
showNotify({
type: "warning",
message: "该浏览器不支持RTC服务"
});
return false;
}
加入房间
参数:
isGroupControl 是否开启群控 类型:boolean 值:false
pads 需要被群控的房间号 类型:Array 值:默认[]
方法:
engine.start(isGroupControl,pads)
离开房间
方法:
engine.stop()
注意:stop()方法会销毁引擎及过程中所创建的dom节点,如果有切换云机需求,需在每次new ArmcloudEngine()之前先调用stop().
切换本地/云机输入法类型
方法:
engine.setKeyboardStyle(keyboard: string)
参数:
keyboard 类型:string 值:local: 本地输入法,pad:云机虚拟输入法
代码示例(根据实际情况自行修改):
engine.setKeyboardStyle('pad');
设置分辨率,码率,帧率
方法:
engine.setStreamConfig(definitionConfig: CustomDefinition)
参数:
definitionConfig 类型:object 值:
字段名 | 描述 |
---|---|
definitionId | 分辨率 7:144 * 256; 8:216 * 384; 9:288 * 512; 10:360 * 640; 11:480 * 848; 12:540 * 960; 13:600 * 1024; 14:480 * 1280; 15:720 * 1280; 16:720 * 1920; 17:1080 * 1920; 18:1440 * 1920; 19:1600 * 2560; 20:2880 * 1080 |
framerateId | 帧率 1:20fps; 2:25fps; 3:30fps; 4:60fps; 5:1fps; 6:5fps; 7:10fps; 8:15fps; 9:2fps |
bitrateId | 码率 1:1Mbps; 2:1.5Mbps; 3:2Mbps; 4:2.5Mbps; 5:3Mbps; 6:3.5Mbps; 7:4Mbps; 8:5Mbps; 9:6Mbps; 10:8Mbps; 11:10Mbps; 12:12Mbps; 13:200kbps; 14:400kbps; 15:600kbps |
代码示例(根据实际情况自行修改):
const definitionConfig = ref({
definitionId: 12,
framerateId: 2,
bitrateId: 3
});
engine.setStreamConfig(definitionConfig.value);
恢复接收来自远端的媒体流
方法:
engine.resumeAllSubscribedStream(mediaType: number)
参数
mediaType 类型:number 值: 1: 恢复音频拉流; 2: 恢复视频拉流; 3: 恢复音视频拉流;
代码示例(根据实际情况自行修改):
// 恢复音频拉流
engine.resumeAllSubscribedStream(1);
暂停接收来自远端的媒体流
方法:
engine.pauseAllSubscribedStream(mediaType: number)
参数
mediaType 类型:number 值: 1: 暂停音频拉流; 2: 暂停视频拉流; 3: 暂停音视频拉流;
代码示例(根据实际情况自行修改):
// 暂停音频拉流
engine.pauseAllSubscribedStream(1);
截图保存到本地
方法:
engine.saveScreenShotToLocal()
返回值:
类型: Promise<ImageData>
代码示例(根据实际情况自行修改):
engine.saveScreenShotToLocal().then(res => {
const imageData = res;
// 创建 canvas 元素
const canvas: HTMLCanvasElement = document.createElement("canvas");
canvas.width = imageData.width;
canvas.height = imageData.height;
const ctx = canvas.getContext("2d");
// 将图像数据绘制到 canvas 上
ctx.putImageData(imageData, 0, 0);
// 将Canvas转换为图片并保存到本地
const link = document.createElement("a");
// 使用Canvas的toDataURL()方法将Canvas转换为base64编码的图片URL
link.href = canvas.toDataURL();
// 设置下载的文件名
link.download = "image.png";
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
});
截图保存到云机
方法:
engine.saveScreenShotToRemote()
代码示例:
engine.saveScreenShotToRemote();
设置横竖屏播放
方法:
engine.setPhoneRotation(type: number)
参数
type 类型:number 值:0: 竖屏,1: 横屏
代码示例(根据实际情况自行修改):
// 设置横屏
engine.setPhoneRotation(1);
自定义GPS信息
方法:
engine.setGPS(longitude: number, latitude: number)
参数
longitude 经度 类型:number
latitude 纬度 类型:number
代码示例(根据实际情况自行修改):
// 设置经纬度坐标
engine.setGPS(113, 28);
设置无操作回收时间
方法:
engine.setAutoRecycleTime(second: number)
参数
second 类型:number 值:默认300s,范围 1s~7200S
代码示例(根据实际情况自行修改):
engine.setAutoRecycleTime(300);
获取无操作回收时间
方法:
engine.getAutoRecycleTime()
返回值:
类型: Promise<number>
代码示例:
const time = engine.getAutoRecycleTime();
console.log(time)
发送按键指令
方法:
engine.sendCommand(command: string)
参数
command 类型:string 值:back:back指令,home:home指令,menu:menu指令
代码示例(根据实际情况自行修改):
// 发送home键指令
engine.sendCommand("home");
静音
方法:
engine.muted()
代码示例:
engine.muted();
取消静音
方法:
engine.unmuted()
代码示例:
engine.unmuted();
云机音量增加
方法:
engine.increaseVolume()
代码示例:
engine.increaseVolume();
云机音量减少
方法:
engine.decreaseVolume()
代码示例:
engine.decreaseVolume();
将字符串发送到云手机的粘贴板中
方法:
engine.sendInputClipper(text: string)
代码示例:
// 该操作只会将复制内容粘贴到云机粘贴板中,若需使用需在云机输入框中长按粘贴
const text = 'hello world'
engine.sendInputClipper(text);
将字符串发送到云手机的输入框中
方法:
engine.sendInputString(text: string)
代码示例:
// 该操作在云机输入框聚焦时,会自动将复制内容发送到输入框中,不需要长按粘贴操作
const text = 'hello world'
engine.sendInputString(text);
注意:该操作只会将文本内容发送至输入框中,不会将内容粘贴到云机剪切板中,若需要,需手动调用 engine.sendInputClipper(text) 方法
是否接收云机粘贴板内容回调
方法:
engine.saveCloudClipboard(flag: boolean)
参数
flag 类型:boolean 值:true: 接收云机粘贴板内容回调,false: 不接收云机粘贴板内容回调
代码示例:
// 该操作在云机输入框聚焦时,会自动将复制内容发送到输入框中,不需要长按粘贴操作
const flag = true
engine.saveCloudClipboard(flag);
发送摇一摇指令
方法:
engine.sendShake(time: number)
参数
time 类型:number 值:毫秒 默认:1500
代码示例:
// 时间太长可能导致多次截屏
engine.sendShake(1500);
是否开启麦克风
方法:
engine.setMicrophone(enable: boolean)
参数
enable 类型:boolean 默认:true
代码示例:
engine.setMicrophone(true);
是否开启摄像头
方法:
engine.setCamera(enable: boolean)
参数
enable 类型:boolean 默认:true
代码示例:
engine.setCamera(true);
执行ADB命令
方法:
engine.executeAdbCommand(command: string)
参数
command 类型:string
代码示例:
engine.executeAdbCommand('cd /;ls');
群控加入房间
方法:
engine.joinGroupRoom(pads)
参数
pads 类型:Array
代码示例:
engine.joinGroupRoom(['ACXXXX','ACXXXX']);
踢出群控房间
方法:
engine.kickItOutRoom(pads)
参数
pads 类型:Array
代码示例:
engine.kickItOutRoom(['ACXXXX','ACXXXX']);