吉安感知网项目-前端
shuishen
2026-02-03 89380e6260a75d1d3b94de687ebcc2f50d50659d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
import TrtcCloudImpl from './TrtcCloudImpl.js';
import { TRTCVideoStreamType } from './TrtcDefines.js';
const version = '1.4.5';
export * from './TrtcDefines.js';
/**
 * TrtcCloud
 *
 * @class TrtcCloud
 */
export default class TrtcCloud {
    /**
     * 创建 TrtcCloud 单例
     *
     * @static
     * @memberof TrtcCloud
     * @example
     * TrtcCloud.createInstance();
     */
    static createInstance() {
        console.log('----------------------------------------------------------------');
        console.log(`                        SDK ${version}                    `);
        console.log('----------------------------------------------------------------');
        return TrtcCloudImpl._createInstance();
    }
    /**
     * 销毁 TrtcCloud 单例
     *
     * @static
     * @memberof TrtcCloud
     * @example
     * TrtcCloud.destroyInstance();
     */
    static destroyInstance() {
        return TrtcCloudImpl._destroyInstance();
    }
    /**
     * 设置 TrtcCloud 事件监听
     *
     * @param {String} event 事件名称
     * @param {Function} callback 事件回调
     * @memberof TrtcCloud
     *
     * @example
     * this.trtcCloud = TrtcCloud.createInstance(); // 创建 trtcCloud 实例
     * this.trtcCloud.on('onEnterRoom', (res) => {});
     */
    on(event, callback) {
        return TrtcCloudImpl._getInstance().on(event, callback);
    }
    /**
     * 取消事件绑定<br>
     *
     * @param {String} event 事件名称,传入通配符 '*' 会解除所有事件绑定。
     * @memberof TrtcCloud
     * @example
     * this.trtcCloud.off('onEnterRoom');
     *
     * this.trtcCloud.off('*'); // 取消所有绑定的事件
     */
    off(event) {
        return TrtcCloudImpl._getInstance().off(event);
    }
    /**
     * 进房<br>
     * 调用接口后,您会收到来自 TRTCCallback 中的 [onEnterRoom(result)]{@link TRTCCallback#onEnterRoom} 回调
     * 如果加入成功,result 会是一个正数(result > 0),表示加入房间所消耗的时间,单位是毫秒(ms)。<br>
     * 如果加入失败,result 会是一个负数(result < 0),表示进房失败的错误码。
     *
     * * 参数 scene 的枚举值如下:
     * - {@link TRTCAppSceneVideoCall}:<br>
     *          视频通话场景,支持720P、1080P高清画质,单个房间最多支持300人同时在线,最高支持50人同时发言。<br>
     *          适合:[1对1视频通话]、[300人视频会议]、[在线问诊]、[视频聊天]、[远程面试]等。<br>
     * - {@link TRTCAppSceneAudioCall}:<br>
     *          语音通话场景,支持 48kHz,支持双声道。单个房间最多支持300人同时在线,最高支持50人同时发言。<br>
     *          适合:[1对1语音通话]、[300人语音会议]、[语音聊天]、[语音会议]、[在线狼人杀]等。<br>
     * - {@link TRTCAppSceneLIVE}:<br>
     *          视频互动直播,支持平滑上下麦,切换过程无需等待,主播延时小于300ms;支持十万级别观众同时播放,播放延时低至1000ms。<br>
     *          适合:[视频低延时直播]、[十万人互动课堂]、[视频直播 PK]、[视频相亲房]、[互动课堂]、[远程培训]、[超大型会议]等。<br>
     * - {@link TRTCAppSceneVoiceChatRoom}:<br>
     *          语音互动直播,支持平滑上下麦,切换过程无需等待,主播延时小于300ms;支持十万级别观众同时播放,播放延时低至1000ms。<br>
     *          适合:[语音低延时直播]、[语音直播连麦]、[语聊房]、[K 歌房]、[FM 电台]等。<br>
     *
     * **Note:**
     * 1. 当 scene 选择为 TRTCAppSceneLIVE 或 TRTCAppSceneVoiceChatRoom 时,您必须通过 TRTCParams 中的 role 字段指定当前用户的角色。
     * 2. 不管进房是否成功,enterRoom 都必须与 exitRoom 配对使用,在调用 `exitRoom` 前再次调用 `enterRoom` 函数会导致不可预期的错误问题。
     *
     * @param {TRTCParams} params - 进房参数
     * @param {Number} params.sdkAppId      - 应用标识(必填)
     * @param {String} params.userId        - 用户标识(必填)
     * @param {String} params.userSig       - 用户签名(必填)
     * @param {Number} params.roomId        - 房间号码, roomId 和 strRoomId 必须填一个, 若您选用 strRoomId,则 roomId 需要填写为0。
     * @param {String} params.strRoomId     - 字符串房间号码 [选填],在同一个房间内的用户可以看到彼此并进行视频通话, roomId 和 strRoomId 必须填一个。若两者都填,则优先选择 roomId
     * @param {TRTCRoleType} params.role    - 直播场景下的角色,默认值:主播
     * - TRTCRoleAnchor: 主播,可以上行视频和音频,一个房间里最多支持50个主播同时上行音视频。
     * - TRTCRoleAudience: 观众,只能观看,不能上行视频和音频,一个房间里的观众人数没有上限。
     * @param {String=} params.privateMapKey - 房间签名(非必填)
     * @param {String=} params.businessInfo  - 业务数据(非必填)
     * @param {String=} params.streamId      - 自定义 CDN 播放地址(非必填)
     * @param {String=} params.userDefineRecordId - 设置云端录制完成后的回调消息中的 "userdefinerecordid" 字段内容,便于您更方便的识别录制回调(非必填)
     * @param {TRTCAppScene} scene 应用场景,目前支持视频通话(TRTCAppSceneVideoCall)、语音通话(TRTCAppSceneAudioCall)、在线直播(TRTCAppSceneLIVE)、语音聊天室(VTRTCAppSceneVoiceChatRoom)四种场景,
     * 详见 [TrtcDefines] 中 TRTCAppScene 参数定义
     *
     * @memberof TrtcCloud
     * @example
     * import { TRTCAppScene } from '@/TrtcCloud/lib/TrtcDefines';
     * this.trtcCloud = TrtcCloud.createInstance(); // 创建实例,只需创建一次
     * const params = {
     *   sdkAppId: 0,
     *   userId: 'xxx',
     *   roomId: 12345,
     *   userSig: 'xxx'
     * };
     * this.trtcCloud.enterRoom(params, TRTCAppScene.TRTCAppSceneVideoCall);
     */
    enterRoom(params, scene) {
        return TrtcCloudImpl._getInstance().enterRoom(params, scene);
    }
    /**
     * 退房<br>
     * 执行退出房间的相关逻辑释放资源后,SDK 会通过 `onExitRoom()` 回调通知到您
     *
     * **Note:**
     * 1. 如果您要再次调用 `enterRoom()` 或者切换到其它的音视频 SDK,请等待 `onExitRoom()` 回调到来后再执行相关操作,否则可能会遇到如摄像头、麦克风设备被强占等各种异常问题。
     *
     * @memberof TrtcCloud
     * @example
     * this.trtcCloud.exitRoom();
     */
    exitRoom() {
        return TrtcCloudImpl._getInstance().exitRoom();
    }
    /**
     * 切换角色,仅适用于直播场景(TRTCAppSceneLIVE 和 TRTCAppSceneVoiceChatRoom)
     *
     * 在直播场景下,一个用户可能需要在“观众”和“主播”之间来回切换。
     * 您可以在进房前通过 TRTCParams 中的 role 字段确定角色,也可以通过 switchRole 在进房后切换角色。
     *
     * @param {TRTCRoleType} role - 目标角色,默认为主播
     * - TRTCRoleAnchor: 主播,可以上行视频和音频,一个房间里最多支持50个主播同时上行音视频。
     * - TRTCRoleAudience: 观众,只能观看,不能上行视频和音频,一个房间里的观众人数没有上限。
     *
     * @memberof TrtcCloud
     * @example
     * import { TRTCRoleType } from '@/TrtcCloud/lib/TrtcDefines';
     * this.trtcCloud.switchRole(TRTCRoleType.TRTCRoleAudience);
     */
    switchRole(role) {
        return TrtcCloudImpl._getInstance().switchRole(role);
    }
    /**
     * 请求跨房通话
     *
     * 默认情况下,只有同一个房间中的用户之间可以进行音视频通话,不同的房间之间的音视频流是相互隔离的。
     * 使用该接口让身处两个不同房间中的主播进行跨房间的音视频流分享,从而让每个房间中的观众都能观看到这两个主播的音视频。
     * 跨房通话的请求结果会通过监听 [onConnectOtherRoom](https://web.sdk.qcloud.com/trtc/uniapp/doc/zh-cn/TRTCCallback.html#event:onConnectOtherRoom) 事件通知给您。
     *
     * @param {Object} params - 跨房通话参数
     * - 如果对端的房间号为数字,那么传入的参数为 roomId。
     * - 如果对端的房间号为字符串,那么传入的参数为 strRoomId。
     * - 针对对端的房间号类型传递对应参数,不需要两个同时传递。具体请看 example 的使用。
     * @param {Number} params.roomId 跨房通话时对端的数字房间号 roomId(与 strRoomId 选填其中一个,不可同时传递)
     * @param {String} params.strRoomId 跨房通话时对端的字符串房间号 strRoomId(与 roomId 选填其中一个,不可同时传递)
     * @param {String} params.userId 跨房通话时对端的 userId(必填)
     *
     *
     * @memberof TrtcCloud
     * @example
     * this.trtcCloud.connectOtherRoom({"roomId": 1233, "userId": "user_11"});
     * this.trtcCloud.connectOtherRoom({"strRoomId": "1233", "userId": "user_22"});
     */
    connectOtherRoom(params) {
        return TrtcCloudImpl._getInstance().connectOtherRoom(params);
    }
    /**
     * 退出跨房通话
     *
     * 退出跨房通话的请求结果会通过监听 [onDisconnectOtherRoom](https://web.sdk.qcloud.com/trtc/uniapp/doc/zh-cn/TRTCCallback.html#event:onDisconnectOtherRoom) 事件通知给您。
     *
     * @memberof TrtcCloud
     * @example
     * this.trtcCloud.disconnectOtherRoom();
     */
    disconnectOtherRoom() {
        return TrtcCloudImpl._getInstance().disconnectOtherRoom();
    }
    /**
     * 开启本地视频的预览画面<br>
     * 当开始渲染首帧摄像头画面时,您会收到 `onFirstVideoFrame(null)` 回调
     *
     * @param {Boolean} isFrontCamera 前置、后置摄像头,true:前置摄像头;false:后置摄像头,**默认为 true**
     * @param {String=} viewId 用于承载视频画面的渲染控件,使用原生插件中的 TRTCCloudUniPlugin-TXLocalViewComponent component,需要提供 viewId 属性值,例如 viewId=userId
     * @memberof TrtcCloud
     * @example
     * // 预览本地画面
     * const viewId = this.userId;
     * this.trtcCloud.startLocalPreview(true, viewId);
     */
    startLocalPreview(isFrontCamera = true, viewId) {
        return TrtcCloudImpl._getInstance().startLocalPreview(isFrontCamera, viewId);
    }
    /**
     * 设置视频编码器的编码参数
     * - 该设置能够决定远端用户看到的画面质量,同时也能决定云端录制出的视频文件的画面质量。
     * @param {TRTCVideoEncParam} param 用于设置视频编码器的相关参数
     * @memberof TrtcCloud
     * @example
     *
     * import { TRTCVideoResolution, TRTCVideoResolutionMode, TRTCVideoEncParam } from '@/TrtcCloud/lib/TrtcDefines';
     * const videoResolution = TRTCVideoResolution.TRTCVideoResolution_480_360;
     * const videoResolutionMode = TRTCVideoResolutionMode.TRTCVideoResolutionModeLandscape; // 横屏采集
     * const videoFps = 15;
     * const videoBitrate = 900;
     * const minVideoBitrate = 200;
     * const enableAdjustRes = false;
     * // const param = new TRTCVideoEncParam(videoResolution, videoResolutionMode, videoFps, videoBitrate, minVideoBitrate, enableAdjustRes); // v1.1.0 方式
     *
     * const param = { // v1.2.0 以上版本支持的方式
     *  videoResolution,
     *  videoResolutionMode,
     *  videoFps,
     *  videoBitrate,
     *  minVideoBitrate,
     *  enableAdjustRes,
     * };
     *
     * this.trtcCloud.setVideoEncoderParam(param);
     */
    setVideoEncoderParam(param) {
        return TrtcCloudImpl._getInstance().setVideoEncoderParam(param);
    }
    /**
     * 切换前置或后置摄像头
     *
     * @param {Boolean} isFrontCamera 前置、后置摄像头,true:前置摄像头;false:后置摄像头
     * @memberof TrtcCloud
     * @example
     * // 切换前置或后置摄像头
     * const isFrontCamera = true;
     * this.trtcCloud.switchCamera(isFrontCamera);
     */
    switchCamera(isFrontCamera) {
        return TrtcCloudImpl._getInstance().switchCamera(isFrontCamera);
    }
    /**
     * 停止本地视频采集及预览
     *
     * @memberof TrtcCloud
     * @example
     * this.trtcCloud.stopLocalPreview();
     */
    stopLocalPreview() {
        return TrtcCloudImpl._getInstance().stopLocalPreview();
    }
    /**
     * 设置本地画面的渲染参数,可设置的参数包括有:画面的旋转角度、填充模式以及左右镜像等。
     * @param {TRTCRenderParams} params - 本地图像的参数
     * @param {TRTCVideoRotation} params.rotation - 图像的顺时针旋转角度,支持90、180以及270旋转角度,默认值:TRTCVideoRotation.TRTCVideoRotation_0
     * @param {TRTCVideoFillMode} params.fillMode - 视频画面填充模式,填充(画面可能会被拉伸裁剪)或适应(画面可能会有黑边),默认值:TRTCVideoFillMode.TRTCVideoFillMode_Fill
     * @param {TRTCVideoMirrorType} params.mirrorType - 画面镜像模式,默认值:TRTCVideoMirrorType.TRTCVideoMirrorType_Auto
     *
     * @memberof TrtcCloud
     * @example
     * import { TRTCVideoRotation, TRTCVideoFillMode, TRTCVideoMirrorType } from '@/TrtcCloud/lib/TrtcDefines';
     * const renderParams = {
     *  rotation: TRTCVideoRotation.TRTCVideoRotation_0,
     *  fillMode: TRTCVideoFillMode.TRTCVideoFillMode_Fill,
     *  mirrorType: TRTCVideoMirrorType.TRTCVideoMirrorType_Auto
     * };
     * this.trtcCloud.setLocalRenderParams(renderParams);
     */
    setLocalRenderParams(params) {
        return TrtcCloudImpl._getInstance().setLocalRenderParams(params);
    }
    /**
     * 暂停/恢复发布本地的视频流
     *
     * 该接口可以暂停(或恢复)发布本地的视频画面,暂停之后,同一房间中的其他用户将无法继续看到自己画面。 该接口在指定 TRTCVideoStreamTypeBig 时等效于 start/stopLocalPreview 这两个接口,但具有更好的响应速度。 因为 start/stopLocalPreview 需要打开和关闭摄像头,而打开和关闭摄像头都是硬件设备相关的操作,非常耗时。 相比之下,muteLocalVideo 只需要在软件层面对数据流进行暂停或者放行即可,因此效率更高,也更适合需要频繁打开关闭的场景。 当暂停/恢复发布指定 TRTCVideoStreamTypeBig 后,同一房间中的其他用户将会收到 onUserVideoAvailable 回调通知。 当暂停/恢复发布指定 TRTCVideoStreamTypeSub 后,同一房间中的其他用户将会收到 onUserSubStreamAvailable 回调通知。
     * @param {Number} streamType 要暂停/恢复的视频流类型(仅支持 TRTCVideoStreamTypeBig 和 TRTCVideoStreamTypeSub)
     * @param {Boolean} mute - true:屏蔽;false:开启,默认值:false
     *
     * @memberof TrtcCloud
     * @example
     * this.trtcCloud.muteLocalVideo(TRTCVideoStreamType.TRTCVideoStreamTypeBig, true);
     */
    muteLocalVideo(streamType, mute) {
        return TrtcCloudImpl._getInstance().muteLocalVideo(streamType, mute);
    }
    /**
     * 显示远端视频或辅流<br>
     *
     * @param {String} userId 指定远端用户的 userId
     * @param {Number} streamType 指定要观看 userId 的视频流类型
     * - 高清大画面:TRTCVideoStreamType.TRTCVideoStreamTypeBig
     * - 低清小画面:TRTCVideoStreamType.TRTCVideoStreamTypeSmall
     * - 辅流(屏幕分享):TRTCVideoStreamType.TRTCVideoStreamTypeSub
     * @param {String} viewId 用于承载视频画面的渲染控件,使用原生插件中的 TRTCCloudUniPlugin-TXRemoteViewComponent component,需要提供 viewId 属性值,例如 viewId=userId
     * @memberof TrtcCloud
     * @example
     * import { TRTCVideoStreamType } from '@/TrtcCloud/lib/TrtcDefines';
     * const viewId = this.remoteUserId;
     * this.trtcCloud.startRemoteView(userId, TRTCVideoStreamType.TRTCVideoStreamTypeBig, viewId);
     */
    startRemoteView(userId, streamType, viewId) {
        return TrtcCloudImpl._getInstance().startRemoteView(userId, streamType, viewId);
    }
    /**
     * 停止显示远端视频画面,同时不再拉取该远端用户的视频数据流<br>
     * 指定要停止观看的 userId 的视频流类型
     *
     * @param {String} userId 指定的远端用户 ID
     * @param {Number} streamType
     * - 高清大画面:TRTCVideoStreamType.TRTCVideoStreamTypeBig
     * - 低清小画面:TRTCVideoStreamType.TRTCVideoStreamTypeSmall
     * - 辅流(屏幕分享):TRTCVideoStreamType.TRTCVideoStreamTypeSub
     * @memberof TrtcCloud
     * @example
     * import { TRTCVideoStreamType } from '@/TrtcCloud/lib/TrtcDefines';
     * this.trtcCloud.stopRemoteView(remoteUserId, TRTCVideoStreamType.TRTCVideoStreamTypeBig);
     */
    stopRemoteView(userId, streamType) {
        return TrtcCloudImpl._getInstance().stopRemoteView(userId, streamType);
    }
    /**
     * 设置远端画面的渲染参数,可设置的参数包括有:画面的旋转角度、填充模式以及左右镜像等。
     * @param {String} userId 远端用户 ID
     * @param {Number} streamType 可以设置为主路画面(TRTCVideoStreamTypeBig)或辅路画面(TRTCVideoStreamTypeSub)
     * @param {TRTCRenderParams} params - 图像的参数
     * @param {TRTCVideoRotation} params.rotation - 图像的顺时针旋转角度,支持90、180以及270旋转角度,默认值:TRTCVideoRotation.TRTCVideoRotation_0
     * @param {TRTCVideoFillMode} params.fillMode - 视频画面填充模式,填充(画面可能会被拉伸裁剪)或适应(画面可能会有黑边),默认值:TRTCVideoFillMode.TRTCVideoFillMode_Fill
     * @param {TRTCVideoMirrorType} params.mirrorType - 画面镜像模式,默认值:TRTCVideoMirrorType.TRTCVideoMirrorType_Auto
     * @memberof TrtcCloud
     * @example
     * import { TRTCVideoRotation, TRTCVideoFillMode, TRTCVideoMirrorType } from '@/TrtcCloud/lib/TrtcDefines';
     * const renderParams = {
     *  rotation: TRTCVideoRotation.TRTCVideoRotation_0,
     *  fillMode: TRTCVideoFillMode.TRTCVideoFillMode_Fill,
     *  mirrorType: TRTCVideoMirrorType.TRTCVideoMirrorType_Auto
     * };
     * this.trtcCloud.setRemoteRenderParams(userId, TRTCVideoStreamType.TRTCVideoStreamTypeBig, renderParams);
     */
    setRemoteRenderParams(userId, streamType, params) { }
    /**
     * 设置视频编码器输出的画面方向<br>
     * 该设置不影响本地画面的预览方向,但会影响房间中其他用户所观看到(以及云端录制文件)的画面方向。
     * 当用户将手机或 Pad 上下颠倒时,由于摄像头的采集方向没有变,所以房间中其他用户所看到的画面会变成上下颠倒的,
     * 在这种情况下,您可以通过调用该接口将 SDK 编码出的画面方向旋转180度,如此一来,房间中其他用户所看到的画面可保持正常的方向。
     * 如果您希望实现上述这种友好的交互体验,我们更推荐您直接调用 setGSensorMode 实现更加智能的方向适配,无需您手动调用本接口。
     * @param {Number} rotation 目前支持 0、90、180、270 两个旋转角度,默认值:TRTCVideoRotation_0,即不旋转。
     * @memberof TrtcCloud
     * @example
     * import { TRTCVideoRotation } from '@/TrtcCloud/lib/TrtcDefines';
     * this.trtcCloud.setVideoEncoderRotation(TRTCVideoRotation.TRTCVideoRotation_90);
     */
    setVideoEncoderRotation(rotation) {
        return TrtcCloudImpl._getInstance().setVideoEncoderRotation(rotation);
    }
    /**
     * 设置编码器输出的画面镜像模式
     * @param {Boolean} mirror 是否开启远端镜像,true:开启远端画面镜像;false:关闭远端画面镜像,默认值:false。
     * @memberof TrtcCloud
     * @example
     * this.trtcCloud.setVideoEncoderMirror(true);
     */
    setVideoEncoderMirror(mirror) {
        return TrtcCloudImpl._getInstance().setVideoEncoderMirror(mirror);
    }
    /**
     * 设置重力感应的适配模式<br>
     * 您可以通过本接口实现如下这种友好的交互体验:
     * 当用户将手机或 Pad 上下颠倒时,由于摄像头的采集方向没有变,所以房间中其他用户所看到的画面会变成上下颠倒的,
     * 在这种情况下,您可以通过调用该接口让 SDK 根据设备陀螺仪的朝向自动调整本地画面和编码器输出画面的旋转方向,以使远端观众可以看到正常朝向的画面。
     * @param {Number} mode 重力感应模式,详情请参见 TRTCGSensorMode,默认值:TRTCGSensorMode_UIAutoLayout。。
     * @memberof TrtcCloud
     * @example
     * import { TRTCGSensorMode } from '@/TrtcCloud/lib/TrtcDefines';
     * this.trtcCloud.setGSensorMode(TRTCGSensorMode.TRTC_GSENSOR_MODE_DISABLE);
     */
    setGSensorMode(mode) {
        return TrtcCloudImpl._getInstance().setGSensorMode(mode);
    }
    /**
     * 视频画面截图
     *
     * 您可以通过本接口截取本地的视频画面,远端用户的主路画面以及远端用户的辅路(屏幕分享)画面。
     *
     * @param {String | null} userId 用户 ID,如指定 null 表示截取本地的视频画面
     * @param {Number} streamType 视频流类型,可选择截取主路画面(TRTCVideoStreamTypeBig,常用于摄像头)或辅路画面(TRTCVideoStreamTypeSub,常用于屏幕分享)
     * @param {TRTCSnapshotSourceType} sourceType 画面来源,可选择截取视频流画面(TRTCSnapshotSourceTypeStream)或视频渲染画面(TRTCSnapshotSourceTypeView),前者一般更清晰
     *
     * @memberof TrtcCloud
     * @example
     * import { TRTCVideoStreamType } from '@/TrtcCloud/lib/TrtcDefines';
     * this.trtcCloud.snapshotVideo(null, TRTCVideoStreamType.TRTCVideoStreamTypeBig, TRTCSnapshotSourceType.TRTCSnapshotSourceTypeStream); // 截取本地视频流画面
     * this.trtcCloud.snapshotVideo(this.remoteUserId, TRTCVideoStreamType.TRTCVideoStreamTypeBig, TRTCSnapshotSourceType.TRTCSnapshotSourceTypeView); // 截取远端指定用户视频渲染画面
     */
    snapshotVideo(userId, streamType, sourceType) {
        return TrtcCloudImpl._getInstance().snapshotVideo(userId, streamType, sourceType);
    }
    /**
     * 开启本地音频的采集和上行, 并设置音频质量<br>
     * 该函数会启动麦克风采集,并将音频数据传输给房间里的其他用户。 SDK 不会默认开启本地音频采集和上行,您需要调用该函数开启,否则房间里的其他用户将无法听到您的声音<br>
     * 主播端的音质越高,观众端的听感越好,但传输所依赖的带宽也就越高,在带宽有限的场景下也更容易出现卡顿
     *
     * @param {TRTCAudioQuality} quality 声音音质
     * - TRTCAudioQualitySpeech,流畅:采样率:16k;单声道;音频裸码率:16kbps;适合语音通话为主的场景,比如在线会议,语音通话。
     * - TRTCAudioQualityDefault,默认:采样率:48k;单声道;音频裸码率:50kbps;SDK 默认的音频质量,如无特殊需求推荐选择之。
     * - TRTCAudioQualityMusic,高音质:采样率:48k;双声道 + 全频带;音频裸码率:128kbps;适合需要高保真传输音乐的场景,比如在线K歌、音乐直播等
     * @memberof TrtcCloud
     * @example
     * import { TRTCAudioQuality } from '@/TrtcCloud/lib/TrtcDefines';
     * this.trtcCloud.startLocalAudio(TRTCAudioQuality.TRTCAudioQualityDefault);
     */
    startLocalAudio(quality) {
        return TrtcCloudImpl._getInstance().startLocalAudio(quality);
    }
    /**
     * 关闭本地音频的采集和上行<br>
     * 当关闭本地音频的采集和上行,房间里的其它成员会收到 `onUserAudioAvailable(false)` 回调通知
     *
     * @memberof TrtcCloud
     * @example
     * this.trtcCloud.stopLocalAudio();
     */
    stopLocalAudio() {
        return TrtcCloudImpl._getInstance().stopLocalAudio();
    }
    /**
     * 静音本地的音频
     *
     * 当静音本地音频后,房间里的其它成员会收到 onUserAudioAvailable(false) 回调通知。
     * 与 stopLocalAudio 不同之处在于,muteLocalAudio 并不会停止发送音视频数据,而是会继续发送码率极低的静音包。
     * 在对录制质量要求很高的场景中,选择 muteLocalAudio 是更好的选择,能录制出兼容性更好的 MP4 文件。
     * 这是由于 MP4 等视频文件格式,对于音频的连续性是要求很高的,简单粗暴地 stopLocalAudio 会导致录制出的 MP4 不易播放。
     *
     * @param {Boolean} mute - true:屏蔽;false:开启,默认值:false
     *
     * @memberof TrtcCloud
     * @example
     * this.trtcCloud.muteLocalAudio(true);
     */
    muteLocalAudio(mute) {
        return TrtcCloudImpl._getInstance().muteLocalAudio(mute);
    }
    /**
     * 静音掉某一个用户的声音,同时不再拉取该远端用户的音频数据流
     *
     * @param {String}  userId - 用户 ID
     * @param {Boolean} mute   - true:静音;false:非静音
     *
     * @memberof TrtcCloud
     * @example
     * this.trtcCloud.muteRemoteAudio('denny', true);
     */
    muteRemoteAudio(userId, mute) {
        return TrtcCloudImpl._getInstance().muteRemoteAudio(userId, mute);
    }
    /**
     * 静音掉所有用户的声音,同时不再拉取该远端用户的音频数据流
     *
     * @param {Boolean} mute - true:静音;false:非静音
     *
     * @memberof TrtcCloud
     * @example
     * this.trtcCloud.muteAllRemoteAudio(true);
     */
    muteAllRemoteAudio(mute) {
        return TrtcCloudImpl._getInstance().muteAllRemoteAudio(mute);
    }
    /**
     * 设置音频路由
     *
     * 设置“音频路由”,即设置声音是从手机的扬声器还是从听筒中播放出来,因此该接口仅适用于手机等移动端设备。 手机有两个扬声器:一个是位于手机顶部的听筒,一个是位于手机底部的立体声扬声器。
     * 设置音频路由为听筒时,声音比较小,只有将耳朵凑近才能听清楚,隐私性较好,适合用于接听电话。 设置音频路由为扬声器时,声音比较大,不用将手机贴脸也能听清,因此可以实现“免提”的功能。
     *
     * @param {TRTCAudioRoute} route 音频路由,即声音由哪里输出(扬声器、听筒), 默认值:TRTCAudioRoute.TRTCAudioRouteSpeaker(扬声器),
     * @memberof TrtcCloud
     * @example
     * import { TRTCAudioRoute } from '@/TrtcCloud/lib/TrtcDefines';
     * this.trtcCloud.setAudioRoute(TRTCAudioRoute.TRTCAudioRouteSpeaker); // TRTCAudioRoute.TRTCAudioRouteEarpiece (听筒)
     */
    setAudioRoute(route) {
        return TrtcCloudImpl._getInstance().setAudioRoute(route);
    }
    /**
     * 启用或关闭音量大小提示
     *
     * 开启此功能后,SDK 会在 onUserVoiceVolume() 中反馈对每一路声音音量大小值的评估。
     *
     * **Note:**
     * - 如需打开此功能,请在 startLocalAudio 之前调用才可以生效。
     *
     * @param {Number} interval - 设置 onUserVoiceVolume 回调的触发间隔,单位为ms,最小间隔为100ms,如果小于等于0则会关闭回调,建议设置为300ms
     * @memberof TrtcCloud
     * @example
     * this.trtcCloud.enableAudioVolumeEvaluation(300);
     */
    enableAudioVolumeEvaluation(interval) {
        return TrtcCloudImpl._getInstance().enableAudioVolumeEvaluation(interval);
    }
    /////////////////////////////////////////////////////////////////////////////////
    //
    //                      屏幕分享
    //
    /////////////////////////////////////////////////////////////////////////////////
    /**
     * 设置屏幕分享(即辅路)的视频编码参数
     *
     * 该接口可以设定远端用户所看到的屏幕分享(即辅路)的画面质量,同时也能决定云端录制出的视频文件中屏幕分享的画面质量。 请注意如下两个接口的差异:
     *  - setVideoEncoderParam 用于设置主路画面(TRTCVideoStreamTypeBig,一般用于摄像头)的视频编码参数。
     *  - setSubStreamEncoderParam 用于设置辅路画面(TRTCVideoStreamTypeSub,一般用于屏幕分享)的视频编码参数。
     *
     * **Note:**
     *  - 即使您使用主路传输屏幕分享(在调用 startScreenCapture 时设置 type=TRTCVideoStreamTypeBig),依然要使用 setSubStreamEncoderParam 设定屏幕分享的编码参数,而不要使用 setVideoEncoderParam
     * @param {TRTCVideoEncParam} param    辅流编码参数,详情请参考 TRTCVideoEncParam。
     * @memberof TrtcCloud
     * @example
     * const params = {
     *   videoResolution: TRTCVideoResolution.TRTCVideoResolution_640_360,
     *   videoResolutionMode: TRTCVideoResolutionMode.TRTCVideoResolutionModePortrait,
     *   videoFps: 15,
     *   videoBitrate: 900,
     *   minVideoBitrate: 200,
     *   enableAdjustRes: false,
     * };
     * this.trtcCloud.setSubStreamEncoderParam(params);
     */
    setSubStreamEncoderParam(param) {
        return TrtcCloudImpl._getInstance().setSubStreamEncoderParam(param);
    }
    /**
     * 启动屏幕分享
     *
     * **Note:**
     *  - 一个用户同时最多只能上传一条主路(TRTCVideoStreamTypeBig)画面和一条辅路(TRTCVideoStreamTypeSub)画面,
     * 默认情况下,屏幕分享使用辅路画面,如果使用主路画面,建议您提前停止摄像头采集(stopLocalPreview)避免相互冲突。
     *  - **仅支持 iOS 13.0 及以上系统,进行应用内的屏幕分享;若要应用外屏幕分享,需填写 shareParams.appGroup 字段。**
     *  - **Android: UniApp 使用 SDK 内置的前台服务时,只需要将接口参数 enableForegroundService 设置为 true。**
     *  - **Android: UniApp 自己启动前台,需要在 mediaProject 类型的前台服务成功后再启动屏幕分享。**
     *
     * @param {Number} streamType 屏幕分享使用的线路,可以设置为主路(TRTCVideoStreamTypeBig)或者辅路(TRTCVideoStreamTypeSub),推荐使用
     * @param {TRTCVideoEncParam} encParams 屏幕分享的画面编码参数,可以设置为 null,表示让 SDK 选择最佳的编码参数(分辨率、码率等)。即使在调用 startScreenCapture 时设置 type=TRTCVideoStreamTypeBig,依然可以使用此接口更新屏幕分享的编码参数。
     * @param {TRTCScreenShareParams} shareParams 您可以通过其中的 enableForegroundService 参数启用 SDK 内置的前台服务; 当 appGroup 正确填写时,会开启 iOS 系统屏幕分享;如果不填写 appGroup, 则默认使用应用内屏幕分享。
     * @memberof TrtcCloud
     * @example
     * import { TRTCVideoResolution, TRTCVideoResolutionMode, TRTCVideoStreamType} from '@/TrtcCloud/lib/TrtcDefines';
     * const encParams = {
     *   videoResolution: TRTCVideoResolution.TRTCVideoResolution_640_360,
     *   videoResolutionMode: TRTCVideoResolutionMode.TRTCVideoResolutionModePortrait,
     *   videoFps: 15,
     *   videoBitrate: 900,
     *   minVideoBitrate: 200,
     *   enableAdjustRes: false,
     * };
     * const shareParams = {
     *   enableForegroundService: true,
     *   appGroup: 'xxx',
     * };
     * this.trtcCloud.startScreenCapture(TRTCVideoStreamType.TRTCVideoStreamTypeSub, encParams, shareParams);
     */
    startScreenCapture(streamType = TRTCVideoStreamType.TRTCVideoStreamTypeSub, encParams = null, shareParams = {}) {
        return TrtcCloudImpl._getInstance().startScreenCapture(streamType, encParams, shareParams);
    }
    /**
     * 停止屏幕分享
     * @memberof TrtcCloud
     * @example
     * this.trtcCloud.stopScreenCapture();
     */
    stopScreenCapture() {
        return TrtcCloudImpl._getInstance().stopScreenCapture();
    }
    /**
     * 暂停屏幕分享
     * @memberof TrtcCloud
     * @example
     * this.trtcCloud.pauseScreenCapture();
     */
    pauseScreenCapture() {
        return TrtcCloudImpl._getInstance().pauseScreenCapture();
    }
    /**
     * 恢复屏幕分享
     * @memberof TrtcCloud
     * @example
     * this.trtcCloud.resumeScreenCapture();
     */
    resumeScreenCapture() {
        return TrtcCloudImpl._getInstance().resumeScreenCapture();
    }
    /**
     * 设置系统音量类型(仅适用于移动设备)
     *
     * @param {TXSystemVolumeType} type 系统音量类型
     *
     * @memberof TrtcCloud
     * @example
     * this.trtcCloud.setSystemVolumeType(TXSystemVolumeType.TXSystemVolumeTypeAuto)
     */
    setSystemVolumeType(type) {
        return TrtcCloudImpl._getInstance().setSystemVolumeType(type);
    }
    /**
    * 设置本地画面被暂停期间的替代图片
    *
    * 当您调用 muteLocaLVideo(true)暂停本地画面时,您可以通过调用本接口设置一张替代图片,设置后,房间中的其他用户会看到这张替代图片,而不是黑屏画面。
    *
    * @param {Number} fps 设置替代图片帧率,最小值为5,最大值为10,默认5。
    * @param {String} image 设置替代图片,空值代表在 muteLocalVideo 之后不再发送视频流数据,默认值为空。
    * @memberof TrtcCloud
    * @example
    * this.trtcCloud.setVideoMuteImage(6, 'xxxx');
    */
    setVideoMuteImage(fps, image) {
        return TrtcCloudImpl._getInstance().setVideoMuteImage(fps, image);
    }
    /**
    * 开启大小画面双路编码模式
    *
    * 开启双路编码模式后,当前用户的编码器会同时输出【高清大画面】和【低清小画面】两路视频流(但只有一路音频流)。
    * 如此以来,房间中的其他用户就可以根据自身的网络情况或屏幕大小选择订阅【高清大画面】或是【低清小画面】。
 
    * @param {Boolean} enable 是否开启小画面编码,默认值:false。
    * @param {TRTCVideoEncParam} smallVideoEncParam 小流的视频参数。
    *
    * @memberof TrtcCloud
    * @example
    * import { TRTCVideoEncParam, TRTCVideoResolution, TRTCVideoResolutionMode } from '@/TrtcCloud/lib/TrtcDefines';
    * this.trtcCloud.enableEncSmallVideoStream(true, {videoResolution: TRTCVideoResolution.TRTCVideoResolution_120_120, videoResolutionMode: TRTCVideoResolutionMode.TRTCVideoResolutionModeLandscape})
    */
    enableEncSmallVideoStream(enable, smallVideoEncParam) {
        return TrtcCloudImpl._getInstance().enableEncSmallVideoStream(enable, smallVideoEncParam);
    }
    /////////////////////////////////////////////////////////////////////////////////
    //
    //                      美颜 + 水印
    //
    /////////////////////////////////////////////////////////////////////////////////
    /**
     * 设置美颜(磨皮)算法
     * TRTC 内置多种不同的磨皮算法,您可以选择最适合您产品定位的方案
     *
     * **Note:**
     * - 设置美颜前,先调用 `setBeautyLevel` 设置美颜级别。否则美颜级别为 0 表示关闭美颜
     *
     * @param {TRTCBeautyStyle} beautyStyle 美颜风格,TRTCBeautyStyleSmooth:光滑;TRTCBeautyStyleNature:自然;TRTCBeautyStylePitu:优图
     * @memberof TrtcCloud
     * @example
     * import { TRTCBeautyStyle } from '@/TrtcCloud/lib/TrtcDefines';
     * const beautyLevel = 5; // 美颜级别,取值范围0 - 9; 0表示关闭,9表示效果最明显。
     * this.trtcCloud.setBeautyLevel(beautyLevel);
     * this.trtcCloud.setBeautyStyle(TRTCBeautyStyle.TRTCBeautyStyleSmooth);
     */
    setBeautyStyle(beautyStyle) {
        return TrtcCloudImpl._getInstance().setBeautyStyle(beautyStyle);
    }
    /**
     * 设置美颜级别
     * @param {Number} beautyLevel    美颜级别,取值范围0 - 9; 0表示关闭,9表示效果最明显。
     *
     * @memberof TrtcCloud
     * @example
     * const beautyLevel = 5; // 美颜级别,取值范围0 - 9; 0表示关闭,9表示效果最明显。
     * this.trtcCloud.setBeautyLevel(beautyLevel);
     */
    setBeautyLevel(beautyLevel) {
        return TrtcCloudImpl._getInstance().setBeautyLevel(beautyLevel);
    }
    /////////////////////////////////////////////////////////////////////////////////
    //
    //                      背景音效
    //
    /////////////////////////////////////////////////////////////////////////////////
    /**
     * 开始播放背景音乐
     * 每个音乐都需要您指定具体的 ID,您可以通过该 ID 对音乐的开始、停止、音量等进行设置。<br>
     * **Note:**
     * - 如果要多次播放同一首背景音乐,请不要每次播放都分配一个新的 ID,我们推荐使用相同的 ID。
     * - 若您希望同时播放多首不同的音乐,请为不同的音乐分配不同的 ID 进行播放。
     * - 如果使用同一个 ID 播放不同音乐,SDK 会先停止播放旧的音乐,再播放新的音乐。
     *
     * **Note:**<br>
     * 在 uni-app 中 path 如何获取。
     * - 使用 cdn 地址,例如:`path = https://web.sdk.qcloud.com/component/TUIKit/assets/uni-app/calling-bell-1.mp3;`
     * - 使用本地绝对路径。
     *     1. 通过 [uni.saveFile](https://zh.uniapp.dcloud.io/api/file/file.html#savefile) 获取保存后的相对路径(建议这种路径)。
     *     2. 将上一步的相对路径转成绝对路径,[plus.io.convertLocalFileSystemURL](https://www.html5plus.org/doc/zh_cn/io.html#plus.io.convertLocalFileSystemURL)。
     *
     * @param {AudioMusicParam} musicParam 音乐参数
     * @param {Number} musicParam.id 音乐 ID
     * @param {String} musicParam.path 音效文件的完整路径或 URL 地址。支持的音频格式包括 MP3、AAC、M4A、WAV
     * @param {Number} musicParam.loopCount 音乐循环播放的次数。取值范围为0 - 任意正整数,默认值:0。0表示播放音乐一次;1表示播放音乐两次;以此类推
     * @param {Boolean} musicParam.publish 是否将音乐传到远端。true:音乐在本地播放的同时,远端用户也能听到该音乐;false:主播只能在本地听到该音乐,远端观众听不到。默认值:false。
     * @param {Boolean} musicParam.isShortFile 播放的是否为短音乐文件。true:需要重复播放的短音乐文件;false:正常的音乐文件。默认值:false
     * @param {Number} musicParam.startTimeMS 音乐开始播放时间点,单位: 毫秒。
     * @param {Number} musicParam.endTimeMS 音乐结束播放时间点,单位: 毫秒,0 表示播放至文件结尾。
     * @memberof TrtcCloud
     * @example
     * import { AudioMusicParam } from '@/TrtcCloud/lib/TrtcDefines';
     * const musicParam = {
     *  id: 1,
     *  path: '',
     *  loopCount: 1,
     *  publish: true,
     *  isShortFile: false,
     *  startTimeMS: 0,
     *  endTimeMS: 0,
     * };
     * this.trtcCloud.startPlayMusic(musicParam);
     */
    startPlayMusic(musicParam) {
        return TrtcCloudImpl._getInstance().startPlayMusic(musicParam);
    }
    /**
     * 停止播放背景音乐
     * @param {Number} id    音乐 ID
     *
     * @memberof TrtcCloud
     * @example
     * const musicId = 5;
     * this.trtcCloud.stopPlayMusic(musicId);
     */
    stopPlayMusic(id) {
        return TrtcCloudImpl._getInstance().stopPlayMusic(id);
    }
    /**
     * 暂停播放背景音乐
     * @param {Number} id    音乐 ID
     * @memberof TrtcCloud
     * @example
     * const musicId = 5;
     * this.trtcCloud.pausePlayMusic(musicId);
     */
    pausePlayMusic(id) {
        return TrtcCloudImpl._getInstance().pausePlayMusic(id);
    }
    /**
     * 恢复播放背景音乐
     * @param {Number} id    音乐 ID
     * @memberof TrtcCloud
     * @example
     * const musicId = 5;
     * this.trtcCloud.resumePlayMusic(musicId);
     */
    resumePlayMusic(id) {
        return TrtcCloudImpl._getInstance().resumePlayMusic(id);
    }
    /**
     * 调用实验性接口
     * @param {any} params 实验性接口参数
     * @memberof TrtcCloud
     * @example
     * this.trtcCloud.callExperimentalAPI(params);
     */
    callExperimentalAPI(params) {
        return TrtcCloudImpl._getInstance().callExperimentalAPI(params);
    }
    /**
     * 使用 UDP 通道发送自定义消息给房间内所有用户<br>
     * 该接口可以让您借助 TRTC 的 UDP 通道,向当前房间里的其他用户广播自定义数据,以达到传输信令的目的。
     * 房间中的其他用户可以通过 onRecvCustomCmdMsg 事件接收消息。
     *
     * **Note:**
     * 1. 发送消息到房间内所有用户(暂时不支持 Web/小程序端),每秒最多能发送30条消息(与 {sendSEIMsg} 共享限制)。
     * 2. 每个包最大为 1KB,超过则很有可能会被中间路由器或者服务器丢弃。
     * 3. 每个客户端每秒最多能发送总计 16KB 数据(与 {sendSEIMsg} 共享限制)。
     * 4. 请将 `reliable` 和 `ordered` 同时设置为 true 或同时设置为 false,暂不支持交叉设置。
     * 5. 强烈建议您将不同类型的消息设定为不同的 cmdID,这样可以在要求有序的情况下减小消息时延。
     *
     * @param {any} params - 参数
     * @param {Number} params.cmdID     - 消息 ID,取值范围为 [1, 10]
     * @param {String} params.data      - 待发送的消息,单个消息的最大长度被限制为 1KB
     * @param {Boolean} params.reliable - 是否可靠发送,可靠发送可以获得更高的发送成功率,但可靠发送比不可靠发送会带来更大的接收延迟
     * @param {Number} params.ordered   - 是否要求有序,即是否要求接收端的数据包顺序和发送端的数据包顺序一致(这会带来一定的接收延时)
     * @return true:消息已经发出;false:消息发送失败。
 
     * @memberof TrtcCloud
     * @example
     * const params = {
     *  cmdID: 1,
     *  data: 'hello world',
     *  reliable: true,
     *  ordered: true,
     * };
     * this.trtcCloud.sendCustomCmdMsg(params);
     */
    sendCustomCmdMsg(params) {
        return TrtcCloudImpl._getInstance().sendCustomCmdMsg(params);
    }
    /////////////////////////////////////////////////////////////////////////////////
    //
    //                       设置 TRTCCallback 回调
    //
    /////////////////////////////////////////////////////////////////////////////////
    /**
     * 设置 TrtcCloud 回调
     *
     * @example
     * // 创建/使用/销毁 TrtcCloud 对象的示例代码:
     * import TrtcCloud from '@/TrtcCloud/lib/index';
     * this.trtcCloud = new TrtcCloud();
     *
     * // 添加事件监听的方法,事件关键字详见下方”通用事件回调“
     * this.trtcCloud.on('onEnterRoom', (result) => {
     *   if (result > 0) {
     *     console.log(`enter room success, spend ${result}ms`);
     *   } else {
     *     console.log(`enter room failed, error code = ${result}`);
     *   }
     * });
     *
     * @namespace TRTCCallback
     */
    /////////////////////////////////////////////////////////////////////////////////
    //
    //                      (一)事件回调
    //
    /////////////////////////////////////////////////////////////////////////////////
    /**
     * 错误回调,表示 SDK 不可恢复的错误,一定要监听并分情况给用户适当的界面提示<br>
     * @event TRTCCallback#onError
     * @param {Number} code 错误码,[详见](https://cloud.tencent.com/document/product/647/38308#.E9.94.99.E8.AF.AF.E7.A0.81.E8.A1.A8)
     * @param {String} message 错误信息
     * @param {Object} extraInfo 扩展信息字段,个别错误码可能会带额外的信息帮助定位问题
     */
    onError(code, message, extraInfo) { }
    /**
     * 警告回调,用于告知您一些非严重性问题,例如出现卡顿或者可恢复的解码失败<br>
     * @event TRTCCallback#onWarning
     * @param {Number} code 警告码,[详见](https://cloud.tencent.com/document/product/647/38308#.E8.AD.A6.E5.91.8A.E7.A0.81.E8.A1.A8)
     * @param {String} message 警告信息
     * @param {Object} extraInfo 扩展信息字段,个别警告码可能会带额外的信息帮助定位问题
     */
    onWarning(code, message, extraInfo) { }
    /**
     * 进房后的回调<br>
     * 调用 `enterRoom()` 接口执行进房操作后,会收到 `onEnterRoom(result)` 回调<br>
     * 如果加入成功,result 会是一个正数(result > 0),代表加入房间的时间消耗,单位是毫秒(ms)。<br>
     * 如果加入失败,result 会是一个负数(result < 0),代表进房失败的错误码。
     *
     * @event TRTCCallback#onEnterRoom
     * @param {Number} result 进房耗时
     */
    onEnterRoom(result) { }
    /**
     * 离开房间的事件回调<br>
     * 调用 `exitRoom()` 接口会执行退出房间的相关逻辑,例如释放音视频设备资源和编解码器资源等。待资源释放完毕,会通过 `onExitRoom()` 回调通知到您<br>
     *
     * **Note:**
     * - 如果您要再次调用 `enterRoom()` 或者切换到其他的音视频 SDK,请等待 `onExitRoom()` 回调到来之后再执行相关操作。 否则可能会遇到音频设备被占用等各种异常问题
     *
     * @event TRTCCallback#onExitRoom
     * @param {Number} reason 离开房间原因,0:主动调用 exitRoom 退房;1:被服务器踢出当前房间;2:当前房间整个被解散
     */
    onExitRoom(reason) { }
    /**
     * 跨房通话事件回调<br>
     * 调用 TRTCCloud 中的 [connectOtherRoom()](https://web.sdk.qcloud.com/trtc/uniapp/doc/zh-cn/TrtcCloud.html#connectOtherRoom) 接口会将两个不同房间中的主播拉通视频通话,也就是所谓的“主播PK”功能。
     * 调用者会收到 onConnectOtherRoom() 事件回调来获知跨房通话是否成功, 如果成功,两个房间中的所有用户都会收到来自另一个房间中的 PK 主播的 [onUserVideoAvailable()](http://127.0.0.1:5500/UniApp-TRTC-SDK/packages/TrtcCloud/docs/zh-cn/api/TRTCCallback.html#event:onUserVideoAvailable) 回调。
     *
     * @event TRTCCallback#onConnectOtherRoom
     * @param {Object} params 调用 [connectOtherRoom()](https://web.sdk.qcloud.com/trtc/uniapp/doc/zh-cn/TrtcCloud.html#connectOtherRoom) 接口返回值数据。
     * - userId:跨房通话时对端 userId
     * - errCode: [错误状态码](https://cloud.tencent.com/document/product/647/38308#.E8.AD.A6.E5.91.8A.E7.A0.81.E8.A1.A8),返回0表示跨房通话成功。
     * - errMsg: 状态信息,跨房通话成功返回 OK。
     */
    onConnectOtherRoom(params) { }
    /**
     * 结束跨房通话的结果回调<br>
     * 调用 TRTCCloud 中的 [disconnectOtherRoom()](https://web.sdk.qcloud.com/trtc/uniapp/doc/zh-cn/TrtcCloud.html#disconnectOtherRoom) 接口会将两个不同房间中的主播拉通视频通话,也就是所谓的“主播PK”功能。
     * 调用者会收到 onDisconnectOtherRoom() 事件回调来获知结束跨房通话是否成功。
     *
     * @event TRTCCallback#onDisconnectOtherRoom
     * @param {Object} params 调用 [disconnectOtherRoom()](https://web.sdk.qcloud.com/trtc/uniapp/doc/zh-cn/TrtcCloud.html#disconnectOtherRoom) 失败时返回的错误数据。
     * - errCode: [错误状态码](https://cloud.tencent.com/document/product/647/38308#.E8.AD.A6.E5.91.8A.E7.A0.81.E8.A1.A8)。
     * - errMsg: 错误信息。
     */
    onDisconnectOtherRoom(params) { }
    /**
     * 切换角色的事件回调<br>
     * 调用 TRTCCloud 中的 switchRole() 接口会切换主播和观众的角色,该操作会伴随一个线路切换的过程, 待 SDK 切换完成后,会抛出 onSwitchRole() 事件回调
     *
     * @event TRTCCallback#onSwitchRole
     * @param {Number} code 错误码,[详见](https://cloud.tencent.com/document/product/647/38308#.E8.AD.A6.E5.91.8A.E7.A0.81.E8.A1.A8)
     * @param {String} message 错误信息
     */
    onSwitchRole(code, message) { }
    /**
     * 开始渲染本地或远程用户的首帧画面<br>
     * 如果 userId 为 null,代表开始渲染本地采集的摄像头画面,需要您先调用 `startLocalPreview` 触发。 如果 userId 不为 null,代表开始渲染远程用户的首帧画面,需要您先调用 `startRemoteView` 触发<br>
     * 只有当您调用 `startLocalPreview()、startRemoteView() 或 startRemoteSubStreamView()` 之后,才会触发该回调
     *
     * @event TRTCCallback#onFirstVideoFrame
     * @param {String} userId 本地或远程用户 ID,如果 userId === null 代表本地,userId !== null 代表远程
     * @param {Number} streamType 视频流类型:摄像头或屏幕分享
     * @param {Number} width 画面宽度
     * @param {Number} height 画面高度
     */
    onFirstVideoFrame(userId, streamType, width, height) { }
    /**
     * 开始播放远程用户的首帧音频(本地声音暂不通知)<br>
     * 如果 userId 为 null,代表开始渲染本地采集的摄像头画面,需要您先调用 `startLocalPreview` 触发。 如果 userId 不为 null,代表开始渲染远程用户的首帧画面,需要您先调用 `startRemoteView` 触发<br>
     * 只有当您调用 `startLocalPreview()、startRemoteView() 或 startRemoteSubStreamView()` 之后,才会触发该回调
     *
     * @event TRTCCallback#onFirstAudioFrame
     * @param {String} userId 远程用户 ID
     */
    onFirstAudioFrame(userId) { }
    /**
     * 截图完成时回调<br>
     * @event TRTCCallback#onSnapshotComplete
     * @param {String} base64Data 截图对应的 base64 数据
     * @param {String} message 错误信息
     */
    onSnapshotComplete(base64Data, message) { }
    /**
     * 麦克风准备就绪
     */
    onMicDidReady() { }
    /**
     * 摄像头准备就绪
     */
    onCameraDidReady() { }
    /**
     * 网络质量:该回调每2秒触发一次,统计当前网络的上行和下行质量<br>
     * userId 为本地用户 ID 代表自己当前的视频质量
     *
     * @param {String} localQuality 上行网络质量
     * @param {String} remoteQuality 下行网络质量
     */
    onNetworkQuality(localQuality, remoteList) { }
    /**
     * 有用户加入当前房间<br>
     * 出于性能方面的考虑,在两种不同的应用场景下,该通知的行为会有差别:<br>
     * 通话场景(TRTCAppScene.TRTCAppSceneVideoCall 和 TRTCAppScene.TRTCAppSceneAudioCall):该场景下用户没有角色的区别,任何用户进入房间都会触发该通知。<br>
     * 直播场景(TRTCAppScene.TRTCAppSceneLIVE 和 TRTCAppScene.TRTCAppSceneVoiceChatRoom ):该场景不限制观众的数量,如果任何用户进出都抛出回调会引起很大的性能损耗,所以该场景下只有主播进入房间时才会触发该通知,观众进入房间不会触发该通知
     *
     * @event TRTCCallback#onRemoteUserEnterRoom
     * @param {String} userId 用户标识 ID
     */
    onRemoteUserEnterRoom(userId) { }
    /**
     * 有用户离开当前房间<br>
     * 与 onRemoteUserEnterRoom 相对应,在两种不同的应用场景下,该通知的行为会有差别:<br>
     * 通话场景(TRTCAppScene.TRTCAppSceneVideoCall 和 TRTCAppScene.TRTCAppSceneAudioCall):该场景下用户没有角色的区别,任何用户进入房间都会触发该通知。<br>
     * 直播场景(TRTCAppScene.TRTCAppSceneLIVE 和 TRTCAppScene.TRTCAppSceneVoiceChatRoom ):该场景不限制观众的数量,如果任何用户进出都抛出回调会引起很大的性能损耗,所以该场景下只有主播进入房间时才会触发该通知,观众进入房间不会触发该通知
     *
     * @event TRTCCallback#onRemoteUserLeaveRoom
     * @param {String} userId 用户标识 ID
     * @param {Number} reason 离开原因,0 表示用户主动退出房间,1 表示用户超时退出,2 表示被踢出房间
     */
    onRemoteUserLeaveRoom(userId, reason) { }
    /**
     * 首帧本地音频数据已经被送出<br>
     * 在 `enterRoom()` 并 `startLocalAudio()` 成功后开始麦克风采集,并将采集到的声音进行编码。 当 SDK 成功向云端送出第一帧音频数据后,会抛出这个回调事件
     *
     * @event TRTCCallback#onSendFirstLocalAudioFrame
     */
    onSendFirstLocalAudioFrame() { }
    /**
     * 首帧本地视频数据已经被送出<br>
     * SDK 会在 `enterRoom()` 并 `startLocalPreview()` 成功后开始摄像头采集,并将采集到的画面进行编码。 当 SDK 成功向云端送出第一帧视频数据后,会抛出这个回调事件
     *
     * @event TRTCCallback#onSendFirstLocalVideoFrame
     * @param {Number} streamType 视频流类型,大画面、小画面或辅流画面(屏幕分享)
     */
    onSendFirstLocalVideoFrame(streamType) { }
    /**
     * 技术指标统计回调<br>
     * 如果您是熟悉音视频领域相关术语,可以通过这个回调获取 SDK 的所有技术指标。 如果您是首次开发音视频相关项目,可以只关注 `onNetworkQuality` 回调
     *
     * **Note:**
     * - 每 2 秒回调一次
     *
     * @param {Object} statics 状态数据
     */
    onStatistics(statics) { }
    /**
     * 远端用户是否存在可播放的音频数据<br>
     * @event TRTCCallback#onUserAudioAvailable
     * @param {String} userId 用户标识 ID
     * @param {Boolean} available 声音是否开启
     */
    onUserAudioAvailable(userId, available) { }
    /**
     * 远端用户是否存在可播放的主路画面(一般用于摄像头)<br>
     * 当您收到 `onUserVideoAvailable(userId, true)` 通知时,表示该路画面已经有可用的视频数据帧到达。 此时,您需要调用 `startRemoteView(userId)` 接口加载该用户的远程画面。 然后,您会收到名为 onFirstVideoFrame(userid) 的首帧画面渲染回调。<br>
     * 当您收到 `onUserVideoAvailable(userId, false)` 通知时,表示该路远程画面已经被关闭,可能由于该用户调用了 `muteLocalVideo()` 或 `stopLocalPreview()`。
     *
     * @event TRTCCallback#onUserVideoAvailable
     * @param {String} userId 用户标识 ID
     * @param {Boolean} available 画面是否开启
     */
    onUserVideoAvailable(userId, available) { }
    /**
     * 用于提示音量大小的回调,包括每个 userId 的音量和远端总音量<br>
     * SDK 可以评估每一路音频的音量大小,并每隔一段时间抛出该事件回调,您可以根据音量大小在 UI 上做出相应的提示,比如“波形图”或“音量槽”。 要完成这个功能, 您需要先调用 enableAudioVolumeEvaluation 开启这个能力并设定事件抛出的时间间隔。 需要补充说明的是,无论当前房间中是否有人说话,SDK 都会按照您设定的时间间隔定时抛出此事件回调,只不过当没有人说话时,userVolumes 为空,totalVolume 为 0。
     *
     * **Note:**
     * - userVolumes 为一个数组,对于数组中的每一个元素,当 userId 为空时表示本地麦克风采集的音量大小,当 userId 不为空时代表远端用户的音量大小
     *
     * @event TRTCCallback#onUserVoiceVolume
     * @param {Array} userVolumes 是一个数组,用于承载所有正在说话的用户的音量大小,取值范围 0 - 100
     * @param {Number} totalVolume 所有远端用户的总音量大小, 取值范围 0 - 100
     */
    onUserVoiceVolume(userVolumes, totalVolume) { }
    /**
     * 屏幕分享开启的事件回调<br>
     * 当您通过 startScreenCapture 等相关接口启动屏幕分享时,SDK 便会抛出此事件回调
     * @event TRTCCallback#onScreenCaptureStarted
     */
    onScreenCaptureStarted() { }
    /**
     * 屏幕分享停止的事件回调<br>
     * 当您通过 stopScreenCapture 停止屏幕分享时,SDK 便会抛出此事件回调
     * @event TRTCCallback#onScreenCaptureStopped
     * @param {Number} reason 停止原因,0:用户主动停止;1:屏幕窗口关闭导致停止;2:表示屏幕分享的显示屏状态变更(如接口被拔出、投影模式变更等)
     */
    onScreenCaptureStopped(reason) { }
    /**
     * 屏幕分享停止的事件回调<br>
     * 当您通过 pauseScreenCapture 停止屏幕分享时,SDK 便会抛出此事件回调
     * @event TRTCCallback#onScreenCapturePaused
     * @param {Number} reason 停止原因,0:用户主动停止;1:屏幕窗口关闭导致停止;2:表示屏幕分享的显示屏状态变更(如接口被拔出、投影模式变更等)
     */
    onScreenCapturePaused(reason) { }
    /**
     * 屏幕分享恢复的事件回调<br>
     * 当您通过 resumeScreenCapture 恢复屏幕分享时,SDK 便会抛出此事件回调
     * @event TRTCCallback#onScreenCaptureResumed
     */
    onScreenCaptureResumed() { }
    /**
     * 某远端用户发布/取消了辅路视频画面<br>
     * “辅路画面”一般被用于承载屏幕分享的画面。当您收到 onUserSubStreamAvailable(userId, true) 通知时,表示该路画面已经有可播放的视频帧到达。 此时,您需要调用 startRemoteView 接口订阅该用户的远程画面,订阅成功后,您会继续收到该用户的首帧画面渲染回调 onFirstVideoFrame(userId)
     *
     * **Note:**
     * - 拉取 Web 端(用 [WebRTC](https://web.sdk.qcloud.com/trtc/webrtc/doc/zh-cn/index.html) 实现屏幕分享)的屏幕分享,收不到 onUserSubStreamAvailable 事件。因为 [WebRTC](https://web.sdk.qcloud.com/trtc/webrtc/doc/zh-cn/index.html) 推的屏幕分享也是主流
     * @param {String} userId 用户 ID
     * @param {Boolean} available 是否可用,true 表示辅流可用
     * @event TRTCCallback#onUserSubStreamAvailable
     */
    onUserSubStreamAvailable(userId, available) { }
    /**
     * 用户视频大小发生改变回调。<br>
     * 当您收到 onUserVideoSizeChanged(userId, streamtype, newWidth, newHeight) 通知时,表示该路画面大小发生了调整,调整的原因可能是该用户调用了 setVideoEncoderParam 或者 setSubStreamEncoderParam 重新设置了画面尺寸。
     * @param {String} userId 用户 ID
     * @param {Number} streamType 视频流类型,仅支持 TRTCVideoStreamTypeBig 和 TRTCVideoStreamTypeSub
     * @param {Number} newWidth 视频流的宽度(像素)
     * @param {Number} newHeight 视频流的高度(像素)
     * @event TRTCCallback#onUserVideoSizeChanged
     */
    onUserVideoSizeChanged(userId, streamType, newWidth, newHeight) { }
    /**
     * 背景音乐开始播放
     * @param {Number} id 播放的 id
     * @param {Number} errCode 播放的状态码
     * @event TRTCCallback#onStart
     */
    onStart(id, errCode) { }
    /**
     * 背景音乐的播放进度
     * @param {Number} id 播放的 id
     * @param {Number} curPtsMS 当前播放的位置
     * @param {Number} durationMS 当前音频总时长
     * @event TRTCCallback#onPlayProgress
     */
    onPlayProgress(id, curPtsMS, durationMS) { }
    /**
     * 背景音乐已经播放完毕
     * @param {Number} id 播放的 id
     * @param {Number} errCode 播放结束的状态码
     * @event TRTCCallback#onComplete
     */
    onComplete(id, errCode) { }
    /**
      * 收到自定义消息的事件回调。
      *
      * 当房间中的某个用户使用 {sendCustomCmdMsg} 发送自定义 UDP 消息时,房间中的其他用户可以通过 `onRecvCustomCmdMsg` 事件回调接收到该条消息。
      * @param {String} userId 用户标识。
      * @param {Number} cmdID 命令 ID。
      * @param {Number} seq   消息序号。
      * @param {String} message 消息数据。
      * @event TRTCCallback#onRecvCustomCmdMsg
      */
    onRecvCustomCmdMsg(userId, cmdID, seq, message) { }
}