@hysc/meeting 5.0.13 → 5.0.15

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.
@@ -1,669 +1,670 @@
1
- import BoomCore from '@hysc/core';
2
- import BMRoomVM, { AudioProfileInfo } from "./BMRoomVM";
3
- import BMUserVM from '../BMUser/BMUserVM';
4
- import { SingleLocalStream, SingleRemoteStream, SubscribeOptions } from '../type';
5
- import BMChatVM from '../BMChat/BMChatVM';
6
- import BMStreamModelVM from "../BMStream/BMStreamModelVM";
7
- import { Device, VideoProfile } from '@hysc/core/esm/BoomAdapter/type/value';
8
- import BMRoomInfo from './BMRoomInfo';
9
- import { BehaviorSubject, Subject } from 'rxjs';
10
- import BMStreamModel, { ConnectErrorMessage } from '../BMStream/BMStreamModel';
11
- import BMUser from '../BMUser/BMUser';
12
- import BMLiveVM from './BMLiveVM';
13
- import SingletonQueue, { PullItem } from "../SingletonQueue/SingletonQueue";
14
- interface BMRoomProps {
15
- initDevices: boolean;
16
- }
17
- export declare let _selfSortType: number;
18
- export default class BMRoom {
19
- roomVM: BMRoomVM | null;
20
- userVM: BMUserVM;
21
- chatVM: BMChatVM;
22
- bmStreamVm: BMStreamModelVM;
23
- observes: any;
24
- boomCore: BoomCore;
25
- videoDevices: Device[];
26
- audioDevices: Device[];
27
- audioOutputDevices: Device[];
28
- selectVideoDevice: Device | null;
29
- selectAudioDevice: Device | null;
30
- selectAudioOutputDevice: Device | null;
31
- streamQueue: SingletonQueue;
32
- /**
33
- * 这个参数是和业务相关的功能,业务上的参会者列表是可以配置的,如果设置了只展示一列,那么所有的用户都要存储
34
- * 在commonUserList中
35
- */
36
- userListColumns: number;
37
- /**
38
- * 排序规则 1 是标品排序, 2 是中移排序
39
- */
40
- sortType: number;
41
- /**
42
- * brtc断网重连的时候,所有的订阅和播放相关的处理,都不需要
43
- */
44
- BRTCConnectFailed: boolean;
45
- /**
46
- * 本端推流失败次数
47
- */
48
- pubFailedNum: number;
49
- streamConnectedErrorQueue: Array<ConnectErrorMessage>;
50
- /**
51
- * 会议模式
52
- * 1 会议
53
- * 2 直播
54
- */
55
- conferenceMode: 1 | 2;
56
- /**
57
- * 是不是大房间
58
- */
59
- isBig: boolean;
60
- selectVideoDeviceWatcher: BehaviorSubject<Device | null>;
61
- selectAudioDeviceWatcher: BehaviorSubject<Device | null>;
62
- selectAudioOutputDeviceWatcher: BehaviorSubject<Device | null>;
63
- audioDevicesWatcher: Subject<Device[]>;
64
- videoDevicesWatcher: Subject<Device[]>;
65
- audioOutputDevicesWatcher: Subject<Device[]>;
66
- raiseHandleRespWatcher: Subject<{
67
- raiseHandsType: 0 | 1 | 2 | 3;
68
- raiseHands: boolean;
69
- }>;
70
- enableAudienceSpeakingWatcher: Subject<boolean>;
71
- videoProfile: VideoProfile;
72
- audioProfile: AudioProfileInfo | null;
73
- /**
74
- * brtc断网重连要给端上事件响应,所有端上把流单独做处理的,需要在收到这个事件之后,重新处理所有的effect
75
- */
76
- streamWSReconnectWatcher: Subject<boolean>;
77
- /**
78
- * bloud断网重连的时候的提示
79
- */
80
- bloudWSReconnectWatcher: Subject<boolean>;
81
- netConnecting: boolean;
82
- netConnectingWatcher: Subject<boolean>;
83
- hasSyncPermission: boolean;
84
- /**
85
- * 会控底层相关处理, 比如是否取消自动拉流
86
- */
87
- private meetingControlOptions;
88
- forceId: string;
89
- /**
90
- * bloud brtc 断网重连的处理
91
- * networkState 记录网络状态
92
- * handleReconnectedStream 防抖函数,当双方有连接断网重连之后,会执行这个方法
93
- *
94
- * brtc 的sync-room 之后,本地会把所有的stream都销毁,清空,然后统一走一遍查询处理
95
- * 绑定新的stream,这么做简单粗暴处理所有的brtc流,防止流重复问题i
96
- */
97
- networkState: {
98
- bloud: boolean;
99
- brtc: boolean;
100
- };
101
- brtcNetEnableWatcher: Subject<boolean>;
102
- get isSingleColumns(): boolean;
103
- /**
104
- * 传递信息用的,主要是用于message信令往上层业务发送消息
105
- */
106
- messageWatcher: BehaviorSubject<any>;
107
- roomInfo: BMRoomInfo;
108
- localUser: BMUser;
109
- bmLiveVM: BMLiveVM;
110
- isInWaitRoom: boolean;
111
- constructor({ initDevices }?: BMRoomProps);
112
- /**
113
- * 初始化底层会控相关
114
- * @param options
115
- */
116
- setupMeetingControlOptions(options: any): void;
117
- /**
118
- * 收到对某个流状态的订阅和取消状态
119
- * @private
120
- * @param event
121
- */
122
- private handleSubMessage;
123
- /**
124
- * 设置视频分辨率, 需要在入会之前调用
125
- * @param profile 设置视频分辨率
126
- */
127
- setVideoProfile(profile: VideoProfile): void;
128
- setUserListColumns(column: number): void;
129
- setSortType(type: number): void;
130
- /**
131
- * 设置声音增益的属性,回音消除 音频降噪 声音增益等
132
- * @param audioProfile
133
- */
134
- setAudioProfile(audioProfile: AudioProfileInfo): void;
135
- /**
136
- * 设置共享屏幕用户的brtc Sig
137
- * @param sig
138
- */
139
- setSig(sig: string): void;
140
- /**
141
- * 初始化输入设备
142
- */
143
- initDevices(): Promise<{
144
- videoDevices: Device[];
145
- audioDevices: Device[];
146
- audioOutputDevices: Device[];
147
- selectVideoDevice: Device | null;
148
- selectAudioDevice: Device | null;
149
- selectAudioOutputDevice: Device | null;
150
- }>;
151
- /**
152
- * 筛选出默认选中的设备,如果没有,选择第一个
153
- * @param devices
154
- */
155
- private filterDevice;
156
- /**
157
- * 处理用户设备变化之后的逻辑
158
- */
159
- private handleMediaDevicesChange;
160
- setSelectAudioDevice(device: Device): void;
161
- setSelectVideoDevice(device: Device): void;
162
- setSelectSpeakerDevice(device: Device): void;
163
- /**
164
- * 事件相关 observes执行subscribe, 即执行observes,并添加回调
165
- * @param observeName observe名称
166
- * @param subscribeParam subscribe的参数
167
- */
168
- observe(observeName: string, subscribeParam: any): any;
169
- /**
170
- * 加入一个音视频通话房间(初始化房间对象)
171
- * 进房代表开始一个音视频通话会话,这时候 SDK 会监听远端用户进房退房情况,若有远端用户进房并且发布流,本地会收到 'stream-added' 事件。
172
- * 进房后用户可以通过 publish() 发布本地流,本地流发布成功后远端用户就会收到相应 'stream-added' 事件通知从而完成一个双向的音视频通话连接。
173
- *
174
- * @param {Object} props room创建所需属性
175
- * @param {String} props.roomId 房间号
176
- * @param {Number} props.userId 用户id
177
- * @param {String} props.host 会议内的请求地址
178
- * @param {String} props.getProxiesUrl 获取ws请求地址的路径
179
- * @param {String} props.secret 房间密码
180
- * @param {Boolean} props.create 是否执行房间的创建, 默认为自适应, 有房间则创建, 没房间则不创建
181
- * @param {String} props.customToken 用户token
182
- * @param {Number} props.limit 人数最大值
183
- * @param {Number} props.brtcAppId
184
- * @param {String} props.collection 数据上报地址
185
- * @param {Object} props.userinfo 用户信息
186
- * @param {Number} props.userinfo.cver 客户端版本
187
- * @param {String} props.userinfo.nickname 用户昵称
188
- * @param {String} props.userinfo.avatar 用户头像
189
- * @param {String} props.userinfo.pos 客户端类型
190
- * @param {Number} props.type //1:单一模式, 2:混合模式
191
- * @param {String} props.name //房间名
192
- * @example
193
- * {
194
- room: '111111',//房间号
195
- host: 'https://v3test.boom.cn',//会议内的请求地址
196
- getProxiesUrl: '/api/conference/v1/auth/token',//获取ws地址的路径
197
- secret: '',//房间密码
198
- type: 1,
199
- nickname: 'zzy',
200
- collection: '',//数据上报地址
201
- token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJsb2dpbiIsImlhdCI6MTY1MDA5ODkwMSwibmJmIjoxNjUwMDk4OTAxLCJqdGkiOiIiLCJzdWIiOjk4NSwicHJ2IjoiODdlN2UxYmVlMjcyMmJmMzk4NjQxN2IzMzUxZTVmMjYzODQwY2ExYyIsImF0dHIiOjAsImJkIjowfQ.b-J9TnmjOzaVUJeY83tY_d1rdu_ELAWx8iH3odBN5kE',//用户token
202
- userinfo: {
203
- userId: 985,//用户id
204
- pos: 'web',
205
- nickname: 'zzy',//用户昵称
206
- avatar: '',//用户头像
207
- }
208
- }
209
- */
210
- join(props: any): Promise<undefined>;
211
- /**
212
- * 离开房间
213
- * @returns
214
- */
215
- leave(): Promise<void>;
216
- /**
217
- * 释放房间,会议结束时调用
218
- */
219
- releaseRoom(): Promise<void>;
220
- /**
221
- * 启动录制
222
- * @param {String} opts.filename - 录制文件名
223
- * @param {Object} opts.capture - 采集属性
224
- * @param {Number} opts.capture.width - 宽度
225
- * @param {Number} opts.capture.height - 高度
226
- * @param {Number} opts.capture.fps - 帧率
227
- * @param {Number} opts.record - 编码属性
228
- * @param {Number} opts.record.bitrate - 编码码率
229
- * @param {String|undefined} opts.record.format - 编码格式
230
- * @return {boolean}
231
- */
232
- startRecord(opts: any): Promise<boolean | undefined>;
233
- /**
234
- * 停止录制
235
- */
236
- stopRecord(): Promise<void>;
237
- /**
238
- * 启用下一个录制分片
239
- * @param filename - 下一分片文件名
240
- */
241
- sliceRecord(filename: string): Promise<boolean | undefined>;
242
- close(): void;
243
- /**
244
- * 开关对端摄像头
245
- * @param status true:开,false:关
246
- * @param uid 用户id
247
- */
248
- setRemoteVideoEnable(status: boolean, uid: string): Promise<void>;
249
- /**
250
- * 开关对端麦克风(现在还不知道怎么实现, 未找到实现逻辑)
251
- * @param status true:开,false:关
252
- * @param uid 用户id
253
- * @param isNotCancelRootReport 当打开麦克风时, 是否不取消音频权限申请
254
- */
255
- setRemoteAudioEnable(status: boolean, uid: string, isNotCancelRootReport: boolean | undefined): Promise<void>;
256
- /**
257
- * 开关本地摄像头
258
- * @param status true:开,false:关
259
- * @param videoTrack
260
- */
261
- setLocalVideoEnable(status: boolean, videoTrack?: MediaStreamTrack): Promise<void>;
262
- /**
263
- * 开关本地麦克风
264
- * @param status true:开,false:关
265
- */
266
- setLocalAudioEnable(status: boolean): Promise<void>;
267
- /**
268
- * 开关本地麦克风
269
- * @param status true:开,false:关
270
- */
271
- setLocalSpeakerEnable(status: boolean): Promise<void>;
272
- private _attachEvents;
273
- /**
274
- * 创建本地流
275
- * @param options
276
- * @param sid
277
- */
278
- createSingleLocalStream(options: {
279
- video: boolean;
280
- audio: boolean;
281
- videoSource?: MediaStreamTrack | undefined;
282
- audioSource?: MediaStreamTrack | undefined;
283
- } | undefined, sid: string): Promise<any>;
284
- /**
285
- * 这个方法只是为了生成brtc的流,目的是在用户只打开音频的情况下,然后在打开视频的时候,去创建一个只有视频的track的流
286
- * @param options
287
- * @param sid
288
- * @returns
289
- */
290
- createPBSingleLocalStream(options?: {
291
- video: boolean;
292
- audio: boolean;
293
- }, sid?: string): Promise<any>;
294
- /**
295
- * 枚举视频输入设备
296
- *
297
- * @returns 设备列表
298
- */
299
- enumVideoDevices: any;
300
- /**
301
- * 枚举音频输入设备
302
- *
303
- * @returns 设备列表
304
- */
305
- enumAudioInputDevices: any;
306
- /**
307
- * 枚举音频输出设备
308
- *
309
- * @returns 设备列表
310
- */
311
- enumAudioOutputDevices: any;
312
- /**
313
- * 检查音视频权限
314
- */
315
- getPermissions: any;
316
- checkSystemSupport: any;
317
- createStream: any;
318
- participantNotice: boolean;
319
- /**
320
- * 订阅远端流
321
- * 可通过该订阅接口指明需要订阅音频、视频或者音视频流。
322
- *
323
- * @param remoteStream 需要订阅的远端流对象,由 ‘participant-published’ 事件获得
324
- * @param options 订阅选项
325
- * @returns
326
- */
327
- subscribe(remoteStream: SingleRemoteStream, options?: SubscribeOptions): Promise<any>;
328
- /**
329
- * 取消订阅远端流
330
- *
331
- * @param remoteStream 需要取消订阅的远端流对象
332
- * @return
333
- */
334
- unsubscribe(remoteStream: SingleRemoteStream): Promise<any>;
335
- /**
336
- * 发布本地音视频流。
337
- * 该方法需要在 join() 进房后调用,一次音视频会话中只能发布一个本地流。若想发布另外一个本地流,可先通过 unpublish() 取消发布当前本地流后再发布新的本地流。
338
- * 在发布本地流后,可通过 removeTrack()、addTrack()、 replaceTrack() 来更新本地流中的某个音频或视频流。
339
- * 发布本地流后远端会收到 ‘participant-published’ 事件通知。
340
- *
341
- * @param stream 创建的本地流对象
342
- * @return
343
- */
344
- publish(stream: SingleLocalStream): Promise<any>;
345
- /**
346
- * 取消发布本地流。
347
- * 取消发布本地流后远端会收到 'participant-unpublished' 事件通知。
348
- * 请在 leave() 退房前取消已经发布的本地流。
349
- *
350
- * @param stream 取消发布的本地流对象
351
- * @return
352
- */
353
- unpublish(stream: SingleLocalStream): Promise<any>;
354
- /**
355
- * 获取userList的用户对象
356
- * @param userId
357
- */
358
- getUser(userId: string): BMUser | undefined;
359
- /**
360
- * 改变主持人,只有主持人权限和房间创建者可以改变主持人(房间创建者可以收回主持人)
361
- * @param userId
362
- * @param isKeep 是否保留转移人的联席主持人身份
363
- */
364
- changeMaster(userId: string, isKeep?: boolean): Promise<any>;
365
- /**
366
- * 改变联席主持人,返回设置为联席主持人的bmuser对象
367
- * @param userId
368
- * @param status true:设置成联席主持人 false:取消联席主持人身份
369
- * @param hasS
370
- */
371
- updateManager(userId: string, status: boolean, hasS?: boolean): Promise<any>;
372
- /**
373
- * 获取房间主持人id
374
- */
375
- getMaster(): string;
376
- /**
377
- * 获取房间创建者
378
- */
379
- getCreator(): string;
380
- /**
381
- * 获取房间名称
382
- */
383
- getName(): string;
384
- /**
385
- * 踢出用户
386
- * @param {String} userId 用户ID
387
- * @param withoutBlack 是否拉进黑名单 true 可以再进来 false 进不来
388
- */
389
- evictUser(userId: string, withoutBlack: boolean): Promise<any>;
390
- /**
391
- * 更新用户信息
392
- * @param {String} target - 目标用户id
393
- * @param {String} info - 用户信息或者自定义的字段
394
- */
395
- updateUser(target: string, info: any): Promise<void>;
396
- /**
397
- * 获取最新消息序列号
398
- */
399
- getMsgSeq(): number;
400
- /**
401
- * 获取限制人数
402
- */
403
- getLimits(): number;
404
- /**
405
- * 是否允许房间加入成员
406
- * @return {Boolean}
407
- */
408
- getSwitch(): Boolean;
409
- /**
410
- * 更新token
411
- * @param {String} token
412
- */
413
- /**
414
- * 同步房间信息,在事件 room-reconnected 触发后调用
415
- * @return {Promise}
416
- */
417
- syncRoom(): Promise<any>;
418
- /**
419
- * 更新房间状态
420
- * @param {Object} options - 更新房间信息参数
421
- * @param {Boolean} options.audiooff - 房间是否开启全员静音,可选
422
- * @param {Boolean} options.selfopenaudio - 房间是否允许成员自行开启语音
423
- * @param {Boolean} options.videooff - 房间是否开启禁用摄像头,可选
424
- * @param {Boolean} options.msgoff - 房间是否开启全员禁言,可选
425
- * @param {Boolean} options.switch - 房间是否开启准入开关,可选
426
- * @param {Boolean} options.lock - 房间是否锁定
427
- * @param {Boolean} options.secret - 不为空时表示房间密码,为以`md5(${room}.${secret})`计算所得值为参数
428
- * @param {Boolean} options.waitroom - 开关等候室 false 关闭
429
- * @returns {Promise}
430
- */
431
- update(options: any): Promise<any>;
432
- /**
433
- * 获取用户列表
434
- * @return {BMUser[]}
435
- */
436
- getUsers(): Map<string, BMUser>;
437
- /**
438
- * 获取用户总数
439
- * @deprecated
440
- * @return {Number}
441
- */
442
- getTotalUsers(): Number;
443
- /**
444
- * 发送消息,缓存至服务器,会生成序列号
445
- * 端上会收到 new-message 信令
446
- * @param {String} message - 待发送消息, 必须是 JSON 格式的字符串
447
- * @param {String|undefined} to - 如果为空,则为广播消息,不为空,则为定向到to用户的私聊消息
448
- */
449
- sendMessage(message: string, to: string | undefined): Promise<any>;
450
- /**
451
- * 发送自定义消息 可绕过 W 权限
452
- * @param {String} message - 待发送消息
453
- * @param {String|undefined} to - 如果为空,则为广播消息,不为空,则定向到to用户的消息
454
- */
455
- customMessage(message: string, to: string | undefined): Promise<any>;
456
- /**
457
- * 获取指定消息列表
458
- * @param {Number} startSeq - 起始序列号
459
- * @param {Number} endSeq - 终止序列号
460
- * @return {Promise<>}
461
- */
462
- getMessages(startSeq: number, endSeq: number): Promise<any>;
463
- /**
464
- * 获取本地用户对象
465
- * @return {BMUser}
466
- */
467
- getLocalParticipant(): BMUser;
468
- /**
469
- * 是否开启全员静音
470
- * @return {Boolean}
471
- */
472
- getAudioOff(): boolean;
473
- /**
474
- * 是否允许自行开启语音
475
- */
476
- getSelfOpenAudio(): boolean;
477
- /**
478
- * 是否开启全员禁用摄像头
479
- * @return {Boolean}
480
- */
481
- getVideoOff(): boolean;
482
- /**
483
- * 是否开启全员禁言[禁止发送消息]
484
- * @return {Boolean}
485
- */
486
- getMsgOff(): boolean;
487
- /**
488
- * 是否锁定房间
489
- * @return {Boolean}
490
- */
491
- getLock(): boolean;
492
- /**
493
- * 获取房间信息
494
- * @return {Object}
495
- */
496
- getRoomInfo(): BMRoomInfo;
497
- /**
498
- * 设置全员静音
499
- * @param {Boolean} audiooff - 是否静音
500
- * @param {Boolean} selfopenaudio - 是否允许自行开启
501
- * @return {Promise}
502
- */
503
- setAudioOff(audiooff: boolean, selfopenaudio: boolean): Promise<any>;
504
- /**
505
- * 更新房间状态
506
- * @param opts
507
- */
508
- updateRoom(opts: any): Promise<void>;
509
- /**
510
- * 设置全员禁用摄像头
511
- * @param {Boolean} videooff - 是否禁用摄像头
512
- * @return {Promise}
513
- */
514
- setVideoOff(videooff: boolean): Promise<any>;
515
- /**
516
- * 设置全员禁言
517
- * @param {Boolean} msgoff - 是否禁言
518
- * @return {Promise}
519
- */
520
- setMsgOff(msgoff: boolean): Promise<any>;
521
- /**
522
- * 设置是否允许加入成员
523
- * @param {Boolean} switch_ - 是否开启
524
- */
525
- setSwitch(switch_: boolean): Promise<void>;
526
- /**
527
- * 设置是否锁定房间
528
- * @param {Boolean} lock - 是否锁定
529
- */
530
- setLock(lock: boolean): Promise<boolean>;
531
- /**
532
- * 发送聊天室消息
533
- * @param msg
534
- */
535
- sendChatMessage(msg: string, userId: string | undefined, lostNet: boolean): Promise<any>;
536
- /**
537
- * 获取聊天室消息
538
- */
539
- getChatMessage(): import("../BMChat/BMMessageInfo").default[];
540
- /**
541
- * 获取聊天室历史消息
542
- */
543
- getHistoryMessage(): Promise<import("../BMChat/BMMessageInfo").default[]>;
544
- /**
545
- * 更新房间自定义属性状态
546
- * @param {Object} customStats - 更新自定义房间信息参数
547
- * @param {Boolean} customStats.layoutMode - 0/1/2, // 默认为0,0:自由模式,可随时切换;1:是使用 defaultLayout,布局内可控;2:是使用 mainLayout,主会场同内容
548
- * @returns {Promise}
549
- */
550
- updateCustomStats(customStats: any): Promise<any>;
551
- /**
552
- * 获取自定义属性
553
- */
554
- getCustomStats(): any;
555
- /**
556
- * 获取会议时间进度,返回秒数
557
- */
558
- getDuration(): number;
559
- /**
560
- * 检测目标用户是否有主持人权限
561
- */
562
- checkUserHasMaster(userId: string): boolean;
563
- changeNickName(userId: string, nickName: string): Promise<any>;
564
- handleQueueTask: (streamModel: BMStreamModel, noPlayChanged?: boolean) => Promise<void>;
565
- handleStreamTask(streamModel: BMStreamModel, noPlayChanged?: boolean): Promise<void>;
566
- /**
567
- * 处理拉流的逻辑
568
- * @param streamModel
569
- */
570
- handlePull(streamModel: BMStreamModel): Promise<void>;
571
- /**
572
- * 手动订阅流的处理
573
- */
574
- manualSubscribeStreamModel(streamModel: BMStreamModel): void;
575
- /**
576
- * 取消订阅流的处理
577
- * @param streamModel
578
- */
579
- handleUnsubscribe(streamModel: BMStreamModel): void;
580
- /**
581
- * 处理streamModel绑定 element 只处理播放逻辑
582
- * @param sm
583
- */
584
- handleStreamBindElement(sm: BMStreamModel): void;
585
- /**
586
- * 处理streamModel 绑定另一个播放器(主要是大窗口), 只处理播放逻辑
587
- * @param sm
588
- */
589
- handleStreamBindBigElement(sm: BMStreamModel): void;
590
- handleUnsubscribeStream(streamModel: BMStreamModel): Promise<void>;
591
- handleSubscribeSteam(streamModel: BMStreamModel): Promise<void>;
592
- /**
593
- * 处理大小流切换
594
- * @param streamModel
595
- */
596
- handleChangeStreamType(streamModel: BMStreamModel): Promise<void>;
597
- /**
598
- * 处理播放相关的逻辑
599
- * @param streamModel
600
- * @param noPlayChanged
601
- * @param bigMute 大窗口的是否静音
602
- */
603
- handlePlay(streamModel: BMStreamModel, noPlayChanged: boolean, bigMute?: boolean): Promise<void>;
604
- handlePlayInBIg(streamModel: BMStreamModel, bigMute?: boolean): Promise<void>;
605
- /**
606
- * 处理brtc订阅这股流失败的处理
607
- * @param streamModel
608
- */
609
- private handlePulledFailed;
610
- /**
611
- * 处理流出现connect-error的逻辑,本地流需要重新推流,远端流需要重新拉流
612
- * @param event
613
- * @param failed
614
- */
615
- private handleStreamConnectError;
616
- /**
617
- * 设置用户禁止/允许发言
618
- * @param bmUser
619
- * @param status
620
- */
621
- toggleAudienceSpeaking(bmUser: BMUser, status: boolean): void;
622
- /**
623
- * 更新用户的嘉宾身份 true 设置为嘉宾 false 设置为普通参会者
624
- * S -> permission
625
- * 普通参会者缺少S权限,嘉宾有S权限
626
- * @param user
627
- * @param status
628
- */
629
- updateUserIsGuest(user: BMUser, status: boolean): Promise<void>;
630
- /**
631
- * 联席主持人设置嘉宾的操作
632
- * @param userId
633
- */
634
- managerChangeToGuest(userId: string): void;
635
- /**
636
- * 将用户移动到等候室
637
- * @param target 用户id
638
- * @param toWait 是否移动到等候室
639
- * @param autoJoin 是否自动准入
640
- */
641
- moveUserRoom(target: string, toWait?: boolean, autoJoin?: boolean): Promise<any>;
642
- /**
643
- * 获取业务端是否开启参会者进入/离开直播通知
644
- * @param status
645
- */
646
- getParticipantNotice(status: boolean): void;
647
- /**
648
- *私有化部署url地址
649
- * @param url
650
- */
651
- setCustomUrl(url: string): void;
652
- /**
653
- * 重推本地流,在收到brtc的code 4001 之后,说明本地掉线了
654
- * 需要重新推本地流
655
- */
656
- handleRePushSelf(): Promise<void>;
657
- /**
658
- * 重拉远端流
659
- */
660
- handleResetOtherStreamStatus(): void;
661
- addUser2Queue(pullItem: PullItem): Promise<void>;
662
- processUser: (uIds: Map<string, PullItem>) => Promise<void>;
663
- queueProcessor: import("lodash-es").DebouncedFunc<(uIds: Map<string, PullItem>) => Promise<void>>;
664
- queryBrtcStreams(uids: string[]): Promise<any>;
665
- handleAddStreams(streams: SingleRemoteStream[]): void;
666
- getForceUser(forceId: string): Promise<void>;
667
- getVersion(): string;
668
- }
669
- export {};
1
+ import BoomCore from '@hysc/core';
2
+ import BMRoomVM, { AudioProfileInfo } from "./BMRoomVM";
3
+ import BMUserVM from '../BMUser/BMUserVM';
4
+ import { SingleLocalStream, SingleRemoteStream, SubscribeOptions } from '../type';
5
+ import BMChatVM from '../BMChat/BMChatVM';
6
+ import BMStreamModelVM from "../BMStream/BMStreamModelVM";
7
+ import { Device, VideoProfile } from '@hysc/core/esm/BoomAdapter/type/value';
8
+ import BMRoomInfo from './BMRoomInfo';
9
+ import { BehaviorSubject, Subject } from 'rxjs';
10
+ import BMStreamModel, { ConnectErrorMessage } from '../BMStream/BMStreamModel';
11
+ import BMUser from '../BMUser/BMUser';
12
+ import BMLiveVM from './BMLiveVM';
13
+ import SingletonQueue, { PullItem } from "../SingletonQueue/SingletonQueue";
14
+ interface BMRoomProps {
15
+ initDevices: boolean;
16
+ }
17
+ export declare let _selfSortType: number;
18
+ export default class BMRoom {
19
+ roomVM: BMRoomVM | null;
20
+ userVM: BMUserVM;
21
+ chatVM: BMChatVM;
22
+ bmStreamVm: BMStreamModelVM;
23
+ observes: any;
24
+ boomCore: BoomCore;
25
+ videoDevices: Device[];
26
+ audioDevices: Device[];
27
+ audioOutputDevices: Device[];
28
+ selectVideoDevice: Device | null;
29
+ selectAudioDevice: Device | null;
30
+ selectAudioOutputDevice: Device | null;
31
+ streamQueue: SingletonQueue;
32
+ /**
33
+ * 这个参数是和业务相关的功能,业务上的参会者列表是可以配置的,如果设置了只展示一列,那么所有的用户都要存储
34
+ * 在commonUserList中
35
+ */
36
+ userListColumns: number;
37
+ /**
38
+ * 排序规则 1 是标品排序, 2 是中移排序
39
+ */
40
+ sortType: number;
41
+ /**
42
+ * brtc断网重连的时候,所有的订阅和播放相关的处理,都不需要
43
+ */
44
+ BRTCConnectFailed: boolean;
45
+ /**
46
+ * 本端推流失败次数
47
+ */
48
+ pubFailedNum: number;
49
+ streamConnectedErrorQueue: Array<ConnectErrorMessage>;
50
+ /**
51
+ * 会议模式
52
+ * 1 会议
53
+ * 2 直播
54
+ */
55
+ conferenceMode: 1 | 2;
56
+ /**
57
+ * 是不是大房间
58
+ */
59
+ isBig: boolean;
60
+ selectVideoDeviceWatcher: BehaviorSubject<Device | null>;
61
+ selectAudioDeviceWatcher: BehaviorSubject<Device | null>;
62
+ selectAudioOutputDeviceWatcher: BehaviorSubject<Device | null>;
63
+ audioDevicesWatcher: Subject<Device[]>;
64
+ videoDevicesWatcher: Subject<Device[]>;
65
+ audioOutputDevicesWatcher: Subject<Device[]>;
66
+ raiseHandleRespWatcher: Subject<{
67
+ raiseHandsType: 0 | 1 | 2 | 3;
68
+ raiseHands: boolean;
69
+ }>;
70
+ enableAudienceSpeakingWatcher: Subject<boolean>;
71
+ videoProfile: VideoProfile;
72
+ audioProfile: AudioProfileInfo | null;
73
+ /**
74
+ * brtc断网重连要给端上事件响应,所有端上把流单独做处理的,需要在收到这个事件之后,重新处理所有的effect
75
+ */
76
+ streamWSReconnectWatcher: Subject<boolean>;
77
+ /**
78
+ * bloud断网重连的时候的提示
79
+ */
80
+ bloudWSReconnectWatcher: Subject<boolean>;
81
+ netConnecting: boolean;
82
+ netConnectingWatcher: Subject<boolean>;
83
+ hasSyncPermission: boolean;
84
+ /**
85
+ * 会控底层相关处理, 比如是否取消自动拉流
86
+ */
87
+ private meetingControlOptions;
88
+ forceId: string;
89
+ /**
90
+ * bloud brtc 断网重连的处理
91
+ * networkState 记录网络状态
92
+ * handleReconnectedStream 防抖函数,当双方有连接断网重连之后,会执行这个方法
93
+ *
94
+ * brtc 的sync-room 之后,本地会把所有的stream都销毁,清空,然后统一走一遍查询处理
95
+ * 绑定新的stream,这么做简单粗暴处理所有的brtc流,防止流重复问题i
96
+ */
97
+ networkState: {
98
+ bloud: boolean;
99
+ brtc: boolean;
100
+ };
101
+ brtcNetEnableWatcher: Subject<boolean>;
102
+ get isSingleColumns(): boolean;
103
+ /**
104
+ * 传递信息用的,主要是用于message信令往上层业务发送消息
105
+ */
106
+ messageWatcher: BehaviorSubject<any>;
107
+ roomInfo: BMRoomInfo;
108
+ localUser: BMUser;
109
+ bmLiveVM: BMLiveVM;
110
+ isInWaitRoom: boolean;
111
+ constructor({ initDevices }?: BMRoomProps);
112
+ handleReprocessStreamError: () => void;
113
+ /**
114
+ * 初始化底层会控相关
115
+ * @param options
116
+ */
117
+ setupMeetingControlOptions(options: any): void;
118
+ /**
119
+ * 收到对某个流状态的订阅和取消状态
120
+ * @private
121
+ * @param event
122
+ */
123
+ private handleSubMessage;
124
+ /**
125
+ * 设置视频分辨率, 需要在入会之前调用
126
+ * @param profile 设置视频分辨率
127
+ */
128
+ setVideoProfile(profile: VideoProfile): void;
129
+ setUserListColumns(column: number): void;
130
+ setSortType(type: number): void;
131
+ /**
132
+ * 设置声音增益的属性,回音消除 音频降噪 声音增益等
133
+ * @param audioProfile
134
+ */
135
+ setAudioProfile(audioProfile: AudioProfileInfo): void;
136
+ /**
137
+ * 设置共享屏幕用户的brtc Sig
138
+ * @param sig
139
+ */
140
+ setSig(sig: string): void;
141
+ /**
142
+ * 初始化输入设备
143
+ */
144
+ initDevices(): Promise<{
145
+ videoDevices: Device[];
146
+ audioDevices: Device[];
147
+ audioOutputDevices: Device[];
148
+ selectVideoDevice: Device | null;
149
+ selectAudioDevice: Device | null;
150
+ selectAudioOutputDevice: Device | null;
151
+ }>;
152
+ /**
153
+ * 筛选出默认选中的设备,如果没有,选择第一个
154
+ * @param devices
155
+ */
156
+ private filterDevice;
157
+ /**
158
+ * 处理用户设备变化之后的逻辑
159
+ */
160
+ private handleMediaDevicesChange;
161
+ setSelectAudioDevice(device: Device): void;
162
+ setSelectVideoDevice(device: Device): void;
163
+ setSelectSpeakerDevice(device: Device): void;
164
+ /**
165
+ * 事件相关 observes执行subscribe, 即执行observes,并添加回调
166
+ * @param observeName observe名称
167
+ * @param subscribeParam subscribe的参数
168
+ */
169
+ observe(observeName: string, subscribeParam: any): any;
170
+ /**
171
+ * 加入一个音视频通话房间(初始化房间对象)
172
+ * 进房代表开始一个音视频通话会话,这时候 SDK 会监听远端用户进房退房情况,若有远端用户进房并且发布流,本地会收到 'stream-added' 事件。
173
+ * 进房后用户可以通过 publish() 发布本地流,本地流发布成功后远端用户就会收到相应 'stream-added' 事件通知从而完成一个双向的音视频通话连接。
174
+ *
175
+ * @param {Object} props room创建所需属性
176
+ * @param {String} props.roomId 房间号
177
+ * @param {Number} props.userId 用户id
178
+ * @param {String} props.host 会议内的请求地址
179
+ * @param {String} props.getProxiesUrl 获取ws请求地址的路径
180
+ * @param {String} props.secret 房间密码
181
+ * @param {Boolean} props.create 是否执行房间的创建, 默认为自适应, 有房间则创建, 没房间则不创建
182
+ * @param {String} props.customToken 用户token
183
+ * @param {Number} props.limit 人数最大值
184
+ * @param {Number} props.brtcAppId
185
+ * @param {String} props.collection 数据上报地址
186
+ * @param {Object} props.userinfo 用户信息
187
+ * @param {Number} props.userinfo.cver 客户端版本
188
+ * @param {String} props.userinfo.nickname 用户昵称
189
+ * @param {String} props.userinfo.avatar 用户头像
190
+ * @param {String} props.userinfo.pos 客户端类型
191
+ * @param {Number} props.type //1:单一模式, 2:混合模式
192
+ * @param {String} props.name //房间名
193
+ * @example
194
+ * {
195
+ room: '111111',//房间号
196
+ host: 'https://v3test.boom.cn',//会议内的请求地址
197
+ getProxiesUrl: '/api/conference/v1/auth/token',//获取ws地址的路径
198
+ secret: '',//房间密码
199
+ type: 1,
200
+ nickname: 'zzy',
201
+ collection: '',//数据上报地址
202
+ token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJsb2dpbiIsImlhdCI6MTY1MDA5ODkwMSwibmJmIjoxNjUwMDk4OTAxLCJqdGkiOiIiLCJzdWIiOjk4NSwicHJ2IjoiODdlN2UxYmVlMjcyMmJmMzk4NjQxN2IzMzUxZTVmMjYzODQwY2ExYyIsImF0dHIiOjAsImJkIjowfQ.b-J9TnmjOzaVUJeY83tY_d1rdu_ELAWx8iH3odBN5kE',//用户token
203
+ userinfo: {
204
+ userId: 985,//用户id
205
+ pos: 'web',
206
+ nickname: 'zzy',//用户昵称
207
+ avatar: '',//用户头像
208
+ }
209
+ }
210
+ */
211
+ join(props: any): Promise<undefined>;
212
+ /**
213
+ * 离开房间
214
+ * @returns
215
+ */
216
+ leave(): Promise<void>;
217
+ /**
218
+ * 释放房间,会议结束时调用
219
+ */
220
+ releaseRoom(): Promise<void>;
221
+ /**
222
+ * 启动录制
223
+ * @param {String} opts.filename - 录制文件名
224
+ * @param {Object} opts.capture - 采集属性
225
+ * @param {Number} opts.capture.width - 宽度
226
+ * @param {Number} opts.capture.height - 高度
227
+ * @param {Number} opts.capture.fps - 帧率
228
+ * @param {Number} opts.record - 编码属性
229
+ * @param {Number} opts.record.bitrate - 编码码率
230
+ * @param {String|undefined} opts.record.format - 编码格式
231
+ * @return {boolean}
232
+ */
233
+ startRecord(opts: any): Promise<boolean | undefined>;
234
+ /**
235
+ * 停止录制
236
+ */
237
+ stopRecord(): Promise<void>;
238
+ /**
239
+ * 启用下一个录制分片
240
+ * @param filename - 下一分片文件名
241
+ */
242
+ sliceRecord(filename: string): Promise<boolean | undefined>;
243
+ close(): void;
244
+ /**
245
+ * 开关对端摄像头
246
+ * @param status true:开,false:关
247
+ * @param uid 用户id
248
+ */
249
+ setRemoteVideoEnable(status: boolean, uid: string): Promise<void>;
250
+ /**
251
+ * 开关对端麦克风(现在还不知道怎么实现, 未找到实现逻辑)
252
+ * @param status true:开,false:关
253
+ * @param uid 用户id
254
+ * @param isNotCancelRootReport 当打开麦克风时, 是否不取消音频权限申请
255
+ */
256
+ setRemoteAudioEnable(status: boolean, uid: string, isNotCancelRootReport: boolean | undefined): Promise<void>;
257
+ /**
258
+ * 开关本地摄像头
259
+ * @param status true:开,false:关
260
+ * @param videoTrack
261
+ */
262
+ setLocalVideoEnable(status: boolean, videoTrack?: MediaStreamTrack): Promise<void>;
263
+ /**
264
+ * 开关本地麦克风
265
+ * @param status true:开,false:关
266
+ */
267
+ setLocalAudioEnable(status: boolean): Promise<void>;
268
+ /**
269
+ * 开关本地麦克风
270
+ * @param status true:开,false:关
271
+ */
272
+ setLocalSpeakerEnable(status: boolean): Promise<void>;
273
+ private _attachEvents;
274
+ /**
275
+ * 创建本地流
276
+ * @param options
277
+ * @param sid
278
+ */
279
+ createSingleLocalStream(options: {
280
+ video: boolean;
281
+ audio: boolean;
282
+ videoSource?: MediaStreamTrack | undefined;
283
+ audioSource?: MediaStreamTrack | undefined;
284
+ } | undefined, sid: string): Promise<any>;
285
+ /**
286
+ * 这个方法只是为了生成brtc的流,目的是在用户只打开音频的情况下,然后在打开视频的时候,去创建一个只有视频的track的流
287
+ * @param options
288
+ * @param sid
289
+ * @returns
290
+ */
291
+ createPBSingleLocalStream(options?: {
292
+ video: boolean;
293
+ audio: boolean;
294
+ }, sid?: string): Promise<any>;
295
+ /**
296
+ * 枚举视频输入设备
297
+ *
298
+ * @returns 设备列表
299
+ */
300
+ enumVideoDevices: any;
301
+ /**
302
+ * 枚举音频输入设备
303
+ *
304
+ * @returns 设备列表
305
+ */
306
+ enumAudioInputDevices: any;
307
+ /**
308
+ * 枚举音频输出设备
309
+ *
310
+ * @returns 设备列表
311
+ */
312
+ enumAudioOutputDevices: any;
313
+ /**
314
+ * 检查音视频权限
315
+ */
316
+ getPermissions: any;
317
+ checkSystemSupport: any;
318
+ createStream: any;
319
+ participantNotice: boolean;
320
+ /**
321
+ * 订阅远端流
322
+ * 可通过该订阅接口指明需要订阅音频、视频或者音视频流。
323
+ *
324
+ * @param remoteStream 需要订阅的远端流对象,由 ‘participant-published’ 事件获得
325
+ * @param options 订阅选项
326
+ * @returns
327
+ */
328
+ subscribe(remoteStream: SingleRemoteStream, options?: SubscribeOptions): Promise<any>;
329
+ /**
330
+ * 取消订阅远端流
331
+ *
332
+ * @param remoteStream 需要取消订阅的远端流对象
333
+ * @return
334
+ */
335
+ unsubscribe(remoteStream: SingleRemoteStream): Promise<any>;
336
+ /**
337
+ * 发布本地音视频流。
338
+ * 该方法需要在 join() 进房后调用,一次音视频会话中只能发布一个本地流。若想发布另外一个本地流,可先通过 unpublish() 取消发布当前本地流后再发布新的本地流。
339
+ * 在发布本地流后,可通过 removeTrack()、addTrack()、 replaceTrack() 来更新本地流中的某个音频或视频流。
340
+ * 发布本地流后远端会收到 ‘participant-published’ 事件通知。
341
+ *
342
+ * @param stream 创建的本地流对象
343
+ * @return
344
+ */
345
+ publish(stream: SingleLocalStream): Promise<any>;
346
+ /**
347
+ * 取消发布本地流。
348
+ * 取消发布本地流后远端会收到 'participant-unpublished' 事件通知。
349
+ * 请在 leave() 退房前取消已经发布的本地流。
350
+ *
351
+ * @param stream 取消发布的本地流对象
352
+ * @return
353
+ */
354
+ unpublish(stream: SingleLocalStream): Promise<any>;
355
+ /**
356
+ * 获取userList的用户对象
357
+ * @param userId
358
+ */
359
+ getUser(userId: string): BMUser | undefined;
360
+ /**
361
+ * 改变主持人,只有主持人权限和房间创建者可以改变主持人(房间创建者可以收回主持人)
362
+ * @param userId
363
+ * @param isKeep 是否保留转移人的联席主持人身份
364
+ */
365
+ changeMaster(userId: string, isKeep?: boolean): Promise<any>;
366
+ /**
367
+ * 改变联席主持人,返回设置为联席主持人的bmuser对象
368
+ * @param userId
369
+ * @param status true:设置成联席主持人 false:取消联席主持人身份
370
+ * @param hasS
371
+ */
372
+ updateManager(userId: string, status: boolean, hasS?: boolean): Promise<any>;
373
+ /**
374
+ * 获取房间主持人id
375
+ */
376
+ getMaster(): string;
377
+ /**
378
+ * 获取房间创建者
379
+ */
380
+ getCreator(): string;
381
+ /**
382
+ * 获取房间名称
383
+ */
384
+ getName(): string;
385
+ /**
386
+ * 踢出用户
387
+ * @param {String} userId 用户ID
388
+ * @param withoutBlack 是否拉进黑名单 true 可以再进来 false 进不来
389
+ */
390
+ evictUser(userId: string, withoutBlack: boolean): Promise<any>;
391
+ /**
392
+ * 更新用户信息
393
+ * @param {String} target - 目标用户id
394
+ * @param {String} info - 用户信息或者自定义的字段
395
+ */
396
+ updateUser(target: string, info: any): Promise<void>;
397
+ /**
398
+ * 获取最新消息序列号
399
+ */
400
+ getMsgSeq(): number;
401
+ /**
402
+ * 获取限制人数
403
+ */
404
+ getLimits(): number;
405
+ /**
406
+ * 是否允许房间加入成员
407
+ * @return {Boolean}
408
+ */
409
+ getSwitch(): Boolean;
410
+ /**
411
+ * 更新token
412
+ * @param {String} token
413
+ */
414
+ /**
415
+ * 同步房间信息,在事件 room-reconnected 触发后调用
416
+ * @return {Promise}
417
+ */
418
+ syncRoom(): Promise<any>;
419
+ /**
420
+ * 更新房间状态
421
+ * @param {Object} options - 更新房间信息参数
422
+ * @param {Boolean} options.audiooff - 房间是否开启全员静音,可选
423
+ * @param {Boolean} options.selfopenaudio - 房间是否允许成员自行开启语音
424
+ * @param {Boolean} options.videooff - 房间是否开启禁用摄像头,可选
425
+ * @param {Boolean} options.msgoff - 房间是否开启全员禁言,可选
426
+ * @param {Boolean} options.switch - 房间是否开启准入开关,可选
427
+ * @param {Boolean} options.lock - 房间是否锁定
428
+ * @param {Boolean} options.secret - 不为空时表示房间密码,为以`md5(${room}.${secret})`计算所得值为参数
429
+ * @param {Boolean} options.waitroom - 开关等候室 false 关闭
430
+ * @returns {Promise}
431
+ */
432
+ update(options: any): Promise<any>;
433
+ /**
434
+ * 获取用户列表
435
+ * @return {BMUser[]}
436
+ */
437
+ getUsers(): Map<string, BMUser>;
438
+ /**
439
+ * 获取用户总数
440
+ * @deprecated
441
+ * @return {Number}
442
+ */
443
+ getTotalUsers(): Number;
444
+ /**
445
+ * 发送消息,缓存至服务器,会生成序列号
446
+ * 端上会收到 new-message 信令
447
+ * @param {String} message - 待发送消息, 必须是 JSON 格式的字符串
448
+ * @param {String|undefined} to - 如果为空,则为广播消息,不为空,则为定向到to用户的私聊消息
449
+ */
450
+ sendMessage(message: string, to: string | undefined): Promise<any>;
451
+ /**
452
+ * 发送自定义消息 可绕过 W 权限
453
+ * @param {String} message - 待发送消息
454
+ * @param {String|undefined} to - 如果为空,则为广播消息,不为空,则定向到to用户的消息
455
+ */
456
+ customMessage(message: string, to: string | undefined): Promise<any>;
457
+ /**
458
+ * 获取指定消息列表
459
+ * @param {Number} startSeq - 起始序列号
460
+ * @param {Number} endSeq - 终止序列号
461
+ * @return {Promise<>}
462
+ */
463
+ getMessages(startSeq: number, endSeq: number): Promise<any>;
464
+ /**
465
+ * 获取本地用户对象
466
+ * @return {BMUser}
467
+ */
468
+ getLocalParticipant(): BMUser;
469
+ /**
470
+ * 是否开启全员静音
471
+ * @return {Boolean}
472
+ */
473
+ getAudioOff(): boolean;
474
+ /**
475
+ * 是否允许自行开启语音
476
+ */
477
+ getSelfOpenAudio(): boolean;
478
+ /**
479
+ * 是否开启全员禁用摄像头
480
+ * @return {Boolean}
481
+ */
482
+ getVideoOff(): boolean;
483
+ /**
484
+ * 是否开启全员禁言[禁止发送消息]
485
+ * @return {Boolean}
486
+ */
487
+ getMsgOff(): boolean;
488
+ /**
489
+ * 是否锁定房间
490
+ * @return {Boolean}
491
+ */
492
+ getLock(): boolean;
493
+ /**
494
+ * 获取房间信息
495
+ * @return {Object}
496
+ */
497
+ getRoomInfo(): BMRoomInfo;
498
+ /**
499
+ * 设置全员静音
500
+ * @param {Boolean} audiooff - 是否静音
501
+ * @param {Boolean} selfopenaudio - 是否允许自行开启
502
+ * @return {Promise}
503
+ */
504
+ setAudioOff(audiooff: boolean, selfopenaudio: boolean): Promise<any>;
505
+ /**
506
+ * 更新房间状态
507
+ * @param opts
508
+ */
509
+ updateRoom(opts: any): Promise<void>;
510
+ /**
511
+ * 设置全员禁用摄像头
512
+ * @param {Boolean} videooff - 是否禁用摄像头
513
+ * @return {Promise}
514
+ */
515
+ setVideoOff(videooff: boolean): Promise<any>;
516
+ /**
517
+ * 设置全员禁言
518
+ * @param {Boolean} msgoff - 是否禁言
519
+ * @return {Promise}
520
+ */
521
+ setMsgOff(msgoff: boolean): Promise<any>;
522
+ /**
523
+ * 设置是否允许加入成员
524
+ * @param {Boolean} switch_ - 是否开启
525
+ */
526
+ setSwitch(switch_: boolean): Promise<void>;
527
+ /**
528
+ * 设置是否锁定房间
529
+ * @param {Boolean} lock - 是否锁定
530
+ */
531
+ setLock(lock: boolean): Promise<boolean>;
532
+ /**
533
+ * 发送聊天室消息
534
+ * @param msg
535
+ */
536
+ sendChatMessage(msg: string, userId: string | undefined, lostNet: boolean): Promise<any>;
537
+ /**
538
+ * 获取聊天室消息
539
+ */
540
+ getChatMessage(): import("../BMChat/BMMessageInfo").default[];
541
+ /**
542
+ * 获取聊天室历史消息
543
+ */
544
+ getHistoryMessage(): Promise<import("../BMChat/BMMessageInfo").default[]>;
545
+ /**
546
+ * 更新房间自定义属性状态
547
+ * @param {Object} customStats - 更新自定义房间信息参数
548
+ * @param {Boolean} customStats.layoutMode - 0/1/2, // 默认为0,0:自由模式,可随时切换;1:是使用 defaultLayout,布局内可控;2:是使用 mainLayout,主会场同内容
549
+ * @returns {Promise}
550
+ */
551
+ updateCustomStats(customStats: any): Promise<any>;
552
+ /**
553
+ * 获取自定义属性
554
+ */
555
+ getCustomStats(): any;
556
+ /**
557
+ * 获取会议时间进度,返回秒数
558
+ */
559
+ getDuration(): number;
560
+ /**
561
+ * 检测目标用户是否有主持人权限
562
+ */
563
+ checkUserHasMaster(userId: string): boolean;
564
+ changeNickName(userId: string, nickName: string): Promise<any>;
565
+ handleQueueTask: (streamModel: BMStreamModel, noPlayChanged?: boolean) => Promise<void>;
566
+ handleStreamTask(streamModel: BMStreamModel, noPlayChanged?: boolean): Promise<void>;
567
+ /**
568
+ * 处理拉流的逻辑
569
+ * @param streamModel
570
+ */
571
+ handlePull(streamModel: BMStreamModel): Promise<void>;
572
+ /**
573
+ * 手动订阅流的处理
574
+ */
575
+ manualSubscribeStreamModel(streamModel: BMStreamModel): void;
576
+ /**
577
+ * 取消订阅流的处理
578
+ * @param streamModel
579
+ */
580
+ handleUnsubscribe(streamModel: BMStreamModel): void;
581
+ /**
582
+ * 处理streamModel绑定 element 只处理播放逻辑
583
+ * @param sm
584
+ */
585
+ handleStreamBindElement(sm: BMStreamModel): void;
586
+ /**
587
+ * 处理streamModel 绑定另一个播放器(主要是大窗口), 只处理播放逻辑
588
+ * @param sm
589
+ */
590
+ handleStreamBindBigElement(sm: BMStreamModel): void;
591
+ handleUnsubscribeStream(streamModel: BMStreamModel): Promise<void>;
592
+ handleSubscribeSteam(streamModel: BMStreamModel): Promise<void>;
593
+ /**
594
+ * 处理大小流切换
595
+ * @param streamModel
596
+ */
597
+ handleChangeStreamType(streamModel: BMStreamModel): Promise<void>;
598
+ /**
599
+ * 处理播放相关的逻辑
600
+ * @param streamModel
601
+ * @param noPlayChanged
602
+ * @param bigMute 大窗口的是否静音
603
+ */
604
+ handlePlay(streamModel: BMStreamModel, noPlayChanged: boolean, bigMute?: boolean): Promise<void>;
605
+ handlePlayInBIg(streamModel: BMStreamModel, bigMute?: boolean): Promise<void>;
606
+ /**
607
+ * 处理brtc订阅这股流失败的处理
608
+ * @param streamModel
609
+ */
610
+ private handlePulledFailed;
611
+ /**
612
+ * 处理流出现connect-error的逻辑,本地流需要重新推流,远端流需要重新拉流
613
+ * @param event
614
+ * @param failed
615
+ */
616
+ private handleStreamConnectError;
617
+ /**
618
+ * 设置用户禁止/允许发言
619
+ * @param bmUser
620
+ * @param status
621
+ */
622
+ toggleAudienceSpeaking(bmUser: BMUser, status: boolean): void;
623
+ /**
624
+ * 更新用户的嘉宾身份 true 设置为嘉宾 false 设置为普通参会者
625
+ * S -> permission
626
+ * 普通参会者缺少S权限,嘉宾有S权限
627
+ * @param user
628
+ * @param status
629
+ */
630
+ updateUserIsGuest(user: BMUser, status: boolean): Promise<void>;
631
+ /**
632
+ * 联席主持人设置嘉宾的操作
633
+ * @param userId
634
+ */
635
+ managerChangeToGuest(userId: string): void;
636
+ /**
637
+ * 将用户移动到等候室
638
+ * @param target 用户id
639
+ * @param toWait 是否移动到等候室
640
+ * @param autoJoin 是否自动准入
641
+ */
642
+ moveUserRoom(target: string, toWait?: boolean, autoJoin?: boolean): Promise<any>;
643
+ /**
644
+ * 获取业务端是否开启参会者进入/离开直播通知
645
+ * @param status
646
+ */
647
+ getParticipantNotice(status: boolean): void;
648
+ /**
649
+ *私有化部署url地址
650
+ * @param url
651
+ */
652
+ setCustomUrl(url: string): void;
653
+ /**
654
+ * 重推本地流,在收到brtc的code 4001 之后,说明本地掉线了
655
+ * 需要重新推本地流
656
+ */
657
+ handleRePushSelf(): Promise<void>;
658
+ /**
659
+ * 重拉远端流
660
+ */
661
+ handleResetOtherStreamStatus(): void;
662
+ addUser2Queue(pullItem: PullItem): Promise<void>;
663
+ processUser: (uIds: Map<string, PullItem>) => Promise<void>;
664
+ queueProcessor: any;
665
+ queryBrtcStreams(uids: string[]): Promise<any>;
666
+ handleAddStreams(streams: SingleRemoteStream[]): void;
667
+ getForceUser(forceId: string): Promise<void>;
668
+ getVersion(): string;
669
+ }
670
+ export {};