larksr_websdk 3.2.402 → 3.2.403

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/dist/doc/en/config.md +228 -0
  2. package/dist/doc/en/dev.md +84 -0
  3. package/dist/doc/en/event_codes.md +286 -0
  4. package/dist/doc/en/events.md +229 -0
  5. package/dist/doc/en/functions.md +603 -0
  6. package/dist/doc/en/index.md +115 -0
  7. package/dist/doc/en/member_variables.md +407 -0
  8. package/dist/doc/en/multi_media_3_2_401.md +84 -0
  9. package/dist/doc/en/sdkid_encryption.md +40 -0
  10. package/dist/doc/en/update.md +462 -0
  11. package/dist/doc/zh_CN/config.md +243 -0
  12. package/dist/doc/zh_CN/event_codes.md +286 -0
  13. package/dist/doc/zh_CN/events.md +229 -0
  14. package/dist/doc/zh_CN/functions.md +658 -0
  15. package/dist/doc/zh_CN/index.md +84 -0
  16. package/dist/doc/zh_CN/member_variables.md +431 -0
  17. package/dist/doc/zh_CN/multi_media_3_2_401.md +84 -0
  18. package/dist/doc/zh_CN/sdkid_encryption.md +40 -0
  19. package/dist/doc/zh_CN/update.md +579 -0
  20. package/dist/larksr-web-sdk.min.js +1 -1
  21. package/dist/types/api.d.ts +1 -0
  22. package/dist/types/appli_params.d.ts +9 -6
  23. package/dist/types/config.d.ts +0 -1
  24. package/dist/types/lark/Worker.d.ts +3 -0
  25. package/dist/types/lark/application.d.ts +6 -1
  26. package/dist/types/lark/custom.d.ts +7 -0
  27. package/dist/types/lark/peer_connection.d.ts +2 -1
  28. package/dist/types/lark/webcodec.d.ts +40 -0
  29. package/dist/types/lark/webcodecs.generated.d.ts +417 -0
  30. package/dist/types/lark/websocket_channel.d.ts +1 -0
  31. package/dist/types/lark/websocket_proxy.d.ts +2 -0
  32. package/dist/types/larksr.d.ts +19 -7
  33. package/dist/types/protobuf/cloudlark.d.ts +9674 -0
  34. package/dist/types/screen_state.d.ts +2 -2
  35. package/dist/types/utils/ios-inner-height.d.ts +4 -0
  36. package/dist/types/utils/lock_pointer.d.ts +2 -1
  37. package/dist/types/utils/scale_mode.d.ts +19 -0
  38. package/package.json +72 -71
  39. package/types/api.d.ts +1 -0
  40. package/types/appli_params.d.ts +9 -6
  41. package/types/config.d.ts +0 -1
  42. package/types/lark/Worker.d.ts +3 -0
  43. package/types/lark/application.d.ts +6 -1
  44. package/types/lark/custom.d.ts +7 -0
  45. package/types/lark/peer_connection.d.ts +2 -1
  46. package/types/lark/webcodec.d.ts +40 -0
  47. package/types/lark/webcodecs.generated.d.ts +417 -0
  48. package/types/lark/websocket_channel.d.ts +1 -0
  49. package/types/lark/websocket_proxy.d.ts +2 -0
  50. package/types/larksr.d.ts +19 -7
  51. package/types/protobuf/cloudlark.d.ts +9674 -0
  52. package/types/screen_state.d.ts +2 -2
  53. package/types/utils/ios-inner-height.d.ts +4 -0
  54. package/types/utils/lock_pointer.d.ts +2 -1
  55. package/types/utils/scale_mode.d.ts +19 -0
@@ -0,0 +1,84 @@
1
+ #
2
+
3
+ ## 安装
4
+
5
+ 1. npm 方式
6
+
7
+ ```cmd
8
+ npm i larksr_websdk
9
+ ```
10
+
11
+ 2. 直接引入
12
+
13
+ ```html
14
+ <script src="larksr-web-sdk.min.js"></script>
15
+ ```
16
+
17
+ > 直接引入模式下 SDK 挂载为全局对象 larksr_websdk。
18
+
19
+ ## 使用
20
+
21
+ ### 注意
22
+
23
+ > V3.2.30 开始仅支持服务端 [V3.2.3.1](https://www.pingxingyun.com/devCenter.html) 以上版本。
24
+ > [老版本 SDK Demo 下载](https://github.com/pingxingyun/lark_sr_websdk_demos/releases/tag/V3.2.10)
25
+ > V3.2.314 版本对应服务器版本和数据通道版本为 3.2.5.1 及以上
26
+
27
+ ## 创建 LarkSR 实例
28
+
29
+ ```typescript
30
+ /**
31
+ * LarkSR 客户端。所有操作和事件通过该类传递
32
+ * @param config 本地配置, 优先级最高
33
+ */
34
+ constructor(config: ILarkSRConfig);
35
+ ```
36
+
37
+ example:
38
+
39
+ ```js
40
+ var client = new LarkSR({
41
+ // 设置挂载显示的元素
42
+ // 注意*不要*设置为 document.documentElement
43
+ rootElement: document.getElementById('container'),
44
+ // 服务器地址,实际使用中填写您的服务器地址
45
+ // 如:http://222.128.6.137:8181/
46
+ // 当使用平行云托管服务时服务器地址自动分配,可留空。
47
+ // larksr.connectWithPxyHost 进入应用
48
+ serverAddress: "Lark 服务器前台地址",
49
+ // SDK ID 也可在 initSDKAuthCode 设置
50
+ authCode: '您的 SDK ID',
51
+ // 测试载入背景图
52
+ // loadingBgUrl: 'https://home-obs.pingxingyun.com/homePage_4_0/bg.jpg',
53
+ });
54
+
55
+ // start connect;
56
+ // 使用平行云托管服务时,用 connectWithPxyHost 进入应用并自动分配服务器.
57
+ client.connect({
58
+ // 要使用的云端资源的应用 ID,从后云雀后台接口获取
59
+ // 参考查询应用一栏文档
60
+ // https://www.pingxingyun.com/online/api3_2.html?id=476
61
+ // 如 222.128.6.137:8181 系统下的 879408743551336448 应用
62
+ appliId: "应用ID"
63
+ })
64
+ .then(() => {
65
+ console.log('enter success');
66
+ })
67
+ .catch((e) => {
68
+ console.error(e);
69
+ });
70
+ // ...
71
+ // 主动关闭并清理资源
72
+ // client.close();
73
+ ```
74
+
75
+ ## 文档目录
76
+
77
+ ### [参数配置](./config.md)
78
+ ### [LarkSR 对象方法](./functions.md)
79
+ ### [LarkSR 事件](./events.md)
80
+ ### [LarkSR 事件码](./event_codes.md)
81
+ ### [LarkSR 对象成员](./member_variables.md)
82
+ ### [SDK ID 加密](./sdkid_encryption.md)
83
+ ### [多媒体通道](./multi_media_3_2_401.md)
84
+ ### [SDK 更新](./update.md)
@@ -0,0 +1,431 @@
1
+ # LarkSR 对象成员变量
2
+
3
+ LarkSR 对象成员变量,注意以下划线开头的变量为内部使用私有变量或只读成员变量,不建议修改直接使用。
4
+
5
+ > 以下代码中 larksr 为创建好的 LarkSR 对象实例。省略创建过程。
6
+
7
+ ```javascript
8
+ let larksr;
9
+
10
+ ...// create code.
11
+ ```
12
+
13
+ ## 视频组件
14
+
15
+ 1. `videoComponent` 视频组件
16
+
17
+ ```javascript
18
+ // 获取播放的 <video /> 视频元素
19
+ larksr.videoComponent.getVideo();
20
+ // 播放视频,async 方法播放失败抛出异常
21
+ larksr.videoComponent.playVideo();
22
+ // 停止视频播放
23
+ larksr.videoComponent.stopVideo();
24
+ // 播放视频声音,取消静音播放
25
+ larksr.videoComponent.sountPlayout();
26
+ // 截取一帧,返回 base64,并抛出截图成功事件
27
+ larksr.videoComponent.captrueFrame(data);
28
+ ```
29
+
30
+ 2. `videoElement` html `video` 视频元素本身
31
+
32
+ ```javascript
33
+ larksr.videoElement;
34
+ ```
35
+
36
+ 3. 控制显示元素
37
+
38
+ ```javascript
39
+ // 是否显示移动端触摸点
40
+ larksr.isEnableTouchPoint = false;
41
+ // 是否显示载入画面时底部文字
42
+ larksr.isEnableLoadingStateBar = false;
43
+ ```
44
+
45
+ ```javascript
46
+ // 设置缩放模式
47
+ larksr.scaleMode = ScaleMode.CONTAIN_APP;
48
+ ```
49
+
50
+ 4. 虚拟鼠标和触摸点
51
+
52
+ ```javascript
53
+ /**
54
+ * 虚拟鼠标的当前位置,相对于整体容器
55
+ */
56
+ larksr.virtualCursorPosition
57
+ /**
58
+ * 虚拟鼠标的当前位置,内部缩放容器,与实际显示虚拟鼠标 CSS 样式相同
59
+ */
60
+ larksr.virtualCursorPositionRaw
61
+ ```
62
+
63
+ 例:
64
+
65
+ 下面示例代码使用 react 演示点击一个按钮,同步一个外层的元素和虚拟鼠标的位置
66
+
67
+ ```javascript
68
+ // ....
69
+ // 省略 react 创建代码
70
+ export default class App extends React.Component {
71
+ private state: any = {
72
+ pointPosition: {
73
+ x: 0,
74
+ y: 0,
75
+ }
76
+ };
77
+ // ....
78
+ // 此处省略 larksr 创建过程等其他代码
79
+ render() {
80
+ return (
81
+ <div>
82
+ // ...
83
+ // 省略其他元素
84
+ <div style={{
85
+ zIndex: 1000,
86
+ position: 'absolute',
87
+ left: this.state.pointPosition.x,
88
+ top: this.state.pointPosition.y,
89
+ backgroundColor: "red",
90
+ width: 50,
91
+ height: 50,
92
+ borderRadius: "50%"
93
+ }}>
94
+ </div>
95
+ <button style={{pointerEvents: "all"}}
96
+ onClick={()=>{
97
+ // 获取虚拟鼠标的位置
98
+ console.log("touch point", this.larksr.virtualCursorPosition);
99
+ // 同步虚拟鼠标的位置
100
+ this.setState({
101
+ pointPosition: this.larksr.virtualCursorPosition,
102
+ })
103
+ }}
104
+ >
105
+ touchPoint
106
+ </button>
107
+ </div>
108
+ )
109
+ }
110
+ }
111
+ ```
112
+
113
+ ## 配置参数
114
+
115
+ ```javascript
116
+ // `config` IAppliParams传入的 ILarkSRConfig 对象
117
+ larksr.config;
118
+ // `params` 构造函数中传入的 IAppliParams 对象
119
+ larksr.params;
120
+ ```
121
+
122
+ ## 用户模式
123
+
124
+ ```javascript
125
+ // `playerModeType` 当前的玩家模式;
126
+ larksr.playerModeType;
127
+ // `userType` 当前用户类型;
128
+ larksr.userType;
129
+ // 当前是否是交互模式,交互默认即可以操作的模式
130
+ larksr.isInteractiveMode;
131
+ // 是否是观看者模式
132
+ larksr.isObMode;
133
+ ```
134
+
135
+ ## 当前 app 的状态
136
+
137
+ ```javascript
138
+ larksr.appState;
139
+ ```
140
+
141
+ 具体状态值如下:
142
+
143
+ ```javascript
144
+ export enum APP_STATE {
145
+ BEFORE_CREATE = 0,
146
+ INITED,
147
+ WEBSOCKET_CHANNEL_OPEN,
148
+ LOGIN_SUCCESS,
149
+ RTC_CONNECTED,
150
+ MEDIA_LOADED,
151
+ MEDIA_PLAYED,
152
+ RTC_RETRY,
153
+ APP_RETRY,
154
+ BEFORE_DESTORY,
155
+ WEBSOCKET_CLOSED,
156
+ RTC_CLOSED,
157
+ DESTROYED,
158
+ }
159
+ ```
160
+
161
+ 可通过事件 `APPSTATE_CHANGE = 'appstatechange'` 监听 APP_STATE 的变化
162
+
163
+ ```javascript
164
+ // create code
165
+ ...
166
+
167
+ // 监听连接成功事件
168
+ larksr.on('appstatechange', function(e) {
169
+ console.log("appstatechange", e);
170
+ });
171
+ ```
172
+
173
+ ## 云端画面是否准备好
174
+
175
+ ```javascript
176
+ // 云端画面是否准备好,准备好后才可以发送输入事件
177
+ larksr.remoteScreenReady
178
+ ```
179
+
180
+ ## 当前的屏幕状态
181
+
182
+ ```javascript
183
+ // 通知视口改变或者需要重新计算显示属性
184
+ larksr.screenState.resize();
185
+ // 当前云端 APP 的大小
186
+ larksr.screenState.appSize;
187
+ // 当前云端 APP 的鼠标状态
188
+ larksr.screenState.appMouseMode;
189
+ // 当前渲染容器的大小
190
+ larksr.screenState.viewPort;
191
+ // 强制横屏模式
192
+ larksr.screenState.screenOrientation;
193
+ // 缩放模式
194
+ larksr.screenState.scaleMode;
195
+ // 是否全屏状态
196
+ larksr.screenState.isFullScreen;
197
+ // 是否锁定鼠标状态
198
+ larksr.screenState.isLockMouse;
199
+ // 云端应用的鼠标样式
200
+ larksr.screenState.cursorStyle;
201
+ // 初始化鼠标模式
202
+ larksr.screenState.initCursorMode;
203
+ // 是否是手机模式
204
+ larksr.screenState.isMobile;
205
+ // 是否渲染本地鼠标
206
+ larksr.screenState.isLocalRenderMouse;
207
+ // 是否锁定鼠标
208
+ larksr.screenState.isLockMosue;
209
+ ```
210
+
211
+ 监听 screenState 的状态改变,事件码为 `0`。当 SDK 内部或者外部触发了 `screenState.resize()` 之后调用。
212
+
213
+ ```javascript
214
+ larksr.screenState.on(0, () => {
215
+ console.log("screen state resize", larksr.screenState.screenOrientation);
216
+ });
217
+ ```
218
+
219
+ ## 操作类实例
220
+
221
+ ```javascript
222
+ // 开始监听,默认情况下自动开始
223
+ larksr.op.startListening();
224
+ // 结束监听输入事件.
225
+ larksr.op.stopListenling();
226
+ // 开启或关闭鼠标输入事件
227
+ larksr.op.setMouseEnable(enable: boolean);
228
+ // 开启或关闭键盘输入事件
229
+ larksr.op.setKeyboardEnable(enable: boolean);
230
+ // 开启或关闭手柄输入事件
231
+ larksr.op.setGamepadEnable(enable: boolean);
232
+ // 开启或关闭触摸屏幕输入事件
233
+ larksr.op.setTouchEnable(enable: boolean);
234
+ ```
235
+
236
+ ### 操作类中的 keyboardhandler
237
+
238
+ ```javascript
239
+ // 设置键盘事件默认拦截浏览器默认行为。
240
+ // 在 preventKeys 中的将拦截,如果数组设置为空则全部不拦截
241
+ // 默认拦截 F1 F5 F12
242
+ larksr.op.keyboardHandler.preventKeys = [["F1", "F5", "F12"]];
243
+ ```
244
+
245
+ ### 操作类中的 gestureHandler
246
+
247
+ gestureHandler 处理将移动端触摸事件对应为鼠标事件的过程。
248
+
249
+ #### 调节触摸事件触发参数
250
+
251
+ ```javascript
252
+ // 触摸事件在对应为鼠标事件中,提供的鼠标相对移动的速度。
253
+ // 即 rx = (pxNew-pxOld) * relativeMouseMoveSpeed
254
+ // ry = (pyNew-pyOld)* relativeMouseMoveSpeed
255
+ // 可能会影响使用相对移动(rawInput)判断的云端应用的效果
256
+ larksr.op.gestureHandler.relativeMouseMoveSpeed = 2;
257
+ // 触摸模拟为鼠标事件时,模拟点击的判断范围。
258
+ // 实际的鼠标事件点击时一般不会移动,而触摸操作基本上一定会触发移动事件
259
+ // 如果要模拟PC上的击事件,比如单击或双击,在鼠标按下和抬起之间不应再插入鼠标移动
260
+ // 当触发移动事件时,超出该判断范围才发送移动事件。
261
+ // 注意,修改该值可能会导致云端应用上判断单击或双击失败,如果云端应用不包含类似操作基本影响不大
262
+ larksr.op.gestureHandler.tapLimitRadius = 20;
263
+ // 在该时间范围下将尝试发送单机按下事件,修改该值可能会导致单机事件的触发成功率
264
+ larksr.op.gestureHandler.tapLimitTimeout = 100;
265
+ ```
266
+
267
+ #### 拦截触摸事件回调
268
+
269
+ 可以通过拦截触摸事件回调的方式,设置具体的触摸事件和鼠标事件的对应关系。
270
+
271
+ > 通过 larksr.op.gestureHandler.gestureCallback 设置回调函数
272
+ > 下面例子中的 GESTURE_TYPE 为 SDK 导出的手势事件类型,如果用 amd 方式引入的 SDK,所有导出类型均在 larksr_websdk 全局对象下。
273
+ > 如果是使用其他方式引入 SDK,如 improt 方式导入 `import { GESTURE_TYPE } from 'larksr_websdk'`
274
+ > 以下示例代码忽略 larksr 创建等过程
275
+
276
+ ```javascript
277
+ // 参数 event 有如下字段
278
+ // event : {
279
+ // type: GESTURE_TYPE; 手势事件的类型
280
+ // x: number; 转换为云端的坐标 x
281
+ // y: number; 转换为云端的坐标 y
282
+ // rx: number; 转换为云端的坐标 rx
283
+ // ry: number; 转换为云端的坐标 ry
284
+ // edge: boolean; 是否到触摸边缘
285
+ // rawEvent: any; 未转换为云端坐标的触摸事件
286
+ // }
287
+ //
288
+ larksr.op.gestureHandler.gestureCallback = (event) => {
289
+ console.log(event);
290
+ const p = event;
291
+ switch (event.type) {
292
+ // 单只触摸开始移动鼠标到当前位置
293
+ case GESTURE_TYPE.SINGLE_FINGER_TOUCH_START:
294
+ larksr.mouseMove(p.x, p.y, p.rx, p.ry);
295
+ break;
296
+ // 单指单击 -》左键单击
297
+ case GESTURE_TYPE.SINGLE_FINGER_TAP:
298
+ larksr.mouseTap(p.x, p.y, CloudLark.MouseKey.LEFT);
299
+ break;
300
+ // 单指按下 -》 移动鼠标, 按下鼠标
301
+ case GESTURE_TYPE.SINGLE_FINGER_TAP_DOWN:
302
+ // move mouse first
303
+ larksr.mouseMove(p.x, p.y, p.rx, p.ry);
304
+ // sync tap down
305
+ larksr.mouseDown(p.x, p.y, CloudLark.MouseKey.LEFT);
306
+ break;
307
+ // 单指抬起 -》 移动鼠标, 抬起鼠标
308
+ case GESTURE_TYPE.SINGLE_FINGER_TAP_UP:
309
+ // move mouse first
310
+ larksr.moseMove(p.x, p.y, p.rx, p.ry);
311
+ // sync tap down
312
+ larksr.mouseUp(p.x, p.y, CloudLark.MouseKey.LEFT);
313
+ break;
314
+ // 单指滑动 -》 移动鼠标
315
+ case GESTURE_TYPE.SINGLE_FINGER_SWIPE:
316
+ larksr.moseMove(p.x, p.y, p.rx, p.ry);
317
+ break;
318
+ // 单指开始滑动 -》 鼠标左键按下
319
+ case GESTURE_TYPE.SINGLE_FINGER_SWIPE_START:
320
+ // sync tap down
321
+ larksr.mouseDown(p.x, p.y, CloudLark.MouseKey.LEFT);
322
+ break;
323
+ // 单指滑动结束 -》 鼠标左键抬起
324
+ case GESTURE_TYPE.SINGLE_FINGER_SWIPE_END:
325
+ larksr.mouseUp(p.x, p.y, CloudLark.MouseKey.LEFT);
326
+ break;
327
+ // 双指单击 -》 鼠标右键单击
328
+ case GESTURE_TYPE.DOUBLE_FINGER_TAP:
329
+ larksr.mouseTap(p.x, p.y, CloudLark.MouseKey.RIGHT);
330
+ break;
331
+ // 双指按下 -》 移动鼠标
332
+ case GESTURE_TYPE.DOUBLE_FINGER_TAP_DOWN:
333
+ // move mouse first
334
+ larksr.moseMove(p.x, p.y, p.rx, p.ry);
335
+ // 抬起所有
336
+ // sync tap down
337
+ larksr.mouseDown(p.x, p.y, CloudLark.MouseKey.RIGHT);
338
+ break;
339
+ case GESTURE_TYPE.DOUBLE_FINGER_TAP_UP:
340
+ // move mouse first
341
+ larksr.moseMove(p.x, p.y, p.rx, p.ry);
342
+ // sync tap up
343
+ larksr.mouseUp(p.x, p.y, CloudLark.MouseKey.RIGHT);
344
+ break;
345
+ // 双指移动 -》 滚动滚轮
346
+ case GESTURE_TYPE.DOUBLE_FINGER_SWIPE:
347
+ // move mouse mid
348
+ // this.$emitMouseWheel(p.x, p.y, e.motion.y);
349
+ larksr.moseMove(p.x, p.y, p.rx, p.ry);
350
+ break;
351
+ case GESTURE_TYPE.DOUBLE_FINGER_EXPAND:
352
+ // windows 消息 deltaY 上是 +120 下是 -120
353
+ // 双指扩展向外滑动
354
+ // 滚轮向下移动
355
+ // move mouse mid
356
+ larksr.mouseWheel(p.x, p.y, 120);
357
+ break;
358
+ case GESTURE_TYPE.DOUBLE_FINGER_SHRINK:
359
+ // windows 消息 deltaY 上是 +120 下是 -120
360
+ // 双指向内滑动
361
+ // 滚轮向上移动
362
+ larksr.mouseWheel(p.x, p.y, -120);
363
+ break;
364
+ case GESTURE_TYPE.DOUBLE_FINGER_SWIPE_END:
365
+ // sync tap up
366
+ larksr.mouseUp(p.x, p.y, CloudLark.MouseKey.RIGHT);
367
+ break;
368
+ // 三指单击 -》 鼠标中键单击
369
+ case GESTURE_TYPE.TRIPLE_FINGER_TAP:
370
+ larksr.mouseTap(p.x, p.y, CloudLark.MouseKey.MIDDLE);
371
+ break;
372
+ // 三指滑动 -》 移动鼠标
373
+ case GESTURE_TYPE.TRIPLE_FINGER_SWIPE:
374
+ larksr.mouseMove(p.x, p.y, p.rx, p.ry);
375
+ break;
376
+ // 三指滑动按下 -》 鼠标中键按下
377
+ case GESTURE_TYPE.TRIPLE_FINGER_SWIPE_START:
378
+ larksr.mouseMove(p.x, p.y, p.rx, p.ry);
379
+ //
380
+ larksr.mouseDown(p.x, p.y, CloudLark.MouseKey.MIDDLE);
381
+ break;
382
+ // 三指滑动按下 -》 鼠标中键抬起
383
+ case GESTURE_TYPE.TRIPLE_FINGER_SWIPE_END:
384
+ // sync tap up
385
+ larksr.mouseUp(p.x, p.y, CloudLark.MouseKey.MIDDLE);
386
+ break;
387
+ // 所有手指抬起
388
+ case GESTURE_TYPE.RELEASE:
389
+ break;
390
+ default:
391
+ break;
392
+ }
393
+ };
394
+ ```
395
+
396
+ ## 全屏锁屏
397
+
398
+ ```javascript
399
+ // 进入全屏模式
400
+ larksr.fullScreen.launchFullScreen();
401
+ // 退出全屏模式
402
+ larksr.fullScreen.exitFullscreen();
403
+ // 锁定鼠标
404
+ larksr.lockPointer.lockPointer();
405
+ // 释放鼠标
406
+ larksr.lockPointer.exitPointerLock();
407
+ ```
408
+
409
+ ## 其他状态
410
+
411
+ ```typescript
412
+ /**
413
+ * 当前云端应用窗口大小
414
+ */
415
+ larksr.currentAppSize;
416
+
417
+ /**
418
+ * 同步客户端视口大小状态
419
+ */
420
+ larksr.syncClientViewport;
421
+
422
+ /**
423
+ * 服务端支持功能列表
424
+ */
425
+ larksr.serverFeatures;
426
+
427
+ /**
428
+ * 服务端状态:编码延时,渲染延时等
429
+ */
430
+ larksr.serverStatics;
431
+ ```
@@ -0,0 +1,84 @@
1
+ # 3.2.401
2
+
3
+ > 3.2.401 多媒体通道功能在渲染服务器 3.2.2.0+ 开启
4
+
5
+ ## 3.2.401 新增功能
6
+
7
+ > 以下示例代码假定 `larksr` 对象初始化并连接成功。
8
+ > 测试demo https://github.com/pingxingyun/lark_sr_websdk_demos/tree/gh-pages
9
+
10
+ (1). 新增多路 Web 端上传媒体功能。使用 `larksr.getMediaSharePeerConnection(index)` 获取上传媒体通道。
11
+
12
+ 序号 index 支持 0 - 5, 获取媒体通道之后的打开媒体操作和之前的接口相同。原有的接口等同于 `getMediaSharePeerConnection(0)`
13
+
14
+ 使用方式如
15
+
16
+ ```javascript
17
+ larksr.getMediaSharePeerConnection(0).openVideo();
18
+ larksr.getMediaSharePeerConnection(0).closeVideo();
19
+ ```
20
+
21
+ > 连接不支持多通道上传的老版本渲染服务器时,仅通道 0 起作用。
22
+
23
+ (2). 获取具体通道的连接状态 `getStats`
24
+
25
+ ```javascript
26
+ larksr.getMediaSharePeerConnection(0).getStats()
27
+ .then((res) => {
28
+ console.log("state: ", res);
29
+ })
30
+ .catch((e) => {
31
+ console.log("get state failed", e);
32
+ })
33
+ ```
34
+
35
+ (3). 设置具体连接通道的视频编码 `preferVideoCode`
36
+
37
+ ```javascript
38
+ larksr.getMediaSharePeerConnection(0).preferVideoCode = 'h264';
39
+ ```
40
+
41
+ > 当当前浏览器支持所设定的视频编码时优先使用,如果不支持使用默认的编码方式
42
+ > 设置完成之后再次打开视频起效,已经打开的视频通不会有变化。
43
+
44
+ (4). 设置具体连接通道的视频上传码率
45
+
46
+ ```javascript
47
+ larksr.getMediaSharePeerConnection(0).codeRate = {
48
+ start: 1000,
49
+ min: 1000,
50
+ max: 20000,
51
+ }
52
+ ```
53
+
54
+ > 设置完成之后再次打开视频起效,已经打开的视频通不会有变化。
55
+
56
+ (5). 媒体连接通道可以单独监听事件,如
57
+
58
+ ```javascript
59
+ larksr.getMediaSharePeerConnection(0).on("rtc_state_change", function(e) {
60
+ console.log("ice state change", e);
61
+ });
62
+ ```
63
+
64
+ (6). 打开或保存下来的媒体通道对象有单独的id, 0 - 5
65
+
66
+ ```javascript
67
+ larksr.getMediaSharePeerConnection(0).id
68
+ ```
69
+
70
+ (7). 强制使用画布模式,视频通道的画布可以顺时针或者逆时针旋转画面
71
+
72
+ 开启旋转
73
+
74
+ ```javascript
75
+ larksr.getMediaSharePeerConnection(0).forceRenderToCanvas = true;
76
+ ```
77
+
78
+ 强制顺时针旋转
79
+
80
+ ```javascript
81
+ larksr.getMediaSharePeerConnection(0).canvasRender.setRotate(true);
82
+ ```
83
+
84
+ > 设置完成之后再次打开视频起效,已经打开的视频通不会有变化。
@@ -0,0 +1,40 @@
1
+ # SDK ID 加密配置
2
+
3
+ 使用 larksr SDK 首先需要从平行云商务 business@pingxingyun.com 或者在 https://www.pingxingyun.com/console 获取 SDK 授权码(注意不是服务器端的授权码)。
4
+
5
+ 通过 larksr config 传入 `authCode` 或者通过 larksr.initSDKAuthCode('您的SDKID') 方法设置授权码。
6
+
7
+ 为保护 SDK ID 的安全性,可以从服务端 3.2.3.0 开始可以对 SDK ID 进行加密配置。
8
+
9
+ 配置 SDK 加密:
10
+
11
+ 1. 首先在 larkxr 平台后台登陆,找到系统设定->接入管理->SDKID密钥管理生成 SDK ID 加密 KEY
12
+
13
+ 2. 对 SDK ID 进行加密
14
+
15
+ 以下 java 代码为例:
16
+
17
+ ```java
18
+ public static void main(String[] args) {
19
+ /**
20
+ * @param res 被加密的原生字符串
21
+ * @param key 16位字符作为加密的key
22
+ */
23
+ try {
24
+ String res = "被加密的原生字符串";
25
+ String key = "16位字符作为加密的key";
26
+ String ALGORITHM = "AES";
27
+ String CHARSET = "UTF-8";
28
+ SecretKeySpec sks = new SecretKeySpec(key.getBytes(CHARSET), ALGORITHM);
29
+ Cipher cipher = Cipher.getInstance(ALGORITHM);
30
+ cipher.init(cipher.ENCRYPT_MODE, sks);
31
+ byte[] result = cipher.doFinal(res.getBytes());
32
+ // BASE64Encoder encoder = new BASE64Encoder(); //java8
33
+ Base64.Encoder encoder = Base64.getEncoder(); //java9+
34
+ System.out.println(encoder.encodeToString(result));
35
+ }catch (Exception e){
36
+ }
37
+ }
38
+ ```
39
+
40
+ 3. 获取到加密好的字符串传入 lark 配置中即可。