Skip to content

Web SDK 集成与使用步骤 ​

Web 端云手机投屏与实时操控 SDK。

一、安装与引入 ​

js
npm install @vmaos/web-cast-sdk

import { UniSDK } from '@vmaos/web-cast-sdk/uni-sdk';

二、初始化配置 ​

属性描述是否必填
mountedElement挂载节点,支持 HTMLElement 实例或选择器/节点 ID。必填
connectConfigWebRTC 连接配置信息,通过后端 / SDK 提供的连接配置接口获取。必填
isGroup是否开启群控。默认为 false。可选
enabledDebug是否开启调试模式/日志输出。默认为 false。可选
disabledVerticalSwipe是否阻止竖向滑动。默认为 false。可选
disabled是否禁用键盘事件处理。默认为 false。可选
enabledIMEKeyboard是否开启 IME 输入法键盘映射。默认为 false。可选
enabledDecode是否开启解码渲染(Canvas)。默认为 false。可选
cursorType鼠标形状样式,默认为 default。可选值及对应枚举:
• default: UniSDK.CURSOR_TYPE.DEFAULT_CURSOR
• circle: UniSDK.CURSOR_TYPE.CIRCLE_CURSOR
• triangle: UniSDK.CURSOR_TYPE.TRIANGLE_CURSOR
可选
cloudDeviceSize云机屏幕尺寸,格式为 { width, height }。可选
videoAngle视频旋转角度。可选
remoteViewBackgroundColor远程视图背景色。默认为 transparent。可选

三、实例方法 ​

方法描述
goHome返回首页(对应 Android Home 键)
goTask任务列表(对应 Android 任务键)
goBack返回(对应 Android 返回键)
enableAudio开启音频
disableAudio禁用音频
sendClipboardData发送剪切板数据
openIMEKeyboard开启键盘映射
closeIMEKeyboard关闭键盘映射
switchToGestureNavigation切换手势导航
switchToThreeButtonNavigation切换三按钮导航
changeLevel设置清晰度,通过 UniSDK.CLARITY_LEVEL 访问对应的支持清晰度,目前支持流畅、标清、超清
setVideoAngle设置视频旋转角度
getVideoAngle获取视频旋转角度
setStreamAngle设置流角度
setCloudDeviceSize设置云机屏幕尺寸
destroy销毁 SDK 实例

四、事件监听 ​

通过 player.addListener(event, callback) 进行监听,事件枚举通过 UniSDK.EVENTS 访问:

事件枚举回调参数描述
CONNECTED-建立连接成功
LOADED_SUCCESS-投屏加载成功
LOADED_FAILUREerror: any投屏加载失败
STOP_CONNECT-连接断开
STATISTIC_INFOinfo: StatisticInfo实时统计信息更新(含 framesPerSecond、bitrate、lostRate、currentRoundTripTime、averageDecodeTime)
CLARITY_LEVEL_CHANGElevel: number清晰度变更通知
DIRECTION_CHANGEangle: number云机屏幕方向变更通知(竖屏为 0,横屏为 -90)
RESIZEscreen: { screenWidth, screenHeight }云机分辨率变更通知
GESTURE_MODE_CHANGEmode: number云机导航模式变更通知(0 三按钮导航,2 手势导航)
RECEIVE_MEDIA_STREAM_TRACKtrack: MediaStreamTrack接收到媒体流轨道
RECEIVE_ARRAY_BUFFERbuffer: ArrayBuffer接收到二进制数据
CLICK_DATAdata: ChannelDataType点击数据
CHANNEL_EVENT-通道事件
GROUP_CONTROL_EVENT-群控事件
ERRORerror: Error投屏相关错误

五、错误码 ​

错误码描述等级
10001WebSocket 连接失败高
10002WebSocket 已关闭高
10003创建 offer 失败高
10004处理 offer 失败高
10005创建 answer 失败高
10006处理 answer 失败高
10007设置本地描述失败高
10008设置远端描述失败高
10009处理 ICE 交换失败高
10010ICE 状态异常高
10011摄像头异常高
10012云机已关机或者不存在高
10013信令通道错误低
10014WebRTC 统计信息获取失败低

六、完整示例 ​

ts
const config = {}; // 通过提供的连接配置接口获取 connectConfig 配置

const player = new UniSDK({
    mountedElement: "#player-mounted",  // 挂载节点,可以是 HTMLElement 或者节点 ID
    isGroup: false, // 群控模式,默认 false
    disabled: true, // 禁用键盘事件
    enabledDebug: process.env.NODE_ENV !== 'production', // 开发环境下开启日志,默认 false
    disabledVerticalSwipe: false, // 是否阻止竖向滑动,默认 false
    enabledIMEKeyboard: false,     // 是否开启键盘映射,默认 false
    cursorType: UniSDK.CURSOR_TYPE.CIRCLE_CURSOR, // 光标类型,默认 default
    connectConfig: {
      ...config
    }
});

player.addListener(UniSDK.EVENTS.CONNECTED, () => {
    console.log('建立连接');
});

player.addListener(UniSDK.EVENTS.LOADED_SUCCESS, () => {
    console.log('投屏成功');
});

player.addListener(UniSDK.EVENTS.LOADED_FAILURE, (error: any) => {
    console.log('投屏失败', error);
});

player.addListener(UniSDK.EVENTS.STATISTIC_INFO, (info: any) => {
    console.log('统计信息', info); // 统计字段见事件监听一节
});

player.addListener(UniSDK.EVENTS.CLARITY_LEVEL_CHANGE, (level: number) => {
    console.log('清晰度更新', level);
});

player.init();

OpenAPI Docs