trtc-sdk-v5 5.0.0-beta

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/index.d.ts ADDED
@@ -0,0 +1,1425 @@
1
+ /// <reference path="./core.d.ts" />
2
+
3
+ declare interface LocalVideoConfig {
4
+ view: string | HTMLElement | null;
5
+ publish?: boolean;
6
+ option?: {
7
+ cameraId?: string;
8
+ useFrontCamera?: boolean;
9
+ profile?: keyof typeof videoProfileMap | VideoProfile;
10
+ fillMode?: 'contain' | 'cover' | 'fill';
11
+ mirror?: boolean;
12
+ small?: keyof typeof videoProfileMap | VideoProfile;
13
+ qosPreference?: typeof TRTCType.QOS_PREFERENCE_SMOOTH | typeof TRTCType.QOS_PREFERENCE_CLEAR;
14
+ videoTrack?: MediaStreamTrack;
15
+ };
16
+ }
17
+ declare interface UpdateLocalVideoConfig extends Partial<LocalVideoConfig> {
18
+ mute?: boolean;
19
+ }
20
+ declare interface ProxyServer {
21
+ websocketProxy?: string;
22
+ loggerProxy?: string;
23
+ turnServer?: TurnServerOptions | TurnServerOptions[];
24
+ iceTransportPolicy?: RTCIceTransportPolicy;
25
+ webtransportProxy?: string;
26
+ }
27
+ declare interface EnterRoomConfig {
28
+ sdkAppId: number;
29
+ userId: string;
30
+ userSig: string;
31
+ roomId: number | string;
32
+ role?: UserRole;
33
+ autoReceiveAudio?: boolean;
34
+ autoReceiveVideo?: boolean;
35
+ privateMapKey?: string;
36
+ businessInfo?: string;
37
+ enableAutoPlayDialog?: boolean;
38
+ proxy?: ProxyServer | string;
39
+ scene?: Scene;
40
+ streamId?: string;
41
+ userDefineRecordId?: string;
42
+ }
43
+ declare interface ScreenShareConfig {
44
+ view?: string | HTMLElement | null;
45
+ publish?: boolean;
46
+ option?: {
47
+ profile?: keyof typeof screenProfileMap | VideoProfile;
48
+ fillMode?: 'contain' | 'cover' | 'fill';
49
+ systemAudio?: boolean;
50
+ echoCancellation?: boolean;
51
+ autoGainControl?: boolean;
52
+ noiseSuppression?: boolean;
53
+ audioTrack?: MediaStreamTrack;
54
+ videoTrack?: MediaStreamTrack;
55
+ qosPreference?: typeof TRTCType.QOS_PREFERENCE_SMOOTH | typeof TRTCType.QOS_PREFERENCE_CLEAR;
56
+ };
57
+ }
58
+ declare interface UpdateScreenShareConfig extends ScreenShareConfig {
59
+ option?: {
60
+ fillMode?: 'contain' | 'cover' | 'fill';
61
+ qosPreference?: typeof TRTCType.QOS_PREFERENCE_SMOOTH | typeof TRTCType.QOS_PREFERENCE_CLEAR;
62
+ };
63
+ }
64
+ declare interface RemoteVideoConfig {
65
+ view: string | HTMLElement | null;
66
+ userId: string;
67
+ streamType: TRTCStreamType;
68
+ option?: {
69
+ fillMode?: 'contain' | 'cover' | 'fill';
70
+ mirror?: boolean;
71
+ small?: boolean;
72
+ };
73
+ }
74
+ declare interface UpdateRemoteVideoConfig extends Omit<RemoteVideoConfig, 'view'> {
75
+ view?: string | HTMLElement | null;
76
+ }
77
+ declare interface StopRemoteVideoConfig {
78
+ userId: string;
79
+ streamType?: TRTCStreamType;
80
+ }
81
+ declare interface LocalAudioConfig {
82
+ publish?: boolean;
83
+ option?: {
84
+ microphoneId?: string;
85
+ profile?: keyof typeof audioProfileMap;
86
+ audioTrack?: MediaStreamTrack;
87
+ captureVolume?: number;
88
+ earMonitorVolume?: number;
89
+ echoCancellation?: boolean;
90
+ autoGainControl?: boolean;
91
+ noiseSuppression?: boolean;
92
+ };
93
+ }
94
+ declare interface UpdateLocalAudioConfig extends LocalAudioConfig {
95
+ mute?: boolean;
96
+ option?: {
97
+ microphoneId?: string;
98
+ audioTrack?: MediaStreamTrack;
99
+ captureVolume?: number;
100
+ earMonitorVolume?: number;
101
+ };
102
+ }
103
+ declare interface RemoteAudioConfig {
104
+ userId: string;
105
+ option?: {
106
+ volume?: number;
107
+ };
108
+ }
109
+ declare interface StopRemoteAudioConfig {
110
+ userId: string;
111
+ }
112
+ declare const enum TRTCStreamType {
113
+ Main = "main",
114
+ Sub = "sub"
115
+ }
116
+ declare interface TRTCMixUser extends Omit<MixUser, 'streamType'> {
117
+ streamType?: TRTCStreamType;
118
+ }
119
+ declare interface TRTCMixTranscodeConfig extends Omit<MixTranscodeConfig, 'mixUsers'> {
120
+ mixUsers: TRTCMixUser[];
121
+ }
122
+ declare interface TRTCPublishCDNParam extends Omit<PublishCDNStreamOptions, 'streamType'> {
123
+ streamType?: TRTCStreamType;
124
+ }
125
+ declare enum TRTCDeviceType {
126
+ Camera = "camera",
127
+ Microphone = "microphone",
128
+ Speaker = "speaker"
129
+ }
130
+ declare enum TRTCDeviceAction {
131
+ Remove = "remove",
132
+ Add = "add",
133
+ Active = "active"
134
+ }
135
+ declare interface RTCErrorParams {
136
+ code: number;
137
+ extraCode?: number;
138
+ functionName?: string;
139
+ fnName?: string;
140
+ message?: string;
141
+ messageParams?: any;
142
+ originError?: Error | DOMException;
143
+ }
144
+ declare interface RTCErrorInterface {
145
+ readonly name: string;
146
+ readonly code: number;
147
+ readonly extraCode?: number;
148
+ readonly functionName?: string;
149
+ readonly message?: string;
150
+ readonly originError?: Error | DOMException;
151
+ }
152
+ declare interface ErrorMessageParams {
153
+ key?: string;
154
+ rule?: any;
155
+ fnName?: string;
156
+ fnParams?: any;
157
+ value?: string | number | any;
158
+ type?: string;
159
+ deviceType?: string;
160
+ error?: Error | DOMException | CoreError;
161
+ }
162
+ /**
163
+ * **TRTC 常量**<br>
164
+ * @module TYPE
165
+ * @example
166
+ * // 使用方式:
167
+ * TRTC.TYPE.SCENE_LIVE
168
+ */
169
+ declare const TRTCType: {
170
+ /**
171
+ * 直播场景
172
+ * @default 'live'
173
+ * @memberof module:TYPE
174
+ */
175
+ readonly SCENE_LIVE: Scene.LIVE;
176
+ /**
177
+ * 通话场景
178
+ * @default 'rtc'
179
+ * @memberof module:TYPE
180
+ */
181
+ readonly SCENE_RTC: Scene.RTC;
182
+ /**
183
+ * 主播角色
184
+ * @default 'anchor'
185
+ * @memberof module:TYPE
186
+ */
187
+ readonly ROLE_ANCHOR: UserRole.ANCHOR;
188
+ /**
189
+ * 观众角色
190
+ * @default 'audience'
191
+ * @memberof module:TYPE
192
+ */
193
+ readonly ROLE_AUDIENCE: UserRole.AUDIENCE;
194
+ /**
195
+ * 主流
196
+ *
197
+ * - TRTC 有主路视频流(主流)和辅路视频流(辅流)
198
+ * - 摄像头通过主流发布,屏幕分享通过辅流发布,一个房间内只能有一路辅流。
199
+ * - 主路视频流包括:高清大画面和低清小画面两种,默认情况下,{@link TRTC#startRemoteVideo TRTC.startRemoteVideo} 播放的是高清大画面,可以通过 small 参数播放低清小画面,参考:[开启大小流功能](./tutorial-27-advanced-small-stream.html)。
200
+ * @default 'main'
201
+ * @memberof module:TYPE
202
+ */
203
+ readonly STREAM_TYPE_MAIN: TRTCStreamType.Main;
204
+ /**
205
+ * 辅流
206
+ * @default 'sub'
207
+ * @memberof module:TYPE
208
+ */
209
+ readonly STREAM_TYPE_SUB: TRTCStreamType.Sub;
210
+ /**
211
+ * 标准音质
212
+ * | 音频 Profile | 采样率 | 声道 | 码率 (kbps) |
213
+ * | :--- | :--- | :--- | :--- |
214
+ * | TRTC.TYPE.AUDIO_PROFILE_STANDARD | 48000 | 单声道| 40 |
215
+ * | TRTC.TYPE.AUDIO_PROFILE_HIGH | 48000 | 单声道| 128 |
216
+ * | TRTC.TYPE.AUDIO_PROFILE_STANDARD_STEREO | 48000 | 双声道| 64 |
217
+ * | TRTC.TYPE.AUDIO_PROFILE_HIGH_STEREO | 48000 | 双声道| 192 |
218
+ * @default 'standard'
219
+ * @memberof module:TYPE
220
+ */
221
+ readonly AUDIO_PROFILE_STANDARD: "standard";
222
+ /**
223
+ * 标准音质立体声
224
+ * | 音频 Profile | 采样率 | 声道 | 码率 (kbps) |
225
+ * | :--- | :--- | :--- | :--- |
226
+ * | TRTC.TYPE.AUDIO_PROFILE_STANDARD | 48000 | 单声道| 40 |
227
+ * | TRTC.TYPE.AUDIO_PROFILE_HIGH | 48000 | 单声道| 128 |
228
+ * | TRTC.TYPE.AUDIO_PROFILE_STANDARD_STEREO | 48000 | 双声道| 64 |
229
+ * | TRTC.TYPE.AUDIO_PROFILE_HIGH_STEREO | 48000 | 双声道| 192 |
230
+ * @default 'standard-stereo'
231
+ * @memberof module:TYPE
232
+ */
233
+ readonly AUDIO_PROFILE_STANDARD_STEREO: "standard-stereo";
234
+ /**
235
+ * 高音质
236
+ * | 音频 Profile | 采样率 | 声道 | 码率 (kbps) |
237
+ * | :--- | :--- | :--- | :--- |
238
+ * | TRTC.TYPE.AUDIO_PROFILE_STANDARD | 48000 | 单声道| 40 |
239
+ * | TRTC.TYPE.AUDIO_PROFILE_HIGH | 48000 | 单声道| 128 |
240
+ * | TRTC.TYPE.AUDIO_PROFILE_STANDARD_STEREO | 48000 | 双声道| 64 |
241
+ * | TRTC.TYPE.AUDIO_PROFILE_HIGH_STEREO | 48000 | 双声道| 192 |
242
+ * @default 'high'
243
+ * @memberof module:TYPE
244
+ */
245
+ readonly AUDIO_PROFILE_HIGH: "high";
246
+ /**
247
+ * 高音质立体声
248
+ * | 音频 Profile | 采样率 | 声道 | 码率 (kbps) |
249
+ * | :--- | :--- | :--- | :--- |
250
+ * | TRTC.TYPE.AUDIO_PROFILE_STANDARD | 48000 | 单声道| 40 |
251
+ * | TRTC.TYPE.AUDIO_PROFILE_HIGH | 48000 | 单声道| 128 |
252
+ * | TRTC.TYPE.AUDIO_PROFILE_STANDARD_STEREO | 48000 | 双声道| 64 |
253
+ * | TRTC.TYPE.AUDIO_PROFILE_HIGH_STEREO | 48000 | 双声道| 192 |
254
+ * @default 'high-stereo'
255
+ * @memberof module:TYPE
256
+ */
257
+ readonly AUDIO_PROFILE_HIGH_STEREO: "high-stereo";
258
+ /**
259
+ * 弱网时,视频编码策略以流畅度优先,即优先保帧率。
260
+ * 摄像头默认流畅度优先,屏幕分享默认清晰度优先。
261
+ * @default 'smooth'
262
+ * @memberof module:TYPE
263
+ */
264
+ readonly QOS_PREFERENCE_SMOOTH: "smooth";
265
+ /**
266
+ * 弱网时,视频编码策略以清晰度优先,即优先保分辨率。
267
+ * 摄像头默认流畅度优先,屏幕分享默认清晰度优先。
268
+ * @default 'clear'
269
+ * @memberof module:TYPE
270
+ */
271
+ readonly QOS_PREFERENCE_CLEAR: "clear";
272
+ };
273
+
274
+ /**
275
+ * **TRTC事件列表**<br>
276
+ * <br>
277
+ * 通过 {@link TRTC#on trtc.on(TRTC.EVENT.XXX)} 监听指定的事件。您可以通过这些事件实现管理房间用户列表,以及管理用户的流状态,感知网络状态等功能,下面是事件的详细介绍。
278
+ * > !
279
+ * > - 事件需要在事件触发之前监听,这样才能收到相应的事件通知,因此建议在 trtc 进房前完成事件监听,这样才能确保不会漏掉事件通知。
280
+ * @module EVENT
281
+ * @example
282
+ * // 使用方式:
283
+ * trtc.on(TRTC.EVENT.ERROR, () => {});
284
+ */
285
+ declare const TRTCEvent: {
286
+ /**
287
+ * 错误事件,非 API 调用错误,SDK 在运行过程中出现了不可恢复的错误时抛出。
288
+ *
289
+ * - 错误码(error.code)为:{@link module:ERROR_CODE.OPERATION_FAILED ErrorCode.OPERATION_FAILED}
290
+ * - 可能的扩展错误码(error.extraCode):5501, 5502
291
+ * @default 'error'
292
+ * @memberof module:EVENT
293
+ * @see {@link RtcError RtcError}
294
+ * @e
295
+ * @example
296
+ *
297
+ * trtc.on(TRTC.EVENT.ERROR, error => {
298
+ * console.error('client error observed: ' + error);
299
+ * const errorCode = error.code;
300
+ * const extraCode = error.extraCode;
301
+ * });
302
+ */
303
+ readonly ERROR: "error";
304
+ /**
305
+ * @description 自动播放失败,参考 [自动播放处理建议](https://web.sdk.qcloud.com/trtc/webrtc/v5/doc/zh-cn/tutorial-21-advanced-auto-play-policy.html)
306
+ * @default 'autoplay-failed'
307
+ * @memberof module:EVENT
308
+ * @example
309
+ * trtc.on(TRTC.EVENT.AUTOPLAY_FAILED, event => {
310
+ * // 引导用户进行页面交互
311
+ * });
312
+ */
313
+ readonly AUTOPLAY_FAILED: "autoplay-failed";
314
+ /**
315
+ * @description 由于某种原因被踢出房间,包括kick:相同用户进房,banned:被管理员踢出,room_disband:房间被解散。
316
+ * @default 'kicked-out'
317
+ * @memberof module:EVENT
318
+ * @example
319
+ *
320
+ * trtc.on(TRTC.EVENT.KICKED_OUT, event => {
321
+ * console.log(event.reason)
322
+ * });
323
+ */
324
+ readonly KICKED_OUT: "kicked-out";
325
+ /**
326
+ * 远端用户进房事件。
327
+ *
328
+ * - `live` 模式下,只有主播才有进退房通知,观众没有进退房通知,观众可以收到主播的进退房通知。
329
+ * @default 'remote-user-enter'
330
+ * @memberof module:EVENT
331
+ * @example
332
+ *
333
+ * trtc.on(TRTC.EVENT.REMOTE_USER_ENTER, event => {
334
+ * const userId = event.userId;
335
+ * });
336
+ */
337
+ readonly REMOTE_USER_ENTER: "remote-user-enter";
338
+ /**
339
+ * 远端用户退房事件。
340
+ *
341
+ * - `live` 模式下,只有主播才有进退房通知,观众没有进退房通知,观众可以收到主播的进退房通知。
342
+ * @default 'remote-user-exit'
343
+ * @memberof module:EVENT
344
+ * @example
345
+ *
346
+ * trtc.on(TRTC.EVENT.REMOTE_USER_EXIT, event => {
347
+ * const userId = event.userId;
348
+ * });
349
+ */
350
+ readonly REMOTE_USER_EXIT: "remote-user-exit";
351
+ /**
352
+ * 远端用户发布了音频。当远端用户打开麦克风后,您会收到该通知。参考:[开关摄像头、麦克风](./tutorial-15-basic-dynamic-add-video.html)
353
+ *
354
+ * - 默认情况下,SDK 会自动播放远端音频,您无需调用 API 来播放远端音频。可以监听该事件及 {@link module:EVENT.REMOTE_AUDIO_UNAVAILABLE REMOTE_AUDIO_UNAVAILABLE} 来更新“远端是否开启麦克风”的 UI icon。
355
+ * - 需要注意的是:如果用户在进房前没有与页面产生过交互,自动播放音频可能会因为【浏览器的自动播放策略限制】而失败,您需参考[自动播放受限处理建议](./tutorial-21-advanced-auto-play-policy.html)进行处理。
356
+ * - 若您不希望 SDK 自动播放音频,您可以在 {@link TRTC#enterRoom trtc.enterRoom()} 时设置 receiveMode = {@link module:TYPE.RECEIVE_MODE_MANUAL TRTC.TYPE.RECEIVE_MODE_MANUAL} 关闭自动播放音频。
357
+ * - 监听 {@link module:EVENT.REMOTE_AUDIO_AVAILABLE TRTC.EVENT.REMOTE_AUDIO_AVAILABLE} 事件,记录有远端音频的 userId,在需要播放音频时,调用 {@link TRTC#muteRemoteAudio trtc.muteRemoteAudio(userId, false)} 方法。
358
+ * @default 'remote-audio-available'
359
+ * @memberof module:EVENT
360
+ * @example
361
+ * // 在进房前监听
362
+ * trtc.on(TRTC.EVENT.REMOTE_AUDIO_AVAILABLE, event => {
363
+ * const userId = event.userId;
364
+ * });
365
+ */
366
+ readonly REMOTE_AUDIO_AVAILABLE: "remote-audio-available";
367
+ /**
368
+ * 远端停止发布了音频。当远端用户关闭麦克风后,您会收到该通知。
369
+ *
370
+ * @default 'remote-audio-unavailable'
371
+ * @memberof module:EVENT
372
+ * @example
373
+ * // 在进房前监听
374
+ * trtc.on(TRTC.EVENT.REMOTE_AUDIO_UNAVAILABLE, event => {
375
+ * const userId = event.userId;
376
+ *
377
+ * });
378
+ */
379
+ readonly REMOTE_AUDIO_UNAVAILABLE: "remote-audio-unavailable";
380
+ /**
381
+ * 远端用户发布了视频,当远端用户开启摄像头后,您会收到该通知。参考:[开关摄像头、麦克风](./tutorial-15-basic-dynamic-add-video.html)
382
+ *
383
+ * - 可以监听该事件及 {@link module:EVENT.REMOTE_VIDEO_UNAVAILABLE REMOTE_VIDEO_UNAVAILABLE} 来更新“远端是否开启摄像头”的 UI icon。
384
+ * @see {@link module:TYPE.STREAM_TYPE_MAIN STREAM_TYPE_MAIN}
385
+ * @see {@link module:TYPE.STREAM_TYPE_SUB STREAM_TYPE_SUB}
386
+ * @default 'remote-video-available'
387
+ * @memberof module:EVENT
388
+ * @example
389
+ * // 在进房前监听
390
+ * trtc.on(TRTC.EVENT.REMOTE_VIDEO_AVAILABLE, event => {
391
+ * const userId = event.userId;
392
+ * const streamType = event.streamType;
393
+ * trtc.startRemoteVideo({userId, streamType, view});
394
+ * });
395
+ */
396
+ readonly REMOTE_VIDEO_AVAILABLE: "remote-video-available";
397
+ /**
398
+ * 远端用户停止发布视频,当远端用户关闭摄像头后,您会收到该通知。
399
+ * @default 'remote-video-unavailable'
400
+ * @memberof module:EVENT
401
+ * @example
402
+ * // 在进房前监听
403
+ * trtc.on(TRTC.EVENT.REMOTE_VIDEO_UNAVAILABLE, event => {
404
+ * const userId = event.userId;
405
+ * const streamType = event.streamType;
406
+ * // 此时 SDK 会自动停止播放,无需调用 stopRemoteVideo。
407
+ * });
408
+ */
409
+ readonly REMOTE_VIDEO_UNAVAILABLE: "remote-video-unavailable";
410
+ /**
411
+ * @description 音量大小事件<br>
412
+ * 调用 {@link Client#enableAudioVolumeEvaluation enableAudioVolumeEvaluation} 接口开启音量大小回调后,SDK 会定时抛出该事件,通知每个 userId 的音量大小。<br>
413
+ * **Note**
414
+ * - 回调中包含本地麦克风音量及远端用户的音量,无论是否有人说话,都会触发该回调。
415
+ * - 回调 event.result 会根据音量大小,按大到小进行排序。
416
+ * - 当 userId 为空串时,代表本地麦克风音量。
417
+ * - volume 取值为0-100的正整数
418
+ * @default 'audio-volume'
419
+ * @memberof module:EVENT
420
+ * @example
421
+ * trtc.on(TRTC.EVENT.AUDIO_VOLUME, event => {
422
+ * event.result.forEach(({ userId, volume }) => {
423
+ * const isMe = userId === ''; // 当 userId 为空串时,代表本地麦克风音量。
424
+ * if (isMe) {
425
+ * console.log(`my volume: ${volume}`);
426
+ * } else {
427
+ * console.log(`user: ${userId} volume: ${volume}`);
428
+ * }
429
+ * })
430
+ * });
431
+ *
432
+ * // 开启音量回调,并设置每 1000ms 触发一次事件
433
+ * trtc.enableAudioVolumeEvaluation(1000);
434
+ */
435
+ readonly AUDIO_VOLUME: "audio-volume";
436
+ /**
437
+ * @description 网络质量统计数据事件,进房后开始统计,每两秒触发一次,该数据反映的是您本地的上、下行的网络质量。
438
+ * - 上行网络质量(uplinkNetworkQuality)指的是您上传本地流的网络情况(SDK 到腾讯云的上行连接网络质量)
439
+ * - 下行网络质量(downlinkNetworkQuality)指的是您下载所有流的平均网络情况(腾讯云到 SDK 的所有下行连接的平均网络质量)
440
+ *
441
+ * 其枚举值及含义如下表所示:
442
+ * | 数值 | 含义 |
443
+ * | :--- | :---- |
444
+ * | 0 | 网络状况未知,表示当前 client 实例还没有建立上行/下行连接 |
445
+ * | 1 | 网络状况极佳 |
446
+ * | 2 | 网络状况较好|
447
+ * | 3 | 网络状况一般 |
448
+ * | 4 | 网络状况差 |
449
+ * | 5 | 网络状况极差 |
450
+ * | 6 | 网络连接已断开<br/>注意:若下行网络质量为此值,则表示所有下行连接都断开了 |
451
+ * - uplinkRTT,uplinkLoss 为上行 RTT(ms) 及上行丢包率。
452
+ * - downlinkRTT,downlinkLoss 为所有下行连接的平均 RTT(ms) 及平均丢包率。
453
+ *
454
+ * **Note**
455
+ * - 如果您想知道对方的上下行网络情况,需要把对方的网络质量情况通过 IM 广播出去。
456
+ *
457
+ * @default 'network-quality'
458
+ * @memberof module:EVENT
459
+ * @example
460
+ * trtc.on(TRTC.EVENT.NETWORK_QUALITY, event => {
461
+ * console.log(`network-quality, uplinkNetworkQuality:${event.uplinkNetworkQuality}, downlinkNetworkQuality: ${event.downlinkNetworkQuality}`)
462
+ * console.log(`uplink rtt:${event.uplinkRTT} loss:${event.uplinkLoss}`)
463
+ * console.log(`downlink rtt:${event.downlinkRTT} loss:${event.downlinkLoss}`)
464
+ * })
465
+ */
466
+ readonly NETWORK_QUALITY: "network-quality";
467
+ /**
468
+ * @description SDK 和腾讯云的连接状态变更事件,您可以利用该事件从总体上监听 SDK 与腾讯云的连接状态。<br>
469
+ * - 'DISCONNECTED':连接断开
470
+ * - 'CONNECTING':正在连接中
471
+ * - 'CONNECTED':已连接
472
+ *
473
+ * 不同状态变更的含义:
474
+ *
475
+ * - DISCONNECTED -> CONNECTING: 正在尝试建立连接,调用进房接口或者 SDK 自动重连时触发。
476
+ * - CONNECTING -> DISCONNECTED: 连接建立失败,当正在连接时调用退房接口中断连接或者经过 SDK 重试后任然连接失败时触发。
477
+ * - CONNECTING -> CONNECTED: 连接建立成功,连接成功时触发。
478
+ * - CONNECTED -> DISCONNECTED: 连接中断,调用退房接口或者当网络异常导致连接断开时触发。
479
+ *
480
+ * 处理建议:可以监听该事件,在不同状态显示不同的 UI,提醒用户当前的连接状态。
481
+ *
482
+ * @default 'connection-state-changed'
483
+ * @memberof module:EVENT
484
+ * @example
485
+ * client.on(TRTC.CONNECTION_STATE_CHANGED, event => {
486
+ * const prevState = event.prevState;
487
+ * const curState = event.state;
488
+ * });
489
+ */
490
+ readonly CONNECTION_STATE_CHANGED: "connection-state-changed";
491
+ /**
492
+ * @description 音频播放状态变更事件
493
+ *
494
+ * event.userId 当 userId 为空串时,代表本地用户,非空串代表远端用户。
495
+ *
496
+ * event.state 取值如下:
497
+ * - 'PLAYING':开始播放
498
+ * - event.reason 为 'playing' 或者 'unmute'。
499
+ * - 'PAUSED':暂停播放
500
+ * - event.reason 为 'pause' 时,由 \<audio\> element 的 pause 事件触发,如下几种情况会触发:
501
+ * - 调用 HTMLMediaElement.pause 接口。
502
+ * - event.reason 为 'mute' 时。详见事件 {@link https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack/mute_event | MediaStreamTrack.mute_event}
503
+ * - 若 userId 为自己时 触发该事件,表明音频采集暂停,通常是设备异常引起,如设备被其他应用抢占,此时需引导用户重新采集。
504
+ * - 若 userId 为他人时 触发该事件,表明收到的音频数据不足以播放。通常是网络抖动引起,接入侧无需做任何处理。当收到的数据足以播放时,会自动恢复。
505
+ * - 'STOPPED':停止播放
506
+ * - event.reason 为 'ended'。
507
+ *
508
+ * event.reason 状态变化的原因,取值如下:
509
+ * - 'playing':开始播放,详见事件 {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/playing_event | HTMLMediaElement.playing_event}
510
+ * - 'mute':音频轨道暂时未能提供数据,详见事件 {@link https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack/mute_event | MediaStreamTrack.mute_event}
511
+ * - 'unmute':音频轨道恢复提供数据,详见事件 {@link https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack/unmute_event | MediaStreamTrack.unmute_event}
512
+ * - 'ended':音频轨道已被关闭
513
+ * - 'pause':播放暂停
514
+ * @default 'audio-play-state-changed'
515
+ * @memberof module:EVENT
516
+ * @example
517
+ * trtc.on(TRTC.EVENT.AUDIO_PLAY_STATE_CHANGED, event => {
518
+ * console.log(`${event.userId} player is ${event.state} because of ${event.reason}`);
519
+ * });
520
+ */
521
+ readonly AUDIO_PLAY_STATE_CHANGED: "audio-play-state-changed";
522
+ /**
523
+ * @description 视频播放状态变更事件
524
+ *
525
+ * event.userId 当 userId 为空串时,代表本地用户,非空串代表远端用户。
526
+ *
527
+ * event.streamType 流类型,取值:{@link module:TYPE.STREAM_TYPE_MAIN TRTC.TYPE.STREAM_TYPE_MAIN} {@link module:TYPE.STREAM_TYPE_SUB TRTC.TYPE.STREAM_TYPE_SUB}
528
+ *
529
+ * event.state 取值如下:
530
+ * - 'PLAYING':开始播放
531
+ * - event.reason 为 'playing' 或者 'unmute'。
532
+ * - 'PAUSED':暂停播放
533
+ * - event.reason 为 'pause' 时,由 \<video\> element 的 pause 事件触发,如下几种情况会触发:
534
+ * - 调用 HTMLMediaElement.pause 接口。
535
+ * - 在播放成功后,从 DOM 中移除了播放视频的 view 容器。
536
+ * - event.reason 为 'mute' 时。详见事件 {@link https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack/mute_event | MediaStreamTrack.mute_event}
537
+ * - 若 userId 为自己时 触发该事件,表明视频采集暂停,通常是设备异常引起,如设备被其他应用抢占,此时需引导用户重新采集。
538
+ * - 若 userId 为他人时 触发该事件,表明收到的视频数据不足以播放。通常是网络抖动引起,接入侧无需做任何处理。当收到的数据足以播放时,会自动恢复。
539
+ * - 'STOPPED':停止播放
540
+ * - event.reason 为 'ended'。
541
+ *
542
+ * event.reason 状态变化的原因,取值如下:
543
+ * - 'playing':开始播放,详见事件 {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/playing_event | HTMLMediaElement.playing_event}
544
+ * - 'mute':视频轨道暂时未能提供数据,详见事件 {@link https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack/mute_event | MediaStreamTrack.mute_event}
545
+ * - 'unmute':视频轨道恢复提供数据,详见事件 {@link https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack/unmute_event | MediaStreamTrack.unmute_event}
546
+ * - 'ended':视频轨道已被关闭
547
+ * - 'pause':播放暂停
548
+ * @default 'video-play-state-changed'
549
+ * @memberof module:EVENT
550
+ * @example
551
+ * trtc.on(TRTC.EVENT.VIDEO_PLAY_STATE_CHANGED, event => {
552
+ * console.log(`${event.userId} ${event.streamType} video player is ${event.state} because of ${event.reason}`);
553
+ * });
554
+ */
555
+ readonly VIDEO_PLAY_STATE_CHANGED: "video-play-state-changed";
556
+ /**
557
+ * @description 本地屏幕分享停止事件通知,仅对本地屏幕分享流有效。
558
+ * @default 'screen-sharing-stopped'
559
+ * @memberof module:EVENT
560
+ * @example
561
+ * trtc.on(TRTC.EVENT.SCREEN_SHARE_STOPPED, () => {
562
+ * console.log('screen sharing was stopped');
563
+ * });
564
+ */
565
+ readonly SCREEN_SHARE_STOPPED: "screen-share-stopped";
566
+ /**
567
+ * @description 摄像头、麦克风等设备变化的通知事件。
568
+ * - event.device 是一个 [MediaDeviceInfo](https://developer.mozilla.org/en-US/docs/Web/API/MediaDeviceInfo) 对象,属性:
569
+ * - deviceId:设备 Id
570
+ * - label:设备描述信息
571
+ * - groupId:设备 groupId
572
+ * - event.type 值:`'camera'|'microphone'|'speaker'`
573
+ * - event.action 值:
574
+ * - 'add' 设备已添加。
575
+ * - 'remove' 设备已被移除。
576
+ * - 'active' 设备已启动,例如:startLocalVideo 成功后,会触发该事件。
577
+ * @default 'device-changed'
578
+ * @memberof module:EVENT
579
+ * @example
580
+ * trtc.on(TRTC.EVENT.DEVICE_CHANGED, (event) => {
581
+ * console.log(`${event.type}(${event.device.label}) ${event.action}`);
582
+ * });
583
+ */
584
+ readonly DEVICE_CHANGED: "device-changed";
585
+ /**
586
+ * @description 推流状态变更事件。
587
+ * - event.mediaType 媒体类型,值:`'audio'|'video'|'screen'`。
588
+ * - event.state 当前的推流状态,值:
589
+ * - `'starting'` 正在尝试推流
590
+ * - `'started'` 推流成功
591
+ * - `'stopped'` 推流停止,原因见 event.reason 字段
592
+ * - event.prevState 上一次事件触发时的推流状态,值和 event.state 相同。
593
+ * - event.reason 推流状态变为 `'stopped'` 的原因,值:
594
+ * - `'timeout'` 推流超时,一般是由于网络抖动、防火墙拦截导致。SDK 会不断进行重试,业务侧可以在此时引导用户检查网络、更换网络。
595
+ * - `'error'` 推流出错,此时可从 event.error 中获取到具体错误信息,一般是由于浏览器不支持 H264 编码导致。
596
+ * - `'api-call'` 业务侧 api 调用导致推流停止,例如在 startLocalVideo 推流成功前,调用了 stopLocalVideo 停止了推流,属于正常行为,业务侧无需关注。
597
+ * - event.error event.reason 为 `'error'` 时的错误信息。
598
+ * @default 'publish-state-changed'
599
+ * @memberof module:EVENT
600
+ * @example
601
+ * trtc.on(TRTC.EVENT.PUBLISH_STATE_CHANGED, (event) => {
602
+ * console.log(`${event.mediaType} ${event.state} ${event.reason}`);
603
+ * });
604
+ */
605
+ readonly PUBLISH_STATE_CHANGED: "publish-state-changed";
606
+ };
607
+ declare interface TRTCEventTypes {
608
+ [TRTCEvent.ERROR]: [RtcError];
609
+ [TRTCEvent.AUTOPLAY_FAILED]: [];
610
+ [TRTCEvent.KICKED_OUT]: [{
611
+ reason: Exclude<BannedReason, 'user_time_out'>;
612
+ }];
613
+ [TRTCEvent.REMOTE_USER_ENTER]: [{
614
+ userId: string;
615
+ }];
616
+ [TRTCEvent.REMOTE_USER_EXIT]: [{
617
+ userId: string;
618
+ }];
619
+ [TRTCEvent.REMOTE_AUDIO_AVAILABLE]: [{
620
+ userId: string;
621
+ }];
622
+ [TRTCEvent.REMOTE_AUDIO_UNAVAILABLE]: [{
623
+ userId: string;
624
+ }];
625
+ [TRTCEvent.REMOTE_VIDEO_AVAILABLE]: [{
626
+ userId: string;
627
+ streamType: TRTCStreamType;
628
+ }];
629
+ [TRTCEvent.REMOTE_VIDEO_UNAVAILABLE]: [{
630
+ userId: string;
631
+ streamType: TRTCStreamType;
632
+ }];
633
+ [TRTCEvent.AUDIO_VOLUME]: [{
634
+ result: {
635
+ userId: string;
636
+ volume: number;
637
+ }[];
638
+ }];
639
+ [TRTCEvent.NETWORK_QUALITY]: [NetworkQuality];
640
+ [TRTCEvent.CONNECTION_STATE_CHANGED]: [{
641
+ prevState: ConnectionState;
642
+ state: ConnectionState;
643
+ }];
644
+ [TRTCEvent.AUDIO_PLAY_STATE_CHANGED]: [{
645
+ userId: string;
646
+ state: PlayerState;
647
+ reason: string;
648
+ }];
649
+ [TRTCEvent.VIDEO_PLAY_STATE_CHANGED]: [{
650
+ userId: string;
651
+ streamType: TRTCStreamType;
652
+ state: PlayerState;
653
+ reason: string;
654
+ }];
655
+ [TRTCEvent.SCREEN_SHARE_STOPPED]: [];
656
+ [TRTCEvent.DEVICE_CHANGED]: [{
657
+ type: TRTCDeviceType;
658
+ action: TRTCDeviceAction;
659
+ device: DeviceInfo;
660
+ }];
661
+ [TRTCEvent.PUBLISH_STATE_CHANGED]: [
662
+ {
663
+ mediaType: 'audio' | 'video' | 'screen';
664
+ state: 'started' | 'stopped' | 'starting';
665
+ prevState: 'started' | 'stopped' | 'starting';
666
+ reason?: 'timeout' | 'error' | 'api-call';
667
+ error?: RtcError;
668
+ }
669
+ ];
670
+ }
671
+ class TRTC extends EventEmitter<TRTCEventTypes> {
672
+ /**
673
+ * 创建一个 TRTC 对象,用于实现进房、预览、推流、拉流等功能。<br>
674
+ *
675
+ * **注意:**
676
+ * - 您必须先创建 TRTC 对象,通过调用此对象方法和监听此对象事件才能实现业务所需要的各种功能。
677
+ * @example
678
+ * // 创建trtc对象
679
+ * const trtc = TRTC.create();
680
+ *
681
+ * @returns {TRTC} trtc对象
682
+ */
683
+ static create(): TRTC;
684
+ /**
685
+ * @typedef TurnServer
686
+ * @property {string} url TURN 服务器 url
687
+ * @property {string=} username TURN 服务器验证用户名
688
+ * @property {string=} credential TURN 服务器验证密码
689
+ * @property {string=} [credentialType=password] TURN 服务器验证密码类型
690
+ */
691
+ /**
692
+ * @typedef ProxyServer
693
+ * @property {string} [websocketProxy] websocket 信令服务代理
694
+ * @property {string} [loggerProxy] 日志上报服务代理
695
+ * @property {TurnServer[]} [turnServer] 音视频数据传输代理
696
+ * @property {'all'|'relay'} [iceTransportPolicy='all'] 'all' 优先直连 TRTC,连不通时尝试走 turn server。<br>
697
+ * 'relay' 强制走 turn server。
698
+ */
699
+ /**
700
+ * 进入一个音视频通话房间(以下简称"进房")。<br>
701
+ * - 进房代表开始一个音视频通话会话,只有进房成功后才能和房间内的其他用户进行音视频通话。
702
+ * - 可以通过 {@link TRTC#startLocalVideo startLocalVideo()} 和 {@link TRTC#startLocalAudio startLocalAudio()}发布本地音视频流,发布成功后,房间内其他用户会收到
703
+ * {@link module:EVENT.REMOTE_AUDIO_AVAILABLE REMOTE_AUDIO_AVAILABLE} 和 {@link module:EVENT.REMOTE_VIDEO_AVAILABLE REMOTE_VIDEO_AVAILABLE} 事件通知。
704
+ * - 默认情况下 SDK 会自动播放远端音频,您需要在调用 {@link TRTC#startRemoteVideo startRemoteVideo()} 来播放远端视频画面。
705
+ *
706
+ * @param {object} options 进房参数
707
+ * @param {number} options.sdkAppId sdkAppId <br>
708
+ * 在 [实时音视频控制台](https://console.cloud.tencent.com/trtc) 单击 **应用管理** > **创建应用** 创建新应用之后,即可在 **应用信息** 中获取 sdkAppId 信息。
709
+ * @param {string} options.userId 用户ID <br>
710
+ * 建议限制长度为32字节,只允许包含大小写英文字母(a-zA-Z)、数字(0-9)及下划线和连词符。
711
+ * @param {string} options.userSig userSig 签名 <br>
712
+ * 计算 userSig 的方式请参考 [UserSig 相关](https://cloud.tencent.com/document/product/647/17275)。
713
+ * @param {number|string} options.roomId
714
+ * roomId 为 number 类型时,取值要求为 [1, 4294967294] 的整数;<br>
715
+ * roomId 为 string 类型时,限制长度为64字节,且仅支持以下范围的字符集:
716
+ * - 大小写英文字母(a-zA-Z)
717
+ * - 数字(0-9)
718
+ * - 空格 ! # $ % & ( ) + - : ; < = . > ? @ [ ] ^ _ { } | ~ ,
719
+ *
720
+ * <font color="red">注意:建议采用数字类型的 roomId,字符串类型的房间号 "123" 与 数字类型的房间号 123 不互通。</font>
721
+ * @param {string} [options.scene] 应用场景,目前支持以下两种场景:
722
+ * - {@link module:TYPE.SCENE_RTC TRTC.TYPE.SCENE_RTC}(默认)实时通话场景,该模式适合 1对1 的音视频通话,或者参会人数在 300 人以内的在线会议。[支持最大50人同时开麦](https://web.sdk.qcloud.com/trtc/webrtc/v5/doc/zh-cn/tutorial-04-info-uplink-limits.html)。
723
+ * - {@link module:TYPE.SCENE_LIVE TRTC.TYPE.SCENE_LIVE} 互动直播场景,该模式适合十万人以内的在线直播场景,但需要您在接下来介绍的 options 参数中指定 角色(role) 这个字段
724
+ * @param {string=} [options.role] 用户角色,仅在 {@link module:TYPE.SCENE_LIVE TRTC.TYPE.SCENE_LIVE} 场景下有意义,{@link module:TYPE.SCENE_RTC TRTC.TYPE.SCENE_RTC} 场景无需指定 role,目前支持两种角色:
725
+ * - {@link module:TYPE.ROLE_ANCHOR TRTC.TYPE.ROLE_ANCHOR}(默认) 主播
726
+ * - {@link module:TYPE.ROLE_AUDIENCE TRTC.TYPE.ROLE_AUDIENCE} 观众
727
+ * <br>
728
+ * 注意:观众角色没有发布本地音视频的权限,只有收看远端流的权限。如果观众想要连麦跟主播互动,
729
+ * 请先通过 {@link TRTC#switchRole switchRole()} 切换角色到主播后再发布本地音视频。
730
+ * @param {boolean} [options.autoReceiveAudio=true] 是否自动接收音频。当远端用户发布音频后,SDK 自动播放远端用户的音频。
731
+ * @param {boolean} [options.autoReceiveVideo=true] 是否自动接收视频。当远端用户发布视频后,SDK 自动拉流并解码远端视频,您需要调用 {@link TRTC#startRemoteVideo startRemoteVideo} 播放远端视频。
732
+ * @param {boolean} [options.enableAutoPlayDialog] 是否开启 SDK 自动播放失败弹窗,默认:true。
733
+ * - 默认开启,当出现自动播放失败时,SDK 会弹窗引导用户点击页面,来恢复音视频播放。
734
+ * - 可设置为 false 关闭,建议接入侧参考 [自动播放受限处理建议](https://web.sdk.qcloud.com/trtc/webrtc/doc/zh-cn/tutorial-21-advanced-auto-play-policy.html) 来处理自动播放失败相关问题。
735
+ * @param {string=} options.streamId 用于设置在腾讯云直播平台上的 streamId(选填)。
736
+ * - 【推荐取值】限制长度为64字节,可以不填写。一种推荐的方案是使用 sdkappid_roomid_userid_main 作为 streamid,这种命名方式容易辨认且不会在您的多个应用中发生冲突。
737
+ * - 【参考文档】[CDN 旁路直播](https://cloud.tencent.com/document/product/647/16826)。
738
+ * @param {string=} options.userDefineRecordId 用于设置云端录制的 userDefineRecordId(选填)。
739
+ * - 【推荐取值】限制长度为64字节,只允许包含大小写英文字母(a-zA-Z)、数字(0-9)及下划线和连词符。
740
+ * - 【参考文档】[云端录制](https://cloud.tencent.com/document/product/647/16823)。
741
+ * @param {string|ProxyServer} [options.proxy] 设置代理服务器
742
+ * @throws
743
+ * - {@link module:ERROR_CODE.INVALID_PARAMETER INVALID_PARAMETER}
744
+ * - {@link module:ERROR_CODE.OPERATION_FAILED OPERATION_FAILED}
745
+ * - {@link module:ERROR_CODE.OPERATION_ABORT OPERATION_ABORT}
746
+ * - {@link module:ERROR_CODE.ENV_NOT_SUPPORTED ENV_NOT_SUPPORTED}
747
+ * - {@link module:ERROR_CODE.SERVER_ERROR SERVER_ERROR}
748
+ * @example
749
+ * const trtc = TRTC.create();
750
+ * await trtc.enterRoom({ roomId: 8888, sdkAppId, userId, userSig });
751
+ */
752
+ enterRoom(params: EnterRoomConfig): Promise<void>;
753
+ /**
754
+ * 退出当前音视频通话房间。
755
+ * - 退房后将会关闭和远端用户的连接,不再接收和播放远端用户音视频,并且停止本地音视频的发布。
756
+ * - 本地摄像头和麦克风的采集和预览不会因此而停止。您可以调用 {@link TRTC#stopLocalVideo stopLocalVideo()} 和 {@link TRTC#stopLocalAudio stopLocalAudio()} 停止本地音视频采集。
757
+ * @throws {@link module:ERROR_CODE.OPERATION_ABORT OPERATION_ABORT}
758
+ * @memberof TRTC
759
+ * @example
760
+ * await trtc.exitRoom();
761
+ */
762
+ exitRoom(): Promise<void>;
763
+ /**
764
+ * 切换用户角色,仅在 TRTC.TYPE.SCENE_LIVE 互动直播模式下生效。
765
+ *
766
+ * 互动直播模式下,一个用户可能需要在“观众”和“主播”之间来回切换。
767
+ * 您可以通过 {@link TRTC#enterRoom enterRoom()} 中的 role 字段确定角色,也可以通过 switchRole 在进房后切换角色。
768
+ * - 观众切换为主播,调用 trtc.switchRole(TRTC.TYPE.ROLE_ANCHOR) 将用户角色转换为 TRTC.TYPE.ROLE_ANCHOR 主播角色,之后按需调用 {@link TRTC#startLocalVideo startLocalVideo()} 和 {@link TRTC#startLocalAudio startLocalAudio()} 发布本地音视频。
769
+ * - 主播切换为观众,调用 trtc.switchRole(TRTC.TYPE.ROLE_AUDIENCE) 将用户角色转换为 TRTC.TYPE.ROLE_AUDIENCE 观众角色,此时如果有已发布的本地音视频,SDK 会取消发布本地音视频。
770
+ * > !
771
+ * > - 该接口需要在进房成功后才可以调用。
772
+ * > - 关闭摄像头和麦克风后,建议及时切换成观众角色,避免主播角色占用 50路上行的资源。
773
+ * @param {string} role 用户角色
774
+ * - TRTC.TYPE.ROLE_ANCHOR 主播,可以发布本地音视频,单个房间里最多支持 50 个主播同时发布本地音视频。
775
+ * - TRTC.TYPE.ROLE_AUDIENCE 观众,不能发布本地音视频,只能观看远端流,单个房间里的观众人数没有上限。
776
+ * @throws
777
+ * - {@link module:ERROR_CODE.INVALID_PARAMETER INVALID_PARAMETER}
778
+ * - {@link module:ERROR_CODE.INVALID_OPERATION INVALID_OPERATION}
779
+ * - {@link module:ERROR_CODE.OPERATION_FAILED OPERATION_FAILED}
780
+ * - {@link module:ERROR_CODE.OPERATION_ABORT OPERATION_ABORT}
781
+ * - {@link module:ERROR_CODE.SERVER_ERROR SERVER_ERROR}
782
+ * @memberof TRTC
783
+ * @example
784
+ * // 进房成功后
785
+ * // TRTC.TYPE.SCENE_LIVE 互动直播模式下,观众切换为主播
786
+ * await trtc.switchRole(TRTC.TYPE.ROLE_ANCHOR);
787
+ * // 观众角色切换为主播,开始推流
788
+ * await trtc.startLocalVideo();
789
+ *
790
+ * // TRTC.TYPE.SCENE_LIVE 互动直播模式下,主播切换为观众
791
+ * await trtc.switchRole(TRTC.TYPE.ROLE_AUDIENCE);
792
+ */
793
+ switchRole(role: UserRole): Promise<void>;
794
+ /**
795
+ * 销毁 TRTC 实例 <br/>
796
+ *
797
+ * 在退房之后,若业务侧无需再使用 trtc 时,需调用该接口及时销毁 trtc 实例,释放相关资源。
798
+ *
799
+ * 注意:
800
+ * - 销毁后的 trtc 实例不可再继续使用。
801
+ * - 已进房的情况下,需先调用 {@link TRTC#exitRoom TRTC.exitRoom} 接口退房成功后,才能调用该接口销毁 trtc。
802
+ *
803
+ * @example
804
+ * // 通话结束时
805
+ * await trtc.exitRoom();
806
+ * // 若后续无需再使用该 trtc,则销毁 trtc,并释放引用。
807
+ * trtc.destroy();
808
+ * trtc = null;
809
+ * @throws {@link module:ERROR_CODE.OPERATION_FAILED OPERATION_FAILED}
810
+ * @memberof TRTC
811
+ */
812
+ destroy(): void;
813
+ /**
814
+ * 开启本地麦克风采集,并发布到当前的房间中。
815
+ * - 调用时机:进房前后均可调用,不可重复调用。
816
+ * - 一个 trtc 实例只能开启一路麦克风,若您需要在已经开启一路麦克风的情况下,再开启一路麦克风用于测试,可以创建多个 trtc 实例实现。
817
+ *
818
+ * @param {object} [config] - 配置项
819
+ * @param {boolean} [config.publish] - 是否将本地音频发布到房间中,默认为true。若在进房前调用该接口,并且 publish = true,则在进房后 SDK 会自动发布。
820
+ * @param {object} [config.option] - 本地音频选项
821
+ * @param {string} [config.option.microphoneId]- 指定使用哪个麦克风
822
+ * @param {MediaStreamTrack} [config.option.audioTrack] - 自定义采集的 audioTrack。若同时设置 microphoneId,audioTrack,则按优先级(microphoneId>audioTrack)进行采集。
823
+ * @param {number} [config.option.earMonitorVolume] - 设置耳返音量,取值[0, 100],本地麦克风默认静音播放。
824
+ * @param {string} [config.option.profile] - 音频编码配置, 默认{@link module:TYPE.AUDIO_PROFILE_STANDARD TRTC.TYPE.AUDIO_PROFILE_STANDARD}
825
+ * @throws
826
+ * - {@link module:ERROR_CODE.ENV_NOT_SUPPORTED ENV_NOT_SUPPORTED}
827
+ * - {@link module:ERROR_CODE.INVALID_PARAMETER INVALID_PARAMETER}
828
+ * - {@link module:ERROR_CODE.DEVICE_ERROR DEVICE_ERROR}
829
+ * - {@link module:ERROR_CODE.OPERATION_FAILED OPERATION_FAILED}
830
+ * - {@link module:ERROR_CODE.OPERATION_ABORT OPERATION_ABORT}
831
+ * - {@link module:ERROR_CODE.SERVER_ERROR SERVER_ERROR}
832
+ * @example
833
+ * // 采集默认麦克风并发布
834
+ * await trtc.startLocalAudio();
835
+ * @example
836
+ * // 如下是测试麦克风音量的代码示例,可用于麦克风音量检测。
837
+ * trtc.enableAudioVolumeEvaluation();
838
+ * trtc.on(TRTC.EVENT.AUDIO_VOLUME, event => { });
839
+ * // 测试麦克风无需发布音频
840
+ * await trtc.startLocalAudio({ publish: false });
841
+ * // 测试完毕后,关闭麦克风
842
+ * await trtc.stopLocalAudio();
843
+ * @memberof TRTC
844
+ */
845
+ startLocalAudio(config?: LocalAudioConfig): Promise<void>;
846
+ /**
847
+ * 更新本地麦克风配置。
848
+ * - 调用时机:该接口需在 {@link TRTC#startLocalAudio startLocalAudio()} 成功后调用,可以多次调用。
849
+ * - 本方法采用增量更新方式:只更新传入的参数,不传入的参数保持不变。
850
+ * @param {object} [config]
851
+ * @param {boolean} [config.publish] - 是否将本地音频发布到房间中,默认为 true
852
+ * @param {boolean} [config.mute] - 静音麦克风。参考:[开关麦克风、摄像头](./tutorial-15-basic-dynamic-add-video.html)。
853
+ * @param {object} [config.option] - 本地音频配置
854
+ * @param {string} [config.option.microphoneId] - 指定使用哪个麦克风,用来切换麦克风。
855
+ * @param {MediaStreamTrack} [config.option.audioSource] - 自定义采集的 audioTrack,具体参考自定义采集指引
856
+ * @throws
857
+ * - {@link module:ERROR_CODE.INVALID_PARAMETER INVALID_PARAMETER}
858
+ * - {@link module:ERROR_CODE.DEVICE_ERROR DEVICE_ERROR}
859
+ * - {@link module:ERROR_CODE.OPERATION_FAILED OPERATION_FAILED}
860
+ * - {@link module:ERROR_CODE.OPERATION_ABORT OPERATION_ABORT}
861
+ * @example
862
+ * // 切换麦克风
863
+ * const microphoneList = await TRTC.getMicrophoneList();
864
+ * if (microphoneList[1]) {
865
+ * await trtc.updateLocalAudio({ option: { microphoneId: microphoneList[1].deviceId }});
866
+ * }
867
+ * @memberof TRTC
868
+ */
869
+ updateLocalAudio(config: UpdateLocalAudioConfig): Promise<void>;
870
+ /**
871
+ * 停止本地麦克风的采集及发布。
872
+ * - 如果您只是想静音麦克风,请使用 updateLocalAudio({ mute: true })。参考:[开关麦克风、摄像头](./tutorial-15-basic-dynamic-add-video.html)。
873
+ * @throws {@link module:ERROR_CODE.OPERATION_ABORT OPERATION_ABORT}
874
+ * @example
875
+ * await trtc.stopLocalAudio();
876
+ * */
877
+ stopLocalAudio(): Promise<void>;
878
+ /**
879
+ * @typedef {object|string} VideoProfile - 本地视频流配置
880
+ *
881
+ * 视频配置参数,可以用字符串预设值或者自定义分辨率等参数
882
+ * | 视频 Profile | 分辨率(宽 x 高)| 帧率(fps)| 码率(kbps)| 备注 |
883
+ * | :--- | :--- | :--- | :--- | :--- |
884
+ * | 120p | 160 x 120 | 15 | 200 ||
885
+ * | 180p | 320 x 180 | 15 | 350 ||
886
+ * | 240p | 320 x 240 | 15 | 400 ||
887
+ * | 360p | 640 x 360 | 15 | 800 ||
888
+ * | 480p | 640 x 480 | 15 | 900 ||
889
+ * | 720p | 1280 x 720 | 15 | 1500 ||
890
+ * | 1080p | 1920 x 1080 | 15 | 2000 ||
891
+ * | 1440p | 2560 x 1440 | 30 | 4860 ||
892
+ * | 4K | 3840 x 2160 | 30 | 9000 ||
893
+ * @property {number} width - 视频宽度
894
+ * @property {number} height - 视频高度
895
+ * @property {number} frameRate - 视频帧率
896
+ * @property {number} bitrate - 视频码率
897
+ * @example
898
+ * const config = {
899
+ * option: {
900
+ * profile: '480p',
901
+ * },
902
+ * }
903
+ * await trtc.startLocalVideo(config);
904
+ * @example
905
+ * const config = {
906
+ * option: {
907
+ * profile: {
908
+ * width: 640,
909
+ * height: 480,
910
+ * frameRate: 15,
911
+ * bitrate: 900,
912
+ * }
913
+ * }
914
+ * }
915
+ * await trtc.startLocalVideo(config);
916
+ */
917
+ /**
918
+ * 开启本地摄像头采集,在您指定的 HTMLElement 标签下播放摄像头画面,并将摄像头画面发布到当前所在房间中。
919
+ * - 调用时机:进房前后均可调用,不可重复调用。
920
+ * - 一个 trtc 实例只能开启一路摄像头。若您需要在已经开启一路摄像头的情况下,再开启一路摄像头用于测试,可以创建多个 trtc 实例实现。
921
+ *
922
+ * @param {object} [config]
923
+ * @param {string | HTMLElement | null} [config.view] - 本地视频预览的 HTMLElement 实例或者 Id, 如果不传或传入 null, 则不会播放视频。
924
+ * @param {boolean} [config.publish] - 是否将本地视频发布到房间中。默认为 true,若在进房前调用该接口,SDK 会在进房成功后自动发布(若 publish=true)。
925
+ * @param {object} [config.option] - 本地视频配置
926
+ * @param {string} [config.option.cameraId] - 指定使用哪个摄像头,用于切换摄像头。
927
+ * @param {boolean} [config.option.useFrontCamera] - 是否使用前置摄像头
928
+ * @param {MediaStreamTrack} [config.option.videoTrack] - 自定义采集的 videoTrack。若同时设置 cameraId,useFrontCamera,videoTrack,则按优先级(cameraId>useFrontCamera>videoTrack)进行采集。
929
+ * @param {boolean} [config.option.mirror] - 是否开启本地预览镜像,默认为 true。
930
+ * @param {'contain' | 'cover' | 'fill'} [config.option.fillMode] - 视频填充模式。默认为 `cover`。参考 {@link https://developer.mozilla.org/zh-CN/docs/Web/CSS/object-fit CSS object-fit} 属性。
931
+ * @param {VideoProfile} [config.option.profile] - 视频大流编码参数。
932
+ * @param {VideoProfile} [config.option.small] - 视频小流编码参数。
933
+ * @param {QOS_PREFERENCE_SMOOTH|QOS_PREFERENCE_CLEAR} [config.option.qosPreference] - 设置弱网时,视频编码策略。(默认)流畅度优先({@link module:TYPE.QOS_PREFERENCE_SMOOTH QOS_PREFERENCE_SMOOTH})或 清晰度优先({@link module:TYPE.QOS_PREFERENCE_CLEAR QOS_PREFERENCE_CLEAR})
934
+ * @throws
935
+ * - {@link module:ERROR_CODE.ENV_NOT_SUPPORTED ENV_NOT_SUPPORTED}
936
+ * - {@link module:ERROR_CODE.INVALID_PARAMETER INVALID_PARAMETER}
937
+ * - {@link module:ERROR_CODE.DEVICE_ERROR DEVICE_ERROR}
938
+ * - {@link module:ERROR_CODE.OPERATION_FAILED OPERATION_FAILED}
939
+ * - {@link module:ERROR_CODE.OPERATION_ABORT OPERATION_ABORT}
940
+ * - {@link module:ERROR_CODE.SERVER_ERROR SERVER_ERROR}
941
+ * @example <caption>示例 1:预览及发布摄像头</caption>
942
+ * // 预览及发布摄像头
943
+ * await trtc.startLocalVideo({
944
+ * view: document.getElementById('localVideo'), // 在 DOM 中的 elementId 为 localVideo 的标签上预览视频。
945
+ * });
946
+ * @example <caption>示例 2:测试摄像头——只预览不发布</caption>
947
+ * // 只预览摄像头画面、不发布。可用于做摄像头测试。
948
+ * const config = {
949
+ * view: document.getElementById('localVideo'), // 在 DOM 中的 elementId 为 localVideo 的标签上预览视频。
950
+ * publish: false // 不发布摄像头
951
+ * }
952
+ * await trtc.startLocalVideo(config);
953
+ * // 当需要发布视频时调用 updateLocalVideo
954
+ * await trtc.updateLocalVideo({ publish:true });
955
+ * @example <caption>示例 3:预览及发布指定的摄像头</caption>
956
+ * // 使用指定的摄像头。
957
+ * const cameraList = await TRTC.getCameraList();
958
+ * if (cameraList[0]) {
959
+ * await trtc.startLocalVideo({
960
+ * view: document.getElementById('localVideo'), // 在 DOM 中的 elementId 为 localVideo 的标签上预览视频。
961
+ * option: {
962
+ * cameraId: cameraList[0].deviceId,
963
+ * }
964
+ * });
965
+ * }
966
+ * @memberof TRTC
967
+ */
968
+ startLocalVideo(config?: LocalVideoConfig): Promise<void>;
969
+ /**
970
+ * 更新本地摄像头配置。
971
+ * - 该接口需在 {@link TRTC#startLocalVideo startLocalVideo()} 成功后调用。
972
+ * - 该接口可以多次调用。
973
+ * - 本方法采用增量更新方式:只更新传入的参数,不传入的参数保持不变。
974
+ * @param {object} [config]
975
+ * @param {string | HTMLElement | null} [config.view] - 预览摄像头的 HTMLElement 实例或者 Id, 如果不传或传入null, 则不会渲染视频, 但会仍然会推流消耗带宽的容器
976
+ * @param {boolean} [config.publish] - 是否将本地视频发布到房间中。默认为 true,若在进房前调用该接口,SDK 会在进房成功后自动发布。
977
+ * @param {boolean} [config.mute] - 是否暂停摄像头采集,参考:[开关麦克风、摄像头](./tutorial-15-basic-dynamic-add-video.html)
978
+ * @param {object} [config.option] - 本地视频配置
979
+ * @param {string} [config.option.cameraId] - 指定使用哪个摄像头,
980
+ * @param {boolean} [config.option.useFrontCamera] - 是否使用前置摄像头
981
+ * @param {MediaStreamTrack} [config.option.videoTrack] - 自定义采集的 videoTrack
982
+ * @param {boolean} [config.option.mirror] - 是否开启镜像
983
+ * @param {'contain' | 'cover' | 'fill'} [config.option.fillMode] - 视频填充模式。参考 {@link https://developer.mozilla.org/zh-CN/docs/Web/CSS/object-fit| CSS object-fit} 属性
984
+ * @param {VideoProfile} [config.option.profile] - 视频大流编码参数
985
+ * @param {VideoProfile} [config.option.small] - 视频小流编码参数
986
+ * @param {QOS_PREFERENCE_SMOOTH|QOS_PREFERENCE_CLEAR} [config.option.qosPreference] - 设置弱网时,视频编码策略。(默认)流畅度优先({@link module:TYPE.QOS_PREFERENCE_SMOOTH QOS_PREFERENCE_SMOOTH})或 清晰度优先({@link module:TYPE.QOS_PREFERENCE_CLEAR QOS_PREFERENCE_SMOOTH})
987
+ * @throws
988
+ * - {@link module:ERROR_CODE.INVALID_PARAMETER INVALID_PARAMETER}
989
+ * - {@link module:ERROR_CODE.DEVICE_ERROR DEVICE_ERROR}
990
+ * - {@link module:ERROR_CODE.OPERATION_FAILED OPERATION_FAILED}
991
+ * - {@link module:ERROR_CODE.OPERATION_ABORT OPERATION_ABORT}
992
+ * @example <caption>示例 1:动态切换摄像头</caption>
993
+ * // 切换摄像头
994
+ * const cameraList = await TRTC.getCameraList();
995
+ * if (cameraList[1]) {
996
+ * await trtc.updateLocalVideo({ option: { cameraId: cameraList[1].deviceId }});
997
+ * }
998
+ * @example <caption>示例 2:停止发布视频,但保持本地预览</caption>
999
+ * // 停止发布视频,但保持本地预览
1000
+ * await trtc.updateLocalVideo({ publish:false });
1001
+ * @memberof TRTC
1002
+ */
1003
+ updateLocalVideo(config: UpdateLocalVideoConfig): Promise<void>;
1004
+ /**
1005
+ * 停止本地摄像头的采集、预览及发布。
1006
+ * - 如果希望仅停止发布视频但保留本地摄像头预览,可以使用{@link TRTC#updateLocalVideo updateLocalVideo({ publish:false })}方法。<br>
1007
+ * @throws {@link module:ERROR_CODE.OPERATION_ABORT OPERATION_ABORT}
1008
+ * @example
1009
+ * await trtc.stopLocalVideo();
1010
+ * */
1011
+ stopLocalVideo(): Promise<void>;
1012
+ /**
1013
+ * @typedef {object|string} ScreenShareProfile - 屏幕分享分辨率码率帧率配置
1014
+ * 屏幕分享配置参数,可以用字符串预设值或者自定义分辨率等参数
1015
+ * | 屏幕 Profile | 分辨率(宽 x 高)| 帧率(fps)| 码率 (kbps) |
1016
+ * | :--- | :--- | :--- | :--- |
1017
+ * | 480p | 640 x 480 | 5 | 900 |
1018
+ * | 480p_2 | 640 x 480 | 30 | 1000 |
1019
+ * | 720p | 1280 x 720 | 5 | 1200 |
1020
+ * | 720p_2 | 1280 x 720 | 30 | 3000 |
1021
+ * | 1080p | 1920 x 1080 | 5 | 1600 |
1022
+ * | 1080p_2 | 1920 x 1080 | 30 | 4000 |
1023
+ * - 屏幕分享默认使用 `1080p`。
1024
+ * - 若以上 Profile 不能满足您的业务需求,您也可以指定自定义的分辨率、帧率和码率。
1025
+ *
1026
+ * @property {number} width - 屏幕分享宽度
1027
+ * @property {number} height - 屏幕分享高度
1028
+ * @property {number} frameRate - 屏幕分享帧率
1029
+ * @property {number} bitrate - 屏幕分享码率
1030
+ * @example
1031
+ * const config = {
1032
+ * option: {
1033
+ * profile: '720p',
1034
+ * },
1035
+ * }
1036
+ * await trtc.startScreenShare(config);
1037
+ */
1038
+ /**
1039
+ * 开启屏幕分享。
1040
+ *
1041
+ * - 开启屏幕分享后,房间内其他用户会收到 {@link module:EVENT.REMOTE_VIDEO_AVAILABLE REMOTE_VIDEO_AVAILABLE} 事件,streamType 为 {@link module:TYPE.STREAM_TYPE_SUB STREAM_TYPE_SUB},其他用户可以通过 {@link TRTC#startRemoteVideo startRemoteVideo} 播放屏幕分享。
1042
+ * @param {object} [config]
1043
+ * @param {string | HTMLElement | null} [config.view] - 预览本地屏幕分享的 HTMLElement 实例或 Id, 如果不传或传入 null, 则不会渲染本地屏幕分享。
1044
+ * @param {boolean} [config.publish] - 是否将屏幕分享发布到房间中。默认为 true,若在进房前调用该接口,SDK 会在进房成功后自动发布。
1045
+ * @param {object} [config.option] - 屏幕分享配置
1046
+ * @param {boolean} [config.option.systemAudio] - 是否采集系统声音,默认为 false。
1047
+ * @param {'contain' | 'cover' | 'fill'} [config.option.fillMode] - 视频填充模式。默认为 `contain`,参考 {@link https://developer.mozilla.org/zh-CN/docs/Web/CSS/object-fit CSS object-fit} 属性。
1048
+ * @param {ScreenShareProfile} [config.option.profile] - 屏幕分享编码配置。
1049
+ * @param {QOS_PREFERENCE_SMOOTH|QOS_PREFERENCE_CLEAR} [config.option.qosPreference] - 设置弱网时,视频编码策略。流畅度优先({@link module:TYPE.QOS_PREFERENCE_SMOOTH QOS_PREFERENCE_SMOOTH})或 (默认)清晰度优先({@link module:TYPE.QOS_PREFERENCE_CLEAR QOS_PREFERENCE_CLEAR})
1050
+ * @throws
1051
+ * - {@link module:ERROR_CODE.ENV_NOT_SUPPORTED ENV_NOT_SUPPORTED}
1052
+ * - {@link module:ERROR_CODE.INVALID_PARAMETER INVALID_PARAMETER}
1053
+ * - {@link module:ERROR_CODE.DEVICE_ERROR DEVICE_ERROR}
1054
+ * - {@link module:ERROR_CODE.OPERATION_FAILED OPERATION_FAILED}
1055
+ * - {@link module:ERROR_CODE.OPERATION_ABORT OPERATION_ABORT}
1056
+ * - {@link module:ERROR_CODE.SERVER_ERROR SERVER_ERROR}
1057
+ * @example
1058
+ * // 开始屏幕分享
1059
+ * await trtc.startScreenShare();
1060
+ * @memberof TRTC
1061
+ */
1062
+ startScreenShare(config?: ScreenShareConfig): Promise<void>;
1063
+ /**
1064
+ * 更新屏幕分享配置
1065
+ * - 该接口需在 {@link TRTC#startScreenShare startScreenShare()} 成功后调用。
1066
+ * - 该接口可以多次调用。
1067
+ * - 本方法采用增量更新方式:只更新传入的参数,不传入的参数保持不变。
1068
+ * @param {object} [config]
1069
+ * @param {string | HTMLElement | null} [config.view] - 屏幕分享预览的 HTMLElement 实例或 Id, 如果不传或传入 null, 则不会渲染屏幕分享。
1070
+ * @param {boolean} [config.publish] - 是否将屏幕分享发布到房间中
1071
+ * @param {object} [config.option] - 屏幕分享配置
1072
+ * @param {'contain' | 'cover' | 'fill'} [config.option.fillMode] - 视频填充模式。默认为 `contain`,参考 {@link https://developer.mozilla.org/zh-CN/docs/Web/CSS/object-fit CSS object-fit} 属性。
1073
+ * @param {QOS_PREFERENCE_SMOOTH|QOS_PREFERENCE_CLEAR} [config.option.qosPreference] - 设置弱网时,视频编码策略。流畅度优先({@link module:TYPE.QOS_PREFERENCE_SMOOTH QOS_PREFERENCE_SMOOTH})或 (默认)清晰度优先({@link module:TYPE.QOS_PREFERENCE_CLEAR QOS_PREFERENCE_CLEAR})
1074
+ * @throws
1075
+ * - {@link module:ERROR_CODE.INVALID_PARAMETER INVALID_PARAMETER}
1076
+ * - {@link module:ERROR_CODE.DEVICE_ERROR DEVICE_ERROR}
1077
+ * - {@link module:ERROR_CODE.OPERATION_FAILED OPERATION_FAILED}
1078
+ * - {@link module:ERROR_CODE.OPERATION_ABORT OPERATION_ABORT}
1079
+ * - {@link module:ERROR_CODE.SERVER_ERROR SERVER_ERROR}
1080
+ * @example
1081
+ * // 停止屏幕分享,但保持屏幕分享本地预览
1082
+ * await trtc.updateScreenShare({publish:false});
1083
+ * @memberof TRTC
1084
+ */
1085
+ updateScreenShare(config: UpdateScreenShareConfig): Promise<void>;
1086
+ /**
1087
+ * 停止屏幕分享。
1088
+ * @throws {@link module:ERROR_CODE.OPERATION_ABORT OPERATION_ABORT}
1089
+ * @example
1090
+ * await trtc.stopScreenShare();
1091
+ * */
1092
+ stopScreenShare(): Promise<void>;
1093
+ usePlugin(): void;
1094
+ startPlugin(name: string, options: AudioSourceOptions): Promise<void>;
1095
+ updatePlugin(name: string, option: any): void;
1096
+ stopPlugin(name: string, options: any): Promise<void>;
1097
+ /**
1098
+ * 播放远端视频
1099
+ *
1100
+ * - 调用时机:在收到 {@link module:EVENT.REMOTE_VIDEO_AVAILABLE TRTC.on(TRTC.EVENT.REMOTE_VIDEO_AVAILABLE)} 事件后调用。
1101
+ * @param {object} [config]
1102
+ * @param {string | HTMLElement | null} [config.view] - 用于播放远端视频的 HTMLElement 实例或者 Id, 如果不传或传入null, 则不会渲染视频, 但会仍然会拉流消耗带宽
1103
+ * @param {string} config.userId - 远端用户Id
1104
+ * @param {TRTC.TYPE.STREAM_TYPE_MAIN|TRTC.TYPE.STREAM_TYPE_SUB} config.streamType - 远端流类型
1105
+ * - {@link module:TYPE.STREAM_TYPE_MAIN TRTC.TYPE.STREAM_TYPE_MAIN}: 主流(远端用户的摄像头)(远端用户的摄像头)
1106
+ * - {@link module:TYPE.STREAM_TYPE_SUB TRTC.TYPE.STREAM_TYPE_SUB}: 辅流(远端用户的屏幕分享)
1107
+ * @param {object} [config.option] - 远端视频配置
1108
+ * @param {boolean} [config.option.small] - 是否拉小流
1109
+ * @param {boolean} [config.option.mirror] - 是否开启镜像
1110
+ * @param {'contain' | 'cover' | 'fill'} [config.option.fillMode] - 视频填充模式。参考 {@link https://developer.mozilla.org/zh-CN/docs/Web/CSS/object-fit CSS object-fit} 属性。
1111
+ * @throws
1112
+ * - {@link module:ERROR_CODE.INVALID_PARAMETER INVALID_PARAMETER}
1113
+ * - {@link module:ERROR_CODE.INVALID_OPERATION INVALID_OPERATION}
1114
+ * - {@link module:ERROR_CODE.OPERATION_FAILED OPERATION_FAILED}
1115
+ * - {@link module:ERROR_CODE.OPERATION_ABORT OPERATION_ABORT}
1116
+ * - {@link module:ERROR_CODE.SERVER_ERROR SERVER_ERROR}
1117
+ * @example
1118
+ * trtc.on(TRTC.EVENT.REMOTE_VIDEO_AVAILABLE, ({ userId, streamType }) => {
1119
+ * // 您需在 DOM 中提前放置视频容器,建议以 `${userId}_${streamType}` 作为 element id。
1120
+ * trtc.startRemoteVideo({ userId, streamType, view: `${userId}_${streamType}` });
1121
+ * })
1122
+ * @memberof TRTC
1123
+ */
1124
+ startRemoteVideo(config: RemoteVideoConfig): Promise<void>;
1125
+ /**
1126
+ * 更新远端视频播放配置<br>
1127
+ * - 该方法需 {@link TRTC#startRemoteVideo startRemoteVideo} 成功后调用。
1128
+ * - 该方法可多次调用。
1129
+ * - 该方法采用增量更新的方式,只需要传入需要更新的配置项即可。
1130
+ * @param {object} [config]
1131
+ * @param {string | HTMLElement | null} [config.view] - 用于播放远端视频的 HTMLElement 实例或者 Id, 如果不传或传入null, 则不会渲染视频, 但会仍然会拉流消耗带宽
1132
+ * @param {string} config.userId - 远端用户Id
1133
+ * @param {TRTC.TYPE.STREAM_TYPE_MAIN|TRTC.TYPE.STREAM_TYPE_SUB} config.streamType - 远端流类型:
1134
+ * - {@link module:TYPE.STREAM_TYPE_MAIN TRTC.TYPE.STREAM_TYPE_MAIN}: 主流(远端用户的摄像头)
1135
+ * - {@link module:TYPE.STREAM_TYPE_SUB TRTC.TYPE.STREAM_TYPE_SUB}: 辅流(远端用户的屏幕分享)
1136
+ * @param {object} [config.option] - 远端视频配置
1137
+ * @param {boolean} [config.option.small] - 是否拉小流,参考:[开启大小流](./tutorial-27-advanced-small-stream.html)
1138
+ * @param {boolean} [config.option.mirror] - 是否开启镜像
1139
+ * @param {'contain' | 'cover' | 'fill'} [config.option.fillMode] - 视频填充模式。参考 {@link https://developer.mozilla.org/zh-CN/docs/Web/CSS/object-fit CSS object-fit} 属性。
1140
+ * @throws
1141
+ * - {@link module:ERROR_CODE.INVALID_PARAMETER INVALID_PARAMETER}
1142
+ * - {@link module:ERROR_CODE.INVALID_OPERATION INVALID_OPERATION}
1143
+ * - {@link module:ERROR_CODE.OPERATION_FAILED OPERATION_FAILED}
1144
+ * - {@link module:ERROR_CODE.OPERATION_ABORT OPERATION_ABORT}
1145
+ * @example
1146
+ * const config = {
1147
+ * view: document.getElementById(userId),
1148
+ * userId,
1149
+ * }
1150
+ * await trtc.updateRemoteVideo(config);
1151
+ * @memberof TRTC
1152
+ */
1153
+ updateRemoteVideo(config: UpdateRemoteVideoConfig): Promise<void>;
1154
+ /**
1155
+ * 用于停止远端视频播放。<br>
1156
+ * @param {object} config - 远端视频配置
1157
+ * @param {string} config.userId - 远端用户 userId,'*' 代表所有用户。
1158
+ * @param {TRTC.TYPE.STREAM_TYPE_MAIN|TRTC.TYPE.STREAM_TYPE_SUB} [config.streamType] - 远端流类型,当 userId 不为 '*' 时,该字段必填。
1159
+ * - {@link module:TYPE.STREAM_TYPE_MAIN TRTC.TYPE.STREAM_TYPE_MAIN}: 主流(远端用户的摄像头)
1160
+ * - {@link module:TYPE.STREAM_TYPE_SUB TRTC.TYPE.STREAM_TYPE_SUB}: 辅流(远端用户的屏幕分享)
1161
+ * @throws {@link module:ERROR_CODE.OPERATION_ABORT OPERATION_ABORT}
1162
+ * @example
1163
+ * // 停止播放所有远端用户
1164
+ * await trtc.stopRemoteVideo({ userId: '*' });
1165
+ * */
1166
+ stopRemoteVideo(config: StopRemoteVideoConfig): Promise<void>;
1167
+ /**
1168
+ * 静音某个远端用户,并且不再拉取该用户的音频数据。仅对当前用户有效,房间内的其他用户依然可以听到被静音用户的声音。<br>
1169
+ *
1170
+ * 注意:
1171
+ * - 默认情况下,在进房后,SDK 会自动播放远端音频。您可以调用该接口将远端用户静音及取消静音。
1172
+ * - 进房时如果传入参数 autoReceiveAudio = false,则不会自动播放远端音频。当需要播放音频时,需要调用该方法(mute 传入 false)播放远端音频。
1173
+ * - 在进入房间(enterRoom)之前或之后调用本接口均生效,静音状态在退出房间(exitRoom)之后会被重置为 false。
1174
+ * - 如果您希望继续拉取该用户的音频数据,仅仅是不播放,可以调用 setRemoteAudioVolume(userId, 0)
1175
+ * @param {string} userId - 远端用户 userId,'*' 代表所有用户。
1176
+ * @param {boolean} mute - 是否静音
1177
+ * @throws
1178
+ * - {@link module:ERROR_CODE.INVALID_PARAMETER INVALID_PARAMETER}
1179
+ * - {@link module:ERROR_CODE.INVALID_OPERATION INVALID_OPERATION}
1180
+ * - {@link module:ERROR_CODE.OPERATION_FAILED OPERATION_FAILED}
1181
+ * - {@link module:ERROR_CODE.OPERATION_ABORT OPERATION_ABORT}
1182
+ * @example
1183
+ * // 静音所有远端用户
1184
+ * await trtc.muteRemoteAudio('*', true);
1185
+ * */
1186
+ muteRemoteAudio(userId: string, mute: boolean): Promise<void>;
1187
+ /**
1188
+ * 用于控制远端音频的播放音量。<br>
1189
+ *
1190
+ * - 不支持 iOS Safari
1191
+ * @param {string} userId - 远端用户 userId
1192
+ * @param {number} volume - 音量大小,取值范围为0 - 100
1193
+ * @example
1194
+ * await trtc.setRemoteAudioVolume('123', 90);
1195
+ * */
1196
+ setRemoteAudioVolume(userId: string, volume: number): void;
1197
+ /**
1198
+ * 开启或关闭音量大小回调<br>
1199
+ *
1200
+ * - 开启此功能后,无论房间内是否有人说话,SDK 会定时抛出 {@link module:EVENT.AUDIO_VOLUME TRTC.on(TRTC.EVENT.AUDIO_VOLUME)} 事件,反馈每一个用户的的音量大小评估值。<br>
1201
+ *
1202
+ * @param {number} [interval=2000] 用于设置音量回调事件定时触发的时间间隔。默认为 2000(ms),最小值为100(ms)。若设置小于等于0时,则关闭音量大小回调。
1203
+ * @param {boolean} [enableInBackground=false] 出于性能的考虑,当页面切换到后台时,SDK 不会抛出音量回调事件。如需在页面切后台时接收音量回调事件,可设置该参数为 true。
1204
+ * @memberof TRTC
1205
+ * @example
1206
+ * trtc.on(TRTC.EVENT.AUDIO_VOLUME, event => {
1207
+ * event.result.forEach(({ userId, volume }) => {
1208
+ * const isMe = userId === ''; // 当 userId 为空串时,代表本地麦克风音量。
1209
+ * if (isMe) {
1210
+ * console.log(`my volume: ${volume}`);
1211
+ * } else {
1212
+ * console.log(`user: ${userId} volume: ${volume}`);
1213
+ * }
1214
+ * })
1215
+ * });
1216
+ *
1217
+ * // 开启音量回调,并设置每 1000ms 触发一次事件
1218
+ * trtc.enableAudioVolumeEvaluation(1000);
1219
+ *
1220
+ * // 如需关闭音量回调,传入 interval 值小于等于0即可
1221
+ * trtc.enableAudioVolumeEvaluation(-1);
1222
+ */
1223
+ enableAudioVolumeEvaluation(interval?: number, enableInBackground?: boolean): void;
1224
+ /**
1225
+ * 监听 TRTC 事件<br><br>
1226
+ * 详细事件列表请参见:{@link module:EVENT TRTC.EVENT}
1227
+ *
1228
+ * @param {string} eventName 事件名
1229
+ * @param {function} handler 事件回调函数
1230
+ * @param {context} context 上下文
1231
+ * @memberof TRTC
1232
+ * @example
1233
+ * trtc.on(TRTC.EVENT.REMOTE_VIDEO_AVAILABLE, event => {
1234
+ * // REMOTE_VIDEO_AVAILABLE event handler
1235
+ * });
1236
+ */
1237
+ on<T extends keyof TRTCEventTypes>(event: T, handler: (...args: TRTCEventTypes[T]) => void, context?: any): this;
1238
+ /**
1239
+ * 取消事件监听<br>
1240
+ *
1241
+ * @param {string} eventName 事件名,传入通配符 '*' 会解除所有事件监听。
1242
+ * @param {function} handler 事件回调函数
1243
+ * @param {context} context 上下文
1244
+ * @memberof TRTC
1245
+ * @example
1246
+ * trtc.on(TRTC.EVENT.REMOTE_USER_ENTER, function peerJoinHandler(event) {
1247
+ * // REMOTE_USER_ENTER event handler
1248
+ * console.log('remote user enter');
1249
+ *
1250
+ * trtc.off(TRTC.EVENT.REMOTE_USER_ENTER, peerJoinHandler);
1251
+ * });
1252
+ *
1253
+ * // 解除所有事件绑定
1254
+ * trtc.off('*');
1255
+ */
1256
+ off<T extends keyof TRTCEventTypes>(event: T | '*', handler: T extends '*' ? never : (...args: TRTCEventTypes[T]) => void, context?: any): this;
1257
+ /**
1258
+ * 获取视频轨道
1259
+ *
1260
+ * @param {string} [config] 不传则获取本地摄像头 videoTrack
1261
+ * @param {string} [config.userId] 不传或传空串,代表获取本地的 videoTrack。传远端用户的 userId,代表获取远端用户的 videoTrack。
1262
+ * @param {STREAM_TYPE_MAIN|STREAM_TYPE_SUB} [config.streamType] - 远端流类型:
1263
+ * - {@link module:TYPE.STREAM_TYPE_MAIN TRTC.TYPE.STREAM_TYPE_MAIN}: 主流(远端用户的摄像头)(默认值)
1264
+ * - {@link module:TYPE.STREAM_TYPE_SUB TRTC.TYPE.STREAM_TYPE_SUB}: 辅流(远端用户的屏幕分享)
1265
+ * @returns {MediaStreamTrack|null} 视频轨道
1266
+ * @memberof TRTC
1267
+ * @example
1268
+ * // 获取本地摄像头 videoTrack
1269
+ * const videoTrack = trtc.getVideoTrack();
1270
+ * // 获取本地屏幕分享 videoTrack
1271
+ * const screenVideoTrack = trtc.getVideoTrack({ streamType: TRTC.TYPE.STREAM_TYPE_SUB });
1272
+ * // 获取远端用户的主流 videoTrack
1273
+ * const remoteMainVideoTrack = trtc.getVideoTrack({ userId: 'test', streamType: TRTC.TYPE.STREAM_TYPE_MAIN });
1274
+ * // 获取远端用户的辅流 videoTrack
1275
+ * const remoteSubVideoTrack = trtc.getVideoTrack({ userId: 'test', streamType: TRTC.TYPE.STREAM_TYPE_SUB });
1276
+ */
1277
+ getVideoTrack(config?: {
1278
+ userId?: string;
1279
+ streamType?: TRTCStreamType;
1280
+ }): MediaStreamTrack | null;
1281
+ /**
1282
+ * 获取音频轨道
1283
+ *
1284
+ * @returns {MediaStreamTrack?} 音频轨道
1285
+ * @param {string} [userId] 不传则获取本地的 audioTrack
1286
+ * @memberof TRTC
1287
+ */
1288
+ getAudioTrack(userId?: string): MediaStreamTrack | null;
1289
+ setCurrentSpeaker(speakerId: string): void;
1290
+ static EVENT: {
1291
+ readonly ERROR: "error";
1292
+ readonly AUTOPLAY_FAILED: "autoplay-failed";
1293
+ readonly KICKED_OUT: "kicked-out";
1294
+ readonly REMOTE_USER_ENTER: "remote-user-enter";
1295
+ readonly REMOTE_USER_EXIT: "remote-user-exit";
1296
+ readonly REMOTE_AUDIO_AVAILABLE: "remote-audio-available";
1297
+ readonly REMOTE_AUDIO_UNAVAILABLE: "remote-audio-unavailable";
1298
+ readonly REMOTE_VIDEO_AVAILABLE: "remote-video-available";
1299
+ readonly REMOTE_VIDEO_UNAVAILABLE: "remote-video-unavailable";
1300
+ readonly AUDIO_VOLUME: "audio-volume";
1301
+ readonly NETWORK_QUALITY: "network-quality";
1302
+ readonly CONNECTION_STATE_CHANGED: "connection-state-changed";
1303
+ readonly AUDIO_PLAY_STATE_CHANGED: "audio-play-state-changed";
1304
+ readonly VIDEO_PLAY_STATE_CHANGED: "video-play-state-changed";
1305
+ readonly SCREEN_SHARE_STOPPED: "screen-share-stopped";
1306
+ readonly DEVICE_CHANGED: "device-changed";
1307
+ readonly PUBLISH_STATE_CHANGED: "publish-state-changed";
1308
+ };
1309
+ static ERROR_CODE: {
1310
+ INVALID_PARAMETER: number;
1311
+ INVALID_OPERATION: number;
1312
+ ENV_NOT_SUPPORTED: number;
1313
+ DEVICE_ERROR: number;
1314
+ SERVER_ERROR: number;
1315
+ OPERATION_FAILED: number;
1316
+ OPERATION_ABORT: number;
1317
+ UNKNOWN_ERROR: number;
1318
+ };
1319
+ static TYPE: {
1320
+ readonly SCENE_LIVE: Scene.LIVE;
1321
+ readonly SCENE_RTC: Scene.RTC;
1322
+ readonly ROLE_ANCHOR: UserRole.ANCHOR;
1323
+ readonly ROLE_AUDIENCE: UserRole.AUDIENCE;
1324
+ readonly STREAM_TYPE_MAIN: TRTCStreamType.Main;
1325
+ readonly STREAM_TYPE_SUB: TRTCStreamType.Sub;
1326
+ readonly AUDIO_PROFILE_STANDARD: "standard";
1327
+ readonly AUDIO_PROFILE_STANDARD_STEREO: "standard-stereo";
1328
+ readonly AUDIO_PROFILE_HIGH: "high";
1329
+ readonly AUDIO_PROFILE_HIGH_STEREO: "high-stereo";
1330
+ readonly QOS_PREFERENCE_SMOOTH: "smooth";
1331
+ readonly QOS_PREFERENCE_CLEAR: "clear";
1332
+ };
1333
+ static frameWorkType: number;
1334
+ /**
1335
+ * 设置日志输出等级
1336
+ * <br>
1337
+ * 建议在开发测试阶段设置为 DEBUG 等级,该日志等级包含详细的提示信息。
1338
+ * 默认输出 INFO 日志等级,该日志等级包含 SDK 主要功能的日志信息。
1339
+ *
1340
+ * @param {0-5} [level] 日志输出等级 0: TRACE 1: DEBUG 2: INFO 3: WARN 4: ERROR 5: NONE
1341
+ * @param {boolean} [enableUploadLog=true] 是否开启日志上传,默认开启。不建议关闭,关闭后将影响问题排障。
1342
+ * @example
1343
+ * // 输出 DEBUG 以上日志等级
1344
+ * TRTC.setLogLevel(1);
1345
+ */
1346
+ static setLogLevel(level: LOG_LEVEL, enableUploadLog?: boolean): void;
1347
+ /**
1348
+ * 检测 TRTC Web SDK 是否支持当前浏览器
1349
+ *
1350
+ * - 参考:[浏览器兼容情况](tutorial-05-info-browser.html)。
1351
+ * @example
1352
+ * TRTC.isSupported().then((checkResult) => {
1353
+ * if(!checkResult.result) {
1354
+ * console.log('checkResult', checkResult.result, 'checkDetail', checkResult.detail);
1355
+ * // SDK 不支持当前浏览器,引导用户使用最新版的 Chrome 浏览器。
1356
+ * }
1357
+ * });
1358
+ *
1359
+ * @returns {Promise.<object>} Promise 返回检测结果
1360
+ * | Property | Type | Description |
1361
+ * |--------------------------------------------|---------|-------------------------------------|
1362
+ * | checkResult.result | boolean | 检测结果 |
1363
+ * | checkResult.detail.isBrowserSupported | boolean | 当前浏览器是否是 SDK 支持的浏览器 |
1364
+ * | checkResult.detail.isWebRTCSupported | boolean | 当前浏览器是否支持 WebRTC |
1365
+ * | checkResult.detail.isWebCodecsSupported | boolean | 当前浏览器是否支持 WebCodecs |
1366
+ * | checkResult.detail.isMediaDevicesSupported | boolean | 当前浏览器是否支持获取媒体设备及媒体流 |
1367
+ * | checkResult.detail.isScreenShareSupported | boolean | 当前浏览器是否支持屏幕分享 |
1368
+ * | checkResult.detail.isSmallStreamSupported | boolean | 当前浏览器是否支持小流 |
1369
+ * | checkResult.detail.isH264EncodeSupported | boolean | 当前浏览器上行是否支持 H264 编码 |
1370
+ * | checkResult.detail.isH264DecodeSupported | boolean | 当前浏览器下行是否支持 H264 编码 |
1371
+ * | checkResult.detail.isVp8EncodeSupported | boolean | 当前浏览器上行是否支持 VP8 编码 |
1372
+ * | checkResult.detail.isVp8DecodeSupported | boolean | 当前浏览器下行是否支持 VP8 编码 |
1373
+ */
1374
+ static isSupported(): Promise<{
1375
+ result: boolean;
1376
+ detail: {
1377
+ isBrowserSupported: boolean;
1378
+ isWebRTCSupported: boolean;
1379
+ isWebCodecsSupported: boolean;
1380
+ isMediaDevicesSupported: boolean;
1381
+ isScreenShareSupported: boolean;
1382
+ isSmallStreamSupported: boolean;
1383
+ isH264EncodeSupported: boolean;
1384
+ isVp8EncodeSupported: boolean;
1385
+ isH264DecodeSupported: boolean;
1386
+ isVp8DecodeSupported: boolean;
1387
+ };
1388
+ }>;
1389
+ /**
1390
+ * 返回摄像头设备列表
1391
+ * <br>
1392
+ * **Note**
1393
+ * - 该接口不支持在 http 协议下使用,请使用 https 协议部署您的网站。{@link https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia#Privacy_and_security Privacy and security}
1394
+ * - 出于安全的考虑,在用户未授权摄像头或麦克风访问权限前,label 及 deviceId 字段可能都是空的。因此建议在用户授权访问后,
1395
+ * 再调用该接口获取设备详情。
1396
+ * @returns {Promise.<MediaDeviceInfo[]>} Promise 返回 {@link https://developer.mozilla.org/en-US/docs/Web/API/MediaDeviceInfo|MediaDeviceInfo} 数组
1397
+ */
1398
+ static getCameraList(): Promise<DeviceInfo[]>;
1399
+ /**
1400
+ * 返回麦克风设备列表
1401
+ * <br>
1402
+ * **Note**
1403
+ * - 该接口不支持在 http 协议下使用,请使用 https 协议部署您的网站。{@link https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia#Privacy_and_security Privacy and security}
1404
+ * - 出于安全的考虑,在用户未授权摄像头或麦克风访问权限前,label 及 deviceId 字段可能都是空的。因此建议在用户授权访问后,
1405
+ * 再调用该接口获取设备详情。
1406
+ * @returns {Promise.<MediaDeviceInfo[]>} Promise 返回 {@link https://developer.mozilla.org/en-US/docs/Web/API/MediaDeviceInfo|MediaDeviceInfo} 数组
1407
+ */
1408
+ static getMicrophoneList(): Promise<DeviceInfo[]>;
1409
+ /**
1410
+ * 返回扬声器设备列表
1411
+ * <br>
1412
+ * 出于安全的考虑,在用户未授权摄像头或麦克风访问权限前,label 及 deviceId 字段可能都是空的。因此建议在用户授权访问后
1413
+ * 再调用该接口获取设备详情。
1414
+ *
1415
+ * @returns {Promise.<MediaDeviceInfo[]>} Promise 返回 {@link https://developer.mozilla.org/en-US/docs/Web/API/MediaDeviceInfo|MediaDeviceInfo} 数组
1416
+ */
1417
+ static getSpeakerList(): Promise<DeviceInfo[]>;
1418
+ /**
1419
+ * 设置当前音频播放的扬声器
1420
+ *
1421
+ * @param {string} speakerId 扬声器 ID
1422
+ */
1423
+ static setCurrentSpeaker(speakerId: string): Promise<void>;
1424
+ }
1425
+ export default TRTC