@hysc/meeting 10.5.6 → 10.5.8
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 +37 -14
- package/dist/index.d.ts +37 -14
- package/dist/index.js +2 -2
- package/dist/index.mjs +2 -2
- package/package.json +1 -1
- package/umd/index.js +25 -0
- package/umd/src/BMChat/BMChatVM.d.ts +28 -0
- package/umd/src/BMChat/BMMessageInfo.d.ts +32 -0
- package/umd/src/BMRoom/BMLiveVM.d.ts +36 -0
- package/umd/src/BMRoom/BMRoom.d.ts +740 -0
- package/umd/src/BMRoom/BMRoomInfo.d.ts +222 -0
- package/umd/src/BMRoom/BMRoomVM.d.ts +329 -0
- package/umd/src/BMRoom/RoomEvent.d.ts +1 -0
- package/umd/src/BMStream/BMSpeaker.d.ts +26 -0
- package/umd/src/BMStream/BMStreamModel.d.ts +311 -0
- package/umd/src/BMStream/BMStreamModelVM.d.ts +281 -0
- package/umd/src/BMStream/getHTMLMediaStreamOptions.d.ts +35 -0
- package/umd/src/BMStream/sortStream.d.ts +30 -0
- package/umd/src/BMUser/BMUser.d.ts +173 -0
- package/umd/src/BMUser/BMUserVM.d.ts +188 -0
- package/umd/src/SingletonQueue/SingletonQueue.d.ts +16 -0
- package/umd/src/audioPlay/AudioPlay.d.ts +31 -0
- package/umd/src/bjy-common/function/debounce.d.ts +9 -0
- package/umd/src/bjy-common/function/execute.d.ts +9 -0
- package/umd/src/bjy-common/function/getErrorMessage.d.ts +1 -0
- package/umd/src/bjy-common/function/isDef.d.ts +1 -0
- package/umd/src/bjy-common/function/isNative.d.ts +1 -0
- package/umd/src/bjy-common/function/isUndef.d.ts +1 -0
- package/umd/src/bjy-common/function/nextTick.d.ts +2 -0
- package/umd/src/bjy-common/function/throttling.d.ts +9 -0
- package/umd/src/bjy-common/function/toNumber.d.ts +1 -0
- package/umd/src/bjy-common/function/toString.d.ts +1 -0
- package/umd/src/bjy-common/type/api.d.ts +66 -0
- package/umd/src/bjy-common/type/options.d.ts +7 -0
- package/umd/src/bjy-common/type/type.d.ts +90 -0
- package/umd/src/bjy-common/util/CustomEvent.d.ts +30 -0
- package/umd/src/bjy-common/util/Emitter.d.ts +57 -0
- package/umd/src/bjy-common/util/NextTask.d.ts +28 -0
- package/umd/src/bjy-common/util/Sleep.d.ts +14 -0
- package/umd/src/bjy-common/util/Timer.d.ts +13 -0
- package/umd/src/bjy-common/util/array.d.ts +96 -0
- package/umd/src/bjy-common/util/browser.d.ts +6 -0
- package/umd/src/bjy-common/util/constant.d.ts +50 -0
- package/umd/src/bjy-common/util/holder.d.ts +6 -0
- package/umd/src/bjy-common/util/is.d.ts +49 -0
- package/umd/src/bjy-common/util/keypath.d.ts +41 -0
- package/umd/src/bjy-common/util/logger.d.ts +42 -0
- package/umd/src/bjy-common/util/network.d.ts +4 -0
- package/umd/src/bjy-common/util/object.d.ts +83 -0
- package/umd/src/bjy-common/util/os.d.ts +14 -0
- package/umd/src/bjy-common/util/string.d.ts +102 -0
- package/umd/src/constants.d.ts +130 -0
- package/umd/src/error/RTCError.d.ts +20 -0
- package/umd/src/error/errorMap.d.ts +70 -0
- package/umd/src/error/errorType.d.ts +96 -0
- package/umd/src/handleEvent/attachEvents.d.ts +47 -0
- package/umd/src/handleEvent/brtcNetEvent.d.ts +9 -0
- package/umd/src/handleEvent/customMessageEvent.d.ts +2 -0
- package/umd/src/handleEvent/handleParticipantEvent.d.ts +24 -0
- package/umd/src/handleEvent/handleRoomEvent.d.ts +20 -0
- package/umd/src/handleEvent/messageEvent.d.ts +5 -0
- package/umd/src/handleEvent/pullUser.d.ts +7 -0
- package/umd/src/handleEvent/roomErrEvent.d.ts +9 -0
- package/umd/src/handleEvent/streamEvent.d.ts +22 -0
- package/umd/src/index.d.ts +13 -0
- package/umd/src/logger/logger.d.ts +86 -0
- package/umd/src/type/customStats.d.ts +129 -0
- package/umd/src/type/index.d.ts +9 -0
- package/umd/src/type/stream.d.ts +12 -0
- package/umd/src/type/user.d.ts +9 -0
- package/umd/src/util/PackLoss.d.ts +7 -0
- package/umd/src/util/Pqueue.d.ts +62 -0
- package/umd/src/util/Privileges.d.ts +20 -0
- package/umd/src/util/ReportCollector.d.ts +22 -0
- package/umd/src/util/Stutter.d.ts +19 -0
- package/umd/src/util/Thread.d.ts +12 -0
- package/umd/src/util/base64.d.ts +4 -0
- package/umd/src/util/benchmark.d.ts +1 -0
- package/umd/src/util/checkPermissions.d.ts +1 -0
- package/umd/src/util/checkSystemRequirements.d.ts +1 -0
- package/umd/src/util/constant.d.ts +67 -0
- package/umd/src/util/devices.d.ts +2 -0
- package/umd/src/util/emitter.d.ts +45 -0
- package/umd/src/util/formatUserId.d.ts +2 -0
- package/umd/src/util/is.d.ts +70 -0
- package/umd/src/util/peerToPeerProbe.d.ts +9 -0
- package/umd/src/util/request.d.ts +45 -0
- package/umd/src/util/roomUtils.d.ts +9 -0
- package/umd/src/util/sortUtils.d.ts +10 -0
- package/umd/src/util/util.d.ts +81 -0
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
import { SingleStream } from "../type";
|
|
2
|
+
import { SubscribeOptions } from "@hysc/brtc";
|
|
3
|
+
import BMUser from "../BMUser/BMUser";
|
|
4
|
+
import { BehaviorSubject, Subject } from "rxjs";
|
|
5
|
+
import { Player } from "@hysc/core";
|
|
6
|
+
import BMStreamModelVM from "./BMStreamModelVM";
|
|
7
|
+
import { BloudStreamState } from "../handleEvent/attachEvents";
|
|
8
|
+
import type { StreamCustomInfo } from '@hysc/bloud';
|
|
9
|
+
/**
|
|
10
|
+
* @name: BMStreamModel
|
|
11
|
+
* @author: yangliye
|
|
12
|
+
* @date: 2022-04-25 11:14
|
|
13
|
+
* @description:BMStreamModel
|
|
14
|
+
* @update: 2022-04-25 11:14
|
|
15
|
+
*/
|
|
16
|
+
declare type StreamType = 'big' | 'small';
|
|
17
|
+
export interface SubscribeMessage {
|
|
18
|
+
stream: BMStreamModel;
|
|
19
|
+
}
|
|
20
|
+
export interface ConnectErrorMessage {
|
|
21
|
+
stream: BMStreamModel;
|
|
22
|
+
isLocal: boolean;
|
|
23
|
+
}
|
|
24
|
+
export interface NoPlayerContainer {
|
|
25
|
+
type: 'share' | 'normal';
|
|
26
|
+
container: 'small' | 'big';
|
|
27
|
+
id: string;
|
|
28
|
+
}
|
|
29
|
+
export interface StreamPlayMessage {
|
|
30
|
+
uid: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* 播放器状态
|
|
34
|
+
*/
|
|
35
|
+
declare enum PlayerState {
|
|
36
|
+
NO_CONTAINER = 0,
|
|
37
|
+
NO_PLAYING = 1,
|
|
38
|
+
PLAYING = 2
|
|
39
|
+
}
|
|
40
|
+
export default class BMStreamModel {
|
|
41
|
+
private user;
|
|
42
|
+
private _stream;
|
|
43
|
+
bloudStream: BloudStreamState | undefined;
|
|
44
|
+
/**
|
|
45
|
+
* 流类型
|
|
46
|
+
*/
|
|
47
|
+
streamType: number;
|
|
48
|
+
pullFailedNum: number;
|
|
49
|
+
_video_enable: boolean;
|
|
50
|
+
_audio_enable: boolean;
|
|
51
|
+
videoEnableWatcher: BehaviorSubject<boolean>;
|
|
52
|
+
audioEnableWatcher: BehaviorSubject<boolean>;
|
|
53
|
+
streamUpdateWatcher: Subject<boolean>;
|
|
54
|
+
isSubScribedWatcher: Subject<boolean>;
|
|
55
|
+
playStateChangeWatcher: Subject<BMStreamModel>;
|
|
56
|
+
/**
|
|
57
|
+
* 找不到播放器,说明当前的streamModel可能是销毁重建的,或者是业务上绑定失败的,这个时候给端上一个提示,让他重新绑定一下播放器
|
|
58
|
+
*/
|
|
59
|
+
noContainerWatcher: Subject<boolean>;
|
|
60
|
+
noBigContainerWatcher: Subject<boolean>;
|
|
61
|
+
audioLevelWatcher: Subject<number>;
|
|
62
|
+
isCurrentDisplay: boolean;
|
|
63
|
+
/**
|
|
64
|
+
* 当前窗口是不是在展示中目标状态
|
|
65
|
+
*/
|
|
66
|
+
isDisplay: boolean;
|
|
67
|
+
isDisplayObserve: Subject<boolean>;
|
|
68
|
+
isInBig: boolean;
|
|
69
|
+
isInBigObserve: Subject<boolean>;
|
|
70
|
+
_hasPulled: boolean;
|
|
71
|
+
playerId: string;
|
|
72
|
+
/**
|
|
73
|
+
* 手动拉流配置, 默认是false, 如果是走手动拉流,设置成true,说明拉他的流
|
|
74
|
+
* shouldPull 是否应该拉
|
|
75
|
+
*/
|
|
76
|
+
shouldPull: boolean;
|
|
77
|
+
smallPlayFailed: number;
|
|
78
|
+
get hasPulled(): boolean;
|
|
79
|
+
set hasPulled(value: boolean);
|
|
80
|
+
/**
|
|
81
|
+
* 当前拉取的是大流还是小流
|
|
82
|
+
*/
|
|
83
|
+
_pulledStreamType: StreamType;
|
|
84
|
+
get pulledStreamType(): StreamType;
|
|
85
|
+
set pulledStreamType(type: StreamType);
|
|
86
|
+
/**
|
|
87
|
+
* 要拉取的流的目标状态
|
|
88
|
+
*/
|
|
89
|
+
pulledStreamGoal: StreamType;
|
|
90
|
+
bigPlayerId: string;
|
|
91
|
+
player: Player | undefined | null;
|
|
92
|
+
isPlayingBig: boolean;
|
|
93
|
+
/**
|
|
94
|
+
* 是否静音了扬声器,brtc不会处理业务上静音的逻辑,所以需要自己处理
|
|
95
|
+
* 如果静音了,就把所有的流都重新静音播放一遍
|
|
96
|
+
*/
|
|
97
|
+
muted: boolean;
|
|
98
|
+
private checkVideoTimer;
|
|
99
|
+
checkCount: number;
|
|
100
|
+
/**
|
|
101
|
+
* streamModel的唯一标识,用来给业务绑定播放容器
|
|
102
|
+
*/
|
|
103
|
+
get uuid(): string;
|
|
104
|
+
get isAudience(): boolean;
|
|
105
|
+
/**
|
|
106
|
+
* 因为直播模式中,观众是不展示的
|
|
107
|
+
* 所以这个地方要判断一下
|
|
108
|
+
*/
|
|
109
|
+
get canShow(): boolean;
|
|
110
|
+
changeMute(mute: boolean): void;
|
|
111
|
+
handleSpeakerChange(): void;
|
|
112
|
+
/**
|
|
113
|
+
* 排序数字
|
|
114
|
+
* 窗口的排序使用二进制运算进行了优化,为了提高运行速度牺牲了一部分代码可读性
|
|
115
|
+
*/
|
|
116
|
+
sortNum: number;
|
|
117
|
+
isWhiteboard: boolean;
|
|
118
|
+
get isToupingma(): boolean;
|
|
119
|
+
get isMixer(): boolean;
|
|
120
|
+
get isSignal(): boolean;
|
|
121
|
+
/**
|
|
122
|
+
* 初始化展示的model
|
|
123
|
+
* @param user
|
|
124
|
+
* @param stream
|
|
125
|
+
*/
|
|
126
|
+
constructor(user: BMUser, stream?: SingleStream, isWhiteboard?: boolean);
|
|
127
|
+
/**
|
|
128
|
+
* 生成订阅信息
|
|
129
|
+
*/
|
|
130
|
+
genReceiveSubMsg(): SubscribeOptions;
|
|
131
|
+
/**
|
|
132
|
+
* display属性改变调整
|
|
133
|
+
* @private
|
|
134
|
+
*/
|
|
135
|
+
private handleDisplayChange;
|
|
136
|
+
/**
|
|
137
|
+
* 处理当前窗口是不是在大窗的逻辑
|
|
138
|
+
* @param display
|
|
139
|
+
* @private
|
|
140
|
+
*/
|
|
141
|
+
private handleIsInBig;
|
|
142
|
+
/**
|
|
143
|
+
* 设置是否打开摄像头状态
|
|
144
|
+
* @param enable
|
|
145
|
+
* @private
|
|
146
|
+
*/
|
|
147
|
+
setVideoEnable(enable: boolean): void;
|
|
148
|
+
/**
|
|
149
|
+
* 设置是否打开麦克风状态
|
|
150
|
+
* @param enable
|
|
151
|
+
* @private
|
|
152
|
+
*/
|
|
153
|
+
setAudioEnable(enable: boolean): void;
|
|
154
|
+
/**
|
|
155
|
+
* 更新当前streamModel中的流
|
|
156
|
+
* @param stream
|
|
157
|
+
* @param needReProcess
|
|
158
|
+
* @param bmStreamVm
|
|
159
|
+
*/
|
|
160
|
+
updateStream(stream: SingleStream | undefined, needReProcess: boolean | undefined, bmStreamVm: BMStreamModelVM): void;
|
|
161
|
+
/**
|
|
162
|
+
* 更新bloud的stream,设置流状态
|
|
163
|
+
* @param streamState
|
|
164
|
+
* @param bmStreamVM
|
|
165
|
+
* @param forceSearch
|
|
166
|
+
*/
|
|
167
|
+
updateBloudStream(streamState: BloudStreamState | undefined, bmStreamVM: BMStreamModelVM, forceSearch?: boolean): void;
|
|
168
|
+
updateBloudCustomInfo(customInfo: StreamCustomInfo): void;
|
|
169
|
+
private onPlayerStateChange;
|
|
170
|
+
handleStreamConnectError: () => void;
|
|
171
|
+
/**
|
|
172
|
+
* 获取当前的streamId
|
|
173
|
+
*/
|
|
174
|
+
get streamId(): string;
|
|
175
|
+
get bStreamId(): string;
|
|
176
|
+
/**
|
|
177
|
+
* 获取当前窗口绑定的用户id
|
|
178
|
+
*/
|
|
179
|
+
get userId(): string;
|
|
180
|
+
/**
|
|
181
|
+
* 获取当前的流对象
|
|
182
|
+
*/
|
|
183
|
+
get stream(): SingleStream | undefined;
|
|
184
|
+
/**
|
|
185
|
+
* 是否是本地流
|
|
186
|
+
*/
|
|
187
|
+
get isLocal(): boolean;
|
|
188
|
+
/**
|
|
189
|
+
* 是否是屏幕共享的流
|
|
190
|
+
*/
|
|
191
|
+
get isShare(): boolean;
|
|
192
|
+
get isWeb(): boolean;
|
|
193
|
+
get isMobile(): boolean;
|
|
194
|
+
/**
|
|
195
|
+
* 当前音频是否开启
|
|
196
|
+
*/
|
|
197
|
+
get audioEnable(): boolean;
|
|
198
|
+
/**
|
|
199
|
+
* 当前视频是否开启
|
|
200
|
+
*/
|
|
201
|
+
get videoEnable(): boolean;
|
|
202
|
+
private get brtcPlayerId();
|
|
203
|
+
private get selfPlayerId();
|
|
204
|
+
/**
|
|
205
|
+
* 获取当前流绑定的用户昵称
|
|
206
|
+
*/
|
|
207
|
+
get nickname(): string;
|
|
208
|
+
/**
|
|
209
|
+
* 获取流的麦克风音量
|
|
210
|
+
*/
|
|
211
|
+
get audioLevel(): number;
|
|
212
|
+
getUser(): BMUser;
|
|
213
|
+
/**
|
|
214
|
+
* 设置远端流的播放声音
|
|
215
|
+
* @param volume
|
|
216
|
+
*/
|
|
217
|
+
setRemoteAudioLevel(volume: number): void;
|
|
218
|
+
/**
|
|
219
|
+
* 获取流的传输信息
|
|
220
|
+
*/
|
|
221
|
+
getStats(): Promise<import("@hysc/brtc").RemoteStreamStats> | Promise<import("@hysc/brtc").LocalStreamStats> | undefined;
|
|
222
|
+
/**
|
|
223
|
+
* BIND_ELEMENT 事件
|
|
224
|
+
* @param eleId
|
|
225
|
+
*/
|
|
226
|
+
bindElement: (eleId: string) => void;
|
|
227
|
+
bindBigElement: (eleId: string) => void;
|
|
228
|
+
sendMessage2Room: any;
|
|
229
|
+
emitBindElement: any;
|
|
230
|
+
emitBindBigElement: any;
|
|
231
|
+
/**
|
|
232
|
+
* 当前是不是正在播放
|
|
233
|
+
* @param containerId sdk绑定播放器容器id
|
|
234
|
+
* @param small
|
|
235
|
+
*/
|
|
236
|
+
currentIsPlaying: (containerId: string, small?: boolean) => PlayerState;
|
|
237
|
+
/**
|
|
238
|
+
* 播放当前流
|
|
239
|
+
*/
|
|
240
|
+
play: (force?: boolean) => Promise<void>;
|
|
241
|
+
/**
|
|
242
|
+
* 在大窗口播放该流的时候调用这个方法
|
|
243
|
+
*/
|
|
244
|
+
playInBig: (force?: boolean) => Promise<void>;
|
|
245
|
+
private initBigPlayer;
|
|
246
|
+
/**
|
|
247
|
+
* 停止播放当前流
|
|
248
|
+
*/
|
|
249
|
+
stop(): void;
|
|
250
|
+
/**
|
|
251
|
+
* 销毁当前流
|
|
252
|
+
*/
|
|
253
|
+
destroyBrtcStream(): void;
|
|
254
|
+
/**
|
|
255
|
+
* 获取当前流是否正在播放
|
|
256
|
+
*/
|
|
257
|
+
isPlaying(): boolean | undefined;
|
|
258
|
+
/**
|
|
259
|
+
* 重新播放
|
|
260
|
+
*/
|
|
261
|
+
replay(): Promise<void> | undefined;
|
|
262
|
+
/**
|
|
263
|
+
* 恢复播放音视频
|
|
264
|
+
* 在某些版本浏览器上移动传入 play() 的 div 容器可能会导致音视频播放器进入 ‘PAUSED’ 状态,此时 需要调用该接口恢复播放。
|
|
265
|
+
* 由于浏览器自动播放策略的限制,在 play() 返回 PLAY_NOT_ALLOWED 错误后需要引导用户通过手势 调用该接口恢复播放
|
|
266
|
+
*
|
|
267
|
+
* @returns
|
|
268
|
+
*/
|
|
269
|
+
resume(): void;
|
|
270
|
+
/**
|
|
271
|
+
* 是否有音频流
|
|
272
|
+
*/
|
|
273
|
+
hasAudio(): boolean;
|
|
274
|
+
/**
|
|
275
|
+
* 是否有视频流
|
|
276
|
+
*/
|
|
277
|
+
hasVideo(): boolean;
|
|
278
|
+
/**
|
|
279
|
+
* 更新当前model的用户信息
|
|
280
|
+
* @param user
|
|
281
|
+
*/
|
|
282
|
+
updateUser(user: BMUser): void;
|
|
283
|
+
updateSortNum(force?: boolean): void;
|
|
284
|
+
setSortNum(sortNum: number, force: boolean): void;
|
|
285
|
+
getSortNum(): number;
|
|
286
|
+
/**
|
|
287
|
+
* 启动音频音量检测
|
|
288
|
+
*/
|
|
289
|
+
collectAudioLevel: () => void;
|
|
290
|
+
private handleAudioLevel;
|
|
291
|
+
checkSmallVideo: () => Promise<void>;
|
|
292
|
+
checkBigVideo: any;
|
|
293
|
+
/**
|
|
294
|
+
* 播放黑窗处理,主要是做一个容错处理,又可能这股流拉下来或者存在订阅就出现问题的情况
|
|
295
|
+
* 播放时黑窗的,这个时候需要,检测,然后重新拉流
|
|
296
|
+
* @param videoContainer
|
|
297
|
+
*/
|
|
298
|
+
private checkVideoDecodeFrame;
|
|
299
|
+
/**
|
|
300
|
+
* 发送订阅该流的请求
|
|
301
|
+
*/
|
|
302
|
+
subscribeStream(): void;
|
|
303
|
+
unSubscribeStream(): void;
|
|
304
|
+
checkStreamIsPlaying: any;
|
|
305
|
+
/**
|
|
306
|
+
* 取消流的播放
|
|
307
|
+
* @param type big: 大窗口 small: 小窗口 all: 全部
|
|
308
|
+
*/
|
|
309
|
+
unAttach(type: 'big' | 'small' | 'all'): void;
|
|
310
|
+
}
|
|
311
|
+
export {};
|
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @name: BMStreamModelVM
|
|
3
|
+
* @author: yangliye
|
|
4
|
+
* @date: 2022-04-27 15:25
|
|
5
|
+
* @description:BMStreamModelVM
|
|
6
|
+
* @update: 2022-04-27 15:25
|
|
7
|
+
* @description
|
|
8
|
+
* 这个模块的功能是去管理展示窗口的处理逻辑,主要包括创建streamModel,更新streamModel(主要是流相关信息的更新,和用户更新)
|
|
9
|
+
* 创建streamModel的操作:
|
|
10
|
+
* 初始化整个流程是根据bloud的用户来创建的
|
|
11
|
+
* 然后在根据brtc里面流的信息来更新对应的streamModel
|
|
12
|
+
* bloud的用户和brtc的流信息是根据uid来进行关联。
|
|
13
|
+
*
|
|
14
|
+
* 共享屏幕用户做了特殊处理,因为web端共享屏幕和移动端共享屏幕处理逻辑不一样
|
|
15
|
+
*/
|
|
16
|
+
/// <reference types="node" />
|
|
17
|
+
import BMStreamModel, { NoPlayerContainer, StreamPlayMessage } from "./BMStreamModel";
|
|
18
|
+
import BMUser from "../BMUser/BMUser";
|
|
19
|
+
import { SingleLocalStream, SingleRemoteStream, SingleStream } from "../type";
|
|
20
|
+
import BMRoom from "../BMRoom/BMRoom";
|
|
21
|
+
import { BehaviorSubject, Subject } from "rxjs";
|
|
22
|
+
import { BoomError } from "@hysc/utils";
|
|
23
|
+
import type { Device, LocalStream } from "@hysc/brtc";
|
|
24
|
+
import BMSpeaker from "./BMSpeaker";
|
|
25
|
+
import { ShareMediaOptions } from "@hysc/core";
|
|
26
|
+
import { getHTMLMediaStreamOptions, getMediaStreamInfo, Result } from "./getHTMLMediaStreamOptions";
|
|
27
|
+
import type { StreamCustomInfo, BloudStream } from '@hysc/bloud';
|
|
28
|
+
import { BloudStreamEventState } from "../handleEvent/attachEvents";
|
|
29
|
+
export declare function transShareScreen2User(userId: string): string;
|
|
30
|
+
export default class BMStreamModelVM {
|
|
31
|
+
streamModels: Map<string, BMStreamModel>;
|
|
32
|
+
/**
|
|
33
|
+
* 因为投屏码用户进来以后,他是不在小窗口展示的,所以要把投屏的用户过滤掉给业务的展示
|
|
34
|
+
*/
|
|
35
|
+
streamModelsWatcher: BehaviorSubject<BMStreamModel[]>;
|
|
36
|
+
shareStreamModels: Map<string, BMStreamModel>;
|
|
37
|
+
shareStreamModelsWatcher: BehaviorSubject<BMStreamModel[]>;
|
|
38
|
+
localStreamErrorWatcher: Subject<string>;
|
|
39
|
+
localModel: BMStreamModel | null;
|
|
40
|
+
room: BMRoom | null;
|
|
41
|
+
bloudStream: BloudStream | null;
|
|
42
|
+
/** 白板窗口 */
|
|
43
|
+
whiteboard: BMStreamModel | null;
|
|
44
|
+
whiteboardWatcher: BehaviorSubject<BMStreamModel | null>;
|
|
45
|
+
/**
|
|
46
|
+
* brtc stream对象
|
|
47
|
+
*/
|
|
48
|
+
brtcStream: SingleLocalStream | null;
|
|
49
|
+
/**
|
|
50
|
+
* 后面打开摄像头存储的流,主要是关闭摄像头的时候得把它清除掉
|
|
51
|
+
*/
|
|
52
|
+
videoStream: SingleLocalStream | null;
|
|
53
|
+
audioStream: SingleLocalStream | null;
|
|
54
|
+
/**
|
|
55
|
+
* 本地是否在屏幕共享
|
|
56
|
+
*/
|
|
57
|
+
localIsShare: boolean;
|
|
58
|
+
isShareWatcher: Subject<boolean>;
|
|
59
|
+
localShareCustomStats: any;
|
|
60
|
+
_speaker_enable: boolean;
|
|
61
|
+
speakerEnableWatcher: BehaviorSubject<boolean>;
|
|
62
|
+
/**
|
|
63
|
+
* 混流
|
|
64
|
+
*/
|
|
65
|
+
mixStreamUid: string | null;
|
|
66
|
+
get mixStreamModel(): BMStreamModel | null | undefined;
|
|
67
|
+
mixStreamModelWatcher: BehaviorSubject<BMStreamModel | null>;
|
|
68
|
+
canvasTimer: NodeJS.Timeout | null;
|
|
69
|
+
private _recorder;
|
|
70
|
+
private _isRecording;
|
|
71
|
+
private _slicingRecord;
|
|
72
|
+
isRecordingWatcher: BehaviorSubject<boolean>;
|
|
73
|
+
private _speaker;
|
|
74
|
+
private _speakerDetector;
|
|
75
|
+
private _speakers;
|
|
76
|
+
speakerWatcher: BehaviorSubject<BMUser | null>;
|
|
77
|
+
private rtcPublishing;
|
|
78
|
+
/**
|
|
79
|
+
* 窗口没有播放容器的错误处理
|
|
80
|
+
*/
|
|
81
|
+
noContainerWatcher: Subject<BMStreamModel>;
|
|
82
|
+
/**
|
|
83
|
+
* 窗口没有大窗口播放容器的错误处理
|
|
84
|
+
*/
|
|
85
|
+
noBigContainerWatcher: Subject<BMStreamModel>;
|
|
86
|
+
localStreamConnectErrorWatcher: Subject<BoomError>;
|
|
87
|
+
/**
|
|
88
|
+
* 共享屏幕相关错误
|
|
89
|
+
* 包括,共享客户端错误
|
|
90
|
+
* 共享屏幕流错误
|
|
91
|
+
*/
|
|
92
|
+
localShareError: Subject<BoomError>;
|
|
93
|
+
localShareEndedError: Subject<boolean>;
|
|
94
|
+
/**
|
|
95
|
+
* 共享屏幕流是单独处理的逻辑,不是先创建streamModel然后在去查流,而是先去查流,在创建streamModel
|
|
96
|
+
*/
|
|
97
|
+
shareBloudStateMap: Map<string, BloudStreamEventState>;
|
|
98
|
+
/**
|
|
99
|
+
* 窗口播放事件,给到端上去做埋点
|
|
100
|
+
*/
|
|
101
|
+
streamPlayWatcher: Subject<StreamPlayMessage>;
|
|
102
|
+
private muteHandlerVideo;
|
|
103
|
+
private muteHandlerAudio;
|
|
104
|
+
constructor();
|
|
105
|
+
private static filterStreamModels;
|
|
106
|
+
handleStreamPlay: (info: StreamPlayMessage) => void;
|
|
107
|
+
initWithRoom(room: BMRoom): this;
|
|
108
|
+
/**
|
|
109
|
+
* 设置扬声器是否打开
|
|
110
|
+
* @param enable
|
|
111
|
+
* @private
|
|
112
|
+
*/
|
|
113
|
+
private setSpeakerEnable;
|
|
114
|
+
getStreamModels(): Array<BMStreamModel>;
|
|
115
|
+
/**
|
|
116
|
+
* 获取streamModel
|
|
117
|
+
* @param userId 用户Id
|
|
118
|
+
* @returns
|
|
119
|
+
*/
|
|
120
|
+
getStreamModelByUId(userId: string): BMStreamModel | undefined;
|
|
121
|
+
getShareStreamModelByUId(userId: string): BMStreamModel | undefined;
|
|
122
|
+
getLocalStreamModel(): BMStreamModel | null;
|
|
123
|
+
createWhiteBoard(userId: string): BMStreamModel | undefined;
|
|
124
|
+
removeWhiteBoard(): void;
|
|
125
|
+
createStreamModel(user: BMUser, stream?: SingleStream): BMStreamModel;
|
|
126
|
+
addStreamModel(streamModel: BMStreamModel): void;
|
|
127
|
+
addShareStreamModel(streamModel: BMStreamModel): void;
|
|
128
|
+
removeStreamModel(streamModel: BMStreamModel): void;
|
|
129
|
+
removeShareStreamModelByUId(uid: string): void;
|
|
130
|
+
removeShareStreamModel(streamModel: BMStreamModel): void;
|
|
131
|
+
/**`
|
|
132
|
+
* 通过用户id删除streamModel
|
|
133
|
+
* @param userId
|
|
134
|
+
* @returns
|
|
135
|
+
*/
|
|
136
|
+
removeStreamModelByUId(userId: string): BMStreamModel | undefined;
|
|
137
|
+
remoteStreamPublished(stream: SingleRemoteStream): void;
|
|
138
|
+
/**
|
|
139
|
+
* 有人取消流触发,有人取消流之后brtc底层会把流销毁掉,除了流Id和userId,其他的信息都不稳定能取到
|
|
140
|
+
* @param stream
|
|
141
|
+
* @returns
|
|
142
|
+
*/
|
|
143
|
+
remoteStreamUnpublished(stream: SingleRemoteStream): BMStreamModel | undefined;
|
|
144
|
+
sortStreamModels(): BMStreamModel[];
|
|
145
|
+
updateStreamModel(streamModel: BMStreamModel, stream: SingleStream): void;
|
|
146
|
+
updateShareStreamModel(streamModel: BMStreamModel, stream: SingleStream): void;
|
|
147
|
+
/**
|
|
148
|
+
* 开关本地摄像头
|
|
149
|
+
* @param status true:开,false:关
|
|
150
|
+
* @param videoTrack 开启美颜之后,需要传递这个参数,携带美颜之后的videoTrack
|
|
151
|
+
*/
|
|
152
|
+
setLocalVideoEnable(status: boolean, videoTrack?: MediaStreamTrack): Promise<undefined>;
|
|
153
|
+
/**
|
|
154
|
+
* brtc流更新状态失败,这个时候重新推流
|
|
155
|
+
*/
|
|
156
|
+
handleStreamUpdateFailed(): Promise<void>;
|
|
157
|
+
/**
|
|
158
|
+
* 开关本地麦克风
|
|
159
|
+
* @param status true:开,false:关
|
|
160
|
+
*/
|
|
161
|
+
setLocalAudioEnable(status: boolean): Promise<undefined>;
|
|
162
|
+
/**
|
|
163
|
+
* 该方法只是在入会的时候,同时开启音频和视频的时候使用,其他时候禁止使用该方法
|
|
164
|
+
* 切换音频和视频状态请使用 setLocalAudioEnable 和 setLocalVideoEnable
|
|
165
|
+
* @param audio
|
|
166
|
+
* @param video
|
|
167
|
+
*/
|
|
168
|
+
joinWithAudioAndAudio(audio: boolean, video: boolean): Promise<boolean | undefined>;
|
|
169
|
+
/**
|
|
170
|
+
* 切换扬声器
|
|
171
|
+
* @param device
|
|
172
|
+
* @param force 是否需要强制更新
|
|
173
|
+
*/
|
|
174
|
+
changeSpeaker(device: Device, force?: boolean): Promise<void>;
|
|
175
|
+
/**
|
|
176
|
+
* 设置单个流的扬声器
|
|
177
|
+
* @param streamModel
|
|
178
|
+
*/
|
|
179
|
+
changeSingleStreamSpeaker(streamModel: BMStreamModel): Promise<void>;
|
|
180
|
+
changeAudioInput(device: Device): Promise<boolean | undefined>;
|
|
181
|
+
changeVideoInput(device: Device): Promise<boolean | undefined>;
|
|
182
|
+
/**
|
|
183
|
+
* 是否静音扬声器
|
|
184
|
+
* @param enable
|
|
185
|
+
*/
|
|
186
|
+
muteSpeaker(enable: boolean): Promise<undefined>;
|
|
187
|
+
/**
|
|
188
|
+
* 创建本地音频流
|
|
189
|
+
*/
|
|
190
|
+
createLocalAudioStream(): Promise<LocalStream | null>;
|
|
191
|
+
onlyBrtcPublish(): Promise<boolean>;
|
|
192
|
+
/**
|
|
193
|
+
* 创建流并且发布
|
|
194
|
+
* @param audio 是否发布音频流
|
|
195
|
+
* @param video 是否发布视频流
|
|
196
|
+
* @param localModel 本地的streamModel
|
|
197
|
+
* @param videoTrack
|
|
198
|
+
* @private
|
|
199
|
+
*/
|
|
200
|
+
private createStreamAndPublish;
|
|
201
|
+
brtcStreamAddEvent(): void;
|
|
202
|
+
brtcStreamRemoveEvent(): void;
|
|
203
|
+
publishBloudStream(audio: boolean, video: boolean): Promise<void>;
|
|
204
|
+
muteHandler(type: 'video' | 'audio'): void;
|
|
205
|
+
unpublishStream(isUnpubRTC?: boolean): Promise<void>;
|
|
206
|
+
/**
|
|
207
|
+
* 更改音视频状态或者取消发布
|
|
208
|
+
* @param type 更改类型
|
|
209
|
+
* @param mute 是否取消发布
|
|
210
|
+
* @param localModel 本地的streamModel
|
|
211
|
+
* @private
|
|
212
|
+
*/
|
|
213
|
+
private muteOrUnpublishStream;
|
|
214
|
+
private justReplaceVideoTrack;
|
|
215
|
+
toggleShareScreen(enable: boolean, opts?: any, customShare?: Result): Promise<boolean>;
|
|
216
|
+
setShareScreenContentHint(contentHint: '' | 'motion' | 'detail' | 'text'): void;
|
|
217
|
+
updateModelSort: any;
|
|
218
|
+
handleNoContainer: (info: NoPlayerContainer) => void;
|
|
219
|
+
/**
|
|
220
|
+
* 创建canvas,目的是为了捕获空track流,给brtc使用
|
|
221
|
+
*/
|
|
222
|
+
createCanvas(): void;
|
|
223
|
+
private canvasDisplay;
|
|
224
|
+
private static getCanvasStream;
|
|
225
|
+
private createVideoStreamTrack;
|
|
226
|
+
/**
|
|
227
|
+
* 启动录制
|
|
228
|
+
* @param {String} opts.filename - 录制文件名
|
|
229
|
+
* @param {Object} opts.capture - 采集属性
|
|
230
|
+
* @param {Number} opts.capture.width - 宽度
|
|
231
|
+
* @param {Number} opts.capture.height - 高度
|
|
232
|
+
* @param {Number} opts.capture.fps - 帧率
|
|
233
|
+
* @param {Number} opts.record - 编码属性
|
|
234
|
+
* @param {Number} opts.record.bitrate - 编码码率
|
|
235
|
+
* @param {String|undefined} opts.record.format - 编码格式
|
|
236
|
+
* @return {boolean}
|
|
237
|
+
*/
|
|
238
|
+
startRecord(opts: any): Promise<boolean | undefined>;
|
|
239
|
+
/**
|
|
240
|
+
* 添加流对象到录制器,用于音频轨道录制
|
|
241
|
+
* @param stream
|
|
242
|
+
*/
|
|
243
|
+
addToRecorder(stream: SingleStream): void;
|
|
244
|
+
/**
|
|
245
|
+
* 从录制器中删除流对象
|
|
246
|
+
* @param stream
|
|
247
|
+
*/
|
|
248
|
+
removeFromRecorder(stream: any): void;
|
|
249
|
+
/**
|
|
250
|
+
* 停止录制
|
|
251
|
+
*/
|
|
252
|
+
stopRecord(): Promise<void>;
|
|
253
|
+
/**
|
|
254
|
+
* 启用下一个录制分片
|
|
255
|
+
* @param filename - 下一分片文件名
|
|
256
|
+
*/
|
|
257
|
+
sliceRecord(filename: string, stream?: MediaStream, capture?: any): Promise<boolean | undefined>;
|
|
258
|
+
/**
|
|
259
|
+
* 启动说话人检测器
|
|
260
|
+
*/
|
|
261
|
+
startSpeakerDetector(): void;
|
|
262
|
+
addToDetector(speaker: BMSpeaker): void;
|
|
263
|
+
removeFromDetector(speakerId: string): void;
|
|
264
|
+
clearDetector(): void;
|
|
265
|
+
shareCustomMedia(enable: boolean, shareOptions: ShareMediaOptions): Promise<undefined>;
|
|
266
|
+
/**
|
|
267
|
+
* 根据videoElement 获取内部流数据
|
|
268
|
+
*/
|
|
269
|
+
getHTMLMediaStream: typeof getHTMLMediaStreamOptions;
|
|
270
|
+
getMediaStream: typeof getMediaStreamInfo;
|
|
271
|
+
/**
|
|
272
|
+
* 更新流信息 会给服务端发送updateStream信令,会收到updateStream的广播
|
|
273
|
+
*/
|
|
274
|
+
updateBloudStreamCustomStats(uid: string, streamId: string, streamInfo: StreamCustomInfo): Promise<void>;
|
|
275
|
+
/**
|
|
276
|
+
* 布局发生变化之后去调用一下这个方法去检测所有流的播放状态
|
|
277
|
+
* @param {string} status tag 用于区分是什么状态下调用的
|
|
278
|
+
*/
|
|
279
|
+
checkStreamStats(status: string): void;
|
|
280
|
+
clearCache(): void;
|
|
281
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @name: getHTMLMediaStreamOptions
|
|
3
|
+
* @author: yangliye
|
|
4
|
+
* @date: 2022-09-15 14:58
|
|
5
|
+
* @description:getHTMLMediaStreamOptions
|
|
6
|
+
* @update: 2022-09-15 14:58
|
|
7
|
+
*/
|
|
8
|
+
interface Options {
|
|
9
|
+
videoElement: HTMLVideoElement;
|
|
10
|
+
}
|
|
11
|
+
export interface Result {
|
|
12
|
+
video: boolean;
|
|
13
|
+
audio: boolean;
|
|
14
|
+
videoSource: MediaStreamTrack;
|
|
15
|
+
audioSource: MediaStreamTrack;
|
|
16
|
+
width: number;
|
|
17
|
+
height: number;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* 获取video标签中的mediaStream
|
|
21
|
+
* @param opts
|
|
22
|
+
*/
|
|
23
|
+
export declare function getHTMLMediaStreamOptions(opts: Options): Result | null;
|
|
24
|
+
export declare function getMediaStreamInfo(mediaStream: MediaStream, videoInfo: {
|
|
25
|
+
width: number;
|
|
26
|
+
height: number;
|
|
27
|
+
}): {
|
|
28
|
+
video: boolean;
|
|
29
|
+
audio: boolean;
|
|
30
|
+
videoSource: MediaStreamTrack;
|
|
31
|
+
audioSource: MediaStreamTrack;
|
|
32
|
+
width: number;
|
|
33
|
+
height: number;
|
|
34
|
+
} | null;
|
|
35
|
+
export {};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @name: sortStream
|
|
3
|
+
* @author: yangliye
|
|
4
|
+
* @date: 2023-04-18 11:40
|
|
5
|
+
* @description:sortStream
|
|
6
|
+
* @update: 2023-04-18 11:40
|
|
7
|
+
*/
|
|
8
|
+
export declare function getMasterSort(a: boolean, v: boolean): number;
|
|
9
|
+
/**
|
|
10
|
+
* 12 - 15
|
|
11
|
+
*/
|
|
12
|
+
export declare function getLocalSort(a: boolean, v: boolean): number;
|
|
13
|
+
/**
|
|
14
|
+
* 8 - 11
|
|
15
|
+
* @param a
|
|
16
|
+
* @param v
|
|
17
|
+
*/
|
|
18
|
+
export declare function getManagerSort(a: boolean, v: boolean): number;
|
|
19
|
+
/**
|
|
20
|
+
* 取值范围 4 - 7
|
|
21
|
+
* @param a
|
|
22
|
+
* @param v
|
|
23
|
+
*/
|
|
24
|
+
export declare function getGuestSort(a: boolean, v: boolean): number;
|
|
25
|
+
/**
|
|
26
|
+
* 取值范围 0 - 3
|
|
27
|
+
* @param a
|
|
28
|
+
* @param v
|
|
29
|
+
*/
|
|
30
|
+
export declare function getCommonSort(a: boolean, v: boolean): number;
|