Interface Room<CALLBACKS>
Room
接口继承了 Displayer
接口,并且增加了用于操作互动白板实时房间的属性。
Properties
calibrationTimestamp
calibrationTimestamp: number
与服务器时钟校准后的当前时间戳,单位为毫秒。
callbacks
callbacks: Callbacks<CALLBACKS>
回调函数。你可以通过如下方式设置回调函数:
// 监听到 onSliceChanged 回调
function sliceChangeCallback(slice) {
}
// 注册回调函数
displayer.callbacks.on("onSliceChanged", sliceChangeCallback);
// 注销回调函数
displayer.callbacks.off("onSliceChanged", sliceChangeCallback);
// 仅仅回调一次
displayer.callbacks.once("onSliceChanged", function(slice) {
});
canRedoSteps
canRedoSteps: number
可重做次数。即此时此刻,还可以调用多少次 redo 方法。
canUndoSteps
canUndoSteps: number
可撤销次数。即此时此刻,还可以调用多少次 undo 方法。
deviceType
deviceType: DeviceType
该客户端的设备类型,决定 SDK 如何处理鼠标事件和触碰事件。
disableCameraTransform
disableCameraTransform: boolean
是否禁止用户通过触屏手势或鼠标滚轮调整视角(即移动或缩放视角):
-
true
:禁止用户调整视角。 -
false
:(默认)允许用户调整视角。
Note
该属性不影响 setCameraBound
、moveCamera
、moveCameraToContain
方法的使用。
disableDeviceInputs
disableDeviceInputs: boolean
是否禁止用户通过鼠标、键盘、触摸屏幕操作白板工具。
-
true
: 禁止用户操作白板工具。 -
false
:允许用户操作白板工具。
该方法与 isWritable
的区别详见《禁止设备操作|禁止操作》。
disableEraseImage
disableEraseImage: boolean
是否关闭橡皮擦擦除图片功能。
-
true
: 关闭橡皮擦擦除图片功能。 -
false
:启用橡皮擦擦除图片功能。
disableOthersSelectingBox
disableOthersSelectingBox: boolean
是否隐藏其他人的鼠标移动到白板组件上时显示的高亮框。
-
true:隐藏高亮框。
-
false:(默认)不隐藏高亮框。
Note
该属性不影响自己的高亮框显示。
disableSerialization
disableSerialization: boolean
是否禁止本地序列化。
-
true
: 禁止本地序列化。 -
false
:允许本地序列化。
设置 disableSerialization(true)
后,以下方法将不生效:
-
redo
-
undo
-
duplicate
-
copy
-
paste
-
Web SDK 2.9.3 或之后版本
-
Android SDK 2.9.3 或之后版本
-
iOS SDK 2.9.3 或之后版本
enableWriteNow
enableWriteNow: boolean
用户当前是否有写的权限:
-
true:有写的权限。
-
false:没有写的权限。
handToolActive
handToolActive: boolean
报告抓手工具是否启用:
-
true
:启用抓手工具。 -
false
:不启用抓手工具。
handToolKey
handToolKey: string | undefined
抓手工具的快捷键。用户可以使用抓手工具拖动页面。如果设为 undefined
,表示不启用快捷键功能。
isWritable
isWritable: boolean
用户在当前房间是否为互动模式:
-
true
: 互动模式,即对白板具有读写权限。 -
false
:订阅模式,即对白板具有只读权限。
observerId
observerId: number
用户 ID。
-
在实时房间中,指本地用户的用户 ID。
-
在回放房间中:
-
当用户的
ObserverMode
为Directory
时,observerId
为被跟随的用户的用户 ID。 -
当用户的
ObserverMode
为Freedom
时,为AdminObserverId
。
-
region
region: string
数据中心。支持传入以下值:
region | 数据中心 | 服务区 |
---|---|---|
us-sv | 美国硅谷 | 北美洲、南美洲 |
sg | 新加坡 | 新加坡、东亚、东南亚 |
in-mum | 印度孟买 | 印度 |
eu | 欧洲(法兰克福) | 欧洲 |
cn-hz | 中国杭州 | 其他数据中心服务区未覆盖的地区 |
roomToken
roomToken: string
房间的 Room Token,用于加入房间时的用户鉴权。
screenType
screenType: ScreenType
用户的屏幕类型,用于调整手势识别参数。
session
session: string
房间当前 session 的 UUID。如果开启了自动日志上报功能,日志中会上报该参数。如果上报时尚未与服务器建立连接,则为 undefined
。
slice
slice: string
当前所处分片的 UUID。
timeDelay
timeDelay: number
设置本地显示远端白板内容的延时,单位为毫秒,默认值为 0。取值大于等于 0。
设置该参数后,当本地用户接收到远端白板内容后,SDK 会根据你设置的 timeDelay
的值延迟显示白板内容。
在音视频传输延时较大的场景中,如使用 CDN 推送音视频流时,你可以使用该参数延迟显示接收到的远端白板内容,以确保白板内容与音视频同步。
uid
uid: string
房间内用户的唯一标识符,字符串格式。
useNativeClipboard
useNativeClipboard: boolean
是否使用原生剪贴板:
-
true
:使用原生剪贴板。白板快捷键,即 {@link Hotkeys HotKeys} 里的复制和粘贴将失效,改为使用原生的copy
和paste
事件。 -
false
:(默认)不使用原生剪贴板。
uuid
uuid: string
房间的 UUID,即房间的唯一标识符。
version
version: string
当前 SDK 的版本。
Methods
addMagixEventListener
addMagixEventListener(event: string, listener: EventListener, options?: MagixEventListenerOptions): void
注册自定义事件监听。
成功注册后,你可以接收到对应的自定义事件通知。
Note
对于同名的自定义事件,SDK 仅支持触发一个回调。
参数
参数名 | 描述 |
---|---|
event: string | |
listener: EventListener | 自定义事件回调,详见 EventListener。如果添加多个同名的事件回调,则之前添加的回调会被覆盖。 |
options: MagixEventListenerOptions | 自从 v2.15.2。 自定义事件监听设置选项。详见 MagixEventListenerOptions。 |
返回值
addMagixEventListener(event: string, listener: EventsListener, fireInterval: number): void
注册高频自定义事件监听。
成功注册后,你可以接收到对应的自定义事件通知。
Note
对于同名的自定义事件,SDK 仅支持触发一个回调。
参数
参数名 | 描述 |
---|---|
event: string | 想要监听的自定义事件名称。 |
listener: EventsListener | 自定义事件回调,详见 EventsListener。如果添加多个同名的事件回调,则之前添加的回调会被覆盖。 |
fireInterval: number | SDK 触发回调的频率,单位为毫秒。该参数最小值为 500 ms,如果设置为低于该值会被重置为 500 ms。 |
返回值
bindHtmlElement
cleanCurrentScene
clearUndoHistory
completeImageUpload
completeImageUpload(uuid: string, src: string): void
参数
参数名 | 描述 |
---|---|
uuid: string | 指定图片的 UUID, 即在 insertImage 方法的 ImageInformation 中传入的图片 UUID。 |
src: string | 图片的 URL 地址。请确保 app 客户端能够访问该 URL,否则图片无法正常展示。 |
返回值
convertToPointInWorld
convertToPointInWorld(point: { x: number; y: number }): { x: number; y: number }
转换白板上点的坐标。
该方法可以将屏幕坐标系(以屏幕左上角为原点,横轴为 X 轴,正方向向右,纵轴为 Y 轴,正方向向下) 中的坐标转换为世界坐标系(以白板初始化时的中点为原点,横轴为 X 轴,正方向向右,纵轴为 Y 轴,正方向向下) 中的坐标。
参数
参数名 | 描述 |
---|---|
point: { x: number; y: number } | 点在屏幕坐标系中的坐标。
|
返回值
点在世界坐标系中的坐标。
-
x: number
点在世界坐标系上的 X 轴坐标。
-
y: number
点在世界坐标系上的 Y 轴坐标。
copy
createInvisiblePlugin
createInvisiblePlugin<K, A, P>(pluginClass: InvisiblePluginClass<K, A, P>, attributes: A): Promise<InvisiblePlugin<A>>
创建不可见插件对象。
参数
参数名 | 描述 |
---|---|
不可见插件的类。 | |
attributes: A | 不可见插件的属性。 |
返回值
创建的不可见插件对象。
createScenesCallback
createScenesCallback(path: string, callbacks?: Partial<ScenesCallbacks>): ScenesCallbacksNode | null
创建场景目录的监听器对象。
成功创建监听器对象后,当指定场景目录下的场景、子场景目录发生变化时,SDK 会触发你在 ScenesCallbacks 中实现的回调。 当不再需要使用已创建的监听器时,需要调用 dispose 来释放该监听器对象。
参数
参数名 | 描述 |
---|---|
path: string | 场景目录的路径。如果你传入的是场景路径,SDK 会将监听对象设置为其父场景目录。 |
需要监听的回调。详见 |
返回值
- 方法调用成功时,返回 ScenesCallbacksNode 对象。
- 方法调用失败时,返回
null
。方法调用失败可能是因为指定的场景目录不存在。
delete
disconnect
dispatchMagixEvent
duplicate
duplicate(): void
复制选中的内容并粘贴到白板上(用户当前视角的中心)。
Note
- 该方法仅当 disableSerialization 设为
false
时生效。 - 多次调用该方法时,不能保证粘贴的内容每次都在用户当前的视角中心,可能会出现随机偏移。
返回值
exportScene
fillSceneSnapshot
fillSceneSnapshot(scenePath: string, div: HTMLElement, width: number, height: number): void
生成特定场景的屏幕快照。
参数
参数名 | 描述 |
---|---|
scenePath: string | 特定场景的路径。 |
div: HTMLElement | 用于显示屏幕快照的 div。 |
width: number | 屏幕快照的宽度。自 2.3.8 起,该参数为可选参数,如果不填,则默认为展示屏幕快照的 div 的宽度。 |
height: number | 屏幕快照的高度。自 2.3.8 起,该参数为可选参数,如果不填,则默认为展示屏幕快照的 div 的高度。 |
返回值
generateScreenshot
getInvisiblePlugin
getInvisiblePlugin<A>(kind: string): InvisiblePlugin<A> | null
获取指定的不可见插件。
参数
参数名 | 描述 |
---|---|
kind: string | 不可见插件的类型。 |
返回值
指定的不可见插件。
getPluginAttributes
getPluginAttributes(identifier: Identifier): any | undefined
获取组件插件对象的属性。
参数
参数名 | 描述 |
---|---|
identifier: Identifier | 组件插件对象在房间内的唯一标识符。 |
返回值
getPluginRectangle
getScene
getScene(path: string): WhiteScene | undefined
获取指定场景的信息。
参数
参数名 | 描述 |
---|---|
path: string | 场景的路径。请确保场景路径以 |
返回值
场景信息。详见 WhiteScene。
importScene
importScene(dir: string, payload: Blob): Promise<SceneDefinition>
导入场景。
参数
参数名 | 描述 |
---|---|
dir: string | 场景要导入的场景目录。确保该场景目录的 ScenePathType 不为 |
payload: Blob | 场景内容的 Blob 对象。 |
返回值
方法调用成功后,返回 SceneDefinition 对象,其中包含导入场景的 name
。导入场景的路径即为 dir
+ name
。 如果需要修改场景路径,可以调用 moveScene。
insertImage
insertImage(imageInfo: ImageInformation): void
插入图片占位符。
SDK 会根据你传入的 imageInfo
在白板上设置并插入图片占位符。
调用该方法后,还需要调用 completeImageUpload 传入图片的 URL 地址,以在该占位符插入并展示图片。
参数
参数名 | 描述 |
---|---|
imageInfo: ImageInformation | 图片信息,详见 ImageInformation。 |
返回值
insertPlugin
insertPlugin(kind: string, description?: PluginDescription): Identifier
在白板中插入组件插件对象。
参数
参数名 | 描述 |
---|---|
kind: string | 组件插件的类型,是组件的唯一标识符。 |
description: PluginDescription | 组件插件的描述。 |
返回值
组件插件对象在房间内的唯一标识符。
insertText
insertText(x: number, y: number, textContent?: string): Identifier
在指定位置插入文字。
参数
参数名 | 描述 |
---|---|
x: number | 第一个文字左侧边的中点在世界坐标系中的 X 轴坐标。 |
y: number | 第一个文字左侧边的中点在世界坐标系中的 Y 轴坐标。 |
textContent: string | 初始的文字内容,不传则为空。 |
返回值
文字的标识符,字符串格式。
lockImage
lockImages
memberState
memberState(memberId: number): MemberState
获取房间内指定用户的白板工具状态。
参数
参数名 | 描述 |
---|---|
memberId: number | 指定用户的 ID。 |
返回值
指定用户的白板工具状态。
moveCamera
moveCamera(camera: Partial<Camera> & Readonly<{ animationMode?: AnimationMode }>): void
调整视角。
参数
参数名 | 描述 |
---|---|
视角的参数配置,详见 Camera。 |
返回值
moveCameraToContain
moveCameraToContain(rectangle: Rectangle & Readonly<{ animationMode?: AnimationMode }>): void
调整视角,以保证完整显示视觉矩形。
参数
参数名 | 描述 |
---|---|
视觉矩形的参数设置,详见 Rectangle。 |
返回值
moveScene
moveScene(originalPath: string, targetPath: string): void
移动场景。
成功移动场景后,场景路径也会改变。
参数
参数名 | 描述 |
---|---|
originalPath: string | 需要移动的场景的原路径。必须为场景路径,不能是场景目录的路径。 |
targetPath: string | 目标场景目录的路径或目标场景的路径:
|
返回值
moveSelectedComponentsToBottom
moveSelectedComponentsToTop
paste
paste(): void
粘贴复制的内容。
Note
- 该方法会将 copy 方法复制的内容粘贴到白板上(用户当前视角的中心)。
- 该方法仅当 disableSerialization 设为
false
时生效。 - 多次调用该方法时,不能保证粘贴的内容每次都在用户当前的视角中心,可能会出现随机偏移。
返回值
pptNextStep
pptPreviousStep
putScenes
putScenes(path: string, scenes: ReadonlyArray<SceneDefinition>, index?: number): void
参数
参数名 | 描述 |
---|---|
path: string | 指定场景目录的地址,必须以 |
由多个场景构成的数组。单个场景的字段详见 SceneDefinition。 | |
index: number | 待插入的多个场景中,第一个场景在该场景目录的索引号。场景的索引号从 0 开始。
|
返回值
redo
refreshViewSize
refreshViewSize(): void
刷新白板的界面。
当白板的 view 发生改变时,需要手动调用该方法刷新白板的界面。 该方法仅在 autoResize
为 false
时生效。
返回值
removeMagixEventListener
removeMagixEventListener(event: string, listener?: EventListener): void
移除自定义事件监听。
参数
参数名 | 描述 |
---|---|
event: string | 想要移除监听的自定义事件名称。 |
listener: EventListener | 要移除的监听。若不传,该自定义事件之下的所有监听器将全部注销。 |
返回值
removePlugin
removePlugin(identifier: Identifier): boolean
删除组件插件对象。
参数
参数名 | 描述 |
---|---|
identifier: Identifier | 组件插件对象在房间内的唯一标识符。 |
返回值
removeScenes
removeScenes(path: string): void
删除场景或者场景目录。
Note
- 互动白板实时房间内必须至少有一个场景。当删除所有的场景后,SDK 会自动生成一个路径为
/init
初始场景(房间初始化时的默认场景)。 - 如果删除白板当前所在场景,白板会展示被删除场景所在场景目录的最后一个场景
- 如果删除的是场景目录,则该场景目录下的所有场景都会被删除。
- 如果删除的是当前场景所在的场景目录,例如
dirA
,SDK 会执行向上递归逻辑选择新的场景作为当前场景,规则如下:- 如果当前场景目录路径下还有其他场景目录,例如
dirB
,排在被删除的场景目录dirA
后面,则将场景切换至dirB
中的第一个场景(index 为 0)。 - 如果当前场景目录路径下
dirA
后不存在场景目录,则查看当前场景目录路径下是否存在场景; 如果存在,则将场景切换至当前场景目录路径下的第一个场景(index 为 0)。 - 如果当前场景目录路径下
dirA
后没有场景目录,也不存在任何场景,则查看dirA
前面是否存在场景目录dirC
;如果存在,则选择dirC
中的第一个场景(index 为 0)。 - 以上都不满足,则继续向上递归执行该逻辑。
- 如果当前场景目录路径下还有其他场景目录,例如
参数
参数名 | 描述 |
---|---|
path: string | 场景路径或场景目录路径。如果传入的是场景目录,则会删除该场景目录下的所有场景。 |
返回值
scalePptToFit
scalePptToFit(animationMode?: AnimationMode): void
根据指定的动画模式调整视角,以保证完整显示 PPT 的内容。
参数
参数名 | 描述 |
---|---|
animationMode: AnimationMode | 视角调整时的动画模式,详见 AnimationMode。 |
返回值
scenePathType
scenePathType(path: string): ScenePathType
查询场景路径类型。
参数
参数名 | 描述 |
---|---|
path: string | 场景的路径。请确保场景路径以 |
返回值
场景路径的类型。
scenePreview
scenePreview(scenePath: string, div: HTMLElement, width: number | undefined, height: number | undefined): void
生成特定场景的预览图。
参数
参数名 | 描述 |
---|---|
scenePath: string | 特定场景的路径。 |
div: HTMLElement | 用于显示预览内容的 div。 |
width: number | undefined | 预览图的宽度。自 2.3.8 起,该参数为可选参数,如果不填,则默认为展示预览内容的 div 的宽度。 |
height: number | undefined | 预览图的高度。自 2.3.8 起,该参数为可选参数,如果不填,则默认为展示预览内容的 div 的高度。 |
返回值
screenshotToCanvas
screenshotToCanvas(context: CanvasRenderingContext2D, scenePath: string, width: number, height: number, camera: Camera, ratio?: number): void
生成屏幕快照,并写入指定的 CanvasRenderingContext2D 对象中。
参数
参数名 | 描述 |
---|---|
context: CanvasRenderingContext2D | CanvasRenderingContext2D 对象。 |
scenePath: string | 场景的路径。你可以通过 |
width: number | 屏幕快照的宽度。 |
height: number | 屏幕快照的高度。 |
camera: Camera | 视角的描述。 |
ratio: number | 设备像素比。该参数为可选参数,如果不填,则默认值为 1。 |
返回值
screenshotToCanvasAsync
screenshotToCanvasAsync(context: CanvasRenderingContext2D, scenePath: string, width: number, height: number, camera: Camera, ratio?: number, timeout?: number): Promise<void>
等待目标场景的图片加载完成后生成屏幕快照,写入指定的 CanvasRenderingContext2D
对象中。
参数
参数名 | 描述 |
---|---|
context: CanvasRenderingContext2D | CanvasRenderingContext2D 对象。 |
scenePath: string | 场景的路径。你可以通过 |
width: number | 屏幕快照的宽度。 |
height: number | 屏幕快照的高度。 |
camera: Camera | 视角的描述。详见 Camera。 |
ratio: number | 设备像素比。该参数为可选参数,如果不填,则默认值为 1。 |
timeout: number | 图片加载的超时时间 (ms),默认为永不超时,只能设为大于 |
返回值
setCameraBound
setCameraBound(cameraBound: CameraBound): void
设置用户的视角边界。
参数
参数名 | 描述 |
---|---|
cameraBound: CameraBound | 视角边界。 |
返回值
setGlobalState
setGlobalState(modifyState: Partial<GlobalState>): GlobalState
修改互动白板实时房间的公共全局状态(globalState
属性)。
实时房间的 globalState
属性为公共全局变量,房间内所有用户看到的都是相同的 globalState
,所有互动模式用户都可以读写。修改 globalState
属性会立即生效并同步给所有用户。
你可以通过如下方法修改该属性:
参数
参数名 | 描述 |
---|---|
房间公共全局状态。 |
返回值
修改后的房间公共全局状态。
setMemberState
setMemberState(modifyState: Partial<MemberState>): MemberState
参数
参数名 | 描述 |
---|---|
需要修改的白板工具状态,详见 MemberState。 |
返回值
修改后的白板工具状态,
setSceneIndex
setScenePath
setViewMode
setViewMode(viewMode: ViewMode): void
切换视角模式。
互动白板实时房间支持对用户设置以下视角模式:
Broadcaster
: 主播模式。Follower
:跟随模式。Freedom
:(默认)自由模式。
Note
该方法的设置会影响房间内所有用户的视角模式:
- 当房间内不存在主播模式的用户时,所有用户的视角都默认为自由模式。
- 当一个用户的视角设置为主播模式后,房间内其他所有用户(包括新加入房间的用户)的视角会被自动设置为跟随模式。
- 当跟随模式的用户进行白板操作时,其视角会自动切换为自由模式。
参数
参数名 | 描述 |
---|---|
viewMode: ViewMode | 视角模式,详见 ViewMode。 |
返回值
setWritable
stopBlockTimestamp
syncBlockTimestamp
undo
updatePlugin
updatePlugin(identifier: Identifier, description: PluginDescription): boolean
修改组件插件对象的描述。
参数
参数名 | 描述 |
---|---|
identifier: Identifier | 组件插件对象在房间内的唯一标识符。 |
description: PluginDescription | 组件插件对象的新描述。 |
返回值
updateSelectedText
updateSelectedText(format: TextFormat): void
修改当前被选中文字的字体样式。
选中文字后,你可以调用该方法修改字体大小、颜色、是否加粗、是否斜体等样式。
参数
参数名 | 描述 |
---|---|
format: TextFormat | 修改后的字体样式。详见 TextFormat。 |
返回值
updateText
updateText(identifier: Identifier, textContent: string): void
修改指定文字的内容。
调用 insertText 方法后,你可以调用该方法并传入 insertText
方法返回的 Identifier
,修改指定文字的内容。
参数
参数名 | 描述 |
---|---|
identifier: Identifier | 文字的标识符,为 insertText 的返回值。 |
textContent: string | 修改后的文字内容。 |
返回值
waitMagixEvent
waitMagixEvent(filter: EventFilter): Promise<Event>
等待特定的自定义事件发生。
参数
参数名 | 描述 |
---|---|
filter: EventFilter | 事件过滤器。 |
返回值
当特定自定义事件发生时,返回该事件。
想要监听的自定义事件名称。