@hysc/meeting 10.9.1 → 10.9.2
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.
- package/dist/index.d.mts +2494 -0
- package/dist/index.d.ts +2494 -0
- package/dist/index.js +5 -0
- package/dist/index.mjs +5 -0
- package/package.json +3 -3
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,2494 @@
|
|
|
1
|
+
import * as BCClient from '@hysc/core';
|
|
2
|
+
import BCClient__default, { ShareMediaOptions, Player, BCUser, AudioPlayer, SMConfig } from '@hysc/core';
|
|
3
|
+
import * as lodash_es from 'lodash-es';
|
|
4
|
+
import * as _hysc_brtc from '@hysc/brtc';
|
|
5
|
+
import { LocalStream, RemoteStream, Device, SubscribeOptions, VideoProfile, AudioHint, StreamCodecOption } from '@hysc/brtc';
|
|
6
|
+
import { BehaviorSubject, Subject } from 'rxjs';
|
|
7
|
+
import { BoomError } from '@hysc/utils';
|
|
8
|
+
export { Logger } from '@hysc/utils';
|
|
9
|
+
import { StreamCustomInfo, BloudStream } from '@hysc/bloud';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @name: stream
|
|
13
|
+
* @author: yangliye
|
|
14
|
+
* @date: 2022-04-25 13:42
|
|
15
|
+
* @description:stream
|
|
16
|
+
* @update: 2022-04-25 13:42
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
declare type SingleLocalStream = LocalStream;
|
|
20
|
+
declare type SingleRemoteStream = RemoteStream;
|
|
21
|
+
declare type SingleStream = SingleLocalStream | SingleRemoteStream;
|
|
22
|
+
|
|
23
|
+
declare type UpdateMasterType = {
|
|
24
|
+
master?: BMUser;
|
|
25
|
+
oldMaster?: BMUser;
|
|
26
|
+
};
|
|
27
|
+
declare type audioOffWatcherValue = {
|
|
28
|
+
audioOff: boolean;
|
|
29
|
+
selfopenaudio: boolean;
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* @name: index.ts
|
|
34
|
+
* @author: yangliye
|
|
35
|
+
* @date: 2022-04-25 13:42
|
|
36
|
+
* @description:index.ts
|
|
37
|
+
* @update: 2022-04-25 13:42
|
|
38
|
+
*/
|
|
39
|
+
|
|
40
|
+
/** 举手相关操作 */
|
|
41
|
+
interface RaiseHandsParams {
|
|
42
|
+
raiseHandsType: 0 | 1 | 2 | 3 | 4;
|
|
43
|
+
raiseHands: boolean;
|
|
44
|
+
raiseInfo?: {
|
|
45
|
+
userId: string;
|
|
46
|
+
raiseHandTime: number;
|
|
47
|
+
type: 'raiseHandsAudio' | 'raiseHandsVideo' | 'raiseHand';
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* @name: BMSpeaker
|
|
53
|
+
* @author: liuxinghai
|
|
54
|
+
* @date: 2022-06-07 11:41
|
|
55
|
+
* @description:BMSpeaker
|
|
56
|
+
* 适配 brtc 流对象到 bloud 流对象接口,
|
|
57
|
+
* 用户辅助采用 bloud SpeakerDetector 做说话人检测
|
|
58
|
+
* @date: 2022-06-07 11:41
|
|
59
|
+
*/
|
|
60
|
+
declare class BMSpeaker {
|
|
61
|
+
user: BMUser;
|
|
62
|
+
stream: SingleStream;
|
|
63
|
+
constructor(user: BMUser, stream: SingleStream);
|
|
64
|
+
/**
|
|
65
|
+
* 获取对象 ID 标识,此处使用流 ID 标识
|
|
66
|
+
* @returns
|
|
67
|
+
*/
|
|
68
|
+
getID(): string;
|
|
69
|
+
/**
|
|
70
|
+
* 获取用户 BMUser 对象
|
|
71
|
+
* @returns
|
|
72
|
+
*/
|
|
73
|
+
getUser(): BMUser;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* @name: getHTMLMediaStreamOptions
|
|
78
|
+
* @author: yangliye
|
|
79
|
+
* @date: 2022-09-15 14:58
|
|
80
|
+
* @description:getHTMLMediaStreamOptions
|
|
81
|
+
* @update: 2022-09-15 14:58
|
|
82
|
+
*/
|
|
83
|
+
interface Options {
|
|
84
|
+
videoElement: HTMLVideoElement;
|
|
85
|
+
}
|
|
86
|
+
interface Result {
|
|
87
|
+
video: boolean;
|
|
88
|
+
audio: boolean;
|
|
89
|
+
videoSource: MediaStreamTrack;
|
|
90
|
+
audioSource: MediaStreamTrack;
|
|
91
|
+
width: number;
|
|
92
|
+
height: number;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* 获取video标签中的mediaStream
|
|
96
|
+
* @param opts
|
|
97
|
+
*/
|
|
98
|
+
declare function getHTMLMediaStreamOptions(opts: Options): Result | null;
|
|
99
|
+
declare function getMediaStreamInfo(mediaStream: MediaStream, videoInfo: {
|
|
100
|
+
width: number;
|
|
101
|
+
height: number;
|
|
102
|
+
}): {
|
|
103
|
+
video: boolean;
|
|
104
|
+
audio: boolean;
|
|
105
|
+
videoSource: MediaStreamTrack;
|
|
106
|
+
audioSource: MediaStreamTrack;
|
|
107
|
+
width: number;
|
|
108
|
+
height: number;
|
|
109
|
+
} | null;
|
|
110
|
+
|
|
111
|
+
interface IMessageInfo {
|
|
112
|
+
userId?: string;
|
|
113
|
+
message: string;
|
|
114
|
+
role?: string;
|
|
115
|
+
isLocal?: boolean;
|
|
116
|
+
avatar?: string;
|
|
117
|
+
nickName?: string;
|
|
118
|
+
sendTime?: number;
|
|
119
|
+
isMeetingNotice?: boolean;
|
|
120
|
+
to?: string | undefined;
|
|
121
|
+
isDanger?: boolean;
|
|
122
|
+
seq?: number;
|
|
123
|
+
failed?: boolean;
|
|
124
|
+
}
|
|
125
|
+
declare class BMMessageInfo {
|
|
126
|
+
userId?: any;
|
|
127
|
+
message: string;
|
|
128
|
+
time: string;
|
|
129
|
+
timeStamp: number;
|
|
130
|
+
role?: string;
|
|
131
|
+
isLocal?: boolean;
|
|
132
|
+
avatar?: any;
|
|
133
|
+
nickName?: any;
|
|
134
|
+
isMeetingNotice: boolean;
|
|
135
|
+
to: string | undefined;
|
|
136
|
+
isDanger: boolean | undefined;
|
|
137
|
+
seq: number | undefined;
|
|
138
|
+
failed: boolean | undefined;
|
|
139
|
+
/** 是否是表情 */
|
|
140
|
+
isEmoji: boolean;
|
|
141
|
+
constructor(props: IMessageInfo);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
declare class BMChatVM {
|
|
145
|
+
messageList: Array<BMMessageInfo>;
|
|
146
|
+
boomCore: BCClient__default;
|
|
147
|
+
userVM: BMUserVM;
|
|
148
|
+
bmRoom: BMRoom;
|
|
149
|
+
messageListWatcher: BehaviorSubject<Array<BMMessageInfo>>;
|
|
150
|
+
hasDangerMessageWatcher: Subject<boolean>;
|
|
151
|
+
constructor(boomCore: BCClient__default, userVM: BMUserVM, bmRoom: BMRoom);
|
|
152
|
+
/**
|
|
153
|
+
* 发送聊天消息
|
|
154
|
+
* @param talkMsg 聊天信息
|
|
155
|
+
*/
|
|
156
|
+
sendMessage(talkMsg: string, userId: string | undefined, lostNet: boolean): Promise<void>;
|
|
157
|
+
addMessage(info: BMMessageInfo, isParticipantNotice: boolean): void;
|
|
158
|
+
notificationMessageList: lodash_es.DebouncedFunc<() => void>;
|
|
159
|
+
updateMessageListWatcher(messageList: Array<BMMessageInfo>): void;
|
|
160
|
+
/**
|
|
161
|
+
* 获取历史消息
|
|
162
|
+
*/
|
|
163
|
+
getHistoryMessage(): Promise<BMMessageInfo[]>;
|
|
164
|
+
/** 供上层 生成 BMMessageInfo */
|
|
165
|
+
generateInfo(info: IMessageInfo): BMMessageInfo;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
interface BloudStreamEventState {
|
|
169
|
+
userId: string;
|
|
170
|
+
streamId: string;
|
|
171
|
+
isScreen: boolean;
|
|
172
|
+
video: boolean;
|
|
173
|
+
audio: boolean;
|
|
174
|
+
customInfo?: StreamCustomInfo;
|
|
175
|
+
}
|
|
176
|
+
interface BloudStreamState {
|
|
177
|
+
video: boolean;
|
|
178
|
+
audio: boolean;
|
|
179
|
+
isScreen: boolean;
|
|
180
|
+
customInfo?: StreamCustomInfo;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
declare class BMStreamModelVM {
|
|
184
|
+
streamModels: Map<string, BMStreamModel>;
|
|
185
|
+
/**
|
|
186
|
+
* 因为投屏码用户进来以后,他是不在小窗口展示的,所以要把投屏的用户过滤掉给业务的展示
|
|
187
|
+
*/
|
|
188
|
+
streamModelsWatcher: BehaviorSubject<BMStreamModel[]>;
|
|
189
|
+
shareStreamModels: Map<string, BMStreamModel>;
|
|
190
|
+
shareStreamModelsWatcher: BehaviorSubject<BMStreamModel[]>;
|
|
191
|
+
localStreamErrorWatcher: Subject<string>;
|
|
192
|
+
localModel: BMStreamModel | null;
|
|
193
|
+
room: BMRoom | null;
|
|
194
|
+
bloudStream: BloudStream | null;
|
|
195
|
+
/** 白板窗口 */
|
|
196
|
+
whiteboard: BMStreamModel | null;
|
|
197
|
+
whiteboardWatcher: BehaviorSubject<BMStreamModel | null>;
|
|
198
|
+
/**
|
|
199
|
+
* brtc stream对象
|
|
200
|
+
*/
|
|
201
|
+
brtcStream: SingleLocalStream | null;
|
|
202
|
+
/**
|
|
203
|
+
* 后面打开摄像头存储的流,主要是关闭摄像头的时候得把它清除掉
|
|
204
|
+
*/
|
|
205
|
+
videoStream: SingleLocalStream | null;
|
|
206
|
+
audioStream: SingleLocalStream | null;
|
|
207
|
+
/**
|
|
208
|
+
* 本地是否在屏幕共享
|
|
209
|
+
*/
|
|
210
|
+
localIsShare: boolean;
|
|
211
|
+
isShareWatcher: Subject<boolean>;
|
|
212
|
+
localShareCustomStats: any;
|
|
213
|
+
_speaker_enable: boolean;
|
|
214
|
+
speakerEnableWatcher: BehaviorSubject<boolean>;
|
|
215
|
+
/**
|
|
216
|
+
* 混流
|
|
217
|
+
*/
|
|
218
|
+
mixStreamUid: string | null;
|
|
219
|
+
get mixStreamModel(): BMStreamModel | null | undefined;
|
|
220
|
+
mixStreamModelWatcher: BehaviorSubject<BMStreamModel | null>;
|
|
221
|
+
canvasTimer: NodeJS.Timeout | null;
|
|
222
|
+
private _recorder;
|
|
223
|
+
private _isRecording;
|
|
224
|
+
private _slicingRecord;
|
|
225
|
+
isRecordingWatcher: BehaviorSubject<boolean>;
|
|
226
|
+
private _speaker;
|
|
227
|
+
private _speakerDetector;
|
|
228
|
+
private _speakers;
|
|
229
|
+
speakerWatcher: BehaviorSubject<BMUser | null>;
|
|
230
|
+
/** 是否开启降噪 */
|
|
231
|
+
private _enableNoiseFilter;
|
|
232
|
+
/** 是否可以使用降噪 */
|
|
233
|
+
private _canUseNoiseFilter;
|
|
234
|
+
private rtcPublishing;
|
|
235
|
+
/**
|
|
236
|
+
* 窗口没有播放容器的错误处理
|
|
237
|
+
*/
|
|
238
|
+
noContainerWatcher: Subject<BMStreamModel>;
|
|
239
|
+
/**
|
|
240
|
+
* 窗口没有大窗口播放容器的错误处理
|
|
241
|
+
*/
|
|
242
|
+
noBigContainerWatcher: Subject<BMStreamModel>;
|
|
243
|
+
localStreamConnectErrorWatcher: Subject<BoomError>;
|
|
244
|
+
/**
|
|
245
|
+
* 共享屏幕相关错误
|
|
246
|
+
* 包括,共享客户端错误
|
|
247
|
+
* 共享屏幕流错误
|
|
248
|
+
*/
|
|
249
|
+
localShareError: Subject<BoomError>;
|
|
250
|
+
localShareEndedError: Subject<boolean>;
|
|
251
|
+
/**
|
|
252
|
+
* 共享屏幕流是单独处理的逻辑,不是先创建streamModel然后在去查流,而是先去查流,在创建streamModel
|
|
253
|
+
*/
|
|
254
|
+
shareBloudStateMap: Map<string, BloudStreamEventState>;
|
|
255
|
+
/**
|
|
256
|
+
* 窗口播放事件,给到端上去做埋点
|
|
257
|
+
*/
|
|
258
|
+
streamPlayWatcher: Subject<StreamPlayMessage>;
|
|
259
|
+
private muteHandlerVideo;
|
|
260
|
+
private muteHandlerAudio;
|
|
261
|
+
constructor();
|
|
262
|
+
private static filterStreamModels;
|
|
263
|
+
handleStreamPlay: (info: StreamPlayMessage) => void;
|
|
264
|
+
initWithRoom(room: BMRoom): this;
|
|
265
|
+
/**
|
|
266
|
+
* 设置扬声器是否打开
|
|
267
|
+
* @param enable
|
|
268
|
+
* @private
|
|
269
|
+
*/
|
|
270
|
+
private setSpeakerEnable;
|
|
271
|
+
getStreamModels(): Array<BMStreamModel>;
|
|
272
|
+
/**
|
|
273
|
+
* 获取streamModel
|
|
274
|
+
* @param userId 用户Id
|
|
275
|
+
* @returns
|
|
276
|
+
*/
|
|
277
|
+
getStreamModelByUId(userId: string): BMStreamModel | undefined;
|
|
278
|
+
getShareStreamModelByUId(userId: string): BMStreamModel | undefined;
|
|
279
|
+
getLocalStreamModel(): BMStreamModel | null;
|
|
280
|
+
createWhiteBoard(userId: string): BMStreamModel | undefined;
|
|
281
|
+
removeWhiteBoard(): void;
|
|
282
|
+
createStreamModel(user: BMUser, stream?: SingleStream): BMStreamModel;
|
|
283
|
+
addStreamModel(streamModel: BMStreamModel): void;
|
|
284
|
+
addShareStreamModel(streamModel: BMStreamModel): void;
|
|
285
|
+
removeStreamModel(streamModel: BMStreamModel): void;
|
|
286
|
+
removeShareStreamModelByUId(uid: string): void;
|
|
287
|
+
removeShareStreamModel(streamModel: BMStreamModel): void;
|
|
288
|
+
/**`
|
|
289
|
+
* 通过用户id删除streamModel
|
|
290
|
+
* @param userId
|
|
291
|
+
* @returns
|
|
292
|
+
*/
|
|
293
|
+
removeStreamModelByUId(userId: string): BMStreamModel | undefined;
|
|
294
|
+
remoteStreamPublished(stream: SingleRemoteStream): void;
|
|
295
|
+
/**
|
|
296
|
+
* 有人取消流触发,有人取消流之后brtc底层会把流销毁掉,除了流Id和userId,其他的信息都不稳定能取到
|
|
297
|
+
* @param stream
|
|
298
|
+
* @returns
|
|
299
|
+
*/
|
|
300
|
+
remoteStreamUnpublished(stream: SingleRemoteStream): BMStreamModel | undefined;
|
|
301
|
+
sortStreamModels(): BMStreamModel[];
|
|
302
|
+
updateStreamModel(streamModel: BMStreamModel, stream: SingleStream): void;
|
|
303
|
+
updateShareStreamModel(streamModel: BMStreamModel, stream: SingleStream): void;
|
|
304
|
+
/**
|
|
305
|
+
* 开关本地摄像头
|
|
306
|
+
* @param status true:开,false:关
|
|
307
|
+
* @param videoTrack 开启美颜之后,需要传递这个参数,携带美颜之后的videoTrack
|
|
308
|
+
*/
|
|
309
|
+
setLocalVideoEnable(status: boolean, videoTrack?: MediaStreamTrack): Promise<undefined>;
|
|
310
|
+
/**
|
|
311
|
+
* brtc流更新状态失败,这个时候重新推流
|
|
312
|
+
*/
|
|
313
|
+
handleStreamUpdateFailed(release?: boolean): Promise<void>;
|
|
314
|
+
/**
|
|
315
|
+
* 开关本地麦克风
|
|
316
|
+
* @param status true:开,false:关
|
|
317
|
+
* @param release 是否释放音频流,默认false
|
|
318
|
+
*/
|
|
319
|
+
setLocalAudioEnable(status: boolean, release?: boolean): Promise<undefined>;
|
|
320
|
+
/**
|
|
321
|
+
* 该方法只是在入会的时候,同时开启音频和视频的时候使用,其他时候禁止使用该方法
|
|
322
|
+
* 切换音频和视频状态请使用 setLocalAudioEnable 和 setLocalVideoEnable
|
|
323
|
+
* @param audio
|
|
324
|
+
* @param video
|
|
325
|
+
*/
|
|
326
|
+
joinWithAudioAndAudio(audio: boolean, video: boolean): Promise<boolean | undefined>;
|
|
327
|
+
/**
|
|
328
|
+
* 切换扬声器
|
|
329
|
+
* @param device
|
|
330
|
+
* @param force 是否需要强制更新
|
|
331
|
+
*/
|
|
332
|
+
changeSpeaker(device: Device, force?: boolean): Promise<void>;
|
|
333
|
+
/**
|
|
334
|
+
* 设置单个流的扬声器
|
|
335
|
+
* @param streamModel
|
|
336
|
+
*/
|
|
337
|
+
changeSingleStreamSpeaker(streamModel: BMStreamModel): Promise<void>;
|
|
338
|
+
changeAudioInput(device: Device): Promise<boolean | undefined>;
|
|
339
|
+
/**
|
|
340
|
+
* 切换视频输入设备
|
|
341
|
+
* @param device
|
|
342
|
+
* @param onlyChangeDevice 是否只切换设备不替换流,默认false
|
|
343
|
+
*/
|
|
344
|
+
changeVideoInput(device: Device, onlyChangeDevice?: boolean): Promise<boolean | undefined>;
|
|
345
|
+
/**
|
|
346
|
+
* 是否静音扬声器
|
|
347
|
+
* @param enable
|
|
348
|
+
*/
|
|
349
|
+
muteSpeaker(enable: boolean): Promise<undefined>;
|
|
350
|
+
/**
|
|
351
|
+
* 创建本地音频流
|
|
352
|
+
*/
|
|
353
|
+
createLocalAudioStream(): Promise<LocalStream | null>;
|
|
354
|
+
onlyBrtcPublish(): Promise<boolean>;
|
|
355
|
+
/**
|
|
356
|
+
* 创建流并且发布
|
|
357
|
+
* @param audio 是否发布音频流
|
|
358
|
+
* @param video 是否发布视频流
|
|
359
|
+
* @param localModel 本地的streamModel
|
|
360
|
+
* @param videoTrack
|
|
361
|
+
* @private
|
|
362
|
+
*/
|
|
363
|
+
private createStreamAndPublish;
|
|
364
|
+
brtcStreamAddEvent(): void;
|
|
365
|
+
brtcStreamRemoveEvent(): void;
|
|
366
|
+
publishBloudStream(audio: boolean, video: boolean): Promise<void>;
|
|
367
|
+
muteHandler(type: "video" | "audio"): void;
|
|
368
|
+
unpublishStream(release?: boolean): Promise<void>;
|
|
369
|
+
/**
|
|
370
|
+
* 更改音视频状态或者取消发布
|
|
371
|
+
* @param type 更改类型
|
|
372
|
+
* @param mute 是否取消发布
|
|
373
|
+
* @param localModel 本地的streamModel
|
|
374
|
+
* @param release 是否释放音频流,默认false
|
|
375
|
+
* @private
|
|
376
|
+
*/
|
|
377
|
+
private muteOrUnpublishStream;
|
|
378
|
+
private justReplaceVideoTrack;
|
|
379
|
+
toggleShareScreen(enable: boolean, opts?: any, customShare?: Result): Promise<boolean>;
|
|
380
|
+
setShareScreenContentHint(contentHint: "" | "motion" | "detail" | "text"): void;
|
|
381
|
+
updateModelSort: lodash_es.DebouncedFunc<() => void>;
|
|
382
|
+
handleNoContainer: (info: NoPlayerContainer) => void;
|
|
383
|
+
/**
|
|
384
|
+
* 创建canvas,目的是为了捕获空track流,给brtc使用
|
|
385
|
+
*/
|
|
386
|
+
createCanvas(): void;
|
|
387
|
+
private canvasDisplay;
|
|
388
|
+
private static getCanvasStream;
|
|
389
|
+
private createVideoStreamTrack;
|
|
390
|
+
/**
|
|
391
|
+
* 启动录制
|
|
392
|
+
* @param {String} opts.filename - 录制文件名
|
|
393
|
+
* @param {Object} opts.capture - 采集属性
|
|
394
|
+
* @param {Number} opts.capture.width - 宽度
|
|
395
|
+
* @param {Number} opts.capture.height - 高度
|
|
396
|
+
* @param {Number} opts.capture.fps - 帧率
|
|
397
|
+
* @param {Number} opts.record - 编码属性
|
|
398
|
+
* @param {Number} opts.record.bitrate - 编码码率
|
|
399
|
+
* @param {String|undefined} opts.record.format - 编码格式
|
|
400
|
+
* @return {boolean}
|
|
401
|
+
*/
|
|
402
|
+
startRecord(opts: any): Promise<boolean | undefined>;
|
|
403
|
+
/**
|
|
404
|
+
* 添加流对象到录制器,用于音频轨道录制
|
|
405
|
+
* @param stream
|
|
406
|
+
*/
|
|
407
|
+
addToRecorder(stream: SingleStream): void;
|
|
408
|
+
/**
|
|
409
|
+
* 从录制器中删除流对象
|
|
410
|
+
* @param stream
|
|
411
|
+
*/
|
|
412
|
+
removeFromRecorder(stream: any): void;
|
|
413
|
+
/**
|
|
414
|
+
* 停止录制
|
|
415
|
+
*/
|
|
416
|
+
stopRecord(): Promise<void>;
|
|
417
|
+
/**
|
|
418
|
+
* 启用下一个录制分片
|
|
419
|
+
* @param filename - 下一分片文件名
|
|
420
|
+
*/
|
|
421
|
+
sliceRecord(filename: string, stream?: MediaStream, capture?: any): Promise<boolean | undefined>;
|
|
422
|
+
/**
|
|
423
|
+
* 启动说话人检测器
|
|
424
|
+
*/
|
|
425
|
+
startSpeakerDetector(): void;
|
|
426
|
+
addToDetector(speaker: BMSpeaker): void;
|
|
427
|
+
removeFromDetector(speakerId: string): void;
|
|
428
|
+
clearDetector(): void;
|
|
429
|
+
shareCustomMedia(enable: boolean, shareOptions: ShareMediaOptions): Promise<undefined>;
|
|
430
|
+
/**
|
|
431
|
+
* 根据videoElement 获取内部流数据
|
|
432
|
+
*/
|
|
433
|
+
getHTMLMediaStream: typeof getHTMLMediaStreamOptions;
|
|
434
|
+
getMediaStream: typeof getMediaStreamInfo;
|
|
435
|
+
/**
|
|
436
|
+
* 更新流信息 会给服务端发送updateStream信令,会收到updateStream的广播
|
|
437
|
+
*/
|
|
438
|
+
updateBloudStreamCustomStats(uid: string, streamId: string, streamInfo: StreamCustomInfo): Promise<void>;
|
|
439
|
+
/**
|
|
440
|
+
* 布局发生变化之后去调用一下这个方法去检测所有流的播放状态
|
|
441
|
+
* @param {string} status tag 用于区分是什么状态下调用的
|
|
442
|
+
*/
|
|
443
|
+
checkStreamStats(status: string): void;
|
|
444
|
+
setEnableNoiseFilter(enable: boolean, workletPublicUrl?: string): Promise<boolean>;
|
|
445
|
+
clearCache(): void;
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
/**
|
|
449
|
+
* @name: BMStreamModel
|
|
450
|
+
* @author: yangliye
|
|
451
|
+
* @date: 2022-04-25 11:14
|
|
452
|
+
* @description:BMStreamModel
|
|
453
|
+
* @update: 2022-04-25 11:14
|
|
454
|
+
*/
|
|
455
|
+
declare type StreamType = 'big' | 'small';
|
|
456
|
+
interface ConnectErrorMessage {
|
|
457
|
+
stream: BMStreamModel;
|
|
458
|
+
isLocal: boolean;
|
|
459
|
+
}
|
|
460
|
+
interface NoPlayerContainer {
|
|
461
|
+
type: 'share' | 'normal';
|
|
462
|
+
container: 'small' | 'big';
|
|
463
|
+
id: string;
|
|
464
|
+
}
|
|
465
|
+
interface StreamPlayMessage {
|
|
466
|
+
uid: string;
|
|
467
|
+
}
|
|
468
|
+
interface ShareFileMessage {
|
|
469
|
+
fileId: string;
|
|
470
|
+
streamId: string | undefined | null;
|
|
471
|
+
}
|
|
472
|
+
/**
|
|
473
|
+
* 播放器状态
|
|
474
|
+
*/
|
|
475
|
+
declare enum PlayerState {
|
|
476
|
+
NO_CONTAINER = 0,
|
|
477
|
+
NO_PLAYING = 1,
|
|
478
|
+
PLAYING = 2
|
|
479
|
+
}
|
|
480
|
+
declare class BMStreamModel {
|
|
481
|
+
private user;
|
|
482
|
+
private _stream;
|
|
483
|
+
bloudStream: BloudStreamState | undefined;
|
|
484
|
+
/**
|
|
485
|
+
* 流类型
|
|
486
|
+
*/
|
|
487
|
+
streamType: number;
|
|
488
|
+
pullFailedNum: number;
|
|
489
|
+
_video_enable: boolean;
|
|
490
|
+
_audio_enable: boolean;
|
|
491
|
+
videoEnableWatcher: BehaviorSubject<boolean>;
|
|
492
|
+
audioEnableWatcher: BehaviorSubject<boolean>;
|
|
493
|
+
streamUpdateWatcher: Subject<boolean>;
|
|
494
|
+
isSubScribedWatcher: Subject<boolean>;
|
|
495
|
+
playStateChangeWatcher: Subject<BMStreamModel>;
|
|
496
|
+
/**
|
|
497
|
+
* 找不到播放器,说明当前的streamModel可能是销毁重建的,或者是业务上绑定失败的,这个时候给端上一个提示,让他重新绑定一下播放器
|
|
498
|
+
*/
|
|
499
|
+
noContainerWatcher: Subject<boolean>;
|
|
500
|
+
noBigContainerWatcher: Subject<boolean>;
|
|
501
|
+
audioLevelWatcher: Subject<number>;
|
|
502
|
+
isCurrentDisplay: boolean;
|
|
503
|
+
/**
|
|
504
|
+
* 当前窗口是不是在展示中目标状态
|
|
505
|
+
*/
|
|
506
|
+
isDisplay: boolean;
|
|
507
|
+
isDisplayObserve: Subject<boolean>;
|
|
508
|
+
isInBig: boolean;
|
|
509
|
+
isInBigObserve: Subject<boolean>;
|
|
510
|
+
_hasPulled: boolean;
|
|
511
|
+
/**
|
|
512
|
+
* 手动拉流配置, 默认是false, 如果是走手动拉流,设置成true,说明拉他的流
|
|
513
|
+
* shouldPull 是否应该拉
|
|
514
|
+
*/
|
|
515
|
+
shouldPull: boolean;
|
|
516
|
+
smallPlayFailed: number;
|
|
517
|
+
room: BMRoom | undefined;
|
|
518
|
+
get hasPulled(): boolean;
|
|
519
|
+
set hasPulled(value: boolean);
|
|
520
|
+
/**
|
|
521
|
+
* 当前拉取的是大流还是小流
|
|
522
|
+
*/
|
|
523
|
+
_pulledStreamType: StreamType;
|
|
524
|
+
get pulledStreamType(): StreamType;
|
|
525
|
+
set pulledStreamType(type: StreamType);
|
|
526
|
+
/**
|
|
527
|
+
* 要拉取的流的目标状态
|
|
528
|
+
*/
|
|
529
|
+
pulledStreamGoal: StreamType;
|
|
530
|
+
bigPlayerId: string;
|
|
531
|
+
player: Player | undefined | null;
|
|
532
|
+
isPlayingBig: boolean;
|
|
533
|
+
/**
|
|
534
|
+
* 是否静音了扬声器,brtc不会处理业务上静音的逻辑,所以需要自己处理
|
|
535
|
+
* 如果静音了,就把所有的流都重新静音播放一遍
|
|
536
|
+
*/
|
|
537
|
+
muted: boolean;
|
|
538
|
+
private checkVideoTimer;
|
|
539
|
+
checkCount: number;
|
|
540
|
+
/**
|
|
541
|
+
* streamModel的唯一标识,用来给业务绑定播放容器
|
|
542
|
+
*/
|
|
543
|
+
get uuid(): string;
|
|
544
|
+
get playerId(): string;
|
|
545
|
+
get isAudience(): boolean;
|
|
546
|
+
/**
|
|
547
|
+
* 因为直播模式中,观众是不展示的
|
|
548
|
+
* 所以这个地方要判断一下
|
|
549
|
+
*/
|
|
550
|
+
get canShow(): boolean;
|
|
551
|
+
changeMute(mute: boolean): void;
|
|
552
|
+
handleSpeakerChange(): void;
|
|
553
|
+
/**
|
|
554
|
+
* 排序数字
|
|
555
|
+
* 窗口的排序使用二进制运算进行了优化,为了提高运行速度牺牲了一部分代码可读性
|
|
556
|
+
*/
|
|
557
|
+
sortNum: number;
|
|
558
|
+
isWhiteboard: boolean;
|
|
559
|
+
get isToupingma(): boolean;
|
|
560
|
+
get isMixer(): boolean;
|
|
561
|
+
get isSignal(): boolean;
|
|
562
|
+
/**
|
|
563
|
+
* 初始化展示的model
|
|
564
|
+
* @param user
|
|
565
|
+
* @param stream
|
|
566
|
+
*/
|
|
567
|
+
constructor(user: BMUser, room: BMRoom, stream?: SingleStream, isWhiteboard?: boolean);
|
|
568
|
+
/**
|
|
569
|
+
* 生成订阅信息
|
|
570
|
+
*/
|
|
571
|
+
genReceiveSubMsg(): SubscribeOptions;
|
|
572
|
+
/**
|
|
573
|
+
* display属性改变调整
|
|
574
|
+
* @private
|
|
575
|
+
*/
|
|
576
|
+
private handleDisplayChange;
|
|
577
|
+
/**
|
|
578
|
+
* 处理当前窗口是不是在大窗的逻辑
|
|
579
|
+
* @param display
|
|
580
|
+
* @private
|
|
581
|
+
*/
|
|
582
|
+
private handleIsInBig;
|
|
583
|
+
/**
|
|
584
|
+
* 设置是否打开摄像头状态
|
|
585
|
+
* @param enable
|
|
586
|
+
* @private
|
|
587
|
+
*/
|
|
588
|
+
setVideoEnable(enable: boolean): void;
|
|
589
|
+
/**
|
|
590
|
+
* 设置是否打开麦克风状态
|
|
591
|
+
* @param enable
|
|
592
|
+
* @private
|
|
593
|
+
*/
|
|
594
|
+
setAudioEnable(enable: boolean): void;
|
|
595
|
+
/**
|
|
596
|
+
* 更新当前streamModel中的流
|
|
597
|
+
* @param stream
|
|
598
|
+
* @param needReProcess
|
|
599
|
+
* @param bmStreamVm
|
|
600
|
+
*/
|
|
601
|
+
updateStream(stream: SingleStream | undefined, needReProcess: boolean | undefined, bmStreamVm: BMStreamModelVM): void;
|
|
602
|
+
/**
|
|
603
|
+
* 更新bloud的stream,设置流状态
|
|
604
|
+
* @param streamState
|
|
605
|
+
* @param bmStreamVM
|
|
606
|
+
* @param forceSearch
|
|
607
|
+
*/
|
|
608
|
+
updateBloudStream(streamState: BloudStreamState | undefined, bmStreamVM: BMStreamModelVM, forceSearch?: boolean): void;
|
|
609
|
+
updateBloudCustomInfo(customInfo: StreamCustomInfo): void;
|
|
610
|
+
private onPlayerStateChange;
|
|
611
|
+
handleStreamConnectError: () => void;
|
|
612
|
+
/**
|
|
613
|
+
* 获取当前的streamId
|
|
614
|
+
*/
|
|
615
|
+
get streamId(): string;
|
|
616
|
+
get bStreamId(): string;
|
|
617
|
+
/**
|
|
618
|
+
* 获取当前窗口绑定的用户id
|
|
619
|
+
*/
|
|
620
|
+
get userId(): string;
|
|
621
|
+
/**
|
|
622
|
+
* 获取当前的流对象
|
|
623
|
+
*/
|
|
624
|
+
get stream(): SingleStream | undefined;
|
|
625
|
+
/**
|
|
626
|
+
* 是否是本地流
|
|
627
|
+
*/
|
|
628
|
+
get isLocal(): boolean;
|
|
629
|
+
/**
|
|
630
|
+
* 是否是屏幕共享的流
|
|
631
|
+
*/
|
|
632
|
+
get isShare(): boolean;
|
|
633
|
+
get isWeb(): boolean;
|
|
634
|
+
get isMobile(): boolean;
|
|
635
|
+
/**
|
|
636
|
+
* 当前音频是否开启
|
|
637
|
+
*/
|
|
638
|
+
get audioEnable(): boolean;
|
|
639
|
+
/**
|
|
640
|
+
* 当前视频是否开启
|
|
641
|
+
*/
|
|
642
|
+
get videoEnable(): boolean;
|
|
643
|
+
private get brtcPlayerId();
|
|
644
|
+
private get selfPlayerId();
|
|
645
|
+
/**
|
|
646
|
+
* 获取当前流绑定的用户昵称
|
|
647
|
+
*/
|
|
648
|
+
get nickname(): string;
|
|
649
|
+
/**
|
|
650
|
+
* 获取流的麦克风音量
|
|
651
|
+
*/
|
|
652
|
+
get audioLevel(): number;
|
|
653
|
+
getUser(): BMUser;
|
|
654
|
+
/**
|
|
655
|
+
* 设置远端流的播放声音
|
|
656
|
+
* @param volume
|
|
657
|
+
*/
|
|
658
|
+
setRemoteAudioLevel(volume: number): void;
|
|
659
|
+
/**
|
|
660
|
+
* 设置远端流的播放声音
|
|
661
|
+
* @param share_file
|
|
662
|
+
*/
|
|
663
|
+
setShareFile(share_file: string): void;
|
|
664
|
+
/**
|
|
665
|
+
* 获取流的传输信息
|
|
666
|
+
*/
|
|
667
|
+
getStats(): Promise<_hysc_brtc.RemoteStreamStats> | Promise<_hysc_brtc.LocalStreamStats> | undefined;
|
|
668
|
+
/**
|
|
669
|
+
* BIND_ELEMENT 事件
|
|
670
|
+
* @param eleId
|
|
671
|
+
*/
|
|
672
|
+
bindElement: (eleId: string) => void;
|
|
673
|
+
bindBigElement: (eleId: string) => void;
|
|
674
|
+
sendMessage2Room: lodash_es.DebouncedFunc<() => void>;
|
|
675
|
+
emitBindElement: lodash_es.DebouncedFunc<() => void>;
|
|
676
|
+
emitBindBigElement: lodash_es.DebouncedFunc<() => void>;
|
|
677
|
+
/**
|
|
678
|
+
* 当前是不是正在播放
|
|
679
|
+
* @param containerId sdk绑定播放器容器id
|
|
680
|
+
* @param small
|
|
681
|
+
*/
|
|
682
|
+
currentIsPlaying: (containerId: string, small?: boolean) => PlayerState;
|
|
683
|
+
/**
|
|
684
|
+
* 播放当前流
|
|
685
|
+
*/
|
|
686
|
+
play: (force?: boolean) => Promise<void>;
|
|
687
|
+
/**
|
|
688
|
+
* 在大窗口播放该流的时候调用这个方法
|
|
689
|
+
*/
|
|
690
|
+
playInBig: (force?: boolean) => Promise<void>;
|
|
691
|
+
private initBigPlayer;
|
|
692
|
+
/**
|
|
693
|
+
* 停止播放当前流
|
|
694
|
+
*/
|
|
695
|
+
stop(): void;
|
|
696
|
+
/**
|
|
697
|
+
* 销毁当前流
|
|
698
|
+
*/
|
|
699
|
+
destroyBrtcStream(): void;
|
|
700
|
+
/**
|
|
701
|
+
* 获取当前流是否正在播放
|
|
702
|
+
*/
|
|
703
|
+
isPlaying(): boolean | undefined;
|
|
704
|
+
/**
|
|
705
|
+
* 重新播放
|
|
706
|
+
*/
|
|
707
|
+
replay(): Promise<void> | undefined;
|
|
708
|
+
/**
|
|
709
|
+
* 恢复播放音视频
|
|
710
|
+
* 在某些版本浏览器上移动传入 play() 的 div 容器可能会导致音视频播放器进入 ‘PAUSED’ 状态,此时 需要调用该接口恢复播放。
|
|
711
|
+
* 由于浏览器自动播放策略的限制,在 play() 返回 PLAY_NOT_ALLOWED 错误后需要引导用户通过手势 调用该接口恢复播放
|
|
712
|
+
*
|
|
713
|
+
* @returns
|
|
714
|
+
*/
|
|
715
|
+
resume(): void;
|
|
716
|
+
/**
|
|
717
|
+
* 是否有音频流
|
|
718
|
+
*/
|
|
719
|
+
hasAudio(): boolean;
|
|
720
|
+
/**
|
|
721
|
+
* 是否有视频流
|
|
722
|
+
*/
|
|
723
|
+
hasVideo(): boolean;
|
|
724
|
+
/**
|
|
725
|
+
* 更新当前model的用户信息
|
|
726
|
+
* @param user
|
|
727
|
+
*/
|
|
728
|
+
updateUser(user: BMUser): void;
|
|
729
|
+
updateSortNum(force?: boolean): void;
|
|
730
|
+
setSortNum(sortNum: number, force: boolean): void;
|
|
731
|
+
getSortNum(): number;
|
|
732
|
+
/**
|
|
733
|
+
* 启动音频音量检测
|
|
734
|
+
*/
|
|
735
|
+
collectAudioLevel: () => void;
|
|
736
|
+
private handleAudioLevel;
|
|
737
|
+
checkSmallVideo: () => Promise<void>;
|
|
738
|
+
checkBigVideo: lodash_es.DebouncedFunc<() => void>;
|
|
739
|
+
/**
|
|
740
|
+
* 播放黑窗处理,主要是做一个容错处理,又可能这股流拉下来或者存在订阅就出现问题的情况
|
|
741
|
+
* 播放时黑窗的,这个时候需要,检测,然后重新拉流
|
|
742
|
+
* @param videoContainer
|
|
743
|
+
*/
|
|
744
|
+
private checkVideoDecodeFrame;
|
|
745
|
+
/**
|
|
746
|
+
* 发送订阅该流的请求
|
|
747
|
+
*/
|
|
748
|
+
subscribeStream(): void;
|
|
749
|
+
unSubscribeStream(): void;
|
|
750
|
+
checkStreamIsPlaying: lodash_es.DebouncedFunc<() => void>;
|
|
751
|
+
/**
|
|
752
|
+
* 取消流的播放
|
|
753
|
+
* @param type big: 大窗口 small: 小窗口 all: 全部
|
|
754
|
+
*/
|
|
755
|
+
unAttach(type: 'big' | 'small' | 'all'): void;
|
|
756
|
+
}
|
|
757
|
+
|
|
758
|
+
declare type Operation = 'none' | 'getMaster' | 'getManager' | 'removeMaster' | 'getGuest' | 'removeGuest' | 'removeManager' | 'changeNickName' | 'speakerEnable' | 'changeShare' | 'updateUser' | 'raiseHandsVideo' | 'raiseHandsAudio' | 'audienceEnableSpeaking' | 'inBackground' | 'raiseHand' | 'isCalling';
|
|
759
|
+
interface IUserActionWatcher {
|
|
760
|
+
operation: Operation;
|
|
761
|
+
user: BMUser;
|
|
762
|
+
}
|
|
763
|
+
interface UserInfo {
|
|
764
|
+
avatar: string;
|
|
765
|
+
jointime: number;
|
|
766
|
+
nickname: string;
|
|
767
|
+
pos: string;
|
|
768
|
+
userId: string;
|
|
769
|
+
status?: {
|
|
770
|
+
audioRaiseHands: boolean;
|
|
771
|
+
videoRaiseHands: boolean;
|
|
772
|
+
};
|
|
773
|
+
}
|
|
774
|
+
declare class BMUser {
|
|
775
|
+
/**
|
|
776
|
+
* 用户id
|
|
777
|
+
*/
|
|
778
|
+
userId: string;
|
|
779
|
+
/**
|
|
780
|
+
* 用户信息
|
|
781
|
+
*/
|
|
782
|
+
userInfo: UserInfo;
|
|
783
|
+
customInfo?: any;
|
|
784
|
+
nickName: string;
|
|
785
|
+
isMaster: boolean;
|
|
786
|
+
isManager: boolean;
|
|
787
|
+
mirror: boolean;
|
|
788
|
+
isLocal: boolean;
|
|
789
|
+
isToupingma: boolean;
|
|
790
|
+
/**是否有多路流 */
|
|
791
|
+
hasMultiple: boolean;
|
|
792
|
+
/**这个人是不是这个房间的创建者 */
|
|
793
|
+
isCreate: boolean;
|
|
794
|
+
/** 当前人是否在屏幕共享 */
|
|
795
|
+
hasShare: boolean;
|
|
796
|
+
/** 观众时是否允许发言 */
|
|
797
|
+
audienceEnableSpeaking: boolean;
|
|
798
|
+
/** 头像 */
|
|
799
|
+
avatar: string;
|
|
800
|
+
private streamModels;
|
|
801
|
+
permission: any;
|
|
802
|
+
/**
|
|
803
|
+
* 监听器, 监听返回对象属性
|
|
804
|
+
* @property {string} operation
|
|
805
|
+
* 'getManager':获得管理员权限/成为联席主持人
|
|
806
|
+
* 'getMaster':成为主持人
|
|
807
|
+
* 'removeManager':取消管理员权限/取消联席主持人
|
|
808
|
+
* 'removeMaster':取消主持人
|
|
809
|
+
* 'changeNickName':改变昵称
|
|
810
|
+
* 'speakerEnable':扬声器开关状态改变
|
|
811
|
+
* 'changeShare': 是否在屏幕共享
|
|
812
|
+
* 'raiseHandsVideo': 是否视频举手
|
|
813
|
+
* 'raiseHandsAudio': 是否音频举手
|
|
814
|
+
* 'raiseHand':单纯的举手
|
|
815
|
+
* @property {BMUser} user
|
|
816
|
+
*/
|
|
817
|
+
watcher: BehaviorSubject<IUserActionWatcher>;
|
|
818
|
+
/**
|
|
819
|
+
* 排序
|
|
820
|
+
*/
|
|
821
|
+
sortNum: number;
|
|
822
|
+
/**
|
|
823
|
+
* 举手相关
|
|
824
|
+
*/
|
|
825
|
+
raiseVideoHands: boolean;
|
|
826
|
+
raiseAudioHands: boolean;
|
|
827
|
+
raiseHand: boolean;
|
|
828
|
+
/**
|
|
829
|
+
* 观众
|
|
830
|
+
*/
|
|
831
|
+
isAudience: boolean;
|
|
832
|
+
/**
|
|
833
|
+
* 普通参会者
|
|
834
|
+
*/
|
|
835
|
+
isCommonUser: boolean;
|
|
836
|
+
/**
|
|
837
|
+
* 如果改用户是移动端, 该值用于判断这个用户是否在后台
|
|
838
|
+
*/
|
|
839
|
+
inBackground: boolean;
|
|
840
|
+
/**
|
|
841
|
+
* 是否正在通话中
|
|
842
|
+
*/
|
|
843
|
+
isCalling: boolean;
|
|
844
|
+
raiseHandTime: number;
|
|
845
|
+
signals: any[];
|
|
846
|
+
/**
|
|
847
|
+
* 是不是web端入会
|
|
848
|
+
*/
|
|
849
|
+
get isWeb(): boolean;
|
|
850
|
+
/**
|
|
851
|
+
* 是不是电话入会
|
|
852
|
+
*/
|
|
853
|
+
get isMobile(): boolean;
|
|
854
|
+
constructor(user: any, isLocal?: boolean);
|
|
855
|
+
setup(userId: string, userinfo: UserInfo, nickname: string, customInfo?: any): void;
|
|
856
|
+
getMainStreamModel(): BMStreamModel | undefined;
|
|
857
|
+
get nickname(): string;
|
|
858
|
+
getShareStreamModel(): BMStreamModel | undefined;
|
|
859
|
+
/**
|
|
860
|
+
* 获取用户麦克风开启状态
|
|
861
|
+
*/
|
|
862
|
+
get audioEnable(): boolean;
|
|
863
|
+
get isMixer(): boolean;
|
|
864
|
+
/**
|
|
865
|
+
* 获取用户视频开启状态
|
|
866
|
+
*/
|
|
867
|
+
get videoEnable(): boolean;
|
|
868
|
+
get isSharing(): boolean;
|
|
869
|
+
/**
|
|
870
|
+
* 是否是信号源
|
|
871
|
+
*/
|
|
872
|
+
get isSignal(): boolean;
|
|
873
|
+
/**
|
|
874
|
+
* 检测当前用户是否有主持人权限
|
|
875
|
+
*/
|
|
876
|
+
checkLocalHasMaster(): boolean;
|
|
877
|
+
/**
|
|
878
|
+
* 给用户添加流
|
|
879
|
+
* @param streamId
|
|
880
|
+
* @param stream 流
|
|
881
|
+
*/
|
|
882
|
+
addStream(streamId: string, stream: BMStreamModel): void;
|
|
883
|
+
/**
|
|
884
|
+
* 删除流
|
|
885
|
+
* @param streamId
|
|
886
|
+
*/
|
|
887
|
+
removeStream(streamId: string): void;
|
|
888
|
+
/**
|
|
889
|
+
* 获取用户id
|
|
890
|
+
*/
|
|
891
|
+
getID(): string;
|
|
892
|
+
/**
|
|
893
|
+
* 获取用户昵称
|
|
894
|
+
*/
|
|
895
|
+
getNickName(): string;
|
|
896
|
+
/**
|
|
897
|
+
* 获取用户信息
|
|
898
|
+
*/
|
|
899
|
+
getUserInfo(): UserInfo;
|
|
900
|
+
/**
|
|
901
|
+
* 获取用户流信息
|
|
902
|
+
*/
|
|
903
|
+
getStreams(): Map<string, BMStreamModel>;
|
|
904
|
+
/**
|
|
905
|
+
* updateUserInfo更新用户信息(除了isMaster,isMaster是通过change-master事件改变的)
|
|
906
|
+
* @param bcUser
|
|
907
|
+
* @param participant
|
|
908
|
+
* @param bmRoom
|
|
909
|
+
* @returns
|
|
910
|
+
*/
|
|
911
|
+
updateUserInfo(bcUser: BCUser, participant: any, bmRoom: BMRoom): void;
|
|
912
|
+
/** 是否有管理权限, 是主持人或联席主持人之一 */
|
|
913
|
+
hasManager(): boolean;
|
|
914
|
+
/** 获取用户后面的身份标识 */
|
|
915
|
+
getNicknameSuffix(): string;
|
|
916
|
+
/**
|
|
917
|
+
* 更新当前用户的排序
|
|
918
|
+
*/
|
|
919
|
+
updateSortNum(force?: boolean, shouldDelay?: boolean): void;
|
|
920
|
+
setSortNum(sortNum: number, force: boolean, shouldDelay: boolean): void;
|
|
921
|
+
}
|
|
922
|
+
|
|
923
|
+
/**
|
|
924
|
+
* @name: emitter
|
|
925
|
+
* @author: yangliye
|
|
926
|
+
* @date: 2022-05-24 15:15
|
|
927
|
+
* @description:emitter
|
|
928
|
+
* @update: 2022-05-24 15:15
|
|
929
|
+
*/
|
|
930
|
+
|
|
931
|
+
declare type UserSortType = {
|
|
932
|
+
isCommon: boolean;
|
|
933
|
+
isAudience: boolean;
|
|
934
|
+
shouldDelay: boolean;
|
|
935
|
+
};
|
|
936
|
+
|
|
937
|
+
interface ChangeIsGuest {
|
|
938
|
+
user: BMUser;
|
|
939
|
+
preIsGuest: boolean;
|
|
940
|
+
isGuest: boolean;
|
|
941
|
+
}
|
|
942
|
+
declare class BMUserVM {
|
|
943
|
+
/** 嘉宾及以上列表 */
|
|
944
|
+
userList: Map<string, BMUser>;
|
|
945
|
+
/** 观众列表 */
|
|
946
|
+
audiencesList: Map<string, BMUser>;
|
|
947
|
+
signalList: Map<string, BMUser>;
|
|
948
|
+
/** 大房间,普通参会者列表 */
|
|
949
|
+
commonUserList: Map<string, BMUser>;
|
|
950
|
+
boomCore: BCClient__default;
|
|
951
|
+
room: BMRoom;
|
|
952
|
+
/** 嘉宾及以上列表 */
|
|
953
|
+
userListWatcher: BehaviorSubject<BMUser[]>;
|
|
954
|
+
/** 观众列表 */
|
|
955
|
+
audiencesListWatcher: BehaviorSubject<BMUser[]>;
|
|
956
|
+
/** 大房间,普通参会者列表 */
|
|
957
|
+
commonUserListWatcher: BehaviorSubject<BMUser[]>;
|
|
958
|
+
/** 信号源列表 */
|
|
959
|
+
signalListWatcher: BehaviorSubject<BMUser[]>;
|
|
960
|
+
masterUserWatcher: BehaviorSubject<BMUser | null>;
|
|
961
|
+
getForceUserWatcher: BehaviorSubject<boolean>;
|
|
962
|
+
localUser: BMUser;
|
|
963
|
+
commTimer: number;
|
|
964
|
+
constructor(boomCore: BCClient__default, localUser: BMUser, room: BMRoom);
|
|
965
|
+
handleUserRoleChange(info: ChangeIsGuest): Promise<void>;
|
|
966
|
+
/**
|
|
967
|
+
* 添加用户, 并返回已添加的用户对象
|
|
968
|
+
* @param bcUser bcUser对象
|
|
969
|
+
*/
|
|
970
|
+
addUser(bcUser: BCUser): BMUser;
|
|
971
|
+
/**
|
|
972
|
+
* 移除用户
|
|
973
|
+
* @param userId 用户id
|
|
974
|
+
*/
|
|
975
|
+
removeUser(userId: string): boolean;
|
|
976
|
+
/**
|
|
977
|
+
* 获取用户视频开启状态
|
|
978
|
+
* @param userId 用户id
|
|
979
|
+
*/
|
|
980
|
+
videoEnable(userId: string): boolean;
|
|
981
|
+
/**
|
|
982
|
+
* 获取用户音频开启状态
|
|
983
|
+
* @param userId
|
|
984
|
+
*/
|
|
985
|
+
audioEnable(userId: string): boolean;
|
|
986
|
+
/**
|
|
987
|
+
* 检测用户是不是主持人
|
|
988
|
+
* @param {string} userId 用户id
|
|
989
|
+
*/
|
|
990
|
+
checkIsMaster(userId: any): boolean;
|
|
991
|
+
/**
|
|
992
|
+
* 检测当前用户是否有主持人权限
|
|
993
|
+
*/
|
|
994
|
+
checkLocalHasMaster(): boolean;
|
|
995
|
+
/**
|
|
996
|
+
* 检测目标用户是否有主持人权限
|
|
997
|
+
*/
|
|
998
|
+
checkUserHasMaster(userId: string): boolean;
|
|
999
|
+
/**
|
|
1000
|
+
* 根据用户id获取user对象
|
|
1001
|
+
* @param {string} userId
|
|
1002
|
+
*/
|
|
1003
|
+
getUser(userId: string): BMUser | undefined;
|
|
1004
|
+
getAllUsers(pageIndex: number, allUsers: Map<string, BCUser>, permission?: string, useNew?: boolean): Promise<void>;
|
|
1005
|
+
/**
|
|
1006
|
+
* 刚加入房间时初始化人数
|
|
1007
|
+
*/
|
|
1008
|
+
initUserList(usersInRoom: Map<string, BCUser>): Promise<void>;
|
|
1009
|
+
addBcUsersMap(users: Map<string, BCUser>, forceGetStream?: boolean, updateSort?: boolean): void;
|
|
1010
|
+
addBCUser: (bcUser: BCUser, forceGetStream?: boolean, updateSort?: boolean) => BMUser | undefined;
|
|
1011
|
+
/**
|
|
1012
|
+
* 改变userList中的主持人,返回改变后的主持人用户对象,该方法只在change-master中调用, 不对外暴露
|
|
1013
|
+
* @param userId
|
|
1014
|
+
* @param oldMasterId
|
|
1015
|
+
* @param isKeep
|
|
1016
|
+
*/
|
|
1017
|
+
updateMaster(userId: string, oldMasterId: string, isKeep: boolean): UpdateMasterType;
|
|
1018
|
+
/**
|
|
1019
|
+
* 联席主持人设置嘉宾的操作
|
|
1020
|
+
* @param userId
|
|
1021
|
+
*/
|
|
1022
|
+
managerChangeToGuest(userId: string): BMUser | undefined;
|
|
1023
|
+
/**
|
|
1024
|
+
* 改变联席主持人,返回设置为联席主持人的bmuser对象
|
|
1025
|
+
* @param userId
|
|
1026
|
+
* @param status true:设置成联席主持人 false:取消联席主持人身份
|
|
1027
|
+
* @param hasS
|
|
1028
|
+
* @returns
|
|
1029
|
+
*/
|
|
1030
|
+
updateManager(userId: string, status: boolean, hasS?: boolean): BMUser;
|
|
1031
|
+
/**
|
|
1032
|
+
* 获取我自己
|
|
1033
|
+
*/
|
|
1034
|
+
getLocalUser(): BMUser;
|
|
1035
|
+
updateUser(bmUser: BMUser, bcUser: BCUser): void;
|
|
1036
|
+
updateLocalUserPermission(permission: string): void;
|
|
1037
|
+
/**
|
|
1038
|
+
* bcUser变成BMUser
|
|
1039
|
+
* @param bcUser
|
|
1040
|
+
* @returns
|
|
1041
|
+
*/
|
|
1042
|
+
toBMUser(bcUser: BCUser): BMUser;
|
|
1043
|
+
private sortUsers;
|
|
1044
|
+
private sortAudiences;
|
|
1045
|
+
private sortCommonUsers;
|
|
1046
|
+
private sortSignalUsers;
|
|
1047
|
+
private static filterUsers;
|
|
1048
|
+
private static filterUser;
|
|
1049
|
+
/**
|
|
1050
|
+
* 排序变化之后的处理逻辑
|
|
1051
|
+
*/
|
|
1052
|
+
updateAllSort: () => void;
|
|
1053
|
+
updateSortByType: (userType: UserSortType) => void;
|
|
1054
|
+
updateUserSort: lodash_es.DebouncedFunc<() => void>;
|
|
1055
|
+
updateCommonUserSort: lodash_es.DebouncedFunc<() => void>;
|
|
1056
|
+
updateDelayCommonUserSort: lodash_es.DebouncedFunc<() => void>;
|
|
1057
|
+
updateAudienceUserSort: lodash_es.DebouncedFunc<() => void>;
|
|
1058
|
+
updateSignalUserSort: () => void;
|
|
1059
|
+
/**
|
|
1060
|
+
* 初始化所有的用户
|
|
1061
|
+
*/
|
|
1062
|
+
initUsers(): Promise<void>;
|
|
1063
|
+
/**
|
|
1064
|
+
* 把bloud用户转化为当前的BMUser 和创建对应的BMStreamModel
|
|
1065
|
+
* @param page
|
|
1066
|
+
* @param permission
|
|
1067
|
+
* @param useNew 是否使用getUsersList
|
|
1068
|
+
*/
|
|
1069
|
+
transBloudUsers: (page: number, permission?: string, useNew?: boolean, failedNum?: number) => Promise<void>;
|
|
1070
|
+
/**
|
|
1071
|
+
* 本地嘉宾用户降级为普通参会者之后要取消拉流
|
|
1072
|
+
*/
|
|
1073
|
+
handleUnSubCommonUser(): void;
|
|
1074
|
+
handleCommonUserChange(): void;
|
|
1075
|
+
getUsers(page: number, pageSize: number, permission?: string, mode?: 'map' | 'array'): Promise<{
|
|
1076
|
+
userList: Map<string, BMUser>;
|
|
1077
|
+
total: number;
|
|
1078
|
+
} | {
|
|
1079
|
+
userList: BMUser[];
|
|
1080
|
+
total: number;
|
|
1081
|
+
}>;
|
|
1082
|
+
/**
|
|
1083
|
+
* 获取观众列表
|
|
1084
|
+
* @param page
|
|
1085
|
+
* @param pageSize
|
|
1086
|
+
* @param mode
|
|
1087
|
+
*/
|
|
1088
|
+
getAudiencesList(page: number, pageSize: number, mode?: 'map' | 'array'): Promise<{
|
|
1089
|
+
userList: Map<string, BMUser>;
|
|
1090
|
+
total: number;
|
|
1091
|
+
} | {
|
|
1092
|
+
userList: BMUser[];
|
|
1093
|
+
total: number;
|
|
1094
|
+
}>;
|
|
1095
|
+
getUsersList(page: number, pageSize: number, permission?: string, waitRoom?: boolean): Promise<{
|
|
1096
|
+
userList: BMUser[];
|
|
1097
|
+
total: number;
|
|
1098
|
+
pageIndex: number;
|
|
1099
|
+
}>;
|
|
1100
|
+
getTotalUserNumber(): Promise<number>;
|
|
1101
|
+
clearUsers(): void;
|
|
1102
|
+
/**
|
|
1103
|
+
* 参会者列表搜索(嘉宾及以上才能搜索)
|
|
1104
|
+
* @param searchTxt 搜索文本
|
|
1105
|
+
* @param pageSize 一页几个
|
|
1106
|
+
* @param waitRoom 是否是等候室用户
|
|
1107
|
+
*/
|
|
1108
|
+
searchUsers(searchTxt: string, pageSize: number): Promise<{
|
|
1109
|
+
userList: BMUser[];
|
|
1110
|
+
commonUserList: BMUser[];
|
|
1111
|
+
audienceList: BMUser[];
|
|
1112
|
+
}>;
|
|
1113
|
+
/**
|
|
1114
|
+
* 查找等候室用户
|
|
1115
|
+
* @param searchTxt
|
|
1116
|
+
* @param pageSize
|
|
1117
|
+
*/
|
|
1118
|
+
searchWaitRoomUsers(searchTxt: string, pageSize: number): Promise<BMUser[]>;
|
|
1119
|
+
}
|
|
1120
|
+
|
|
1121
|
+
interface Tiles4 {
|
|
1122
|
+
index: number;
|
|
1123
|
+
nickname: string;
|
|
1124
|
+
user: string;
|
|
1125
|
+
stream: string;
|
|
1126
|
+
isSubStream?: boolean;
|
|
1127
|
+
}
|
|
1128
|
+
interface HostLayout {
|
|
1129
|
+
user: string;
|
|
1130
|
+
layout: number;
|
|
1131
|
+
activeSubtiles: boolean;
|
|
1132
|
+
tiles: Tiles4[];
|
|
1133
|
+
}
|
|
1134
|
+
declare type CloudRecord = {
|
|
1135
|
+
recordStatus: 0 | 1 | 2;
|
|
1136
|
+
userId: string;
|
|
1137
|
+
};
|
|
1138
|
+
|
|
1139
|
+
/**
|
|
1140
|
+
* @name: BMRoomInfo
|
|
1141
|
+
* @author: yangliye
|
|
1142
|
+
* @date: 2022-05-18 13:52
|
|
1143
|
+
* @description:BMRoomInfo
|
|
1144
|
+
* @update: 2022-05-18 13:52
|
|
1145
|
+
*/
|
|
1146
|
+
|
|
1147
|
+
interface OperationCustomStats {
|
|
1148
|
+
/**
|
|
1149
|
+
* 是否允许点赞 0 不可用 1可用
|
|
1150
|
+
*/
|
|
1151
|
+
giveLikeEnable: 0 | 1;
|
|
1152
|
+
/**
|
|
1153
|
+
* 聊天是否可以用 0 不可用 1可用 2仅主持人 3嘉宾
|
|
1154
|
+
*/
|
|
1155
|
+
chatEnable: 0 | 1 | 2 | 3;
|
|
1156
|
+
/**
|
|
1157
|
+
* 上传文档权限 设置-文档上传模式 0仅主持人 1 嘉宾 2 全员
|
|
1158
|
+
*/
|
|
1159
|
+
fileUpdateModel: FilePermission;
|
|
1160
|
+
/**
|
|
1161
|
+
* 文档查看权限 设置-文档查看模式 0仅主持人 1 嘉宾 2 全员
|
|
1162
|
+
*/
|
|
1163
|
+
fileUpdateLook: FilePermission;
|
|
1164
|
+
/**
|
|
1165
|
+
* 文档下载权限 设置-文档下载模式 0仅主持人 1 嘉宾 2 全员
|
|
1166
|
+
*/
|
|
1167
|
+
fileUpdateDown: FilePermission;
|
|
1168
|
+
/**
|
|
1169
|
+
* 文档编辑权限 设置-文档编辑模式 0仅主持人 1 嘉宾 2 全员
|
|
1170
|
+
*/
|
|
1171
|
+
fileUpdateEdit: FilePermission;
|
|
1172
|
+
/**
|
|
1173
|
+
* 共享屏幕权限 设置-屏幕共享模式 0仅主持人 1全员
|
|
1174
|
+
*/
|
|
1175
|
+
screenShareModel: 0 | 1;
|
|
1176
|
+
/**
|
|
1177
|
+
* 是否仅一人共享 1:是 2:否
|
|
1178
|
+
*/
|
|
1179
|
+
onlyOnePersonShare: 0 | 1;
|
|
1180
|
+
/**
|
|
1181
|
+
* 云录对象
|
|
1182
|
+
* recordStatus 录制状态:0=暂未开始,1=录制中,2=申请中
|
|
1183
|
+
* userId:开启人
|
|
1184
|
+
*/
|
|
1185
|
+
cloudRecord: CloudRecord;
|
|
1186
|
+
/**
|
|
1187
|
+
* 入会时麦克风权限 0全员 1嘉宾 2主持人
|
|
1188
|
+
*/
|
|
1189
|
+
joinAudioEnable: 0 | 1 | 2;
|
|
1190
|
+
/**
|
|
1191
|
+
* 入会时开启摄像头权限 0全员 1嘉宾 2主持人
|
|
1192
|
+
*/
|
|
1193
|
+
joinVideoEnable: 0 | 1 | 2;
|
|
1194
|
+
/**
|
|
1195
|
+
* 参会者列表权限 0全员 1嘉宾 2主持人
|
|
1196
|
+
*/
|
|
1197
|
+
userListEnable: 0 | 1 | 2;
|
|
1198
|
+
/**
|
|
1199
|
+
* 会议中是否允许开启麦克风 0全员 1嘉宾 2主持人
|
|
1200
|
+
*/
|
|
1201
|
+
audioEnable: 0 | 1 | 2;
|
|
1202
|
+
/**
|
|
1203
|
+
* 会议中是否允许开启摄像头 0全员 1嘉宾 2主持人
|
|
1204
|
+
*/
|
|
1205
|
+
videoEnable: 0 | 1 | 2;
|
|
1206
|
+
/**
|
|
1207
|
+
* 是否允许自行改名 0全员 1嘉宾
|
|
1208
|
+
*/
|
|
1209
|
+
modifyNameEnable: 0 | 1;
|
|
1210
|
+
/**
|
|
1211
|
+
* 是否允许开启虚拟背景 0全员 1嘉宾 2主持人
|
|
1212
|
+
*/
|
|
1213
|
+
backgroundAIEnable: 0 | 1 | 2;
|
|
1214
|
+
/**
|
|
1215
|
+
* 是否允许举手 0禁止全员 1允许嘉宾 2全员可举手
|
|
1216
|
+
*/
|
|
1217
|
+
raiseHandEnable: 0 | 1 | 2;
|
|
1218
|
+
/**
|
|
1219
|
+
* 入会提示音设置
|
|
1220
|
+
*/
|
|
1221
|
+
joinCueVoice: 0 | 1;
|
|
1222
|
+
}
|
|
1223
|
+
declare class BMRoomInfo {
|
|
1224
|
+
private room;
|
|
1225
|
+
/**
|
|
1226
|
+
* 房间名
|
|
1227
|
+
*/
|
|
1228
|
+
private _roomName;
|
|
1229
|
+
/**
|
|
1230
|
+
* 消息序列号
|
|
1231
|
+
*/
|
|
1232
|
+
msgSeq: string;
|
|
1233
|
+
/**
|
|
1234
|
+
* 房间 号
|
|
1235
|
+
*/
|
|
1236
|
+
roomID: string;
|
|
1237
|
+
/**
|
|
1238
|
+
* 是否全员静音(业务端用)
|
|
1239
|
+
*/
|
|
1240
|
+
audioOff: boolean;
|
|
1241
|
+
/**
|
|
1242
|
+
* 是否可以自行开启(业务端用)
|
|
1243
|
+
*/
|
|
1244
|
+
selfopenaudio: boolean;
|
|
1245
|
+
/**
|
|
1246
|
+
* 是否锁定
|
|
1247
|
+
*/
|
|
1248
|
+
lock: boolean;
|
|
1249
|
+
/**
|
|
1250
|
+
* 离开提示
|
|
1251
|
+
*/
|
|
1252
|
+
private leaveNotice;
|
|
1253
|
+
/**
|
|
1254
|
+
* 全员静音状态下是否允许打开麦克风
|
|
1255
|
+
* @private
|
|
1256
|
+
*/
|
|
1257
|
+
private openSelf;
|
|
1258
|
+
/**
|
|
1259
|
+
* 通知公告信息
|
|
1260
|
+
*/
|
|
1261
|
+
chatNotice: string;
|
|
1262
|
+
/**
|
|
1263
|
+
* 通知公告信息富文本
|
|
1264
|
+
*/
|
|
1265
|
+
chatNoticeRich: string;
|
|
1266
|
+
/**
|
|
1267
|
+
* 所有的音频举手人员
|
|
1268
|
+
*/
|
|
1269
|
+
private raiseHandsList;
|
|
1270
|
+
raiseHandsWatcher: BehaviorSubject<BMUser[]>;
|
|
1271
|
+
/**
|
|
1272
|
+
* 所有的视频举手的人员
|
|
1273
|
+
*/
|
|
1274
|
+
private raiseVideoHandsList;
|
|
1275
|
+
raiseVideoHandsWatcher: BehaviorSubject<BMUser[]>;
|
|
1276
|
+
/**
|
|
1277
|
+
* 所有的举手的人员
|
|
1278
|
+
*/
|
|
1279
|
+
private raiseSimpleHandsList;
|
|
1280
|
+
raiseSimpleHandsWatcher: BehaviorSubject<BMUser[]>;
|
|
1281
|
+
operationPermission: OperationCustomStats | undefined;
|
|
1282
|
+
operationPermissionWatcher: Subject<OperationCustomStats>;
|
|
1283
|
+
chatNoticeWatcher: Subject<unknown>;
|
|
1284
|
+
totalUserWatcher: BehaviorSubject<number>;
|
|
1285
|
+
totalWaitRoomUserWatcher: BehaviorSubject<number>;
|
|
1286
|
+
isOpenWaitRoom: Subject<boolean>;
|
|
1287
|
+
originJoinRoomParams: any;
|
|
1288
|
+
/** 原始的joinRoom 响应信息 */
|
|
1289
|
+
originRespInfo: any;
|
|
1290
|
+
constructor(room: BMRoom);
|
|
1291
|
+
get roomName(): string;
|
|
1292
|
+
/**
|
|
1293
|
+
* 判断是不是大房间使用
|
|
1294
|
+
*/
|
|
1295
|
+
get isBigRoom(): boolean;
|
|
1296
|
+
/**
|
|
1297
|
+
* 会议开始时间
|
|
1298
|
+
*/
|
|
1299
|
+
get startup(): number;
|
|
1300
|
+
setup(info: any): void;
|
|
1301
|
+
initCustomStats(customStats: any): void;
|
|
1302
|
+
updateOperationPermission(stats: any): void;
|
|
1303
|
+
private handleInitParams;
|
|
1304
|
+
audioOffWatcher: Subject<audioOffWatcherValue>;
|
|
1305
|
+
lockWatcher: BehaviorSubject<boolean>;
|
|
1306
|
+
leaveNoticeWatcher: BehaviorSubject<boolean>;
|
|
1307
|
+
openSelfWatcher: BehaviorSubject<boolean>;
|
|
1308
|
+
/**
|
|
1309
|
+
* 设置是否全员静音
|
|
1310
|
+
* @param audioOff
|
|
1311
|
+
* @param selfopenaudio 是否可以自行开启
|
|
1312
|
+
*/
|
|
1313
|
+
setAudioOff(audioOff: boolean, selfopenaudio: boolean): void;
|
|
1314
|
+
/**
|
|
1315
|
+
* 设置是否锁定
|
|
1316
|
+
* @param lock
|
|
1317
|
+
*/
|
|
1318
|
+
setlock(lock: boolean): void;
|
|
1319
|
+
setLeaveNotice(leaveNotice: boolean): void;
|
|
1320
|
+
setRaiseHandsList(userList: BMUser[]): void;
|
|
1321
|
+
/**
|
|
1322
|
+
* 音频举手处理
|
|
1323
|
+
* @param user
|
|
1324
|
+
*/
|
|
1325
|
+
addRaiseHandUser(user: BMUser): void;
|
|
1326
|
+
/**
|
|
1327
|
+
* 取消音频举手处理
|
|
1328
|
+
* @param userId
|
|
1329
|
+
*/
|
|
1330
|
+
removeRaiseHandUser(userId: string): void;
|
|
1331
|
+
/**
|
|
1332
|
+
* 视频申请处理
|
|
1333
|
+
* @param user
|
|
1334
|
+
*/
|
|
1335
|
+
addVideoRaiseHandUser(user: BMUser): void;
|
|
1336
|
+
/**
|
|
1337
|
+
* 取消视频申请处理
|
|
1338
|
+
* @param userId
|
|
1339
|
+
*/
|
|
1340
|
+
removeVideoRaiseHandUser(userId: string): void;
|
|
1341
|
+
/**
|
|
1342
|
+
* 举手处理
|
|
1343
|
+
* @param user
|
|
1344
|
+
*/
|
|
1345
|
+
addSimpleRaiseHandUser(user: BMUser): void;
|
|
1346
|
+
/**
|
|
1347
|
+
* 取消举手处理
|
|
1348
|
+
* @param userId
|
|
1349
|
+
*/
|
|
1350
|
+
removeSimpleRaiseHandUser(userId: string): void;
|
|
1351
|
+
private setRaiseHandsWatcherValue;
|
|
1352
|
+
private setVideoRaiseHandsWatcherValue;
|
|
1353
|
+
private setSimpleRaiseHandsWatcherValue;
|
|
1354
|
+
}
|
|
1355
|
+
|
|
1356
|
+
/**
|
|
1357
|
+
* 0 仅支持人 1 嘉宾 2 全员
|
|
1358
|
+
*/
|
|
1359
|
+
declare type FilePermission = 0 | 1 | 2;
|
|
1360
|
+
declare type giveLikeItem = {
|
|
1361
|
+
userId: string | undefined;
|
|
1362
|
+
nickName: string | undefined;
|
|
1363
|
+
time: number;
|
|
1364
|
+
type: number;
|
|
1365
|
+
};
|
|
1366
|
+
declare type SupportVideoProfile = '180p' | '240p' | '360p' | '480p' | '720p';
|
|
1367
|
+
declare type SampleDeviceInfo = {
|
|
1368
|
+
name: string;
|
|
1369
|
+
};
|
|
1370
|
+
interface DeviceList {
|
|
1371
|
+
microphoneDeviceList: SampleDeviceInfo[];
|
|
1372
|
+
speakerDeviceList: SampleDeviceInfo[];
|
|
1373
|
+
videoDeviceList: SampleDeviceInfo[];
|
|
1374
|
+
selectVideoDevice: SampleDeviceInfo;
|
|
1375
|
+
selectMicrophoneDevice: SampleDeviceInfo;
|
|
1376
|
+
selectSpeakerDevice: SampleDeviceInfo;
|
|
1377
|
+
videoProfile: SupportVideoProfile;
|
|
1378
|
+
echoCancellation: boolean;
|
|
1379
|
+
noiseSuppression: boolean;
|
|
1380
|
+
autoGainControl: boolean;
|
|
1381
|
+
speakerVolume: number;
|
|
1382
|
+
}
|
|
1383
|
+
interface AudioProfileInfo {
|
|
1384
|
+
/**
|
|
1385
|
+
* 音频采集设备
|
|
1386
|
+
*/
|
|
1387
|
+
microphoneDevice?: SampleDeviceInfo;
|
|
1388
|
+
/**
|
|
1389
|
+
* 音频输出设备
|
|
1390
|
+
*/
|
|
1391
|
+
speakerDevice?: SampleDeviceInfo;
|
|
1392
|
+
/**
|
|
1393
|
+
* 回音消除
|
|
1394
|
+
*/
|
|
1395
|
+
echoCancellation?: boolean;
|
|
1396
|
+
/**
|
|
1397
|
+
* 音频降噪
|
|
1398
|
+
*/
|
|
1399
|
+
noiseSuppression?: boolean;
|
|
1400
|
+
/**
|
|
1401
|
+
* 声音增益
|
|
1402
|
+
*/
|
|
1403
|
+
autoGainControl?: boolean;
|
|
1404
|
+
/**
|
|
1405
|
+
* 调整扬声器音量 0 - 100
|
|
1406
|
+
*/
|
|
1407
|
+
speakerVolume?: number;
|
|
1408
|
+
/**
|
|
1409
|
+
* 调整麦克风音量 0 - 100
|
|
1410
|
+
*/
|
|
1411
|
+
microVolume?: number;
|
|
1412
|
+
}
|
|
1413
|
+
declare class BMRoomVM {
|
|
1414
|
+
roomInfo: BMRoomInfo;
|
|
1415
|
+
boomCore: BCClient__default;
|
|
1416
|
+
userVM: BMUserVM;
|
|
1417
|
+
giveLikeListWatcher: Subject<Array<giveLikeItem>>;
|
|
1418
|
+
giveLikeList: Array<giveLikeItem>;
|
|
1419
|
+
private room;
|
|
1420
|
+
tipQueueObj: any;
|
|
1421
|
+
constructor(boomCore: BCClient__default, userVM: any, roomInfo: BMRoomInfo);
|
|
1422
|
+
initWithRoom(room: BMRoom): void;
|
|
1423
|
+
/**
|
|
1424
|
+
* 踢出用户
|
|
1425
|
+
* @param {String} userId 用户ID
|
|
1426
|
+
* @param {boolean} withoutBlack
|
|
1427
|
+
*/
|
|
1428
|
+
evictUser(userId: string, withoutBlack: boolean): Promise<any>;
|
|
1429
|
+
/**
|
|
1430
|
+
* 更新用户信息,端上会收到 participant-update 信令
|
|
1431
|
+
* @param userId
|
|
1432
|
+
* @param info
|
|
1433
|
+
*/
|
|
1434
|
+
updateUser(userId: string, info: any): Promise<undefined>;
|
|
1435
|
+
/**
|
|
1436
|
+
* 改变主持人
|
|
1437
|
+
* @param {String} userId 用户ID
|
|
1438
|
+
* @param isKeep
|
|
1439
|
+
*/
|
|
1440
|
+
changeMaster(userId: string, isKeep: boolean): Promise<any>;
|
|
1441
|
+
updateManager(userId: string, status: boolean, hasS?: boolean): Promise<BMUser>;
|
|
1442
|
+
/**
|
|
1443
|
+
* 改变昵称 需要调用http请求
|
|
1444
|
+
* @param {String} userId 用户ID
|
|
1445
|
+
* @param {String} nickName 用户ID
|
|
1446
|
+
*/
|
|
1447
|
+
changeNickName(userId: string, nickName: string): Promise<any>;
|
|
1448
|
+
/**
|
|
1449
|
+
* 主持人send-message
|
|
1450
|
+
* @param message 发送的消息
|
|
1451
|
+
* @param uid 指定的userId
|
|
1452
|
+
*/
|
|
1453
|
+
sendMessageWithMaster(message: any, uid?: string): Promise<undefined>;
|
|
1454
|
+
/**
|
|
1455
|
+
* 开关对端麦克风-信令发送
|
|
1456
|
+
* @param status true:开,false:关
|
|
1457
|
+
* @param uid 用户id
|
|
1458
|
+
* @param isNotCancelRootReport 当打开麦克风时, 是否不取消音频权限申请
|
|
1459
|
+
*/
|
|
1460
|
+
setRemoteAudioEnable(status: boolean, uid: string, isNotCancelRootReport: boolean | undefined): Promise<void>;
|
|
1461
|
+
/**
|
|
1462
|
+
* 开关对端摄像头-信令发送
|
|
1463
|
+
* @param status true:开,false:关
|
|
1464
|
+
* @param uid 用户id
|
|
1465
|
+
*/
|
|
1466
|
+
setRemoteVideoEnable(status: boolean, uid: string): Promise<void>;
|
|
1467
|
+
/**
|
|
1468
|
+
* 关闭对端共享屏幕
|
|
1469
|
+
* @param uid 用户id
|
|
1470
|
+
*/
|
|
1471
|
+
closeRemoteShare(uid: string): Promise<void>;
|
|
1472
|
+
/**
|
|
1473
|
+
* 提醒用户
|
|
1474
|
+
* @param uid 用户id
|
|
1475
|
+
* @param uid msg
|
|
1476
|
+
*/
|
|
1477
|
+
tipUser(uid: string, msg: string, richMsg: object, time: any): Promise<void>;
|
|
1478
|
+
/**
|
|
1479
|
+
* 举手相关操作
|
|
1480
|
+
* @param type 视频还是音频举手 audio/video
|
|
1481
|
+
* @param raise 举手还是放下举手 true/false
|
|
1482
|
+
*/
|
|
1483
|
+
raiseHands(type: 'audio' | 'video' | 'raiseHand', raise: boolean): Promise<void>;
|
|
1484
|
+
/**
|
|
1485
|
+
* 举手相关操作-customMessage信令发送
|
|
1486
|
+
* @param type 视频还是音频举手 audio/video
|
|
1487
|
+
* @param raise 举手还是放下举手 true/false
|
|
1488
|
+
*/
|
|
1489
|
+
raiseHandsByCustomMessage(type: 'audio' | 'video' | 'raiseHand', raise: boolean, userId: string): Promise<boolean>;
|
|
1490
|
+
/**
|
|
1491
|
+
* 主持人处理举手操作
|
|
1492
|
+
* @param raiseHandsType 0 音视频 1 音频 2 视频 3 单纯的举手 4:通过sendCustomMessage去举手
|
|
1493
|
+
* @param raiseHands true 同意 false 拒绝
|
|
1494
|
+
* @param uid 指定的用户Id
|
|
1495
|
+
* @description 如果不指定用户ID就是广播处理所有的举手的人员
|
|
1496
|
+
*/
|
|
1497
|
+
handleRaiseHands(raiseHandsType: 0 | 1 | 2 | 3, raiseHands: boolean, uid?: string): Promise<undefined>;
|
|
1498
|
+
/**
|
|
1499
|
+
* 更新自定义属性 updateCustomStats
|
|
1500
|
+
* @param stats
|
|
1501
|
+
* @param {boolean} replace 是否替换原数据
|
|
1502
|
+
*/
|
|
1503
|
+
private updateCustomStats;
|
|
1504
|
+
/**
|
|
1505
|
+
* 发送聊天公告
|
|
1506
|
+
* @param notice
|
|
1507
|
+
*/
|
|
1508
|
+
sendChatNotice(notice: string, richNotice: object, showTipNotice: boolean): Promise<void>;
|
|
1509
|
+
/**
|
|
1510
|
+
* 是否允许点赞
|
|
1511
|
+
* @param enable 0 不允许 1 允许
|
|
1512
|
+
*/
|
|
1513
|
+
giveLikeEnable(enable: 0 | 1): Promise<void>;
|
|
1514
|
+
/**
|
|
1515
|
+
* 入会自动静音配置 0 关闭 1 开启自动静音 2 超过6个人入会自动静音
|
|
1516
|
+
* @param enable
|
|
1517
|
+
*/
|
|
1518
|
+
changeAutoMute(enable: 0 | 1 | 2): Promise<void>;
|
|
1519
|
+
/**
|
|
1520
|
+
* 允许成员接收进入/离开会议通知配置 0 关闭 1 开启自动静音
|
|
1521
|
+
* @param enable
|
|
1522
|
+
*/
|
|
1523
|
+
allUserReceiveJoinLeaveMessages(enable: 0 | 1): Promise<void>;
|
|
1524
|
+
/**
|
|
1525
|
+
* 成员入会时给主持人播放提示音配置 0 关闭 1 开启自动静音
|
|
1526
|
+
* @param enable
|
|
1527
|
+
*/
|
|
1528
|
+
userJoinMasterVoice(enable: 0 | 1): Promise<void>;
|
|
1529
|
+
/**
|
|
1530
|
+
* 观众点赞(走customMessage)
|
|
1531
|
+
* @param type 1:点赞, 2:送花, 3:爱心, 4: 鼓掌, 5: 喝彩
|
|
1532
|
+
*/
|
|
1533
|
+
userGiveLike(type: 1 | 2 | 3 | 4 | 5): Promise<void>;
|
|
1534
|
+
/**
|
|
1535
|
+
* 聊天是否可用
|
|
1536
|
+
* @param enable 0 不允许 1 允许 2仅主持人 3嘉宾
|
|
1537
|
+
*/
|
|
1538
|
+
chatEnable(enable: 0 | 1 | 2 | 3): Promise<void>;
|
|
1539
|
+
/**
|
|
1540
|
+
* 入会时是否允许开启麦克风
|
|
1541
|
+
* @param enable 0全员 1嘉宾 2仅主持人 3全员禁止
|
|
1542
|
+
*/
|
|
1543
|
+
joinAudioEnable(enable: 0 | 1 | 2 | 3): Promise<void>;
|
|
1544
|
+
/**
|
|
1545
|
+
* 入会时是否允许开启摄像头
|
|
1546
|
+
* @param enable 0全员 1嘉宾 2仅主持人 3全员禁止
|
|
1547
|
+
*/
|
|
1548
|
+
joinVideoEnable(enable: 0 | 1 | 2 | 3): Promise<void>;
|
|
1549
|
+
/**
|
|
1550
|
+
* 参会者列表权限
|
|
1551
|
+
* @param enable 0全员 1嘉宾 2仅主持人
|
|
1552
|
+
*/
|
|
1553
|
+
userListEnable(enable: 0 | 1 | 2): Promise<void>;
|
|
1554
|
+
/**
|
|
1555
|
+
* 会议中是否允许开麦克风
|
|
1556
|
+
* @param enable 0全员 1嘉宾 2仅主持人
|
|
1557
|
+
*/
|
|
1558
|
+
audioEnable(enable: 0 | 1 | 2): Promise<void>;
|
|
1559
|
+
/**
|
|
1560
|
+
* 会议中是否允许开启摄像头
|
|
1561
|
+
* @param enable 0全员 1嘉宾 2仅主持人
|
|
1562
|
+
*/
|
|
1563
|
+
videoEnable(enable: 0 | 1 | 2): Promise<void>;
|
|
1564
|
+
/**
|
|
1565
|
+
* 是否允许自行改名
|
|
1566
|
+
* @param enable 0全员 1嘉宾
|
|
1567
|
+
*/
|
|
1568
|
+
modifyNameEnable(enable: 0 | 1 | 2): Promise<void>;
|
|
1569
|
+
/**
|
|
1570
|
+
* 是否允许开启虚拟背景
|
|
1571
|
+
* @param enable 0全员 1嘉宾 2仅主持人
|
|
1572
|
+
*/
|
|
1573
|
+
backgroundAIEnable(enable: 0 | 1 | 2): Promise<void>;
|
|
1574
|
+
/**
|
|
1575
|
+
* 强制开启对方视频
|
|
1576
|
+
* @param enable true开启 false关闭
|
|
1577
|
+
*/
|
|
1578
|
+
forceOpenUserCamera(enable: true | false): Promise<void>;
|
|
1579
|
+
/**
|
|
1580
|
+
* 强制开启对方音频
|
|
1581
|
+
* @param enable true开启 false关闭
|
|
1582
|
+
*/
|
|
1583
|
+
forceOpenUserMic(enable: true | false): Promise<void>;
|
|
1584
|
+
/**
|
|
1585
|
+
* 入会提示音设置
|
|
1586
|
+
* @param enable 0关闭 1开启
|
|
1587
|
+
*/
|
|
1588
|
+
joinCueVoice(enable: 0 | 1): Promise<void>;
|
|
1589
|
+
/**
|
|
1590
|
+
* 是否全员可录制
|
|
1591
|
+
* @param enable 0全员 1嘉宾 2仅主持人
|
|
1592
|
+
*/
|
|
1593
|
+
recordEnable(enable: 0 | 1 | 2): Promise<void>;
|
|
1594
|
+
/**
|
|
1595
|
+
* 是否全员可录制
|
|
1596
|
+
* @param enable 0禁止全员举手 1嘉宾可举手 2全员可举手
|
|
1597
|
+
*/
|
|
1598
|
+
raiseHandEnable(enable: 0 | 1 | 2): Promise<void>;
|
|
1599
|
+
/**
|
|
1600
|
+
* 入会麦克风禁用
|
|
1601
|
+
* @param enable 0全员禁止使用 1嘉宾和学员不可使用 2不开启
|
|
1602
|
+
*/
|
|
1603
|
+
joinMicrophoneDisable(enable: 0 | 1 | 2): Promise<void>;
|
|
1604
|
+
/**
|
|
1605
|
+
* 入会摄像头禁用
|
|
1606
|
+
* @param enable 0全员禁止使用 1嘉宾和学员不可使用 2不开启
|
|
1607
|
+
*/
|
|
1608
|
+
joinCameraDisable(enable: 0 | 1 | 2): Promise<void>;
|
|
1609
|
+
/**
|
|
1610
|
+
* 上传文档权限
|
|
1611
|
+
* @param permission 0 仅支持人 1 嘉宾 2 全员
|
|
1612
|
+
*/
|
|
1613
|
+
changeFileUpdateModelPermission(permission: FilePermission): Promise<void>;
|
|
1614
|
+
changeFileUpdateLookPermission(permission: FilePermission): Promise<void>;
|
|
1615
|
+
changeFileUpdateDownPermission(permission: FilePermission): Promise<void>;
|
|
1616
|
+
changeFileUpdateEditPermission(permission: FilePermission): Promise<void>;
|
|
1617
|
+
/**
|
|
1618
|
+
* 共享屏幕权限
|
|
1619
|
+
* @param permission 0全员可共享 1允许嘉宾共享 2仅主持人可共享
|
|
1620
|
+
*/
|
|
1621
|
+
changeScreenShareModelPermission(permission: 0 | 1 | 2): Promise<void>;
|
|
1622
|
+
/**
|
|
1623
|
+
* 是否仅一人共享权限
|
|
1624
|
+
* @param permission 1: 是 2: 否
|
|
1625
|
+
*/
|
|
1626
|
+
changeOnlyOnePersonSharePermission(permission: 0 | 1): Promise<void>;
|
|
1627
|
+
/**
|
|
1628
|
+
* 设为焦点主屏
|
|
1629
|
+
* @param {string} userid 设为焦点主屏的userId
|
|
1630
|
+
*/
|
|
1631
|
+
setForceOnUser(userid: string): Promise<void>;
|
|
1632
|
+
/**
|
|
1633
|
+
* 修改云录状态, 修改申请中,
|
|
1634
|
+
* @param cloudRecord
|
|
1635
|
+
* @param {string} cloudRecord.userId
|
|
1636
|
+
* @param {number} cloudRecord.recordStatus
|
|
1637
|
+
* @returns
|
|
1638
|
+
*/
|
|
1639
|
+
updateCloudRecord(cloudRecord: CloudRecord): Promise<any>;
|
|
1640
|
+
/**
|
|
1641
|
+
* 更改 隐藏会议号和密码
|
|
1642
|
+
* @param cloudRecord
|
|
1643
|
+
* @param {string} cloudRecord.userId
|
|
1644
|
+
* @param {number} cloudRecord.recordStatus
|
|
1645
|
+
* @returns
|
|
1646
|
+
*/
|
|
1647
|
+
updateSafeHideSec(safeHideSec: boolean): Promise<any>;
|
|
1648
|
+
/**
|
|
1649
|
+
* 主持人上报布局状态
|
|
1650
|
+
* @param layoutData
|
|
1651
|
+
* @param replace
|
|
1652
|
+
*/
|
|
1653
|
+
updateHostLayout(layoutData: HostLayout, replace?: boolean): Promise<void>;
|
|
1654
|
+
checkDevices(userId: string): Promise<void>;
|
|
1655
|
+
resp2CheckDevices(deviceList: DeviceList, userId: string): Promise<void>;
|
|
1656
|
+
/**
|
|
1657
|
+
* 调节对方的视频分辨率
|
|
1658
|
+
* @param {SupportVideoProfile} videoInfo 调节对方视频信息
|
|
1659
|
+
* @param {string} userId
|
|
1660
|
+
*/
|
|
1661
|
+
changeRemoteVideoProfile(videoInfo: {
|
|
1662
|
+
profile: SupportVideoProfile;
|
|
1663
|
+
videoDevice: SampleDeviceInfo;
|
|
1664
|
+
}, userId: string): Promise<any>;
|
|
1665
|
+
/**
|
|
1666
|
+
* 设置完本地的视频分辨率之后,给对方响应
|
|
1667
|
+
* @param {boolean} status 设置是否成功
|
|
1668
|
+
* @param {string} userId
|
|
1669
|
+
*/
|
|
1670
|
+
resp2ChangeRemoteVideoProfile(status: boolean, userId: string, profile: string): Promise<any>;
|
|
1671
|
+
/**
|
|
1672
|
+
* 调节远端的音频参数
|
|
1673
|
+
* @param {Object} profileInfo
|
|
1674
|
+
* @param uid
|
|
1675
|
+
*/
|
|
1676
|
+
changeRemoteAudioProfile(profileInfo: AudioProfileInfo, uid: string): Promise<any>;
|
|
1677
|
+
/**
|
|
1678
|
+
* 响应调节远端音频的结果
|
|
1679
|
+
* @param status
|
|
1680
|
+
* @param uid
|
|
1681
|
+
*/
|
|
1682
|
+
resp2ChangeRemoteAudioProfile(status: boolean, uid: string): Promise<any>;
|
|
1683
|
+
}
|
|
1684
|
+
|
|
1685
|
+
/**
|
|
1686
|
+
* @name: SingletonQueue
|
|
1687
|
+
* @author: yangliye
|
|
1688
|
+
* @date: 2023-05-18 09:47
|
|
1689
|
+
* @description:SingletonQueue
|
|
1690
|
+
* @update: 2023-05-18 09:47
|
|
1691
|
+
*/
|
|
1692
|
+
|
|
1693
|
+
declare class SingletonQueue {
|
|
1694
|
+
room: BMRoom;
|
|
1695
|
+
pullMap: Map<string, PullItem>;
|
|
1696
|
+
constructor(room: BMRoom);
|
|
1697
|
+
addUser(pullInfo: PullItem): void;
|
|
1698
|
+
removeUser(pullInfo: PullItem): void;
|
|
1699
|
+
restart(): void;
|
|
1700
|
+
}
|
|
1701
|
+
|
|
1702
|
+
/**
|
|
1703
|
+
* @name: BMLiveVM.ts
|
|
1704
|
+
* @author: yangliye
|
|
1705
|
+
* @date: 2022-07-15 13:53
|
|
1706
|
+
* @description:处理直播相关的流处理
|
|
1707
|
+
* @update: 2022-07-15 13:53
|
|
1708
|
+
*/
|
|
1709
|
+
|
|
1710
|
+
declare class BMLiveVM {
|
|
1711
|
+
private room;
|
|
1712
|
+
constructor(room: BMRoom);
|
|
1713
|
+
private get localBMUser();
|
|
1714
|
+
private get localIsAudience();
|
|
1715
|
+
/**
|
|
1716
|
+
* 拉流处理, 观众只拉混流
|
|
1717
|
+
* @param bmStreamModel
|
|
1718
|
+
*/
|
|
1719
|
+
handlePull(bmStreamModel: BMStreamModel): Promise<void>;
|
|
1720
|
+
/**
|
|
1721
|
+
* 切换大小流处理
|
|
1722
|
+
* @param bmStreamModel
|
|
1723
|
+
*/
|
|
1724
|
+
handleChangeStreamType(bmStreamModel: BMStreamModel): Promise<void>;
|
|
1725
|
+
handlePlay(bmStreamModel: BMStreamModel, noPlayChanged: boolean): Promise<void>;
|
|
1726
|
+
/**
|
|
1727
|
+
* 处理观众端举手发言完了,然后在禁止发言,这个时候,没有必要在拉所有人的流,把除了混流的人的流都取消订阅,然后播放混流的声音
|
|
1728
|
+
*/
|
|
1729
|
+
handleAudienceDisable(callback?: (mute: boolean) => void): Promise<void>;
|
|
1730
|
+
/**
|
|
1731
|
+
* 观众允许发言,允许发言之后,要把所有的流都拉,然后混流静音
|
|
1732
|
+
*/
|
|
1733
|
+
handleAudienceEnable(callback?: (mute: boolean) => void): Promise<void>;
|
|
1734
|
+
handleMixStream(mute: boolean, callback?: (mute: boolean) => void): Promise<void>;
|
|
1735
|
+
}
|
|
1736
|
+
|
|
1737
|
+
/**
|
|
1738
|
+
* @name: AudioPlay.ts
|
|
1739
|
+
* @author: yangliye
|
|
1740
|
+
* @date: 2023-06-08 16:35
|
|
1741
|
+
* @description:AudioPlay.ts
|
|
1742
|
+
* @update: 2023-06-08 16:35
|
|
1743
|
+
*/
|
|
1744
|
+
|
|
1745
|
+
declare class AudioPlay {
|
|
1746
|
+
playMap: WeakSet<SingleStream>;
|
|
1747
|
+
playerMap: Map<string, AudioPlayer>;
|
|
1748
|
+
container: HTMLDivElement | undefined;
|
|
1749
|
+
muted: boolean;
|
|
1750
|
+
room: BMRoom;
|
|
1751
|
+
playStateChangeWatcher: Subject<AudioPlayer>;
|
|
1752
|
+
deviceId?: string;
|
|
1753
|
+
constructor(containerId: string, room: BMRoom);
|
|
1754
|
+
addStream(stream: SingleRemoteStream, force?: boolean): void;
|
|
1755
|
+
removeStream(stream: SingleStream): void;
|
|
1756
|
+
removeStreamByUid(uid: string): void;
|
|
1757
|
+
play(stream: SingleRemoteStream): Promise<void>;
|
|
1758
|
+
mute(mute: boolean): void;
|
|
1759
|
+
setVolume(streamId: string, volume: number): void;
|
|
1760
|
+
setDevice(deviceId: string, force?: boolean): Promise<void>;
|
|
1761
|
+
addPlayerEvent(player: AudioPlayer): void;
|
|
1762
|
+
clear(): void;
|
|
1763
|
+
destroy(): void;
|
|
1764
|
+
}
|
|
1765
|
+
|
|
1766
|
+
declare type PullItem = {
|
|
1767
|
+
id: string;
|
|
1768
|
+
isScreen: boolean;
|
|
1769
|
+
isWeb?: boolean;
|
|
1770
|
+
force?: boolean;
|
|
1771
|
+
};
|
|
1772
|
+
interface BMRoomProps {
|
|
1773
|
+
initDevices: boolean;
|
|
1774
|
+
/** 是否忽略 拉混流, 上层会使用cdn流去播放的时候,需要忽略混流 */
|
|
1775
|
+
ignoreMixer: boolean;
|
|
1776
|
+
template_name: string;
|
|
1777
|
+
}
|
|
1778
|
+
interface MediaPermission {
|
|
1779
|
+
microphone: boolean;
|
|
1780
|
+
camera: boolean;
|
|
1781
|
+
screen: boolean;
|
|
1782
|
+
}
|
|
1783
|
+
declare class BMRoom {
|
|
1784
|
+
roomVM: BMRoomVM | null;
|
|
1785
|
+
userVM: BMUserVM;
|
|
1786
|
+
chatVM: BMChatVM;
|
|
1787
|
+
bmStreamVm: BMStreamModelVM;
|
|
1788
|
+
observes: any;
|
|
1789
|
+
boomCore: BCClient__default;
|
|
1790
|
+
videoDevices: Device[];
|
|
1791
|
+
audioDevices: Device[];
|
|
1792
|
+
audioOutputDevices: Device[];
|
|
1793
|
+
selectVideoDevice: Device | null;
|
|
1794
|
+
selectAudioDevice: Device | null;
|
|
1795
|
+
selectAudioOutputDevice: Device | null;
|
|
1796
|
+
streamQueue: SingletonQueue;
|
|
1797
|
+
/**
|
|
1798
|
+
* 这个参数是和业务相关的功能,业务上的参会者列表是可以配置的,如果设置了只展示一列,那么所有的用户都要存储
|
|
1799
|
+
* 在commonUserList中
|
|
1800
|
+
*/
|
|
1801
|
+
userListColumns: number;
|
|
1802
|
+
/**
|
|
1803
|
+
* 排序规则 1 是标品排序, 2 是中移排序
|
|
1804
|
+
*/
|
|
1805
|
+
sortType: number;
|
|
1806
|
+
/**
|
|
1807
|
+
* brtc断网重连的时候,所有的订阅和播放相关的处理,都不需要
|
|
1808
|
+
*/
|
|
1809
|
+
BRTCConnectFailed: boolean;
|
|
1810
|
+
/**
|
|
1811
|
+
* 本端推流失败次数
|
|
1812
|
+
*/
|
|
1813
|
+
pubFailedNum: number;
|
|
1814
|
+
streamConnectedErrorQueue: Array<ConnectErrorMessage>;
|
|
1815
|
+
/**
|
|
1816
|
+
* 会议模式
|
|
1817
|
+
* 1 会议
|
|
1818
|
+
* 2 直播
|
|
1819
|
+
*/
|
|
1820
|
+
conferenceMode: 1 | 2;
|
|
1821
|
+
/**
|
|
1822
|
+
* 是不是大房间
|
|
1823
|
+
*/
|
|
1824
|
+
isBig: boolean;
|
|
1825
|
+
selectVideoDeviceWatcher: BehaviorSubject<Device | null>;
|
|
1826
|
+
selectAudioDeviceWatcher: BehaviorSubject<Device | null>;
|
|
1827
|
+
selectAudioOutputDeviceWatcher: BehaviorSubject<Device | null>;
|
|
1828
|
+
audioDevicesWatcher: Subject<Device[]>;
|
|
1829
|
+
videoDevicesWatcher: Subject<Device[]>;
|
|
1830
|
+
audioOutputDevicesWatcher: Subject<Device[]>;
|
|
1831
|
+
raiseHandleRespWatcher: Subject<RaiseHandsParams>;
|
|
1832
|
+
enableAudienceSpeakingWatcher: Subject<boolean>;
|
|
1833
|
+
deviceChangeWatcher: Subject<boolean>;
|
|
1834
|
+
shareFileWatcher: BehaviorSubject<ShareFileMessage | null>;
|
|
1835
|
+
mediaPermission: MediaPermission;
|
|
1836
|
+
videoProfile: VideoProfile;
|
|
1837
|
+
audioProfile: AudioProfileInfo | null;
|
|
1838
|
+
voiceMode: AudioHint;
|
|
1839
|
+
/**
|
|
1840
|
+
* 视频自定义编码设置
|
|
1841
|
+
*/
|
|
1842
|
+
videoEncodeConfig: StreamCodecOption | null;
|
|
1843
|
+
setVoiceMode(mode: AudioHint): void;
|
|
1844
|
+
/**
|
|
1845
|
+
* brtc断网重连要给端上事件响应,所有端上把流单独做处理的,需要在收到这个事件之后,重新处理所有的effect
|
|
1846
|
+
*/
|
|
1847
|
+
streamWSReconnectWatcher: Subject<boolean>;
|
|
1848
|
+
/**
|
|
1849
|
+
* bloud断网重连的时候的提示
|
|
1850
|
+
*/
|
|
1851
|
+
bloudWSReconnectWatcher: Subject<boolean>;
|
|
1852
|
+
netConnecting: boolean;
|
|
1853
|
+
netConnectingWatcher: Subject<boolean>;
|
|
1854
|
+
hasSyncPermission: boolean;
|
|
1855
|
+
/**
|
|
1856
|
+
* 会控底层相关处理, 比如是否取消自动拉流
|
|
1857
|
+
*/
|
|
1858
|
+
private meetingControlOptions;
|
|
1859
|
+
forceId: string;
|
|
1860
|
+
/**
|
|
1861
|
+
* bloud brtc 断网重连的处理
|
|
1862
|
+
* networkState 记录网络状态
|
|
1863
|
+
* handleReconnectedStream 防抖函数,当双方有连接断网重连之后,会执行这个方法
|
|
1864
|
+
*
|
|
1865
|
+
* brtc 的sync-room 之后,本地会把所有的stream都销毁,清空,然后统一走一遍查询处理
|
|
1866
|
+
* 绑定新的stream,这么做简单粗暴处理所有的brtc流,防止流重复问题i
|
|
1867
|
+
*/
|
|
1868
|
+
networkState: {
|
|
1869
|
+
bloud: boolean;
|
|
1870
|
+
brtc: boolean;
|
|
1871
|
+
};
|
|
1872
|
+
brtcNetEnableWatcher: Subject<boolean>;
|
|
1873
|
+
autoPlayAudio: boolean;
|
|
1874
|
+
audioPlayer: AudioPlay;
|
|
1875
|
+
private pubFailedTimer;
|
|
1876
|
+
get isSingleColumns(): boolean;
|
|
1877
|
+
get localIsAudience(): boolean;
|
|
1878
|
+
get shouldIgnoreStream(): boolean;
|
|
1879
|
+
/**
|
|
1880
|
+
* 研讨会
|
|
1881
|
+
*/
|
|
1882
|
+
get isWorkShop(): boolean;
|
|
1883
|
+
/**
|
|
1884
|
+
* 传递信息用的,主要是用于message信令往上层业务发送消息
|
|
1885
|
+
*/
|
|
1886
|
+
messageWatcher: BehaviorSubject<any>;
|
|
1887
|
+
roomInfo: BMRoomInfo;
|
|
1888
|
+
localUser: BMUser;
|
|
1889
|
+
bmLiveVM: BMLiveVM;
|
|
1890
|
+
isInWaitRoom: boolean;
|
|
1891
|
+
shouldPlayAudio: boolean;
|
|
1892
|
+
/** 设备是否正在变更中 */
|
|
1893
|
+
deviceChanging: boolean;
|
|
1894
|
+
ignoreMixer: boolean;
|
|
1895
|
+
template_name: string;
|
|
1896
|
+
constructor({ initDevices, ignoreMixer, template_name }?: BMRoomProps);
|
|
1897
|
+
/**
|
|
1898
|
+
* 是否自动播放声音
|
|
1899
|
+
* @param value
|
|
1900
|
+
*/
|
|
1901
|
+
setAutoPlayAudio(value: boolean): void;
|
|
1902
|
+
setMediaPermission(permission: MediaPermission): void;
|
|
1903
|
+
/**
|
|
1904
|
+
* 是否应该播放声音
|
|
1905
|
+
* @param value
|
|
1906
|
+
*/
|
|
1907
|
+
setShouldPlayAudio(value: boolean): void;
|
|
1908
|
+
handleReprocessStreamError: () => void;
|
|
1909
|
+
initAudioPlayer(playerContainerId: string): void;
|
|
1910
|
+
/**
|
|
1911
|
+
* 初始化底层会控相关
|
|
1912
|
+
* @param options
|
|
1913
|
+
*/
|
|
1914
|
+
setupMeetingControlOptions(options: any): void;
|
|
1915
|
+
/**
|
|
1916
|
+
* 收到对某个流状态的订阅和取消状态
|
|
1917
|
+
* @private
|
|
1918
|
+
* @param event
|
|
1919
|
+
*/
|
|
1920
|
+
private handleSubMessage;
|
|
1921
|
+
configSM(smConfig: SMConfig): void;
|
|
1922
|
+
/**
|
|
1923
|
+
* 设置视频分辨率, 需要在入会之前调用
|
|
1924
|
+
* @param profile 设置视频分辨率
|
|
1925
|
+
*/
|
|
1926
|
+
setVideoProfile(profile: VideoProfile): void;
|
|
1927
|
+
/**
|
|
1928
|
+
* 设置视频分辨率, 需要在入会之前调用
|
|
1929
|
+
* @param encodeConfig
|
|
1930
|
+
* @param encodeConfig.width 宽
|
|
1931
|
+
* @param encodeConfig.height 高
|
|
1932
|
+
* @param encodeConfig.biterate 码率
|
|
1933
|
+
* @param encodeConfig.frameRate 帧率
|
|
1934
|
+
*/
|
|
1935
|
+
setCustomVideoEncodeConfig(encodeConfig: StreamCodecOption): void;
|
|
1936
|
+
setUserListColumns(column: number): void;
|
|
1937
|
+
setSortType(type: number): void;
|
|
1938
|
+
/**
|
|
1939
|
+
* 设置声音增益的属性,回音消除 音频降噪 声音增益等
|
|
1940
|
+
* @param audioProfile
|
|
1941
|
+
*/
|
|
1942
|
+
setAudioProfile(audioProfile: AudioProfileInfo): void;
|
|
1943
|
+
/**
|
|
1944
|
+
* 设置共享屏幕用户的brtc Sig
|
|
1945
|
+
* @param sig
|
|
1946
|
+
*/
|
|
1947
|
+
setSig(sig: string): void;
|
|
1948
|
+
private benchmark;
|
|
1949
|
+
/**
|
|
1950
|
+
* 初始化输入设备
|
|
1951
|
+
*/
|
|
1952
|
+
initDevices(devicechange?: boolean): Promise<any>;
|
|
1953
|
+
/**
|
|
1954
|
+
* 筛选出默认选中的设备,如果没有,选择第一个
|
|
1955
|
+
* @param devices
|
|
1956
|
+
*/
|
|
1957
|
+
private filterDevice;
|
|
1958
|
+
/**
|
|
1959
|
+
* 处理用户设备变化之后的逻辑
|
|
1960
|
+
*/
|
|
1961
|
+
handleMediaDevicesChange: (e: any) => Promise<void>;
|
|
1962
|
+
setSelectAudioDevice(device: Device): void;
|
|
1963
|
+
setSelectVideoDevice(device: Device): void;
|
|
1964
|
+
setSelectSpeakerDevice(device: Device): void;
|
|
1965
|
+
/**
|
|
1966
|
+
* 事件相关 observes执行subscribe, 即执行observes,并添加回调
|
|
1967
|
+
* @param observeName observe名称
|
|
1968
|
+
* @param subscribeParam subscribe的参数
|
|
1969
|
+
*/
|
|
1970
|
+
observe(observeName: string, subscribeParam: any): any;
|
|
1971
|
+
/**
|
|
1972
|
+
* 加入一个音视频通话房间(初始化房间对象)
|
|
1973
|
+
* 进房代表开始一个音视频通话会话,这时候 SDK 会监听远端用户进房退房情况,若有远端用户进房并且发布流,本地会收到 'stream-added' 事件。
|
|
1974
|
+
* 进房后用户可以通过 publish() 发布本地流,本地流发布成功后远端用户就会收到相应 'stream-added' 事件通知从而完成一个双向的音视频通话连接。
|
|
1975
|
+
*
|
|
1976
|
+
* @param {Object} props room创建所需属性
|
|
1977
|
+
* @param {String} props.roomId 房间号
|
|
1978
|
+
* @param {Number} props.userId 用户id
|
|
1979
|
+
* @param {String} props.host 会议内的请求地址
|
|
1980
|
+
* @param {String} props.getProxiesUrl 获取ws请求地址的路径
|
|
1981
|
+
* @param {String} props.secret 房间密码
|
|
1982
|
+
* @param {Boolean} props.create 是否执行房间的创建, 默认为自适应, 有房间则创建, 没房间则不创建
|
|
1983
|
+
* @param {String} props.customToken 用户token
|
|
1984
|
+
* @param {Number} props.limit 人数最大值
|
|
1985
|
+
* @param {Number} props.brtcAppId
|
|
1986
|
+
* @param {String} props.collection 数据上报地址
|
|
1987
|
+
* @param {Object} props.userinfo 用户信息
|
|
1988
|
+
* @param {Number} props.userinfo.cver 客户端版本
|
|
1989
|
+
* @param {String} props.userinfo.nickname 用户昵称
|
|
1990
|
+
* @param {String} props.userinfo.avatar 用户头像
|
|
1991
|
+
* @param {String} props.userinfo.pos 客户端类型
|
|
1992
|
+
* @param {Number} props.types //1:单一模式, 2:混合模式
|
|
1993
|
+
* @param {String} props.name //房间名
|
|
1994
|
+
* @example
|
|
1995
|
+
* {
|
|
1996
|
+
room: '111111',//房间号
|
|
1997
|
+
host: 'https://v3test.boom.cn',//会议内的请求地址
|
|
1998
|
+
getProxiesUrl: '/api/conference/v1/auth/token',//获取ws地址的路径
|
|
1999
|
+
secret: '',//房间密码
|
|
2000
|
+
types: 1,
|
|
2001
|
+
nickname: 'zzy',
|
|
2002
|
+
collection: '',//数据上报地址
|
|
2003
|
+
token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJsb2dpbiIsImlhdCI6MTY1MDA5ODkwMSwibmJmIjoxNjUwMDk4OTAxLCJqdGkiOiIiLCJzdWIiOjk4NSwicHJ2IjoiODdlN2UxYmVlMjcyMmJmMzk4NjQxN2IzMzUxZTVmMjYzODQwY2ExYyIsImF0dHIiOjAsImJkIjowfQ.b-J9TnmjOzaVUJeY83tY_d1rdu_ELAWx8iH3odBN5kE',//用户token
|
|
2004
|
+
userinfo: {
|
|
2005
|
+
userId: 985,//用户id
|
|
2006
|
+
pos: 'web',
|
|
2007
|
+
nickname: 'zzy',//用户昵称
|
|
2008
|
+
avatar: '',//用户头像
|
|
2009
|
+
}
|
|
2010
|
+
}
|
|
2011
|
+
*/
|
|
2012
|
+
join(props: any): Promise<undefined>;
|
|
2013
|
+
/**
|
|
2014
|
+
* 离开房间
|
|
2015
|
+
* @returns
|
|
2016
|
+
*/
|
|
2017
|
+
leave(): Promise<void>;
|
|
2018
|
+
/**
|
|
2019
|
+
* 释放房间,会议结束时调用
|
|
2020
|
+
*/
|
|
2021
|
+
releaseRoom(): Promise<void>;
|
|
2022
|
+
/**
|
|
2023
|
+
* 启动录制
|
|
2024
|
+
* @param {String} opts.filename - 录制文件名
|
|
2025
|
+
* @param {Object} opts.capture - 采集属性
|
|
2026
|
+
* @param {Number} opts.capture.width - 宽度
|
|
2027
|
+
* @param {Number} opts.capture.height - 高度
|
|
2028
|
+
* @param {Number} opts.capture.fps - 帧率
|
|
2029
|
+
* @param {Number} opts.capture.source_name - 录制源,窗口的名字
|
|
2030
|
+
* @param {Number} opts.capture.isRecord -
|
|
2031
|
+
* @param {Number} opts.capture.chromeMediaSourceId - 录制哪个窗口的id
|
|
2032
|
+
* @param {Number} opts.record - 编码属性
|
|
2033
|
+
* @param {Number} opts.record.bitrate - 编码码率
|
|
2034
|
+
* @param {String|undefined} opts.record.format - 编码格式
|
|
2035
|
+
*
|
|
2036
|
+
* @return {boolean}
|
|
2037
|
+
*/
|
|
2038
|
+
startRecord(opts: any): Promise<boolean | undefined>;
|
|
2039
|
+
/**
|
|
2040
|
+
* 停止录制
|
|
2041
|
+
*/
|
|
2042
|
+
stopRecord(): Promise<void>;
|
|
2043
|
+
/**
|
|
2044
|
+
* 启用下一个录制分片
|
|
2045
|
+
* @param filename - 下一分片文件名
|
|
2046
|
+
* @param stream - 录制的流对象
|
|
2047
|
+
*/
|
|
2048
|
+
sliceRecord(filename: string, stream?: MediaStream, capture?: any): Promise<boolean | undefined>;
|
|
2049
|
+
close(): void;
|
|
2050
|
+
/**
|
|
2051
|
+
* 开关对端摄像头
|
|
2052
|
+
* @param status true:开,false:关
|
|
2053
|
+
* @param uid 用户id
|
|
2054
|
+
*/
|
|
2055
|
+
setRemoteVideoEnable(status: boolean, uid: string): Promise<void>;
|
|
2056
|
+
/**
|
|
2057
|
+
* 开关对端麦克风(现在还不知道怎么实现, 未找到实现逻辑)
|
|
2058
|
+
* @param status true:开,false:关
|
|
2059
|
+
* @param uid 用户id
|
|
2060
|
+
* @param isNotCancelRootReport 当打开麦克风时, 是否不取消音频权限申请
|
|
2061
|
+
*/
|
|
2062
|
+
setRemoteAudioEnable(status: boolean, uid: string, isNotCancelRootReport: boolean | undefined): Promise<void>;
|
|
2063
|
+
/**
|
|
2064
|
+
* 开关本地摄像头
|
|
2065
|
+
* @param status true:开,false:关
|
|
2066
|
+
* @param videoTrack
|
|
2067
|
+
*/
|
|
2068
|
+
setLocalVideoEnable(status: boolean, videoTrack?: MediaStreamTrack): Promise<void>;
|
|
2069
|
+
/**
|
|
2070
|
+
* 开关本地麦克风
|
|
2071
|
+
* @param status true:开,false:关
|
|
2072
|
+
* @param release 关闭之后,是否释放音频资源
|
|
2073
|
+
*/
|
|
2074
|
+
setLocalAudioEnable(status: boolean, release?: boolean): Promise<undefined>;
|
|
2075
|
+
/**
|
|
2076
|
+
* 开关本地麦克风
|
|
2077
|
+
* @param status true:开,false:关
|
|
2078
|
+
*/
|
|
2079
|
+
setLocalSpeakerEnable(status: boolean): Promise<void>;
|
|
2080
|
+
private _attachEvents;
|
|
2081
|
+
/**
|
|
2082
|
+
* 创建本地流
|
|
2083
|
+
* @param options
|
|
2084
|
+
* @param sid
|
|
2085
|
+
*/
|
|
2086
|
+
createSingleLocalStream(options: {
|
|
2087
|
+
video: boolean;
|
|
2088
|
+
audio: boolean;
|
|
2089
|
+
noiseSuppression?: boolean | undefined;
|
|
2090
|
+
videoSource?: MediaStreamTrack | undefined;
|
|
2091
|
+
audioSource?: MediaStreamTrack | undefined;
|
|
2092
|
+
} | undefined, sid: string, enableNoisePlugging?: boolean): Promise<SingleLocalStream>;
|
|
2093
|
+
/**
|
|
2094
|
+
* 这个方法只是为了生成brtc的流,目的是在用户只打开音频的情况下,然后在打开视频的时候,去创建一个只有视频的track的流
|
|
2095
|
+
* @param options
|
|
2096
|
+
* @param sid
|
|
2097
|
+
* @returns
|
|
2098
|
+
*/
|
|
2099
|
+
createPBSingleLocalStream(options?: {
|
|
2100
|
+
video: boolean;
|
|
2101
|
+
audio: boolean;
|
|
2102
|
+
}, sid?: string): Promise<_hysc_brtc.LocalStream>;
|
|
2103
|
+
private handleStreamInit;
|
|
2104
|
+
/**
|
|
2105
|
+
* 枚举视频输入设备
|
|
2106
|
+
*
|
|
2107
|
+
* @returns 设备列表
|
|
2108
|
+
*/
|
|
2109
|
+
enumVideoDevices: () => Promise<Device[]>;
|
|
2110
|
+
/**
|
|
2111
|
+
* 枚举音频输入设备
|
|
2112
|
+
*
|
|
2113
|
+
* @returns 设备列表
|
|
2114
|
+
*/
|
|
2115
|
+
enumAudioInputDevices: () => Promise<Device[]>;
|
|
2116
|
+
/**
|
|
2117
|
+
* 枚举音频输出设备
|
|
2118
|
+
*
|
|
2119
|
+
* @returns 设备列表
|
|
2120
|
+
*/
|
|
2121
|
+
enumAudioOutputDevices: () => Promise<Device[]>;
|
|
2122
|
+
/**
|
|
2123
|
+
* 检查音视频权限
|
|
2124
|
+
*/
|
|
2125
|
+
getPermissions: typeof BRTC.getPermissions;
|
|
2126
|
+
checkSystemSupport: typeof BRTC.checkSystemSupport;
|
|
2127
|
+
createStream: typeof BRTC.createStream;
|
|
2128
|
+
participantNotice: boolean;
|
|
2129
|
+
/**
|
|
2130
|
+
* 订阅远端流
|
|
2131
|
+
* 可通过该订阅接口指明需要订阅音频、视频或者音视频流。
|
|
2132
|
+
*
|
|
2133
|
+
* @param remoteStream 需要订阅的远端流对象,由 ‘participant-published’ 事件获得
|
|
2134
|
+
* @param options 订阅选项
|
|
2135
|
+
* @returns
|
|
2136
|
+
*/
|
|
2137
|
+
subscribe(remoteStream: SingleRemoteStream, options?: SubscribeOptions): Promise<any>;
|
|
2138
|
+
/**
|
|
2139
|
+
* 取消订阅远端流
|
|
2140
|
+
*
|
|
2141
|
+
* @param remoteStream 需要取消订阅的远端流对象
|
|
2142
|
+
* @return
|
|
2143
|
+
*/
|
|
2144
|
+
unsubscribe(remoteStream: SingleRemoteStream): Promise<any>;
|
|
2145
|
+
/**
|
|
2146
|
+
* 发布本地音视频流。
|
|
2147
|
+
* 该方法需要在 join() 进房后调用,一次音视频会话中只能发布一个本地流。若想发布另外一个本地流,可先通过 unpublish() 取消发布当前本地流后再发布新的本地流。
|
|
2148
|
+
* 在发布本地流后,可通过 removeTrack()、addTrack()、 replaceTrack() 来更新本地流中的某个音频或视频流。
|
|
2149
|
+
* 发布本地流后远端会收到 ‘participant-published’ 事件通知。
|
|
2150
|
+
*
|
|
2151
|
+
* @param stream 创建的本地流对象
|
|
2152
|
+
* @return
|
|
2153
|
+
*/
|
|
2154
|
+
publish(stream: SingleLocalStream): Promise<unknown>;
|
|
2155
|
+
/**
|
|
2156
|
+
* 取消发布本地流。
|
|
2157
|
+
* 取消发布本地流后远端会收到 'participant-unpublished' 事件通知。
|
|
2158
|
+
* 请在 leave() 退房前取消已经发布的本地流。
|
|
2159
|
+
*
|
|
2160
|
+
* @param stream 取消发布的本地流对象
|
|
2161
|
+
* @return
|
|
2162
|
+
*/
|
|
2163
|
+
unpublish(stream: SingleLocalStream): Promise<any>;
|
|
2164
|
+
/**
|
|
2165
|
+
* 获取userList的用户对象
|
|
2166
|
+
* @param userId
|
|
2167
|
+
*/
|
|
2168
|
+
getUser(userId: string): BMUser | undefined;
|
|
2169
|
+
/**
|
|
2170
|
+
* 改变主持人,只有主持人权限和房间创建者可以改变主持人(房间创建者可以收回主持人)
|
|
2171
|
+
* @param userId
|
|
2172
|
+
* @param isKeep 是否保留转移人的联席主持人身份
|
|
2173
|
+
*/
|
|
2174
|
+
changeMaster(userId: string, isKeep?: boolean): Promise<any>;
|
|
2175
|
+
/**
|
|
2176
|
+
* 改变联席主持人,返回设置为联席主持人的bmuser对象
|
|
2177
|
+
* @param userId
|
|
2178
|
+
* @param status true:设置成联席主持人 false:取消联席主持人身份
|
|
2179
|
+
* @param hasS
|
|
2180
|
+
*/
|
|
2181
|
+
updateManager(userId: string, status: boolean, hasS?: boolean): Promise<any>;
|
|
2182
|
+
/**
|
|
2183
|
+
* 获取房间主持人id
|
|
2184
|
+
*/
|
|
2185
|
+
getMaster(): string;
|
|
2186
|
+
/**
|
|
2187
|
+
* 获取房间创建者
|
|
2188
|
+
*/
|
|
2189
|
+
getCreator(): string;
|
|
2190
|
+
/**
|
|
2191
|
+
* 获取房间名称
|
|
2192
|
+
*/
|
|
2193
|
+
getName(): string;
|
|
2194
|
+
/**
|
|
2195
|
+
* 踢出用户
|
|
2196
|
+
* @param {String} userId 用户ID
|
|
2197
|
+
* @param withoutBlack 是否拉进黑名单 true 可以再进来 false 进不来
|
|
2198
|
+
*/
|
|
2199
|
+
evictUser(userId: string, withoutBlack: boolean): Promise<any>;
|
|
2200
|
+
/**
|
|
2201
|
+
* 更新用户信息
|
|
2202
|
+
* @param {String} target - 目标用户id
|
|
2203
|
+
* @param {String} info - 用户信息或者自定义的字段
|
|
2204
|
+
*/
|
|
2205
|
+
updateUser(target: string, info: any): Promise<undefined>;
|
|
2206
|
+
/**
|
|
2207
|
+
* 获取最新消息序列号
|
|
2208
|
+
*/
|
|
2209
|
+
getMsgSeq(): number;
|
|
2210
|
+
/**
|
|
2211
|
+
* 获取限制人数
|
|
2212
|
+
*/
|
|
2213
|
+
getLimits(): number;
|
|
2214
|
+
/**
|
|
2215
|
+
* 是否允许房间加入成员
|
|
2216
|
+
* @return {Boolean}
|
|
2217
|
+
*/
|
|
2218
|
+
getSwitch(): Boolean;
|
|
2219
|
+
/**
|
|
2220
|
+
* 更新token
|
|
2221
|
+
* @param {String} token
|
|
2222
|
+
*/
|
|
2223
|
+
/**
|
|
2224
|
+
* 同步房间信息,在事件 room-reconnected 触发后调用
|
|
2225
|
+
* @return {Promise}
|
|
2226
|
+
*/
|
|
2227
|
+
syncRoom(): Promise<any>;
|
|
2228
|
+
/**
|
|
2229
|
+
* 更新房间状态
|
|
2230
|
+
* @param {Object} options - 更新房间信息参数
|
|
2231
|
+
* @param {Boolean} options.audiooff - 房间是否开启全员静音,可选
|
|
2232
|
+
* @param {Boolean} options.selfopenaudio - 房间是否允许成员自行开启语音
|
|
2233
|
+
* @param {Boolean} options.videooff - 房间是否开启禁用摄像头,可选
|
|
2234
|
+
* @param {Boolean} options.msgoff - 房间是否开启全员禁言,可选
|
|
2235
|
+
* @param {Boolean} options.switch - 房间是否开启准入开关,可选
|
|
2236
|
+
* @param {Boolean} options.lock - 房间是否锁定
|
|
2237
|
+
* @param {Boolean} options.secret - 不为空时表示房间密码,为以`md5(${room}.${secret})`计算所得值为参数
|
|
2238
|
+
* @param {Boolean} options.waitroom - 开关等候室 false 关闭
|
|
2239
|
+
* @returns {Promise}
|
|
2240
|
+
*/
|
|
2241
|
+
update(options: any): Promise<any>;
|
|
2242
|
+
/**
|
|
2243
|
+
* 获取用户列表
|
|
2244
|
+
*/
|
|
2245
|
+
getUsers(): Map<string, BMUser>;
|
|
2246
|
+
/**
|
|
2247
|
+
* 获取用户总数
|
|
2248
|
+
* @deprecated
|
|
2249
|
+
* @return {Number}
|
|
2250
|
+
*/
|
|
2251
|
+
getTotalUsers(): Number;
|
|
2252
|
+
/**
|
|
2253
|
+
* 发送消息,缓存至服务器,会生成序列号
|
|
2254
|
+
* 端上会收到 new-message 信令
|
|
2255
|
+
* @param {String} message - 待发送消息, 必须是 JSON 格式的字符串
|
|
2256
|
+
* @param {String|undefined} to - 如果为空,则为广播消息,不为空,则为定向到to用户的私聊消息
|
|
2257
|
+
*/
|
|
2258
|
+
sendMessage(message: string, to: string | undefined): Promise<any>;
|
|
2259
|
+
/**
|
|
2260
|
+
* 发送自定义消息 可绕过 W 权限
|
|
2261
|
+
* @param {String} message - 待发送消息
|
|
2262
|
+
* @param {String|undefined} to - 如果为空,则为广播消息,不为空,则定向到to用户的消息
|
|
2263
|
+
* @param {Boolean} analysis - 是否需要服务端解析消息
|
|
2264
|
+
*/
|
|
2265
|
+
customMessage(message: string, to: string | undefined, analysis?: boolean): Promise<any>;
|
|
2266
|
+
/**
|
|
2267
|
+
* 获取指定消息列表
|
|
2268
|
+
* @param {Number} startSeq - 起始序列号
|
|
2269
|
+
* @param {Number} endSeq - 终止序列号
|
|
2270
|
+
* @return {Promise<>}
|
|
2271
|
+
*/
|
|
2272
|
+
getMessages(startSeq: number, endSeq: number): Promise<any>;
|
|
2273
|
+
/**
|
|
2274
|
+
* 获取本地用户对象
|
|
2275
|
+
* @return {BMUser}
|
|
2276
|
+
*/
|
|
2277
|
+
getLocalParticipant(): BMUser;
|
|
2278
|
+
/**
|
|
2279
|
+
* 是否开启全员静音
|
|
2280
|
+
* @return {Boolean}
|
|
2281
|
+
*/
|
|
2282
|
+
getAudioOff(): boolean;
|
|
2283
|
+
/**
|
|
2284
|
+
* 是否允许自行开启语音
|
|
2285
|
+
*/
|
|
2286
|
+
getSelfOpenAudio(): boolean;
|
|
2287
|
+
/**
|
|
2288
|
+
* 是否开启全员禁用摄像头
|
|
2289
|
+
* @return {Boolean}
|
|
2290
|
+
*/
|
|
2291
|
+
getVideoOff(): boolean;
|
|
2292
|
+
/**
|
|
2293
|
+
* 是否开启全员禁言[禁止发送消息]
|
|
2294
|
+
* @return {Boolean}
|
|
2295
|
+
*/
|
|
2296
|
+
getMsgOff(): boolean;
|
|
2297
|
+
/**
|
|
2298
|
+
* 是否锁定房间
|
|
2299
|
+
* @return {Boolean}
|
|
2300
|
+
*/
|
|
2301
|
+
getLock(): boolean;
|
|
2302
|
+
/**
|
|
2303
|
+
* 获取房间信息
|
|
2304
|
+
* @return {Object}
|
|
2305
|
+
*/
|
|
2306
|
+
getRoomInfo(): BMRoomInfo;
|
|
2307
|
+
/**
|
|
2308
|
+
* 设置全员静音
|
|
2309
|
+
* @param {Boolean} audiooff - 是否静音
|
|
2310
|
+
* @param {Boolean} selfopenaudio - 是否允许自行开启
|
|
2311
|
+
* @return {Promise}
|
|
2312
|
+
*/
|
|
2313
|
+
setAudioOff(audiooff: boolean, selfopenaudio: boolean): Promise<any>;
|
|
2314
|
+
/**
|
|
2315
|
+
* 更新房间状态
|
|
2316
|
+
* @param opts
|
|
2317
|
+
*/
|
|
2318
|
+
updateRoom(opts: any): Promise<void>;
|
|
2319
|
+
/**
|
|
2320
|
+
* 设置全员禁用摄像头
|
|
2321
|
+
* @param {Boolean} videooff - 是否禁用摄像头
|
|
2322
|
+
* @return {Promise}
|
|
2323
|
+
*/
|
|
2324
|
+
setVideoOff(videooff: boolean): Promise<any>;
|
|
2325
|
+
/**
|
|
2326
|
+
* 设置全员禁言
|
|
2327
|
+
* @param {Boolean} msgoff - 是否禁言
|
|
2328
|
+
* @return {Promise}
|
|
2329
|
+
*/
|
|
2330
|
+
setMsgOff(msgoff: boolean): Promise<any>;
|
|
2331
|
+
/**
|
|
2332
|
+
* 设置是否允许加入成员
|
|
2333
|
+
* @param {Boolean} switch_ - 是否开启
|
|
2334
|
+
*/
|
|
2335
|
+
setSwitch(switch_: boolean): Promise<void>;
|
|
2336
|
+
/**
|
|
2337
|
+
* 设置是否锁定房间
|
|
2338
|
+
* @param {Boolean} lock - 是否锁定
|
|
2339
|
+
*/
|
|
2340
|
+
setLock(lock: boolean): Promise<boolean>;
|
|
2341
|
+
/**
|
|
2342
|
+
* 发送聊天室消息
|
|
2343
|
+
* @param msg
|
|
2344
|
+
* @param userId
|
|
2345
|
+
* @param lostNet
|
|
2346
|
+
*/
|
|
2347
|
+
sendChatMessage(msg: string, userId: string | undefined, lostNet: boolean): Promise<any>;
|
|
2348
|
+
/**
|
|
2349
|
+
* 获取聊天室消息
|
|
2350
|
+
*/
|
|
2351
|
+
getChatMessage(): BMMessageInfo[];
|
|
2352
|
+
/**
|
|
2353
|
+
* 获取聊天室历史消息
|
|
2354
|
+
*/
|
|
2355
|
+
getHistoryMessage(): Promise<BMMessageInfo[]>;
|
|
2356
|
+
/**
|
|
2357
|
+
* 更新房间自定义属性状态
|
|
2358
|
+
* @param {Object} customStats - 更新自定义房间信息参数
|
|
2359
|
+
* @param {Boolean} customStats.layoutMode - 0/1/2, // 默认为0,0:自由模式,可随时切换;1:是使用 defaultLayout,布局内可控;2:是使用 mainLayout,主会场同内容
|
|
2360
|
+
* @param {Boolean} replace - 是否替换 当前的对象
|
|
2361
|
+
* @returns {Promise}
|
|
2362
|
+
*/
|
|
2363
|
+
updateCustomStats(customStats: any, replace: boolean): Promise<any>;
|
|
2364
|
+
/**
|
|
2365
|
+
* 获取自定义属性
|
|
2366
|
+
*/
|
|
2367
|
+
getCustomStats(): any;
|
|
2368
|
+
/**
|
|
2369
|
+
* 获取会议时间进度,返回秒数
|
|
2370
|
+
*/
|
|
2371
|
+
getDuration(): number;
|
|
2372
|
+
/**
|
|
2373
|
+
* 检测目标用户是否有主持人权限
|
|
2374
|
+
*/
|
|
2375
|
+
checkUserHasMaster(userId: string): boolean;
|
|
2376
|
+
changeNickName(userId: string, nickName: string): Promise<any>;
|
|
2377
|
+
/**
|
|
2378
|
+
* boom-web-sdk中,会存在缓存的情况
|
|
2379
|
+
* 所以可能会出现设置已经不存在的窗口的值,去拉不存在的窗口的流
|
|
2380
|
+
* 增加一层逻辑判断去处理该情况
|
|
2381
|
+
*/
|
|
2382
|
+
streamModelExits(streamModel: BMStreamModel): boolean;
|
|
2383
|
+
handleQueueTask: (streamModel: BMStreamModel, noPlayChanged?: boolean) => Promise<void>;
|
|
2384
|
+
handleStreamTask(streamModel: BMStreamModel, noPlayChanged?: boolean): Promise<void>;
|
|
2385
|
+
/**
|
|
2386
|
+
* 处理拉流的逻辑
|
|
2387
|
+
* @param streamModel
|
|
2388
|
+
*/
|
|
2389
|
+
handlePull(streamModel: BMStreamModel): Promise<void>;
|
|
2390
|
+
/**
|
|
2391
|
+
* 手动订阅流的处理
|
|
2392
|
+
*/
|
|
2393
|
+
manualSubscribeStreamModel(streamModel: BMStreamModel): void;
|
|
2394
|
+
/**
|
|
2395
|
+
* 取消订阅流的处理
|
|
2396
|
+
* @param streamModel
|
|
2397
|
+
*/
|
|
2398
|
+
handleUnsubscribe(streamModel: BMStreamModel): void;
|
|
2399
|
+
/**
|
|
2400
|
+
* 处理streamModel绑定 element 只处理播放逻辑
|
|
2401
|
+
* @param sm
|
|
2402
|
+
*/
|
|
2403
|
+
handleStreamBindElement(sm: BMStreamModel): void;
|
|
2404
|
+
/**
|
|
2405
|
+
* 处理streamModel 绑定另一个播放器(主要是大窗口), 只处理播放逻辑
|
|
2406
|
+
* @param sm
|
|
2407
|
+
*/
|
|
2408
|
+
handleStreamBindBigElement(sm: BMStreamModel): void;
|
|
2409
|
+
handleUnsubscribeStream(streamModel: BMStreamModel): Promise<void>;
|
|
2410
|
+
handleSubscribeSteam(streamModel: BMStreamModel): Promise<void>;
|
|
2411
|
+
/**
|
|
2412
|
+
* 处理大小流切换
|
|
2413
|
+
* @param streamModel
|
|
2414
|
+
*/
|
|
2415
|
+
handleChangeStreamType(streamModel: BMStreamModel): Promise<void>;
|
|
2416
|
+
/**
|
|
2417
|
+
* 处理播放相关的逻辑
|
|
2418
|
+
* @param streamModel
|
|
2419
|
+
* @param force
|
|
2420
|
+
*/
|
|
2421
|
+
handlePlay(streamModel: BMStreamModel, force?: boolean): Promise<void>;
|
|
2422
|
+
handlePlaySmall(streamModel: BMStreamModel, ...args: any[]): void;
|
|
2423
|
+
handlePlayInBIg(streamModel: BMStreamModel): void;
|
|
2424
|
+
/**
|
|
2425
|
+
* 处理brtc订阅这股流失败的处理
|
|
2426
|
+
* @param streamModel
|
|
2427
|
+
*/
|
|
2428
|
+
private handlePulledFailed;
|
|
2429
|
+
/**
|
|
2430
|
+
* 处理流出现connect-error的逻辑,本地流需要重新推流,远端流需要重新拉流
|
|
2431
|
+
* @param event
|
|
2432
|
+
*/
|
|
2433
|
+
private handleStreamConnectError;
|
|
2434
|
+
republishLocalStream: lodash_es.DebouncedFunc<(stream: SingleLocalStream) => Promise<void>>;
|
|
2435
|
+
/**
|
|
2436
|
+
* 设置用户禁止/允许发言
|
|
2437
|
+
* @param bmUser
|
|
2438
|
+
* @param status
|
|
2439
|
+
*/
|
|
2440
|
+
toggleAudienceSpeaking(bmUser: BMUser, status: boolean): Promise<undefined>;
|
|
2441
|
+
/**
|
|
2442
|
+
* 更新用户的嘉宾身份 true 设置为嘉宾 false 设置为普通参会者
|
|
2443
|
+
* S -> permission
|
|
2444
|
+
* 普通参会者缺少S权限,嘉宾有S权限
|
|
2445
|
+
* @param user
|
|
2446
|
+
* @param status
|
|
2447
|
+
*/
|
|
2448
|
+
updateUserIsGuest(user: BMUser, status: boolean): Promise<undefined>;
|
|
2449
|
+
/**
|
|
2450
|
+
* 联席主持人设置嘉宾的操作
|
|
2451
|
+
* @param userId
|
|
2452
|
+
*/
|
|
2453
|
+
managerChangeToGuest(userId: string): void;
|
|
2454
|
+
/**
|
|
2455
|
+
* 将用户移动到等候室
|
|
2456
|
+
* @param target 用户id
|
|
2457
|
+
* @param toWait 是否移动到等候室
|
|
2458
|
+
* @param autoJoin 是否自动准入
|
|
2459
|
+
*/
|
|
2460
|
+
moveUserRoom(target: string, toWait?: boolean, autoJoin?: boolean): Promise<any>;
|
|
2461
|
+
/**
|
|
2462
|
+
* 获取业务端是否开启参会者进入/离开直播通知
|
|
2463
|
+
* @param status
|
|
2464
|
+
*/
|
|
2465
|
+
getParticipantNotice(status: boolean): void;
|
|
2466
|
+
/**
|
|
2467
|
+
*私有化部署url地址
|
|
2468
|
+
* @param url
|
|
2469
|
+
*/
|
|
2470
|
+
setCustomUrl(url: string): void;
|
|
2471
|
+
/**
|
|
2472
|
+
* 重推本地流,在收到brtc的code 4001 之后,说明本地掉线了
|
|
2473
|
+
* 需要重新推本地流
|
|
2474
|
+
*/
|
|
2475
|
+
handleRePushSelf(): Promise<void>;
|
|
2476
|
+
/**
|
|
2477
|
+
* 重拉远端流
|
|
2478
|
+
*/
|
|
2479
|
+
handleResetOtherStreamStatus(): void;
|
|
2480
|
+
/**
|
|
2481
|
+
* 处理断网重连之后对流的处理
|
|
2482
|
+
* @param pullItems
|
|
2483
|
+
*/
|
|
2484
|
+
restartPullUsers(pullItems: Map<string, PullItem>): void;
|
|
2485
|
+
addUser2Queue(pullItem: PullItem): Promise<void>;
|
|
2486
|
+
processUser: (uId: PullItem, failed?: number) => Promise<void>;
|
|
2487
|
+
queryBrtcStreams(uids: string[]): Promise<_hysc_brtc.RemoteStream[]>;
|
|
2488
|
+
handleAddStreams(streams: SingleRemoteStream[]): void;
|
|
2489
|
+
getForceUser(forceId: string): Promise<void>;
|
|
2490
|
+
queryBloudUsers(uids: string[], forceUpdateSort?: boolean, forceGetStream?: boolean): Promise<Map<string, BCClient.BCUser>>;
|
|
2491
|
+
getVersion(): string;
|
|
2492
|
+
}
|
|
2493
|
+
|
|
2494
|
+
export { BMChatVM, BMMessageInfo, BMRoomInfo, BMRoomVM, BMStreamModel, BMStreamModelVM, BMUser, BMUserVM, BMRoom as default };
|