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
房间内用户的唯一标识符,字符串格式。
uuid
uuid: string
房间的 UUID,即房间的唯一标识符。
version
version: string
当前 SDK 的版本。
Methods
addMagixEventListener
addMagixEventListener(event: string, listener: EventListener, options?: MagixEventListenerOptions): void
注册自定义事件监听。
成功注册后,你可以接收到对应的自定义事件通知。
Note
对于同名的自定义事件,SDK 仅支持触发一个回调。
参数
参数名 | 类型 | 描述 |
---|---|---|
event | string | |
listener | 自定义事件回调,详见 EventListener。如果添加多个同名的事件回调,则之前添加的回调会被覆盖。 | |
options | 自从 v2.15.2。 自定义事件监听设置选项。详见 MagixEventListenerOptions。 |
返回值
void
addMagixEventListener(event: string, listener: EventsListener, fireInterval: number): void
注册高频自定义事件监听。
成功注册后,你可以接收到对应的自定义事件通知。
Note
对于同名的自定义事件,SDK 仅支持触发一个回调。
function listener(events) {
// events 是一个数组
for (const event of events) {
// 回调事件 event
}
}
displayer.addMagixEventListener("my-event", listener, 100);
参数
参数名 | 类型 | 描述 |
---|---|---|
event | string | 想要监听的自定义事件名称。 |
listener | 自定义事件回调,详见 EventsListener。如果添加多个同名的事件回调,则之前添加的回调会被覆盖。 | |
fireInterval | number | SDK 触发回调的频率,单位为毫秒。该参数最小值为 500 ms,如果设置为低于该值会被重置为 500 ms。 |
返回值
void
bindHtmlElement
cleanCurrentScene
completeImageUpload
completeImageUpload(uuid: string, src: string): void
在指定的图片占位符展示图片。
该方法可以将指定的网络图片插入并展示到指定的图片占位符。
Note
调用该方法前,请确保你已经调用 insertImage 方法在白板上插入了图片占位符。
参数
参数名 | 类型 | 描述 |
---|---|---|
uuid | string | 指定图片的 UUID, 即在 insertImage 方法的 ImageInformation 中传入的图片 UUID。 |
src | string | 图片的 URL 地址。请确保 app 客户端能够访问该 URL,否则图片无法正常展示。 |
返回值
void
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 轴坐标。 |
返回值
{ x: number; y: number }
copy
copy(): void
复制选中内容。
Note
-
该方法会将选中的内容存储到内存中,不会粘贴到白板中。
-
该方法仅当 disableSerialization 设为
false
时生效。
返回值
void
createInvisiblePlugin
createInvisiblePlugin<K, A, P>(pluginClass: InvisiblePluginClass<K, A, P>, attributes: A): Promise<InvisiblePlugin<A>>
创建不可见插件对象。
参数
参数名 | 类型 | 描述 |
---|---|---|
pluginClass | InvisiblePluginClass<K, A, P> | 不可见插件的类。 |
attributes | A | 不可见插件的属性。 |
返回值
Promise<InvisiblePlugin<A>>
createScenesCallback
createScenesCallback(path: string, callbacks?: Partial<ScenesCallbacks>): ScenesCallbacksNode | null
创建场景目录的监听器对象。
成功创建监听器对象后,当指定场景目录下的场景、子场景目录发生变化时,SDK 会触发你在 ScenesCallbacks 中实现的回调。
当不再需要使用已创建的监听器时,需要调用 dispose 来释放该监听器对象。
-
该方法需要在加入白板房间后调用。
-
对于每个场景目录,仅支持创建一个监听器对象。如果需要创建新的监听器对象,必须先调用 dispose 释放已创建的监听器对象。
参数
参数名 | 类型 | 描述 |
---|---|---|
path | string | 场景目录的路径。如果你传入的是场景路径,SDK 会将监听对象设置为其父场景目录。 |
callbacks | Partial<ScenesCallbacks> | 需要监听的回调。详见 |
返回值
ScenesCallbacksNode | null
delete
disconnect
dispatchMagixEvent
duplicate
duplicate(): void
复制选中的内容并粘贴到白板上(用户当前视角的中心)。
Note
-
该方法仅当 disableSerialization 设为
false
时生效。 -
多次调用该方法时,不能保证粘贴的内容每次都在用户当前的视角中心,可能会出现随机偏移。
返回值
void
exportScene
fillSceneSnapshot
generateScreenshot
getInvisiblePlugin
getInvisiblePlugin<A>(kind: string): InvisiblePlugin<A> | null
获取指定的不可见插件。
参数
参数名 | 类型 | 描述 |
---|---|---|
kind | string | 不可见插件的类型。 |
返回值
InvisiblePlugin<A> | null
getPluginAttributes
getPluginAttributes(identifier: Identifier): any | undefined
获取组件插件对象的属性。
参数
参数名 | 类型 | 描述 |
---|---|---|
identifier | 组件插件对象在房间内的唯一标识符。 |
返回值
any | undefined
getPluginRectangle
getScene
getScene(path: string): WhiteScene | undefined
获取指定场景的信息。
参数
参数名 | 类型 | 描述 |
---|---|---|
path | string | 场景的路径。请确保场景路径以 |
返回值
WhiteScene | undefined
importScene
importScene(dir: string, payload: Blob): Promise<SceneDefinition>
导入场景。
参数
参数名 | 类型 | 描述 |
---|---|---|
dir | string | 场景要导入的场景目录。确保该场景目录的 ScenePathType 不为 |
payload | Blob | 场景内容的 Blob 对象。 |
返回值
Promise<SceneDefinition>
insertImage
insertImage(imageInfo: ImageInformation): void
插入图片占位符。
SDK 会根据你传入的 imageInfo
在白板上设置并插入图片占位符。
调用该方法后,还需要调用 completeImageUpload 传入图片的 URL 地址,以在该占位符插入并展示图片。
参数
参数名 | 类型 | 描述 |
---|---|---|
imageInfo | 图片信息,详见 ImageInformation。 |
返回值
void
insertPlugin
insertPlugin(kind: string, description?: PluginDescription): Identifier
在白板中插入组件插件对象。
参数
参数名 | 类型 | 描述 |
---|---|---|
kind | string | 组件插件的类型,是组件的唯一标识符。 |
description | 组件插件的描述。 |
返回值
insertText
insertText(x: number, y: number, textContent?: string): Identifier
在指定位置插入文字。
参数
参数名 | 类型 | 描述 |
---|---|---|
x | number | 第一个文字左侧边的中点在世界坐标系中的 X 轴坐标。 |
y | number | 第一个文字左侧边的中点在世界坐标系中的 Y 轴坐标。 |
textContent | string | 初始的文字内容,不传则为空。 |
返回值
lockImage
lockImages
memberState
moveCamera
moveCamera(camera: Partial<Camera> & Readonly<{ animationMode?: AnimationMode }>): void
调整视角。
参数
参数名 | 类型 | 描述 |
---|---|---|
camera | Partial<Camera> & Readonly<{ animationMode?: AnimationMode }> | 视角的参数配置,详见 Camera。 |
返回值
void
moveCameraToContain
moveCameraToContain(rectangle: Rectangle & Readonly<{ animationMode?: AnimationMode }>): void
调整视角,以保证完整显示视觉矩形。
参数
参数名 | 类型 | 描述 |
---|---|---|
rectangle | Rectangle & Readonly<{ animationMode?: AnimationMode }> | 视觉矩形的参数设置,详见 Rectangle。 |
返回值
void
moveScene
moveSelectedComponentsToBottom
moveSelectedComponentsToTop
paste
paste(): void
粘贴复制的内容。
Note
-
该方法会将 copy 方法复制的内容粘贴到白板上(用户当前视角的中心)。
-
该方法仅当 disableSerialization 设为
false
时生效。 -
多次调用该方法时,不能保证粘贴的内容每次都在用户当前的视角中心,可能会出现随机偏移。
返回值
void
pptNextStep
pptPreviousStep
putScenes
putScenes(path: string, scenes: ReadonlyArray<SceneDefinition>, index?: number): void
在指定场景目录下插入多个场景。
Note
调用该方法插入多个场景后不会切换到新插入的场景。如果要切换至新插入的场景,需要调用 setScenePath。
参数
参数名 | 类型 | 描述 |
---|---|---|
path | string | 指定场景目录的地址,必须以 |
scenes | ReadonlyArray<SceneDefinition> | 由多个场景构成的数组。单个场景的字段详见 SceneDefinition。 |
index | number | 待插入的多个场景中,第一个场景在该场景目录的索引号。场景的索引号从 0 开始。
|
返回值
void
redo
refreshViewSize
refreshViewSize(): void
刷新白板的界面。
当白板的 view 发生改变时,需要手动调用该方法刷新白板的界面。
该方法仅在 autoResize
为 false
时生效。
返回值
void
removeMagixEventListener
removeMagixEventListener(event: string, listener?: EventListener): void
移除自定义事件监听。
参数
参数名 | 类型 | 描述 |
---|---|---|
event | string | 想要移除监听的自定义事件名称。 |
listener | 要移除的监听。若不传,该自定义事件之下的所有监听器将全部注销。 |
返回值
void
removePlugin
removePlugin(identifier: Identifier): boolean
删除组件插件对象。
参数
参数名 | 类型 | 描述 |
---|---|---|
identifier | 组件插件对象在房间内的唯一标识符。 |
返回值
boolean
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 | 场景路径或场景目录路径。如果传入的是场景目录,则会删除该场景目录下的所有场景。 |
返回值
void
scalePptToFit
scalePptToFit(animationMode?: AnimationMode): void
根据指定的动画模式调整视角,以保证完整显示 PPT 的内容。
参数
参数名 | 类型 | 描述 |
---|---|---|
animationMode | 视角调整时的动画模式,详见 AnimationMode。 |
返回值
void
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 的高度。 |
返回值
void
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 | 视角的描述。 | |
ratio | number | 设备像素比。该参数为可选参数,如果不填,则默认值为 1。 |
返回值
void
setCameraBound
setGlobalState
setGlobalState(modifyState: Partial<GlobalState>): GlobalState
修改互动白板实时房间的公共全局状态(globalState
属性)。
实时房间的 globalState
属性为公共全局变量,房间内所有用户看到的都是相同的 globalState
,所有互动模式用户都可以读写。修改 globalState
属性会立即生效并同步给所有用户。
你可以通过如下方法修改该属性:
room.setGlobalState({
foobar: "hello world",
});
如果要删除该字段,可以将它设为 undefined:
room.setGlobalState({
foobar: undefined,
});
参数
参数名 | 类型 | 描述 |
---|---|---|
modifyState | Partial<GlobalState> | 房间公共全局状态。 |
返回值
setMemberState
setMemberState(modifyState: Partial<MemberState>): MemberState
修改房间内的白板工具状态。
调用该方法会立刻更新房间的 MemberState。
你可以通过如下方法修改该字段:
room.setMemberState({
foobar: "hello world",
});
如果要删除该字段,可以将它设为 undefined:
room.setMemberState({
foobar: undefined,
});
参数
参数名 | 类型 | 描述 |
---|---|---|
modifyState | Partial<MemberState> | 需要修改的白板工具状态,详见 MemberState。 |
返回值
setSceneIndex
setScenePath
setViewMode
setViewMode(viewMode: ViewMode): void
切换视角模式。
互动白板实时房间支持对用户设置以下视角模式:
-
Broadcaster
: 主播模式。 -
Follower
:跟随模式。 -
Freedom
:(默认)自由模式。
Note
该方法的设置会影响房间内所有用户的视角模式:
-
当房间内不存在主播模式的用户时,所有用户的视角都默认为自由模式。
-
当一个用户的视角设置为主播模式后,房间内其他所有用户(包括新加入房间的用户)的视角会被自动设置为跟随模式。
-
当跟随模式的用户进行白板操作时,其视角会自动切换为自由模式。
参数
参数名 | 类型 | 描述 |
---|---|---|
viewMode | 视角模式,详见 ViewMode。 |
返回值
void
setWritable
stopBlockTimestamp
syncBlockTimestamp
undo
updatePlugin
updatePlugin(identifier: Identifier, description: PluginDescription): boolean
修改组件插件对象的描述。
参数
参数名 | 类型 | 描述 |
---|---|---|
identifier | 组件插件对象在房间内的唯一标识符。 | |
description | 组件插件对象的新描述。 |
返回值
boolean
updateSelectedText
updateSelectedText(format: TextFormat): void
修改当前被选中文字的字体样式。
选中文字后,你可以调用该方法修改字体大小、颜色、是否加粗、是否斜体等样式。
参数
参数名 | 类型 | 描述 |
---|---|---|
format | 修改后的字体样式。详见 TextFormat。 |
返回值
void
updateText
updateText(identifier: Identifier, textContent: string): void
修改指定文字的内容。
调用 insertText 方法后,你可以调用该方法并传入 insertText
方法返回的 Identifier
,修改指定文字的内容。
参数
参数名 | 类型 | 描述 |
---|---|---|
identifier | 文字的标识符,为 insertText 的返回值。 | |
textContent | string | 修改后的文字内容。 |
返回值
void
waitMagixEvent
waitMagixEvent(filter: EventFilter): Promise<Event>
等待特定的自定义事件发生。
参数
参数名 | 类型 | 描述 |
---|---|---|
filter | 事件过滤器。 |
返回值
Promise<Event>
想要监听的自定义事件名称。