@rongcloud/plugin-rtc 5.32.0-c-im-alpha.2 → 5.34.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as _rongcloud_engine from '@rongcloud/engine';
2
- import { EventEmitter, BasicLogger, INaviInfo, LogL, EnableLogL, RTCPluginContext, Codec, IPromiseResult, ErrorCode, KVString, IRuntime, IAsyncRes, RCConnectionStatus, ConversationType, ISendMsgOptions, IReceivedMessage, RTCMode as RTCMode$1, IPluginGenerator } from '@rongcloud/engine';
2
+ import { EventEmitter, BasicLogger, INaviInfo, RTCPluginContext, Codec, IPromiseResult, ErrorCode, KVString, IRuntime, IAsyncRes, RCConnectionStatus, ConversationType, ISendMsgOptions, IReceivedMessage, LogL, EnableLogL, RTCMode as RTCMode$1, IPluginGenerator } from '@rongcloud/engine';
3
3
 
4
4
  /**
5
5
  * 错误码,与移动端对齐
@@ -28,6 +28,10 @@ declare enum RCRTCCode {
28
28
  SERVICE_INVALID = 50004,
29
29
  /** RTC Token 无效 */
30
30
  RTC_TOKEN_INVALID = 50006,
31
+ /** 后台未开通语音识别服务 */
32
+ ASR_NOT_AVAILABLE = 50034,
33
+ /** 此房间未开启语音识别服务 */
34
+ ASR_NOT_START = 50035,
31
35
  /** 底层信令调用错误 */
32
36
  SIGNAL_ERROR = 53001,
33
37
  /** 创建 Offer 失败 */
@@ -598,6 +602,24 @@ declare enum RTCMode {
598
602
  CALL = 5
599
603
  }
600
604
 
605
+ /**
606
+ * ASR 状态枚举
607
+ */
608
+ declare enum RCRTCASRStatus {
609
+ /**
610
+ * 无效值
611
+ */
612
+ VOID = "0",
613
+ /**
614
+ * 打开
615
+ */
616
+ OPEN = "2",
617
+ /**
618
+ * 关闭
619
+ */
620
+ CLOSE = "1"
621
+ }
622
+
601
623
  /**
602
624
  * 与 MediaServer 交互所需的 Request Header 信息
603
625
  */
@@ -702,6 +724,10 @@ interface IExchangeReqBody {
702
724
  * 是否支持 ipv6
703
725
  */
704
726
  ipType: number;
727
+ /**
728
+ * asr 开关状态
729
+ */
730
+ asr_status: RCRTCASRStatus;
705
731
  }
706
732
  interface ILiveUrls {
707
733
  /**
@@ -890,6 +916,11 @@ interface ICDNUris {
890
916
  'pull_safe': boolean;
891
917
  }
892
918
 
919
+ declare enum RCRTCAISwitchType {
920
+ OPEN = 1,
921
+ CLOSE = 0
922
+ }
923
+
893
924
  /**
894
925
  * 设置 RTC 人员 inner、outer 数据
895
926
  */
@@ -1078,6 +1109,10 @@ interface IRTCNaviInfo extends INaviInfo {
1078
1109
  * openGzip 开启标识,默认是false,开启使用true
1079
1110
  */
1080
1111
  openGzip?: boolean;
1112
+ /**
1113
+ * AI 开关是否打开,1: 打开,0: 关闭
1114
+ */
1115
+ rtcAISwitch?: RCRTCAISwitchType;
1081
1116
  }
1082
1117
 
1083
1118
  declare abstract class ReadableStore {
@@ -1124,6 +1159,32 @@ declare abstract class ReadableStore {
1124
1159
  protected _trackIdSSRCMap: Map<number, string>;
1125
1160
  protected _roomStatusVersion: number;
1126
1161
  protected _supportNtf: boolean;
1162
+ /**
1163
+ * asr 的打开状态
1164
+ */
1165
+ protected _asrStatus: RCRTCASRStatus;
1166
+ /**
1167
+ * asr 是否被启用
1168
+ */
1169
+ protected _asrEnable: boolean;
1170
+ /**
1171
+ * asr 输入语言,用于精准识别语音
1172
+ */
1173
+ protected _srcLanguage: string;
1174
+ /**
1175
+ * asr sei uris 信息
1176
+ */
1177
+ protected _asrSeiUris: {
1178
+ [userId: string]: IPublishedResource[];
1179
+ };
1180
+ /**
1181
+ * 是否开启实时翻译
1182
+ */
1183
+ protected _isStartRealTranslate: boolean;
1184
+ /**
1185
+ * 翻译目标语言
1186
+ */
1187
+ protected _translationLang: string;
1127
1188
  constructor(_logger: BasicLogger, clientSessionId: string, appkey: string, roomId: string, crtUserId: string, roomMode: RTCMode, isUpgrade?: boolean | undefined, isMainRoom?: boolean | undefined);
1128
1189
  getResourcesByUserId(userId: string): IPublishedResource[] | undefined;
1129
1190
  getRemoteTrack(trackId: string): RCRemoteAudioTrack | RCRemoteVideoTrack | undefined;
@@ -1144,6 +1205,13 @@ declare abstract class ReadableStore {
1144
1205
  getTrackIdBySSRC(ssrc: number): string | undefined;
1145
1206
  getRTCRequestHeader(): IRTCReqHeader;
1146
1207
  getSupportNtf(): boolean;
1208
+ getASRIsAvailable(): boolean;
1209
+ getASRStatus(): RCRTCASRStatus;
1210
+ getASREnable(): boolean;
1211
+ getSrcLanguage(): string;
1212
+ getASRSeiUris(): IPublishedResource[];
1213
+ getIsStartRealTranslate(): boolean;
1214
+ getTranslationLang(): string;
1147
1215
  }
1148
1216
  declare class Store extends ReadableStore {
1149
1217
  /**
@@ -1164,6 +1232,197 @@ declare class Store extends ReadableStore {
1164
1232
  resetSubscribedList(subscribeList: ISubscribeAttr[]): void;
1165
1233
  resetCollectSubscribeList(collectSubscribeList: ISubscribeAttr[]): void;
1166
1234
  setRoomStatusVersion(version: number): void;
1235
+ setASRStatus(status: RCRTCASRStatus): void;
1236
+ setASREnable(enable: boolean): void;
1237
+ setSrcLanguage(srcLanguage: string): void;
1238
+ setASRSeiUris(uris: IPublishedResource[]): void;
1239
+ addSeiRemoteTrack(uris: IPublishedResource[]): void;
1240
+ removeSeiRemoteTrack(): void;
1241
+ setIsStartRealTranslate(isStart: boolean): void;
1242
+ setTranslationLang(lang: string): void;
1243
+ }
1244
+
1245
+ /**
1246
+ * 多端登录时,加入房间时的踢人策略
1247
+ */
1248
+ declare enum RTCJoinType {
1249
+ /**
1250
+ * 踢出已存在于房间的设备,以便于当前设备加入房间
1251
+ */
1252
+ KICK = 0,
1253
+ /**
1254
+ * 保持已存在于房间的设备,拒绝当前设备加入房间
1255
+ */
1256
+ REFUSE = 1
1257
+ }
1258
+
1259
+ declare enum RTCApiType {
1260
+ ROOM = 1,
1261
+ PERSON = 2
1262
+ }
1263
+
1264
+ declare enum RTCIdentityChangeType {
1265
+ AnchorToViewer = 1,
1266
+ ViewerToAnchor = 2
1267
+ }
1268
+
1269
+ declare const keymaps: {
1270
+ readonly RtcInput: readonly ["roomType", "broadcastType", "extraInnerData", "needSysChatroom", "identityChangeType", "joinType", "innerDatas", "outerDatas", "supportNtf"];
1271
+ readonly RtcOutput: readonly ["version"];
1272
+ readonly RtcUserListOutput: readonly ["users", "token", "sessionId", "roomInfo", "version"];
1273
+ readonly SetUserStatusInput: readonly ["status"];
1274
+ readonly RtcSetDataInput: readonly ["interior", "target", "key", "value", "objectName", "content"];
1275
+ readonly RtcUserSetDataInput: readonly ["valueInfo", "objectName", "content"];
1276
+ readonly RtcDataInput: readonly ["interior", "target", "key", "objectName", "content"];
1277
+ readonly RtcSetOutDataInput: readonly ["target", "valueInfo", "objectName", "content"];
1278
+ readonly MCFollowInput: readonly ["state"];
1279
+ readonly RtcTokenOutput: readonly ["rtcToken"];
1280
+ readonly RtcQryOutput: readonly ["outInfo"];
1281
+ readonly RtcQryUserOutDataInput: readonly ["userId"];
1282
+ readonly RtcUserOutDataOutput: readonly ["user"];
1283
+ readonly RtcQueryListInput: readonly ["order"];
1284
+ readonly RtcRoomInfoOutput: readonly ["roomId", "roomData", "userCount", "list"];
1285
+ readonly RtcValueInfo: readonly ["key", "value"];
1286
+ readonly RtcKeyDeleteInput: readonly ["key"];
1287
+ readonly RtcNotifyMsg: readonly ["type", "time", "roomId"];
1288
+ readonly RtcPullKV: readonly ["timestamp", "roomId"];
1289
+ readonly RtcKVOutput: readonly ["entries", "bFullUpdate", "syncTime"];
1290
+ readonly RtcQueryUserJoinedInput: readonly ["userId"];
1291
+ readonly RtcQueryUserJoinedOutput: readonly ["info"];
1292
+ readonly RtcInviteInput: readonly ["invitedUserId", "timeoutTime", "invitedRoomId", "inviteInfo", "inviteSessionId"];
1293
+ readonly RtcCancelInviteInput: readonly ["invitedUserId", "invitedRoomId", "inviteInfo", "inviteSessionId"];
1294
+ readonly RtcInviteAnswerInput: readonly ["inviteUserId", "answerCode", "inviteRoomId", "inviteSessionId", "content", "key", "value"];
1295
+ readonly RtcEndInviteInput: readonly ["inviteRoomId", "inviteSessionId", "inviteContent", "inviteRoomKeys"];
1296
+ readonly RtcRoomStatusInput: readonly ["version"];
1297
+ readonly RtcRoomStatusOutput: readonly ["bFullStatus", "version", "usersData", "roomStatus"];
1298
+ readonly RtcReportSDKInput: readonly ["sdkInfo"];
1299
+ readonly RCRTCPBPolaris: readonly ["type", "appKey", "sessionId", "roomId", "roomCreateTime", "userId", "userRole", "joinTime", "signalDataCenter", "r1Info", "r2Info", "r3Info", "r4Info"];
1300
+ readonly RCRTCPBR1Info: readonly ["joinTime", "rtcVersion", "imVersion", "platform", "device", "os", "browserName", "browserVersion"];
1301
+ readonly RCRTCPBR2Info: readonly ["joinTime", "sendTime", "rtcActionType", "rtcActionStatus", "trackId"];
1302
+ readonly RCRTCPBR3Info: readonly ["info"];
1303
+ readonly RCRTCPBR4Info: readonly ["info"];
1304
+ readonly RCRTCPBStatusInfo: readonly ["joinTime", "receiveTime", "totalBitRate", "appCPUUsage", "systemCPUUsage", "systemCPUFrequency", "networkStatus", "googleRTTNetwork", "ipAddress", "useReceiveBroadBand", "useSendBroadBand", "packetLossCount", "streams"];
1305
+ readonly RCRTCPBStreamInfo: readonly ["trackId", "codeName", "volume", "samplingRate", "bitRate", "packetLossRate", "frameRate", "resolution", "blockTime", "jitterData", "nAckCount", "pliCount", "googleRTTTotalTime", "isReceiveFirstFrameRate", "codeType", "isEnabled"];
1306
+ readonly AsrTextMsg: readonly ["bms", "t", "isEnd", "msgId", "lang"];
1307
+ readonly AsrResTextMsg: readonly ["type", "uid", "asr"];
1308
+ };
1309
+ declare type RTCKeyMaps = typeof keymaps;
1310
+
1311
+ /**
1312
+ * 自定义上报北极星数据响应 code
1313
+ */
1314
+ declare enum RCSendCode {
1315
+ NOT_REPORT = -1,
1316
+ REPORT_SUCCESS = 10000,
1317
+ REPORT_FAIL = 0,
1318
+ PB_ERROR = 40001
1319
+ }
1320
+
1321
+ declare class RTCContext {
1322
+ private context;
1323
+ logger: BasicLogger;
1324
+ private codec;
1325
+ roomCreateTime: number | undefined;
1326
+ userJoinTime: number | undefined;
1327
+ constructor(context: RTCPluginContext, logger: BasicLogger, codec: Codec<RTCKeyMaps>);
1328
+ joinRTCRoom(roomId: string, mode: RTCMode, broadcastType?: number, joinType?: RTCJoinType, innerUserDatas?: IRTCUserData, outerUserDatas?: IRTCUserData, supportNtf?: boolean): IPromiseResult<IJoinRTCRoomData>;
1329
+ quitRTCRoom(roomId: string): Promise<ErrorCode>;
1330
+ getRTCRoomInfo(roomId: string): IPromiseResult<IRTCRoomInfo>;
1331
+ /**
1332
+ * 移动端用来获取副房间资源
1333
+ */
1334
+ getRTCUserInfoList(roomId: string): IPromiseResult<IRTCUsers>;
1335
+ getRTCUserInfo(roomId: string): IPromiseResult<unknown>;
1336
+ removeRTCUserInfo(roomId: string, keys: string[]): Promise<ErrorCode>;
1337
+ setRTCData(roomId: string, key: string, value: string, isInner: boolean, apiType: RTCApiType, message?: {
1338
+ name: string;
1339
+ content: string;
1340
+ }): Promise<ErrorCode>;
1341
+ /**
1342
+ * 全量订阅资源修改
1343
+ * @param roomId 房间 Id
1344
+ * @param message 向前兼容的消息内容
1345
+ * @param valueInfo 全量资源数据
1346
+ * @param objectName 全量 URI 消息名
1347
+ */
1348
+ setRTCTotalRes(roomId: string, messageList: {
1349
+ name: string;
1350
+ content: string;
1351
+ }[], valueInfo: string, objectName: string, mcuValInfo?: string, cdnValInfo?: string): Promise<ErrorCode>;
1352
+ setRTCCDNUris(roomId: string, objectName: string, CDNUris: string): Promise<ErrorCode>;
1353
+ getRTCData(roomId: string, keys: string[], isInner: boolean, apiType: RTCApiType): IPromiseResult<KVString>;
1354
+ removeRTCData(roomId: string, keys: string[], isInner: boolean, apiType: RTCApiType, message?: {
1355
+ name: string;
1356
+ content: string;
1357
+ }): Promise<ErrorCode>;
1358
+ setRTCOutData(roomId: string, rtcData: unknown, type: number, message: unknown): Promise<ErrorCode>;
1359
+ getRTCOutData(roomId: string, userIds: string[]): IPromiseResult<unknown>;
1360
+ getRTCToken(roomId: string, mode: number, broadcastType?: number): IPromiseResult<IRtcTokenData>;
1361
+ setRTCState(roomId: string, report: string): Promise<ErrorCode>;
1362
+ /**
1363
+ * 通过 http 方式上报 rtc state
1364
+ */
1365
+ setRTCStateByHttp(logServer: string, runtime: IRuntime, report: IRCRTCReportData, reportType: string): Promise<RCSendCode | RCRTCCode>;
1366
+ getRTCUserList(roomId: string): IPromiseResult<IRTCUsers>;
1367
+ joinLivingRoomAsAudience(roomId: string, mode: RTCMode, broadcastType?: number): Promise<IAsyncRes<{
1368
+ token: string;
1369
+ kvEntries: IServerRTCRoomEntry[];
1370
+ }>>;
1371
+ quitLivingRoomAsAudience(roomId: string): Promise<ErrorCode>;
1372
+ rtcIdentityChange(roomId: string, changeType: RTCIdentityChangeType, broadcastType?: number): Promise<IAsyncRes<IJoinRTCRoomData>>;
1373
+ requestRoomPK(options: IReqRoomPKOptions): Promise<ErrorCode>;
1374
+ cancelRoomPK(options: ICancelRoomPKOptions): Promise<ErrorCode>;
1375
+ responseRoomPK(options: IResRoomPKOptions): Promise<ErrorCode>;
1376
+ endRoomPK(options: IEndRoomPKOptions): Promise<ErrorCode>;
1377
+ getRTCJoinedUserInfo(userId: string): Promise<IAsyncRes<IRTCJoinedInfo[]>>;
1378
+ pullRTCRoomEntry(roomId: string): Promise<IAsyncRes<IChrmKVPullData>>;
1379
+ /**
1380
+ * 通知拉取房间数据
1381
+ * @param roomId 房间 id
1382
+ * @param version 本地最大得房间数据版本号
1383
+ */
1384
+ pullRTCRoomStatus(roomId: string, version: number): Promise<{
1385
+ code: ErrorCode;
1386
+ data?: IPullRTCRoomStatus;
1387
+ }>;
1388
+ decodeRtcNotify(buffer: Uint8Array): {
1389
+ time: number;
1390
+ type: any;
1391
+ roomId: any;
1392
+ };
1393
+ getCurrentId(): string;
1394
+ getNaviInfo(): IRTCNaviInfo | null;
1395
+ getConnectionStatus(): RCConnectionStatus;
1396
+ getAppkey(): string;
1397
+ /** web 端发 rtcPing */
1398
+ webRtcPing(roomId: string, roomMode: RTCMode, broadcastType?: number): Promise<{
1399
+ code: ErrorCode;
1400
+ data?: {
1401
+ version: number;
1402
+ };
1403
+ }>;
1404
+ /**
1405
+ * 协议栈 rtcping 依赖 imlib 编解码数据
1406
+ * web 单独走 imlib 提供的 rtcSignaling 方法,减少对 imlib 的依赖
1407
+ */
1408
+ rtcPing(roomId: string, roomMode: RTCMode, broadcastType?: number): Promise<_rongcloud_engine.RCResult<any>> | Promise<{
1409
+ code: ErrorCode;
1410
+ data?: {
1411
+ version: number;
1412
+ } | undefined;
1413
+ }>;
1414
+ sendMessage(conversationType: ConversationType, targetId: string, options: ISendMsgOptions): IPromiseResult<IReceivedMessage>;
1415
+ registerRTCSignalListener(listener?: ((buffer: Uint8Array) => void) | undefined): void;
1416
+ registerConnectionStateChangeListener(listener: (status: RCConnectionStatus, code: ErrorCode) => void): void;
1417
+ registerDisconnectListener(listener: () => void): void;
1418
+ registerDestroyListener(listener: () => void): void;
1419
+ registerMessageListener(listener: (message: IReceivedMessage) => boolean): void;
1420
+ getCoreVersion(): string;
1421
+ getPluginContext(): RTCPluginContext;
1422
+ reportSDKInfo(versionInfo: {
1423
+ [name: string]: string;
1424
+ }): void;
1425
+ decodeAsrText(buffer: Uint8Array): (RCRTCASRContent | RCRTCRealtimeTranslationContent)[];
1167
1426
  }
1168
1427
 
1169
1428
  declare type ISdpSemantics = 'plan-b' | 'unified-plan';
@@ -1925,6 +2184,28 @@ interface IRoomEventListener extends IRCRTCTrackEventListener {
1925
2184
  * 主播和观众切换身份通知
1926
2185
  */
1927
2186
  onSwitchRole?(userId: string, role: RCRTCLiveRole): void;
2187
+ /**
2188
+ * 语音识别服务开启通知
2189
+ * 如需要语音识别内容和语音实时翻译,可在此时机依次调用 room 的
2190
+ * setSrcLanguageCode 方法,设置输入语言代码,用于语音识别精准识别
2191
+ * setEnableASR 方法,设置房间内的语音识别资源为可用,语音识别内容通过 `onReceiveASRContent` 回调给业务层
2192
+ * startRealtimeTranslation 方法,开启语音实时翻译,实时翻译内容通过 `onReceiveRealtimeTranslationContent` 回调给业务层
2193
+ */
2194
+ onReceiveStartASR?(): void;
2195
+ /**
2196
+ * 语音识别服务停止通知
2197
+ */
2198
+ onReceiveStopASR?(): void;
2199
+ /**
2200
+ * 语音识别内容回调
2201
+ * @param asrContent
2202
+ */
2203
+ onReceiveASRContent?(asrContent: RCRTCASRContent): void;
2204
+ /**
2205
+ * 语音翻译结果回调
2206
+ * @param content
2207
+ */
2208
+ onReceiveRealtimeTranslationContent?(content: RCRTCRealtimeTranslationContent): void;
1928
2209
  }
1929
2210
  /**
1930
2211
  * RTCClient 初始化配置
@@ -2220,6 +2501,37 @@ interface IPullRTCRoomUsersData {
2220
2501
  value: string;
2221
2502
  }[];
2222
2503
  }
2504
+ /**
2505
+ * ASR 内容
2506
+ */
2507
+ interface RCRTCASRContent {
2508
+ /**
2509
+ * 当前语音识别关联用户的 ID,
2510
+ */
2511
+ userID: string;
2512
+ /**
2513
+ * 当前语音识别的 ID, 用于关联当前语音识别结果
2514
+ */
2515
+ msgId: string;
2516
+ /**
2517
+ * 当前语音识别的时间戳, 单位为秒
2518
+ */
2519
+ timeUTC: number;
2520
+ /**
2521
+ * 当前语音识别结果
2522
+ */
2523
+ msg: string;
2524
+ /**
2525
+ * 当前语音识别是否结束, 如果为 true, 则表示当前语音识别已结束
2526
+ */
2527
+ isEnd: boolean;
2528
+ }
2529
+ interface RCRTCRealtimeTranslationContent extends RCRTCASRContent {
2530
+ /**
2531
+ * 当前语音翻译的目标语言码
2532
+ */
2533
+ destLangCode: string;
2534
+ }
2223
2535
 
2224
2536
  /**
2225
2537
  * 直播布局模式定义
@@ -2498,193 +2810,13 @@ interface ISetEnableCDN {
2498
2810
  }
2499
2811
 
2500
2812
  /**
2501
- * 多端登录时,加入房间时的踢人策略
2813
+ * mediaServer 交互数据
2502
2814
  */
2503
- declare enum RTCJoinType {
2504
- /**
2505
- * 踢出已存在于房间的设备,以便于当前设备加入房间
2506
- */
2507
- KICK = 0,
2508
- /**
2509
- * 保持已存在于房间的设备,拒绝当前设备加入房间
2510
- */
2511
- REFUSE = 1
2512
- }
2513
-
2514
- declare enum RTCApiType {
2515
- ROOM = 1,
2516
- PERSON = 2
2517
- }
2518
-
2519
- declare enum RTCIdentityChangeType {
2520
- AnchorToViewer = 1,
2521
- ViewerToAnchor = 2
2522
- }
2523
-
2524
- declare const keymaps: {
2525
- readonly RtcInput: readonly ["roomType", "broadcastType", "extraInnerData", "needSysChatroom", "identityChangeType", "joinType", "innerDatas", "outerDatas", "supportNtf"];
2526
- readonly RtcOutput: readonly ["version"];
2527
- readonly RtcUserListOutput: readonly ["users", "token", "sessionId", "roomInfo", "version"];
2528
- readonly SetUserStatusInput: readonly ["status"];
2529
- readonly RtcSetDataInput: readonly ["interior", "target", "key", "value", "objectName", "content"];
2530
- readonly RtcUserSetDataInput: readonly ["valueInfo", "objectName", "content"];
2531
- readonly RtcDataInput: readonly ["interior", "target", "key", "objectName", "content"];
2532
- readonly RtcSetOutDataInput: readonly ["target", "valueInfo", "objectName", "content"];
2533
- readonly MCFollowInput: readonly ["state"];
2534
- readonly RtcTokenOutput: readonly ["rtcToken"];
2535
- readonly RtcQryOutput: readonly ["outInfo"];
2536
- readonly RtcQryUserOutDataInput: readonly ["userId"];
2537
- readonly RtcUserOutDataOutput: readonly ["user"];
2538
- readonly RtcQueryListInput: readonly ["order"];
2539
- readonly RtcRoomInfoOutput: readonly ["roomId", "roomData", "userCount", "list"];
2540
- readonly RtcValueInfo: readonly ["key", "value"];
2541
- readonly RtcKeyDeleteInput: readonly ["key"];
2542
- readonly RtcNotifyMsg: readonly ["type", "time", "roomId"];
2543
- readonly RtcPullKV: readonly ["timestamp", "roomId"];
2544
- readonly RtcKVOutput: readonly ["entries", "bFullUpdate", "syncTime"];
2545
- readonly RtcQueryUserJoinedInput: readonly ["userId"];
2546
- readonly RtcQueryUserJoinedOutput: readonly ["info"];
2547
- readonly RtcInviteInput: readonly ["invitedUserId", "timeoutTime", "invitedRoomId", "inviteInfo", "inviteSessionId"];
2548
- readonly RtcCancelInviteInput: readonly ["invitedUserId", "invitedRoomId", "inviteInfo", "inviteSessionId"];
2549
- readonly RtcInviteAnswerInput: readonly ["inviteUserId", "answerCode", "inviteRoomId", "inviteSessionId", "content", "key", "value"];
2550
- readonly RtcEndInviteInput: readonly ["inviteRoomId", "inviteSessionId", "inviteContent", "inviteRoomKeys"];
2551
- readonly RtcRoomStatusInput: readonly ["version"];
2552
- readonly RtcRoomStatusOutput: readonly ["bFullStatus", "version", "usersData", "roomStatus"];
2553
- readonly RtcReportSDKInput: readonly ["sdkInfo"];
2554
- readonly RCRTCPBPolaris: readonly ["type", "appKey", "sessionId", "roomId", "roomCreateTime", "userId", "userRole", "joinTime", "signalDataCenter", "r1Info", "r2Info", "r3Info", "r4Info"];
2555
- readonly RCRTCPBR1Info: readonly ["joinTime", "rtcVersion", "imVersion", "platform", "device", "os", "browserName", "browserVersion"];
2556
- readonly RCRTCPBR2Info: readonly ["joinTime", "sendTime", "rtcActionType", "rtcActionStatus", "trackId"];
2557
- readonly RCRTCPBR3Info: readonly ["info"];
2558
- readonly RCRTCPBR4Info: readonly ["info"];
2559
- readonly RCRTCPBStatusInfo: readonly ["joinTime", "receiveTime", "totalBitRate", "appCPUUsage", "systemCPUUsage", "systemCPUFrequency", "networkStatus", "googleRTTNetwork", "ipAddress", "useReceiveBroadBand", "useSendBroadBand", "packetLossCount", "streams"];
2560
- readonly RCRTCPBStreamInfo: readonly ["trackId", "codeName", "volume", "samplingRate", "bitRate", "packetLossRate", "frameRate", "resolution", "blockTime", "jitterData", "nAckCount", "pliCount", "googleRTTTotalTime", "isReceiveFirstFrameRate", "codeType", "isEnabled"];
2561
- };
2562
- declare type RTCKeyMaps = typeof keymaps;
2563
-
2564
- /**
2565
- * 自定义上报北极星数据响应 code
2566
- */
2567
- declare enum RCSendCode {
2568
- NOT_REPORT = -1,
2569
- REPORT_SUCCESS = 10000,
2570
- REPORT_FAIL = 0,
2571
- PB_ERROR = 40001
2572
- }
2573
-
2574
- declare class RTCContext {
2575
- private context;
2576
- logger: BasicLogger;
2577
- private codec;
2578
- roomCreateTime: number | undefined;
2579
- userJoinTime: number | undefined;
2580
- constructor(context: RTCPluginContext, logger: BasicLogger, codec: Codec<RTCKeyMaps>);
2581
- joinRTCRoom(roomId: string, mode: RTCMode, broadcastType?: number, joinType?: RTCJoinType, innerUserDatas?: IRTCUserData, outerUserDatas?: IRTCUserData, supportNtf?: boolean): IPromiseResult<IJoinRTCRoomData>;
2582
- quitRTCRoom(roomId: string): Promise<ErrorCode>;
2583
- getRTCRoomInfo(roomId: string): IPromiseResult<IRTCRoomInfo>;
2584
- /**
2585
- * 移动端用来获取副房间资源
2586
- */
2587
- getRTCUserInfoList(roomId: string): IPromiseResult<IRTCUsers>;
2588
- getRTCUserInfo(roomId: string): IPromiseResult<unknown>;
2589
- removeRTCUserInfo(roomId: string, keys: string[]): Promise<ErrorCode>;
2590
- setRTCData(roomId: string, key: string, value: string, isInner: boolean, apiType: RTCApiType, message?: {
2591
- name: string;
2592
- content: string;
2593
- }): Promise<ErrorCode>;
2594
- /**
2595
- * 全量订阅资源修改
2596
- * @param roomId 房间 Id
2597
- * @param message 向前兼容的消息内容
2598
- * @param valueInfo 全量资源数据
2599
- * @param objectName 全量 URI 消息名
2600
- */
2601
- setRTCTotalRes(roomId: string, messageList: {
2602
- name: string;
2603
- content: string;
2604
- }[], valueInfo: string, objectName: string, mcuValInfo?: string, cdnValInfo?: string): Promise<ErrorCode>;
2605
- setRTCCDNUris(roomId: string, objectName: string, CDNUris: string): Promise<ErrorCode>;
2606
- getRTCData(roomId: string, keys: string[], isInner: boolean, apiType: RTCApiType): IPromiseResult<KVString>;
2607
- removeRTCData(roomId: string, keys: string[], isInner: boolean, apiType: RTCApiType, message?: {
2608
- name: string;
2609
- content: string;
2610
- }): Promise<ErrorCode>;
2611
- setRTCOutData(roomId: string, rtcData: unknown, type: number, message: unknown): Promise<ErrorCode>;
2612
- getRTCOutData(roomId: string, userIds: string[]): IPromiseResult<unknown>;
2613
- getRTCToken(roomId: string, mode: number, broadcastType?: number): IPromiseResult<IRtcTokenData>;
2614
- setRTCState(roomId: string, report: string): Promise<ErrorCode>;
2615
- /**
2616
- * 通过 http 方式上报 rtc state
2617
- */
2618
- setRTCStateByHttp(logServer: string, runtime: IRuntime, report: IRCRTCReportData, reportType: string): Promise<RCSendCode | RCRTCCode>;
2619
- getRTCUserList(roomId: string): IPromiseResult<IRTCUsers>;
2620
- joinLivingRoomAsAudience(roomId: string, mode: RTCMode, broadcastType?: number): Promise<IAsyncRes<{
2621
- token: string;
2622
- kvEntries: IServerRTCRoomEntry[];
2623
- }>>;
2624
- quitLivingRoomAsAudience(roomId: string): Promise<ErrorCode>;
2625
- rtcIdentityChange(roomId: string, changeType: RTCIdentityChangeType, broadcastType?: number): Promise<IAsyncRes<IJoinRTCRoomData>>;
2626
- requestRoomPK(options: IReqRoomPKOptions): Promise<ErrorCode>;
2627
- cancelRoomPK(options: ICancelRoomPKOptions): Promise<ErrorCode>;
2628
- responseRoomPK(options: IResRoomPKOptions): Promise<ErrorCode>;
2629
- endRoomPK(options: IEndRoomPKOptions): Promise<ErrorCode>;
2630
- getRTCJoinedUserInfo(userId: string): Promise<IAsyncRes<IRTCJoinedInfo[]>>;
2631
- pullRTCRoomEntry(roomId: string): Promise<IAsyncRes<IChrmKVPullData>>;
2632
- /**
2633
- * 通知拉取房间数据
2634
- * @param roomId 房间 id
2635
- * @param version 本地最大得房间数据版本号
2636
- */
2637
- pullRTCRoomStatus(roomId: string, version: number): Promise<{
2638
- code: ErrorCode;
2639
- data?: IPullRTCRoomStatus;
2640
- }>;
2641
- decodeRtcNotify(buffer: Uint8Array): {
2642
- time: number;
2643
- type: any;
2644
- roomId: any;
2645
- };
2646
- getCurrentId(): string;
2647
- getNaviInfo(): IRTCNaviInfo | null;
2648
- getConnectionStatus(): RCConnectionStatus;
2649
- getAppkey(): string;
2650
- /** web 端发 rtcPing */
2651
- webRtcPing(roomId: string, roomMode: RTCMode, broadcastType?: number): Promise<{
2652
- code: ErrorCode;
2653
- data?: {
2654
- version: number;
2655
- };
2656
- }>;
2657
- /**
2658
- * 协议栈 rtcping 依赖 imlib 编解码数据
2659
- * web 单独走 imlib 提供的 rtcSignaling 方法,减少对 imlib 的依赖
2660
- */
2661
- rtcPing(roomId: string, roomMode: RTCMode, broadcastType?: number): Promise<{
2662
- code: ErrorCode;
2663
- data?: {
2664
- version: number;
2665
- } | undefined;
2666
- }> | Promise<_rongcloud_engine.RCResult<any>>;
2667
- sendMessage(conversationType: ConversationType, targetId: string, options: ISendMsgOptions): IPromiseResult<IReceivedMessage>;
2668
- registerRTCSignalListener(listener?: ((buffer: Uint8Array) => void) | undefined): void;
2669
- registerConnectionStateChangeListener(listener: (status: RCConnectionStatus, code: ErrorCode) => void): void;
2670
- registerDisconnectListener(listener: () => void): void;
2671
- registerDestroyListener(listener: () => void): void;
2672
- registerMessageListener(listener: (message: IReceivedMessage) => boolean): void;
2673
- getCoreVersion(): string;
2674
- getPluginContext(): RTCPluginContext;
2675
- reportSDKInfo(versionInfo: {
2676
- [name: string]: string;
2677
- }): void;
2678
- }
2679
-
2680
- /**
2681
- * mediaServer 交互数据
2682
- */
2683
- interface IMediaServerQualityData {
2684
- rsid: string;
2685
- rsdur: number;
2686
- msa: string;
2687
- rscod: number;
2815
+ interface IMediaServerQualityData {
2816
+ rsid: string;
2817
+ rsdur: number;
2818
+ msa: string;
2819
+ rscod: number;
2688
2820
  }
2689
2821
  /**
2690
2822
  * signal 交互数据
@@ -2700,204 +2832,71 @@ declare enum RCRTCResourceAction {
2700
2832
  UNSUB = "unsub"
2701
2833
  }
2702
2834
 
2703
- declare class RCMediaService {
2704
- private readonly _runtime;
2705
- private readonly _context;
2835
+ declare enum RCCommandKind {
2706
2836
  /**
2707
- * 自定义 MediaServer 地址,当有值时,不再使用导航内的地址
2837
+ * 发信令取消加入房间之前的资源
2708
2838
  */
2709
- private readonly _msUrl?;
2839
+ UNPUBLISH_PREV = "UnpublishPrevCommand",
2710
2840
  /**
2711
- * 请求超时时长
2841
+ * 拉取房间内数据
2712
2842
  */
2713
- private readonly _timeout;
2843
+ PULL_RTCROOM_STATUS = "PullRTCRoomStatusCommand",
2714
2844
  /**
2715
- * 已失败的请求地址
2845
+ * 加入房间
2716
2846
  */
2717
- private readonly _failedMs;
2847
+ JOINROOM = "JoinRoomCommand",
2718
2848
  /**
2719
- * 服务器指纹数据,客户端不得修改,直接透传
2849
+ * 解析远端资源数据
2720
2850
  */
2721
- private _rtcFinger;
2851
+ PARSE_REMOTERES = "ParseRemoteResCommand",
2722
2852
  /**
2723
- * 服务器接口返回的 clusterId 数据,当此数据有值时,后续所有请求向此服务发送
2853
+ * 解析远端人员数据
2724
2854
  */
2725
- private _clusterId;
2855
+ PARSE_USERSTATE = "ParseUserStateCommand",
2726
2856
  /**
2727
- * MCU 服务地址
2857
+ * 本端 track 禁用/启用
2728
2858
  */
2729
- private _configUrl;
2859
+ LOCAL_TRACK_MUTE = "LocalTrackMuteCommand",
2730
2860
  /**
2731
- * 排好序的探测地址
2861
+ * 发布资源
2732
2862
  */
2733
- private static msInDetector;
2734
- private static detectorTime;
2735
- private static detectValidMinute;
2736
- private _msList;
2737
- private _qualityMsList;
2738
- private readonly _logger;
2739
- constructor(_runtime: IRuntime, _context: RTCContext,
2863
+ PUBLISH = "PublishCommand",
2740
2864
  /**
2741
- * 自定义 MediaServer 地址,当有值时,不再使用导航内的地址
2865
+ * 恢复 ice 连接
2742
2866
  */
2743
- _msUrl?: string | undefined,
2867
+ RETRY_EXCHANGE = "RetryExchangeCommand",
2744
2868
  /**
2745
- * 请求超时时长
2869
+ * 取消发布
2746
2870
  */
2747
- _timeout?: number);
2871
+ UNPUBLISH = "UnpublishCommand",
2748
2872
  /**
2749
- * 是否需要嗅探
2750
- * im 未连接,无 navi 数据时,不需要嗅探
2751
- * 客户端手动配置 mediaServer 时,不需要嗅探
2752
- * navi 数据中 detectionServer 为空时,不需要嗅探
2753
- * navi 数据中 jwt 为空时,不需要嗅探
2754
- * 在探测有效期内不需要嗅探
2755
- * RCMediaService.detectorTime 为 0 时,代表未探测过,需要嗅探
2873
+ * 订阅
2756
2874
  */
2757
- isNededDetector(): boolean;
2758
- detectorMediaSever(): void;
2875
+ SUBSCRIBE = "SubscribeCommand",
2759
2876
  /**
2760
- * 地址探测
2761
- * RTC 初始化时检测是否可以拿到 navi,可以拿到开始嗅探
2762
- * 拿不到等 IM 链接成功后,再回调中调用开始嗅探
2877
+ * 取消订阅
2763
2878
  */
2764
- private _startDetector;
2879
+ UNSUBSCRIBE = "UnsubscribeCommand",
2765
2880
  /**
2766
- * 清空 msList 列表,重新请求导航后需清空 msList 列表
2881
+ * 全量订阅
2767
2882
  */
2768
- clearMSList(): void;
2769
- getMsList(): string[];
2883
+ UPDATE_SUBSCRIBE_LIST = "UpdateSubscribeListCommand",
2770
2884
  /**
2771
- * _mslist 列表排序:[_clusterId, ping1DetectorUrl, 主域名, ping2DetectorUrl, ..., pingNDetectorUrl, 备用域名list ]
2772
- * ping1 :ping 结果返回最快值
2885
+ * im 重连房间内人员、资源处理
2773
2886
  */
2774
- private _sortMediaServiceList;
2887
+ ON_SIGNAL_RECONNECTED = "OnSignalReconnectedCommand",
2775
2888
  /**
2776
- * 配置 gzip 请求头和请求体
2889
+ * 退出副房间
2777
2890
  */
2778
- private _openGzip;
2891
+ LEAVE_OTHER_ROOM = "LeaveOtherRoomCommand",
2779
2892
  /**
2780
- * 处理 request 成功的结果
2893
+ * 主播、观众切换身份
2781
2894
  */
2782
- private _dealRequestSuccessResult;
2895
+ RTC_IDENTITY_CHANGE = "RTCIdentityChangeCommand",
2783
2896
  /**
2784
- * 发送请求,请求发送若失败,会继续尝试使用后续可用地址直到无地址可用,此时认为请求失败
2785
- * @param path
2786
- * @param header
2787
- * @param body
2897
+ * 开/关 CDN
2788
2898
  */
2789
- private _request;
2790
- /**
2791
- * 资源协商接口,订阅、发布、变更资源均可以使用此接口。该接口通过 sdp 字段交换 SDP 信息,
2792
- * 并通过 subscribeList 和 publishList 表明最终发布和订阅的资源。本端产出 offer,服务器产出 answer
2793
- * 每次接口调用,都会全量覆盖发布和订阅的资源。
2794
- * @param header
2795
- * @param body
2796
- */
2797
- exchange(headers: IRTCReqHeader, body: IExchangeReqBody, traceId: string, isNeedUpdateMsas?: boolean): Promise<{
2798
- code: RCRTCCode;
2799
- data?: IExchangeResponse | undefined;
2800
- qualityMsList?: IMediaServerQualityData[] | undefined;
2801
- }>;
2802
- /**
2803
- * 退出房间
2804
- */
2805
- exit(headers: IRTCReqHeader): Promise<RCRTCCode>;
2806
- /**
2807
- * 观众端订阅主播资源
2808
- */
2809
- broadcastSubscribe(headers: IRTCReqHeader, body: IBroadcastSubReqBody): Promise<{
2810
- code: RCRTCCode;
2811
- data?: IBroadcastSubRespBody | undefined;
2812
- qualityMsList?: IMediaServerQualityData[] | undefined;
2813
- }>;
2814
- /**
2815
- * 观众端退出订阅
2816
- */
2817
- broadcastExit(headers: IRTCReqHeader): Promise<{
2818
- code: RCRTCCode;
2819
- }>;
2820
- /**
2821
- * 直播推流、自定义布局配置
2822
- */
2823
- setMcuConfig(headers: IMCUReqHeaders, body: IMCUConfig | ISetEnableCDN): Promise<{
2824
- code: RCRTCCode;
2825
- res?: any;
2826
- }>;
2827
- /**
2828
- * 房间内观众获取 CDN 资源信息、拉流地址
2829
- */
2830
- getCDNResourceInfo(headers: ICDNPlayUrlReqHeaders, url: string, traceId: string): Promise<{
2831
- code: RCRTCCode;
2832
- res?: ICDNPlayUrlResponse;
2833
- }>;
2834
- }
2835
-
2836
- declare enum RCCommandKind {
2837
- /**
2838
- * 发信令取消加入房间之前的资源
2839
- */
2840
- UNPUBLISH_PREV = "UnpublishPrevCommand",
2841
- /**
2842
- * 拉取房间内数据
2843
- */
2844
- PULL_RTCROOM_STATUS = "PullRTCRoomStatusCommand",
2845
- /**
2846
- * 加入房间
2847
- */
2848
- JOINROOM = "JoinRoomCommand",
2849
- /**
2850
- * 解析远端资源数据
2851
- */
2852
- PARSE_REMOTERES = "ParseRemoteResCommand",
2853
- /**
2854
- * 解析远端人员数据
2855
- */
2856
- PARSE_USERSTATE = "ParseUserStateCommand",
2857
- /**
2858
- * 本端 track 禁用/启用
2859
- */
2860
- LOCAL_TRACK_MUTE = "LocalTrackMuteCommand",
2861
- /**
2862
- * 发布资源
2863
- */
2864
- PUBLISH = "PublishCommand",
2865
- /**
2866
- * 恢复 ice 连接
2867
- */
2868
- RETRY_EXCHANGE = "RetryExchangeCommand",
2869
- /**
2870
- * 取消发布
2871
- */
2872
- UNPUBLISH = "UnpublishCommand",
2873
- /**
2874
- * 订阅
2875
- */
2876
- SUBSCRIBE = "SubscribeCommand",
2877
- /**
2878
- * 取消订阅
2879
- */
2880
- UNSUBSCRIBE = "UnsubscribeCommand",
2881
- /**
2882
- * 全量订阅
2883
- */
2884
- UPDATE_SUBSCRIBE_LIST = "UpdateSubscribeListCommand",
2885
- /**
2886
- * im 重连房间内人员、资源处理
2887
- */
2888
- ON_SIGNAL_RECONNECTED = "OnSignalReconnectedCommand",
2889
- /**
2890
- * 退出副房间
2891
- */
2892
- LEAVE_OTHER_ROOM = "LeaveOtherRoomCommand",
2893
- /**
2894
- * 主播、观众切换身份
2895
- */
2896
- RTC_IDENTITY_CHANGE = "RTCIdentityChangeCommand",
2897
- /**
2898
- * 开/关 CDN
2899
- */
2900
- ENABLE_INNER_CDN = "EnableInnerCDNCommand",
2899
+ ENABLE_INNER_CDN = "EnableInnerCDNCommand",
2901
2900
  /**
2902
2901
  * 携带副房间信息重新发 /exchange 请求
2903
2902
  */
@@ -2964,1325 +2963,1546 @@ declare class ReportMediaActionLogger {
2964
2963
  recordQualityIceStatusData(iceCandidatePair: IRCCandidatePairStat, status: RTCIceConnectionState, time: number): void;
2965
2964
  }
2966
2965
 
2967
- declare class RCLocalMediaStream {
2968
- readonly msid: string;
2969
- readonly mediaStream: MediaStream;
2970
- readonly tinyStream: MediaStream;
2971
- readonly tag: string;
2972
- constructor(msid: string);
2973
- }
2974
-
2975
2966
  /**
2976
- * 直播间类型
2967
+ * RTC 消息类型常量
2968
+ * @private
2977
2969
  */
2978
- declare enum RCLivingType {
2970
+ declare enum RCRTCMessageType {
2979
2971
  /**
2980
- * 音视频直播
2972
+ * 增量资源发布消息
2973
+ * @deprecated
2981
2974
  */
2982
- VIDEO = 0,
2975
+ PUBLISH = "RCRTC:PublishResource",
2983
2976
  /**
2984
- * 音频直播
2977
+ * 增量资源取消发布消息
2978
+ * @deprecated
2985
2979
  */
2986
- AUDIO = 1
2987
- }
2988
-
2989
- interface IAudienceRoomEventListener extends IRCRTCTrackEventListener {
2980
+ UNPUBLISH = "RCRTC:UnpublishResource",
2990
2981
  /**
2991
- * 主播加入
2992
- * @param userIds 加入主播的 id 列表
2982
+ * 增量资源状态变更消息
2983
+ * @deprecated
2993
2984
  */
2994
- onAnchorJoin?(userId: string[]): void;
2985
+ MODIFY = "RCRTC:ModifyResource",
2995
2986
  /**
2996
- * 主播退出
2997
- * @param userIds 退出主播的 id 列表
2987
+ * 全量资源变更消息
2998
2988
  */
2999
- onAnchorLeave?(userId: string[]): void;
2989
+ TOTAL_CONTENT_RESOURCE = "RCRTC:TotalContentResources",
3000
2990
  /**
3001
- * 房间内合流发布资源
3002
- * @param tracks 新发布的合流音轨与视轨数据列表,包含新发布的 RCRemoteAudioTrack 与 RCRemoteVideoTrack 实例
3003
- * @description
3004
- * 当房间内某个主播第一次发布资源时触发
2991
+ * 房间人员变更
3005
2992
  */
3006
- onTrackPublish?(tracks: RCRemoteTrack[]): void;
2993
+ STATE = "RCRTC:state",
3007
2994
  /**
3008
- * 房间内取消合流发布资源
3009
- * @param tracks 被取消发布的合流音轨与视轨数据列表
3010
- * @description
3011
- * 当房间内全部主播退出房间时,SDK 内部会取消对资源的订阅,业务层仅需处理 UI 业务
2995
+ * 房间属性变更
3012
2996
  */
3013
- onTrackUnpublish?(tracks: RCRemoteTrack[]): void;
2997
+ ROOM_NOTIFY = "RCRTC:RoomNtf",
3014
2998
  /**
3015
- * 房间内主播发布资源
3016
- * @param tracks 主播新发布的音轨与视轨数据列表,包含新发布的 RCRemoteAudioTrack 与 RCRemoteVideoTrack 实例
2999
+ * 房间用户属性变更
3017
3000
  */
3018
- onAnchorTrackPublish?(tracks: RCRemoteTrack[]): void;
3001
+ USER_NOTIFY = "RCRTC:UserNtf",
3019
3002
  /**
3020
- * 房间内主播取消发布资源
3021
- * @param tracks 被主播取消发布的音轨与视轨数据列表
3022
- * @description 当资源被取消发布时,SDK 内部会取消对相关资源的订阅,业务层仅需处理 UI 业务
3003
+ * 被服务踢出房间
3023
3004
  */
3024
- onAnchorTrackUnpublish?(tracks: RCRemoteTrack[]): void;
3005
+ KICK = "RCRTC:kick",
3025
3006
  /**
3026
- * 房间主播禁用/启用音频
3027
- * @param audioTrack RCRemoteAudioTrack 类实例
3007
+ * 跨房间连麦 PK 请求消息
3028
3008
  */
3029
- onAudioMuteChange?(audioTrack: RCRemoteAudioTrack): void;
3009
+ PK_INVITE = "RCRTC:invite",
3030
3010
  /**
3031
- * 房间主播禁用/启用视频
3032
- * @param videoTrack RCRemoteVideoTrack 类实例对象
3033
- */
3034
- onVideoMuteChange?(videoTrack: RCRemoteVideoTrack): void;
3011
+ * 连麦请求超时
3012
+ */
3013
+ PK_INVITE_TIMEOUT = "RCRTC:inviteTimeout",
3035
3014
  /**
3036
- * 房间内主播把发布的资源推至 CDN
3015
+ * 跨房间连麦 PK 取消请求消息
3037
3016
  */
3038
- onCDNInfoEnable?(CDNInfo: {
3039
- resolution: RCResolution;
3040
- fps: RCFrameRate;
3041
- }): void;
3017
+ PK_CANCEL_INVITE = "RCRTC:cancelInvite",
3042
3018
  /**
3043
- * 主播停止推 CDN
3019
+ * 跨房间连麦 PK 请求响应消息
3044
3020
  */
3045
- onCDNInfoDisable?(): void;
3021
+ PK_INVITE_ANSWER = "RCRTC:answerInvite",
3046
3022
  /**
3047
- * 主播改变推 CDN 的分辨率或帧率
3023
+ * 结束跨房间连麦 PK 消息
3048
3024
  */
3049
- onCDNInfoChange?(CDNInfo: {
3050
- resolution: RCResolution;
3051
- fps: RCFrameRate;
3052
- }): void;
3053
- }
3054
- /**
3055
- * 观众直播房间类
3056
- * 处理:
3057
- * 1、通知观众房间内 人员变更、资源变更
3058
- * 2、观众订阅、取消订阅资源
3059
- */
3060
- declare class RCAudienceLivingRoom {
3061
- private readonly _context;
3062
- private readonly _runtime;
3063
- private readonly _initOptions;
3064
- private readonly _roomId;
3065
- private readonly _joinResData;
3066
- readonly livingType: RCLivingType;
3067
- protected readonly _clientSessionId: string;
3068
- private readonly _service;
3025
+ PK_END = "RCRTC:endInvite",
3069
3026
  /**
3070
- * 主播列表
3027
+ * 连麦的房间不再了或离线了,主直播房间会收到的消息通知
3071
3028
  */
3072
- private _roomAnchorList;
3029
+ OTHER_ROOM_OFFLINE = "RCRTC:otherRoomOffline",
3073
3030
  /**
3074
- * 合流、分流资源
3031
+ * 订阅、取消订阅动作成功
3075
3032
  */
3076
- private _roomRes;
3033
+ ROOM_TASK_FINISH = "RCRTC:roomTaskFinish",
3077
3034
  /**
3078
- * 主播分流资源
3035
+ * ASR 状态变更
3079
3036
  */
3080
- private _roomAnchorRes;
3037
+ ASR_STATUS = "RCRTC:AsrStatus",
3081
3038
  /**
3082
- * 合流、分流 remoteTracks
3039
+ * ASR SEI 变更
3083
3040
  */
3084
- private _remoteTracks;
3085
- private _appListener;
3086
- private readonly _pc;
3087
- private _subscribedList;
3088
- private _sessionId;
3089
- private _destroyed;
3041
+ ASR_SEI = "RCRTC:PublishSeiAi"
3042
+ }
3043
+
3044
+ /**
3045
+ * 直播间类型
3046
+ */
3047
+ declare enum RCLivingType {
3090
3048
  /**
3091
- * 北极星上报实例
3049
+ * 音视频直播
3092
3050
  */
3093
- protected readonly _polarisReport: PolarisReporter;
3051
+ VIDEO = 0,
3094
3052
  /**
3095
- * 音量上报实例
3053
+ * 音频直播
3096
3054
  */
3097
- private readonly _audioLevelReport;
3055
+ AUDIO = 1
3056
+ }
3057
+
3058
+ declare type IOnRecvPKMsg = (msg: IReceivedMessage) => void;
3059
+ interface IRoomPKEventListener {
3098
3060
  /**
3099
- * cdn_uris 资源
3061
+ * 收到连麦邀请
3100
3062
  */
3101
- private _CDNUris;
3102
- private _isPulling;
3103
- private _pullTime;
3104
- private readonly _store;
3105
- private _crtUserId;
3106
- private readonly _reportMediaActionLogger;
3063
+ onRequestJoinOtherRoom: (info: IPKInviteInfo) => {};
3107
3064
  /**
3108
- * track 对应的 mediaServer 信息
3065
+ * 收到取消连麦邀请
3109
3066
  */
3110
- private _trackMediaMap;
3111
- private readonly _logger;
3112
- constructor(_context: RTCContext, _runtime: IRuntime, _initOptions: IRCRTCInitOptions, _roomId: string, _joinResData: {
3113
- token: string;
3114
- kvEntries: IServerRTCRoomEntry[];
3115
- }, livingType: RCLivingType, _clientSessionId?: string);
3116
- private _startPull;
3067
+ onCancelRequestOtherRoom: (info: IPKInviteInfo) => {};
3117
3068
  /**
3118
- * 解析服务端返回的 KV 数据,赋值 room 内数据
3069
+ * 收到连麦 PK 请求响应结果
3119
3070
  */
3120
- private _setInitData;
3121
- protected _assertRoomDestroyed(): RCRTCCode | undefined;
3071
+ onResponseJoinOtherRoom: (info: IPKInviteAnswerInfo) => {};
3122
3072
  /**
3123
- * @description 信令数据处理
3124
- * @param roomId 数据对应的房间 Id
3125
- * @param singalData 拉取到的数据
3126
- * * key RC_ANCHOR_LIST value: 为主播 ID 集合
3127
- * * key RC_RES_`userId` value: 为主播发布的资源
3128
- * * key RC_RTC_SESSIONID value: sessionId
3129
- * * key RC_CDN value: CDN 资源数据
3073
+ * 收到 PK 结束
3130
3074
  */
3131
- private singalDataChange;
3075
+ onFinishOtherRoom: (info: IPKEndInfo) => {};
3076
+ }
3077
+ declare class RCLivingPKHandler {
3078
+ private _invoker;
3079
+ private _PKInfo;
3080
+ private readonly _context;
3081
+ private readonly _runtime;
3082
+ private readonly _service;
3083
+ private readonly _initOptions;
3132
3084
  /**
3133
- * 计算加入离开的主播 ID 列表
3085
+ * 主直播房间
3134
3086
  */
3135
- private _diffAnchorList;
3136
- private _handleNewJoinedAnchor;
3137
- private _handleLeftedAnchor;
3087
+ private readonly _mainLivingRoom;
3088
+ private readonly _registerPKMsgListener;
3138
3089
  /**
3139
- * 计算新发布和取消发布的合流资源
3090
+ * 加入 PK 房间回调
3140
3091
  */
3141
- private _diffRoomResource;
3092
+ private readonly _onJoinedPKRoom;
3093
+ protected readonly _clientSessionId?: string | undefined;
3142
3094
  /**
3143
- * 处理主播资源的新增发布
3095
+ * PK 邀请超时时间,默认 30s
3144
3096
  */
3145
- private _dealPublished;
3097
+ private readonly _inviteTimeout;
3098
+ private _appListener;
3099
+ private _mainRoomId;
3146
3100
  /**
3147
- * 处理主播资源的取消发布
3101
+ * 跨房间连麦加入的 PK 房间
3148
3102
  */
3149
- private _dealUnpublished;
3103
+ private _joinedPKRooms;
3104
+ private readonly _logger;
3105
+ constructor(_invoker: Invoker, _PKInfo: IPKInfo, _context: RTCContext, _runtime: IRuntime, _service: RCMediaService, _initOptions: IRCRTCInitOptions,
3150
3106
  /**
3151
- * 处理主播资源的变更
3107
+ * 主直播房间
3152
3108
  */
3153
- private _dealModified;
3109
+ _mainLivingRoom: RCLivingRoom, _registerPKMsgListener: (listener: IOnRecvPKMsg) => void,
3154
3110
  /**
3155
- * 计算主播发布和取消发布的资源,以及资源的状态变更
3156
- */
3157
- private _diffAnchorResource;
3158
- private _onUserUnpublish;
3111
+ * 加入 PK 房间回调
3112
+ */
3113
+ _onJoinedPKRoom: (roomId: string, traceId: string) => Promise<void>, _clientSessionId?: string | undefined);
3159
3114
  private _callAppListener;
3160
3115
  /**
3161
- * ice 断线后,尝试重新走 exchange
3162
- */
3163
- private _reTryExchange;
3116
+ * 收到连麦邀请
3117
+ */
3118
+ private _onInvite;
3164
3119
  /**
3165
- * 获取 subscribe 接口的请求体数据
3166
- * @param subscribeList 订阅清单
3167
- * @param publishedStreams 已发布流
3168
- * @param iceRestart
3120
+ * 收到取消连麦
3169
3121
  */
3170
- protected _createSubscribeParams(subscribeList: ISubscribeAttr[], publishedStreams: {
3171
- [msid: string]: RCLocalMediaStream;
3172
- }, iceRestart: boolean): Promise<{
3173
- reqBody: IBroadcastSubReqBody;
3174
- offer: RTCSessionDescriptionInit;
3175
- dynamicBitrate: {
3176
- min: number;
3177
- max: number;
3178
- };
3122
+ private _onCancelInvite;
3123
+ private _onInviteTimeout;
3124
+ /**
3125
+ * 收到响应连麦
3126
+ */
3127
+ private _onInviteAnswer;
3128
+ private createLeaveOtherRoomCommand;
3129
+ /**
3130
+ * 收到连麦结束
3131
+ */
3132
+ private _onPKEnd;
3133
+ /**
3134
+ * 处理跨房间连麦相关消息
3135
+ */
3136
+ private _onRecvPKMsg;
3137
+ /**
3138
+ * 注册跨房间连麦监听事件
3139
+ */
3140
+ registerRoomPKEventListener(listener: IRoomPKEventListener): void;
3141
+ /**
3142
+ * 发起跨房间连麦请求
3143
+ * @param inviteeRoomId 被邀请者所处的房间 roomId
3144
+ * @param inviteeUserId 被邀请者 userId
3145
+ * @param options.autoMix 是否将本房间资源合并到被邀请者所处房间的 MCU 合流中
3146
+ * @param options.extra 拓展字段,可随邀请连麦消息透传给被邀请者
3147
+ */
3148
+ requestJoinOtherRoom(inviteeRoomId: string, inviteeUserId: string, options?: IReqResPKOptions): Promise<{
3149
+ code: RCRTCCode | ErrorCode;
3179
3150
  }>;
3180
- private _subscribeHandle;
3181
3151
  /**
3182
- * 添加 peerConnection 事件
3152
+ * 取消跨房间连麦请求
3153
+ * @param inviteeRoomId 被邀请者所处的房间 roomId
3154
+ * @param inviteeUserId 被邀请者 userId
3155
+ * @param extra 附加信息,可随取消邀请连麦消息透传给被邀请者
3156
+ */
3157
+ cancelRequestJoinOtherRoom(inviteeRoomId: string, inviteeUserId: string, extra?: string): Promise<{
3158
+ code: RCRTCCode | ErrorCode;
3159
+ }>;
3160
+ /**
3161
+ * 响应跨房间连麦请求
3162
+ * @param inviterRoomId 邀请者所处的房间 roomId
3163
+ * @param inviterUserId 邀请者 userId
3164
+ * @param agree 是否同意连麦
3165
+ * @param options.autoMix 是否将本房间资源合并到邀请者所处房间的 MCU 合流中
3166
+ * @param options.extra 附加信息,可随响应连麦消息透传给邀请者
3167
+ */
3168
+ responseJoinOtherRoom(inviterRoomId: string, inviterUserId: string, agree: boolean, options?: IReqResPKOptions): Promise<{
3169
+ code: RCRTCCode | ErrorCode;
3170
+ }>;
3171
+ /**
3172
+ * 加入副直播房间
3173
+ * @roomId 副房间的 roomId
3174
+ */
3175
+ joinOtherRoom(roomId: string): Promise<{
3176
+ code: RCRTCCode;
3177
+ room?: RCLivingRoom;
3178
+ userIds?: string[];
3179
+ tracks?: RCRemoteTrack[];
3180
+ CDNEnable?: boolean;
3181
+ }>;
3182
+ /**
3183
+ * 退出副房间
3184
+ * @param room 要退出的副房间的 room 实例
3185
+ * @param isQuitPK 是否要结束连麦
3186
+ */
3187
+ leaveOtherRoom(room: RCLivingRoom, isQuitPK?: boolean): Promise<{
3188
+ code: RCRTCCode;
3189
+ }>;
3190
+ /**
3191
+ * 获取连麦信息
3192
+ * @param roomId 连麦房间的 roomId
3193
+ */
3194
+ getPKInfo(roomId: string): {
3195
+ inviteSessionId: string;
3196
+ inviterRoomId: string;
3197
+ inviterUserId: string;
3198
+ inviterUserAutoMix?: boolean | undefined;
3199
+ inviteeRoomId: string;
3200
+ inviteeUserAutoMix?: boolean | undefined;
3201
+ };
3202
+ /**
3203
+ * 获取所有连麦信息
3204
+ */
3205
+ getAllPKInfo(): IPKInfo;
3206
+ /**
3207
+ * 获取已加入的副房间
3208
+ */
3209
+ getJoinedPKRooms(): {
3210
+ [roomId: string]: RCLivingRoom;
3211
+ };
3212
+ }
3213
+
3214
+ declare type ResourceMsgContent = {
3215
+ /**
3216
+ * 旧版本兼容参数,当收到非 `RTCMessageName.TOTAL_CONTENT_RESOURCE` 时:
3217
+ * * ignore 值为 `true` 表示该消息由 signal server 向旧版本 RTCLib 提供的兼容消息,无需处理
3218
+ * * 否则认为该消息是由旧版本 RTCLib 主动发出的增量变更消息,需要处理
3219
+ */
3220
+ ignore?: boolean;
3221
+ /**
3222
+ * 发布到房间内的资源列表,`RTCMessageName.TOTAL_CONTENT_RESOURCE` 消息携带全量数据,否则为增量数据
3223
+ */
3224
+ uris: IPublishedResource[];
3225
+ cdn_uris?: ICDNUris[];
3226
+ };
3227
+
3228
+ /**
3229
+ * 房间抽象基类
3230
+ */
3231
+ declare abstract class RCAbstractRoom extends EventEmitter {
3232
+ protected readonly _context: RTCContext;
3233
+ protected readonly _runtime: IRuntime;
3234
+ readonly _roomId: string;
3235
+ protected readonly _service: RCMediaService;
3236
+ protected readonly _initOptions: IRCRTCInitOptions;
3237
+ protected readonly _clientSessionId: string;
3238
+ /**
3239
+ * 房间保活 rtcPing
3240
+ */
3241
+ private readonly _pinger;
3242
+ /**
3243
+ * 北极星上报实例
3244
+ */
3245
+ protected readonly _polarisReport: PolarisReporter;
3246
+ /**
3247
+ * 音量上报实例
3248
+ */
3249
+ private readonly _audioLevelReport;
3250
+ protected readonly _peerConnection: RCRTCPeerConnection;
3251
+ protected readonly _invoker: Invoker;
3252
+ protected readonly _store: ReadableStore;
3253
+ private readonly _reportMediaActionLogger;
3254
+ protected readonly _logger: BasicLogger;
3255
+ protected readonly _executeCtx: CommandExecuteContext;
3256
+ /**
3257
+ * RCRTCRoom 类的构造函数。
3258
+ * @param {RTCContext} _context - RTC上下文,
3259
+ * @param {IRuntime} _runtime - 运行时
3260
+ * @param {string} _roomId - 房间号
3261
+ * @param {RTCMode} _roomMode - RTC模式,
3262
+ * @param {RCMediaService} _service - RCMediaService
3263
+ * @param {IRCRTCInitOptions} _initOptions - IRCRTCInitOptions
3264
+ * @param {boolean} [isUpgrade] - 是否是升级,如果是升级则不会创建新的peerConnection
3265
+ * @param {boolean} [isMainRoom] - 无论是主房间,主房间都是用户创建的房间,子房间是用户创建的房间。
3266
+ * @param {string} _clientSessionId - 客户端会话 ID,用于标识客户端。
3267
+ */
3268
+ constructor(_context: RTCContext, _runtime: IRuntime, _roomId: string, _roomMode: RTCMode, _service: RCMediaService, _initOptions: IRCRTCInitOptions, isUpgrade?: boolean, isMainRoom?: boolean, _clientSessionId?: string, encrypt?: boolean);
3269
+ /**
3270
+ * 注册 RCRTCPeerConnection 事件监听器
3271
+ */
3272
+ private _setPeerConnectionListener;
3273
+ /** 注册命令执行中的事件监听器 */
3274
+ private setCommandEventListener;
3275
+ /**
3276
+ * 拉取房间数据
3277
+ * @param roomId 房间 id
3278
+ */
3279
+ private _startPullRTCRoomStatus;
3280
+ /**
3281
+ * @private
3282
+ */
3283
+ __innerInit(mode: RTCMode, joinType?: RTCJoinType, livingType?: RCLivingType, innerUserDatas?: IRTCUserData, outerUserDatas?: IRTCUserData, traceId?: string): Promise<{
3284
+ code: RCRTCCode | ErrorCode;
3285
+ data?: IJoinRTCRoomData;
3286
+ }>;
3287
+ protected _initWithRoomData(offlineKickTime: number): void;
3288
+ private _handlePingResult;
3289
+ /**
3290
+ * 设置房间上行资源的总码率配置
3291
+ * @deprecated use RCLocalTrack.setBitrate instead of setBitrate
3292
+ * @description
3293
+ * * 自 v5.1.0 版本开始,推荐使用 `RCLocalTrack.setBitrate` 对不同流分别指定码率。
3294
+ * * 该方法仅在 SDP `plan-b` 协议下(Chrome 92 与 Safari 11 之前的版本)有效。
3295
+ * @param max 音视频发送码率上限,不可小于 200 且不可小于 `min`
3296
+ * @param min 音视频发送码率下限,默认值为 1,且不可小于 1,不可大于 `max`
3297
+ * @param start 起始码率,默认为码率上限的 70%
3298
+ */
3299
+ setBitrate(max: number, min: number, start?: number): void;
3300
+ private _onTrackReady;
3301
+ protected _callAppListener(eventType: keyof IRoomEventListener, ...attrs: any[]): void;
3302
+ private _onTrackUnpublish;
3303
+ /**
3304
+ * @private
3305
+ */
3306
+ __parseInnerMessage(message: IReceivedMessage, traceId: string): void;
3307
+ /**
3308
+ * 被踢出房间通知
3309
+ * @param byServer
3310
+ * * 当值为 false 时,说明本端 rtcPing 超时
3311
+ * * 当值为 true 时,说明本端收到被踢出房间通知
3312
+ * @private
3313
+ */
3314
+ __kickoff(byServer: boolean, content?: IRCRTCKickContent): Promise<void>;
3315
+ private _rtcpeerClosed;
3316
+ private _onReceiveAsrSeiContent;
3317
+ /**
3318
+ * 处理资源变更事件
3319
+ * @param content
3320
+ * @param messageType 消息类型
3321
+ * @param userId 消息发送者
3183
3322
  */
3184
- private _addPeerCEvent;
3185
- private _getReqHeaders;
3186
- private _exchangeHandle;
3187
- private _dealSubscribeResult;
3323
+ protected _resourceHandle(content: ResourceMsgContent, messageType: RCRTCMessageType.PUBLISH | RCRTCMessageType.UNPUBLISH | RCRTCMessageType.MODIFY | RCRTCMessageType.TOTAL_CONTENT_RESOURCE, userId: string, sentTime: number, traceId: string): Promise<void>;
3324
+ private _onTrackPublish;
3188
3325
  /**
3189
- * 去重、转化参数格式为 ISubscribeAttr
3326
+ * 处理 `RCRTCMessageType.STATE` 消息
3327
+ * @param content
3190
3328
  */
3191
- private _getParams;
3192
- private _reportPubOrSubQualityData;
3193
- private _updateSubListHandle;
3329
+ private _stateHandle;
3194
3330
  /**
3195
- * 对比 cdn_uris 资源
3196
- * @param newCDNUris 新的 cdn_uris 数据
3331
+ * 处理人员应用层事件
3197
3332
  */
3198
- private _diffCDNUris;
3333
+ private _dealUserAppListener;
3199
3334
  /**
3200
- * 获取 CDN 资源对应的拉流地址
3201
- * _CDNUris 无 url 时,说明未开启 CDN 推送
3202
- * @returns CDNPlayUrl
3335
+ * 获取房间 Id
3203
3336
  */
3204
- private _getCDNPlayUrl;
3337
+ getRoomId(): string;
3205
3338
  /**
3206
- * 获取 CDN 资源对应的拉流地址
3207
- * @returns CDNPlayUrl
3339
+ * 获取当前 userId
3208
3340
  */
3209
- getCDNPlayUrl(resolution?: RCResolution, fps?: RCFrameRate): Promise<{
3210
- code: RCRTCCode;
3211
- CDNPlayUrl?: string;
3212
- }>;
3341
+ getCrtUserId(): string;
3213
3342
  /**
3214
- * 订阅资源
3215
- * @param tracks
3343
+ * 获取远程用户列表,不包含当前用户
3216
3344
  */
3217
- subscribe(tracks: (RCRemoteTrack | ISubscribeAttr)[]): Promise<{
3218
- code: RCRTCCode;
3219
- failedList?: ISubscribeAttr[];
3220
- }>;
3221
- private __unsubscribe;
3345
+ getRemoteUserIds(): string[];
3222
3346
  /**
3223
- * 取消订阅资源
3224
- * @param tracks
3347
+ * 获取所有房间已发布的远端资源列表
3348
+ * @returns
3225
3349
  */
3226
- unsubscribe(tracks: RCRemoteTrack[]): Promise<{
3227
- code: RCRTCCode;
3228
- failedList?: ISubscribeAttr[];
3229
- }>;
3350
+ getRemoteTracks(): RCRemoteTrack[];
3230
3351
  /**
3231
- * 退出房间并销毁当前房间实例,退出后该房间的所有方法将不可用
3232
- * @private
3352
+ * 获取远端用户的资源列表
3353
+ * @param userId
3354
+ * @returns
3233
3355
  */
3234
- __destroy(quitRoom: boolean): Promise<void>;
3356
+ getRemoteTracksByUserId(userId: string): RCRemoteTrack[];
3235
3357
  /**
3236
- * 根据 trackId 获取房间内的远端资源
3237
- * @param trackId
3358
+ * 获取房间当前会话 Id,当房间内已无成员时房间会回收,重新加入时 sessionId 将更新
3238
3359
  */
3239
- getRemoteTrack(trackId: string): RCRemoteTrack;
3360
+ getSessionId(): string;
3240
3361
  /**
3241
- * TODO 待优化
3242
- * @param trackId
3362
+ * 向房间内发消息
3363
+ * @param name 消息名称
3364
+ * @param content 消息内容
3243
3365
  */
3244
- getLocalTrack(trackId: string): RCRemoteTrack;
3366
+ sendMessage(name: string, content: any): Promise<{
3367
+ code: RCRTCCode;
3368
+ }>;
3245
3369
  /**
3246
- * 断线重连后处理逻辑, SDK 内部处理调用
3247
- * @private
3370
+ * 设置房间属性
3371
+ * @param key 属性名
3372
+ * @param value 属性值
3373
+ * @param message 是否在设置属性的时候携带消息内容,传空则不往房间中发送消息
3374
+ * @param isInner RTC 业务内部使用参数,用户忽略
3248
3375
  */
3249
- __onReconnected(): Promise<void>;
3376
+ setRoomAttribute(key: string, value: string, message?: {
3377
+ name: string;
3378
+ content: string;
3379
+ }, isInner?: boolean): Promise<{
3380
+ code: RCRTCCode;
3381
+ }>;
3250
3382
  /**
3251
- * 观众房间事件注册
3252
- * @param tag 参数描述
3383
+ * 删除房间属性
3384
+ * @param keys 待删除的属性名数组
3385
+ * @param message 是否在删除属性的时候携带消息内容,传空则不往房间中发送消息
3386
+ * @param isInner RTC 业务内部使用参数,用户忽略
3253
3387
  */
3254
- registerRoomEventListener(listener: IAudienceRoomEventListener | null): void;
3388
+ deleteRoomAttributes(keys: string[], message?: {
3389
+ name: string;
3390
+ content: string;
3391
+ }, isInner?: boolean): Promise<{
3392
+ code: RCRTCCode;
3393
+ }>;
3255
3394
  /**
3256
- * 音量上报
3257
- * @param handler 业务端传入的音量上报事件
3258
- * @param _ - 参数已废弃
3395
+ * 获取房间属性
3396
+ * @param keys 要查询的属性名数组,当数组长度为空时,取所有已设置的 kv 值
3397
+ * @param isInner RTC 业务内部使用参数,用户忽略
3259
3398
  */
3260
- onAudioLevelChange(handler: IAudioLevelChangeHandler | null, _?: number): void;
3261
- private _reportListener;
3399
+ getRoomAttributes(keys?: string[], isInner?: boolean): Promise<{
3400
+ code: RCRTCCode;
3401
+ data?: KVString;
3402
+ }>;
3262
3403
  /**
3263
- * 注册房间数据监控
3264
- * @param listener
3404
+ * 设置当前用户属性(暂不开放)
3405
+ * @param key 属性名
3406
+ * @param value 属性值
3407
+ * @param message 是否在设置属性的时候携带消息内容,传空则不往房间中发送消息
3265
3408
  */
3266
- registerReportListener(listener: IRCRTCReportListener | null): void;
3409
+ private _setUserAttributeValue;
3267
3410
  /**
3268
- * 获取房间 Id
3411
+ * 删除当前用户属性(暂不开放)
3412
+ * @param keys 待删除的属性名数组
3413
+ * @param message 是否在删除属性的时候携带消息内容,传空则不往房间中发送消息
3269
3414
  */
3270
- getRoomId(): string;
3415
+ private _deleteUserAttributes;
3271
3416
  /**
3272
- * 获取当前 userId
3417
+ * 获取当前用户属性(暂不开放)
3418
+ * @param keys 要查询的属性名数组
3273
3419
  */
3274
- getCrtUserId(): string;
3420
+ private _getUserAttributes;
3275
3421
  /**
3276
- * 获取房间当前会话 Id,当房间内已无成员时房间会回收,重新加入时 sessionId 将更新
3422
+ * 查询房间是否已销毁
3277
3423
  */
3278
- getSessionId(): string;
3424
+ isDestroyed(): boolean;
3279
3425
  /**
3280
- * 获取远程主播用户列表
3426
+ * 退出并销毁当前房间实例,退出后该房间的所有方法将不可用
3427
+ * @private
3281
3428
  */
3282
- getRemoteUserIds(): string[];
3429
+ __destroy(quitRoom: boolean): Promise<void>;
3283
3430
  /**
3284
- * 获取远端用户的资源列表
3285
- * @param userId
3286
- * @returns
3431
+ * 退出房间之前禁用所有远端资源,避免退出动作耗时过长,
3432
+ * 导致在未完全退出的过程中仍能听到房间内的声音问题
3287
3433
  */
3288
- getRemoteTracksByUserId(userId: string): RCRemoteTrack[];
3434
+ private _muteRemoteTracksBeforeQuit;
3435
+ private _leaveHandle;
3289
3436
  /**
3290
- * 获取房间内所有已发布的远端资源列表, 包含合流资源
3291
- * @returns
3437
+ * 释放 PCManager 上的资源
3292
3438
  */
3293
- getRemoteTracks(): RCRemoteTrack[];
3439
+ private _releasePCManager;
3440
+ private _onLocalTrackDestroied;
3294
3441
  /**
3295
- * 获取远端 RTC tracks
3442
+ * 本端流状态修改,需通知房间内其他成员
3443
+ * @param localTrack
3296
3444
  */
3297
- getRemoteRTCTracks(): RCRemoteTrack[];
3445
+ private _onLocalTrackMuted;
3298
3446
  /**
3299
- * 获取远端 MCU tracks
3447
+ * 增量发布资源,若发布的资源 tag 及媒体类型重复,后者将覆盖前者进行发布。
3448
+ * @param tracks 待发布的 RCLocalTrack 实例
3449
+ * @returns
3300
3450
  */
3301
- getRemoteMCUTracks(): RCRemoteTrack[];
3451
+ publish(tracks: (RCLocalTrack | IPublishAttrs)[]): Promise<IPubSuccessRes>;
3302
3452
  /**
3303
- * 获取房间内 CDN 信息
3453
+ * 获取跨房间连麦需携带参数 pushOtherRooms 的值
3304
3454
  */
3305
- getCDNInfo(): {
3306
- resolution: RCResolution;
3307
- fps: RCFrameRate;
3308
- CDNEnable: boolean | undefined;
3309
- } | {
3310
- CDNEnable: boolean;
3311
- resolution?: undefined;
3312
- fps?: undefined;
3313
- };
3314
- getClientSessionId(): string;
3315
- }
3316
-
3317
- /**
3318
- * 北极星上报角色
3319
- */
3320
- declare enum PolarisRole {
3455
+ protected _getPushOtherRoomsParams(): IPushOtherRooms[];
3321
3456
  /**
3322
- * 会议参会者、主播
3457
+ * ice 断线后,尝试重新走 exchange
3323
3458
  */
3324
- MeetingOrAnchor = 1,
3459
+ protected _reTryExchange(): Promise<ICommandResult<void>>;
3325
3460
  /**
3326
- * 观众
3461
+ * 增量取消资源发布,若相应资源中存在小流资源,则同时取消发布
3462
+ * @param tracks 取消发布的 RCLocalTrack 列表
3327
3463
  */
3328
- Audience = 2
3329
- }
3330
-
3331
- declare class PolarisReporter {
3332
- private readonly _context;
3333
- private readonly _runtime;
3334
- private readonly _roomId;
3335
- private readonly _crtRTCRoom;
3336
- private readonly _userRole;
3337
- constructor(_context: RTCContext, _runtime: IRuntime, _roomId: string, _crtRTCRoom: RCAbstractRoom | RCAudienceLivingRoom, _userRole?: PolarisRole);
3338
- private _send;
3339
- private _getClientID;
3464
+ unpublish(tracks: RCLocalTrack[]): Promise<IPubSuccessRes>;
3340
3465
  /**
3341
- * 小流需去掉 _tiny,小流 resourceId 为 userId_tag_mediaType_tiny
3466
+ * resourceId 有效性验证
3467
+ * @param resourceId
3342
3468
  */
3343
- private _getRealResourceId;
3469
+ protected _isValidResourceId(resourceId: string): boolean;
3344
3470
  /**
3345
- * 生成北极星上报的 trackId
3346
- * @param resourceId userId_11_1_tiny 改为 userId_11_tiny_video
3471
+ * 订阅资源
3472
+ * @param tracks
3347
3473
  */
3348
- private _getPolarisTrackId;
3474
+ subscribe(tracks: (RCRemoteTrack | ISubscribeAttr)[]): Promise<{
3475
+ code: RCRTCCode;
3476
+ failedList?: ISubscribeAttr[];
3477
+ }>;
3349
3478
  /**
3350
- * 上下行 track 包含的公共字段
3479
+ * 取消订阅资源
3480
+ * @param tracks 预取消远端资源
3351
3481
  */
3352
- private _getBaseData;
3353
- private _getAudioLevel;
3354
- private _getBitrate;
3355
- private _getPacketsLostRate;
3356
- private _getFrameRate;
3357
- private _getResolution;
3358
- private _getJitter;
3359
- private _getNackCount;
3360
- private _getPliCount;
3361
- private _getRTT;
3362
- private _getTrackState;
3482
+ unsubscribe(tracks: RCRemoteTrack[]): Promise<{
3483
+ code: RCRTCCode;
3484
+ failedList?: ISubscribeAttr[];
3485
+ }>;
3363
3486
  /**
3364
- * 发送上行音视频资源数据
3365
- * @param data peerConnection stats 解析出来业务所需的所有字段
3487
+ * 强制修改订阅列表,仅订阅数组中的资源,取消订阅其他已订阅资源。
3488
+ * 当参数为 `[]` 时,意味着不再订阅任何资源
3489
+ * @param tracks 变更的资源列表
3366
3490
  */
3367
- sendR3Data(data: IInnerRCRTCStateReport): Promise<RCSendCode>;
3491
+ updateSubList(tracks: (RCRemoteTrack | ISubscribeAttr)[]): Promise<{
3492
+ code: RCRTCCode;
3493
+ failedList?: ISubscribeAttr[];
3494
+ }>;
3368
3495
  /**
3369
- * 发送下行音视频资源数据
3370
- * @param data peerConnection stats 解析出来业务所需的所有字段
3496
+ * 获取已发布的本地资源
3497
+ * @param trackId
3498
+ * @returns
3371
3499
  */
3372
- sendR4Data(data: IInnerRCRTCStateReport): Promise<RCSendCode>;
3500
+ getLocalTrack(trackId: string): RCLocalTrack | null;
3373
3501
  /**
3374
- * 加入房间
3502
+ * 获取所有已发布的资源
3375
3503
  */
3376
- sendR1(): void;
3504
+ getLocalTracks(): RCLocalTrack[];
3377
3505
  /**
3378
- * RTC LIVE 发布、取消发布
3379
- * RTC 订阅、取消订阅
3506
+ * 根据 trackId 获取房间内的远端资源
3507
+ * @param trackId
3508
+ * @returns
3380
3509
  */
3381
- sendR2(action: string, status: string, trackIds: string[]): void;
3382
- }
3383
-
3384
- /**
3385
- * PC 实例管理类
3386
- */
3387
- declare class RCRTCPeerConnection extends EventEmitter {
3388
- private _logger;
3510
+ getRemoteTrack(trackId: string): RCRemoteAudioTrack | RCRemoteVideoTrack | null;
3389
3511
  /**
3390
- * _reTryExchange 方法
3512
+ * 获取当前已经订阅的全量资源
3513
+ * returns subscribedTracks ISubscribeAttr[]
3391
3514
  */
3392
- private readonly _reTryExchange;
3515
+ get subscribedTracks(): ISubscribeAttr[];
3516
+ private _appListener;
3393
3517
  /**
3394
- * 当前用户 id
3518
+ * 注册事件监听器,多次注册会导致后者覆盖前者,可以通过使用 `registerRoomEventListener(null)` 取消注册
3519
+ * @param listener
3395
3520
  */
3396
- private readonly _currentUserId;
3521
+ registerRoomEventListener(listener: IRoomEventListener | null): void;
3397
3522
  /**
3398
- * store 实例
3523
+ * 注册房间数据监控
3524
+ * @param listener
3525
+ * @description 该方法暂仅支持 Chrome 浏览器
3399
3526
  */
3400
- private readonly _store;
3527
+ registerReportListener(listener: IRCRTCReportListener | null): void;
3401
3528
  /**
3402
- * 北极星上传实例
3529
+ * 音量上报
3530
+ * @param handler 音量事件监听函数
3531
+ * @param _ - 参数已废弃,SDK 默认以每秒一次进行回调~~上报时间间隔~~
3403
3532
  */
3404
- private readonly _polarisReport?;
3533
+ onAudioLevelChange(handler: IAudioLevelChangeHandler | null, _?: number): void;
3405
3534
  /**
3406
- * 是否是房间内观众
3535
+ * 断线重连后尝试补发断线过程中的通知信息
3407
3536
  */
3408
- private readonly _isRoomAudience;
3409
- static __INNER_EVENT_TRACK_READY__: string;
3410
- static __INNER_AUDIOLEVEL_CHANGE__: string;
3411
- static __INNER_ICE_STATE_CHANGE__: string;
3412
- static __INNER_ICE_CONNECTED__: string;
3413
- private readonly _rtcPeerConn;
3414
- private readonly _sdpStrategy;
3415
- reportParser: IStatParser | null;
3416
- private pubLocalTracks;
3417
- private _reTryExchangeTimer;
3418
- private _reportStatsTimer;
3419
- private _reportR3R4ToPolarisTimer;
3420
- private _isDestroyed;
3421
- private _formatStatsData?;
3422
- constructor(_logger: BasicLogger,
3423
3537
  /**
3424
- * _reTryExchange 方法
3538
+ * @private
3539
+ * @param livingType
3425
3540
  */
3426
- _reTryExchange: () => Promise<ICommandResult<void>>,
3541
+ __onReconnected(livingType?: RCLivingType): void;
3542
+ private _onAudioMuteChange;
3543
+ private _onVideoMuteChange;
3427
3544
  /**
3428
- * 当前用户 id
3545
+ * 存储连麦监听事件
3429
3546
  */
3430
- _currentUserId: string,
3547
+ private _onRecvPKMsg;
3431
3548
  /**
3432
- * store 实例
3549
+ * 注册 PK 业务监听方法
3433
3550
  */
3434
- _store: ReadableStore,
3551
+ protected _registerPKMsgListener(listener: IOnRecvPKMsg | null): void;
3435
3552
  /**
3436
- * 北极星上传实例
3553
+ * 退出 PK 房间
3437
3554
  */
3438
- _polarisReport?: PolarisReporter | undefined,
3555
+ protected _quitAllPKRoom(): Promise<void>;
3556
+ getClientSessionId(): string;
3439
3557
  /**
3440
- * 是否是房间内观众
3558
+ * 切换已发布视频或音频的媒体设备
3559
+ * @param oldTrack 已经发布的视频轨道或音频轨道
3560
+ * @param newTrack 从新设备获取的视频轨道或音频轨道
3561
+ * @returns code 切换结果,RCRTCCode.SUCCESS 表示切换成功
3441
3562
  */
3442
- _isRoomAudience?: boolean,
3563
+ changeMediaDevice(oldTrack: RCCameraVideoTrack | RCMicphoneAudioTrack, newTrack: RCCameraVideoTrack | RCMicphoneAudioTrack): Promise<{
3564
+ code: RCRTCCode;
3565
+ }>;
3443
3566
  /**
3444
- * 是否启用自定义加密
3567
+ * 设置输入语言代码,用于语音识别精准识别
3568
+ * @param srcLanguage 语言代码
3569
+ * @description 需要在 `setEnableASR` 开启语音识别接口之前调用
3570
+ * @return
3445
3571
  */
3446
- encrypt?: boolean);
3447
- getLocalTracks(): RCLocalTrack[];
3448
- private _onConnectionStateChange;
3449
- private startAutoExecute;
3450
- private stopAutoExecute;
3451
- private _onICEConnectionStateChange;
3452
- private _inRetry;
3453
- private _handleRetry;
3454
- private _onTrackReady;
3572
+ setSrcLanguageCode(srcLanguage: string): Promise<ICommandResult<unknown>>;
3455
3573
  /**
3456
- * @deprecated use RCLocalTrack.setBitrate instead of setBitrate
3574
+ * 开启房间内的语音识别服务
3575
+ * @returns
3457
3576
  */
3458
- setBitrate(max: number, min: number, start?: number): Promise<void>;
3577
+ startASR(): Promise<{
3578
+ code: RCRTCCode;
3579
+ }>;
3459
3580
  /**
3460
- * `createOffer` 是一个创建报价并记录报价 SDP 和 SDP 语义的函数
3461
- * @param {boolean} iceRestart - 布尔值
3462
- * @returns 具有两个属性的对象:
3463
- * - sdp:SDP 字符串
3464
- * - 语义:SDP 语义
3581
+ * 关闭房间内的语音识别服务
3582
+ * @returns
3465
3583
  */
3466
- createOffer(iceRestart: boolean): Promise<IOfferInfo>;
3467
- private _firstConnectFromPub;
3584
+ stopASR(): Promise<{
3585
+ code: RCRTCCode;
3586
+ }>;
3468
3587
  /**
3469
- * @param answer
3470
- * @param fromPub 是否来自于发布动作,用来对外通知连接成功后统计
3588
+ * 是否有语音识别资源
3589
+ * @returns
3471
3590
  */
3472
- setRemoteAnswer(answer: string, fromPub?: boolean): Promise<RCRTCCode>;
3473
- getLocalTrack(trackId: string): RCLocalTrack | null;
3591
+ asrIsAvailable(): boolean;
3474
3592
  /**
3475
- * 它将本地轨道添加到对等连接。
3476
- * @param {RCLocalTrack} track - 要添加的本地轨道。
3593
+ * 设置房间内的语音识别资源是否可用
3594
+ * @param enable ture 时,sdk 会获取语音识别资源并解析,通过房间监听事件 `onReceiveASRContent` 事件,抛出语音识别内容
3595
+ * @description
3596
+ * @returns
3477
3597
  */
3478
- addLocalTrack(track: RCLocalTrack): void;
3598
+ setEnableASR(enable: boolean): Promise<{
3599
+ code: RCRTCCode;
3600
+ }>;
3479
3601
  /**
3480
- * 按 ID 删除本地轨道
3481
- * @param {string} trackId - 要移除的轨道的 ID。
3482
- * @returns 正在删除的轨道。
3602
+ * 开启语音实时翻译
3603
+ * @param destLangCode 翻译的目标语言
3604
+ * @description 执行时机:需在房间监听事件 `onReceiveStartASR` 中执行。
3605
+ * @description 执行条件:房间内语音识别资源被设置为可用
3606
+ * @returns
3483
3607
  */
3484
- removeLocalTrackById(trackId: string): void;
3608
+ startRealtimeTranslation(destLangCode: string): Promise<{
3609
+ code: RCRTCCode;
3610
+ }>;
3485
3611
  /**
3486
- * 它会删除所有本地Track。
3612
+ * 关闭语音实时翻译
3613
+ * @returns
3487
3614
  */
3488
- removeAllLocalTrack(): void;
3615
+ stopRealtimeTranslation(): Promise<{
3616
+ code: RCRTCCode;
3617
+ }>;
3618
+ }
3619
+
3620
+ declare class RCLocalMediaStream {
3621
+ readonly msid: string;
3622
+ readonly mediaStream: MediaStream;
3623
+ readonly tinyStream: MediaStream;
3624
+ readonly tag: string;
3625
+ constructor(msid: string);
3626
+ }
3627
+
3628
+ interface IAudienceRoomEventListener extends IRCRTCTrackEventListener {
3489
3629
  /**
3490
- * 从对等连接中删除本地轨道。
3491
- * @param {RCLocalTrack} track - 要删除的本地轨道。
3630
+ * 主播加入
3631
+ * @param userIds 加入主播的 id 列表
3492
3632
  */
3493
- removeLocalTrack(track: RCLocalTrack, isRemoveTiny?: boolean): void;
3494
- private _updateRecvTransceiverMap;
3495
- updateSubRemoteTracks(remoteTracks: RCRemoteTrack[]): void;
3633
+ onAnchorJoin?(userId: string[]): void;
3496
3634
  /**
3497
- * 获取当前已发布视频流信息
3635
+ * 主播退出
3636
+ * @param userIds 退出主播的 id 列表
3498
3637
  */
3499
- getOutboundVideoInfo(): OutboundVideoInfo[];
3500
- private _onLocalTrackMuted;
3501
- private _onLocalTrackDestroied;
3502
- private _reportListener;
3638
+ onAnchorLeave?(userId: string[]): void;
3503
3639
  /**
3504
- * 注册连接数据监控,开启质量数据上报定时器
3505
- * @param listener
3640
+ * 房间内合流发布资源
3641
+ * @param tracks 新发布的合流音轨与视轨数据列表,包含新发布的 RCRemoteAudioTrack 与 RCRemoteVideoTrack 实例
3642
+ * @description
3643
+ * 当房间内某个主播第一次发布资源时触发
3506
3644
  */
3507
- registerReportListener(listener: IRCRTCReportListener | null): void;
3645
+ onTrackPublish?(tracks: RCRemoteTrack[]): void;
3508
3646
  /**
3509
- * 组装上行质量报告数据
3647
+ * 房间内取消合流发布资源
3648
+ * @param tracks 被取消发布的合流音轨与视轨数据列表
3649
+ * @description
3650
+ * 当房间内全部主播退出房间时,SDK 内部会取消对资源的订阅,业务层仅需处理 UI 业务
3510
3651
  */
3511
- private _createSenderReport;
3652
+ onTrackUnpublish?(tracks: RCRemoteTrack[]): void;
3512
3653
  /**
3513
- * 组装下行质量报告数据
3654
+ * 房间内主播发布资源
3655
+ * @param tracks 主播新发布的音轨与视轨数据列表,包含新发布的 RCRemoteAudioTrack 与 RCRemoteVideoTrack 实例
3514
3656
  */
3515
- private _createReceiverReport;
3516
- private _createRCRTCStateReport;
3657
+ onAnchorTrackPublish?(tracks: RCRemoteTrack[]): void;
3517
3658
  /**
3518
- * 获取 peerConnection stats 数据并格式化
3519
- * @returns 返回格式化后的数据
3659
+ * 房间内主播取消发布资源
3660
+ * @param tracks 被主播取消发布的音轨与视轨数据列表
3661
+ * @description 当资源被取消发布时,SDK 内部会取消对相关资源的订阅,业务层仅需处理 UI 业务
3520
3662
  */
3521
- private _getStatsData;
3663
+ onAnchorTrackUnpublish?(tracks: RCRemoteTrack[]): void;
3522
3664
  /**
3523
- * 通知用户质量数据、peerConnection 北极星数据上报
3665
+ * 房间主播禁用/启用音频
3666
+ * @param audioTrack RCRemoteAudioTrack 类实例
3524
3667
  */
3525
- private _reportHandle;
3668
+ onAudioMuteChange?(audioTrack: RCRemoteAudioTrack): void;
3526
3669
  /**
3527
- * 获取合流音源信息
3528
- */
3529
- private _getLiveAudioState;
3670
+ * 房间主播禁用/启用视频
3671
+ * @param videoTrack RCRemoteVideoTrack 类实例对象
3672
+ */
3673
+ onVideoMuteChange?(videoTrack: RCRemoteVideoTrack): void;
3530
3674
  /**
3531
- * 北极星上报 R3、R4 数据
3675
+ * 房间内主播把发布的资源推至 CDN
3532
3676
  */
3533
- private _sendR3R4Data;
3677
+ onCDNInfoEnable?(CDNInfo: {
3678
+ resolution: RCResolution;
3679
+ fps: RCFrameRate;
3680
+ }): void;
3534
3681
  /**
3535
- * 2s 给北极星上报一次 R3、R4
3682
+ * 主播停止推 CDN
3536
3683
  */
3537
- __reportR3R4ToPolaris(): Promise<void>;
3538
- getRTCPeerConn(): RTCPeerConnection;
3684
+ onCDNInfoDisable?(): void;
3539
3685
  /**
3540
- * 关闭 RTCPeerConnection 连接。其生命周期:
3541
- * 1. 连接生命周期与房间实例一致(包含观众加房间),仅在退出房间时进行关闭。
3542
- * 2. 观众客户端(观众不加房间)订阅时创建,取消订阅时销毁
3686
+ * 主播改变推 CDN 的分辨率或帧率
3543
3687
  */
3544
- destroy(): void;
3545
- clearReTryExchangeTimer(): void;
3546
- isDestroyed(): boolean;
3688
+ onCDNInfoChange?(CDNInfo: {
3689
+ resolution: RCResolution;
3690
+ fps: RCFrameRate;
3691
+ }): void;
3547
3692
  }
3548
-
3549
3693
  /**
3550
- * 命令执行上下文
3694
+ * 观众直播房间类
3695
+ * 处理:
3696
+ * 1、通知观众房间内 人员变更、资源变更
3697
+ * 2、观众订阅、取消订阅资源
3551
3698
  */
3552
- declare class CommandExecuteContext extends EventEmitter {
3699
+ declare class RCAudienceLivingRoom {
3700
+ private readonly _context;
3701
+ private readonly _runtime;
3702
+ private readonly _initOptions;
3703
+ private readonly _roomId;
3704
+ private readonly _joinResData;
3705
+ readonly livingType: RCLivingType;
3706
+ protected readonly _clientSessionId: string;
3707
+ private readonly _service;
3708
+ /**
3709
+ * 主播列表
3710
+ */
3711
+ private _roomAnchorList;
3712
+ /**
3713
+ * 合流、分流资源
3714
+ */
3715
+ private _roomRes;
3553
3716
  /**
3554
- * 日志工具
3717
+ * 主播分流资源
3555
3718
  */
3556
- readonly logger: BasicLogger;
3719
+ private _roomAnchorRes;
3557
3720
  /**
3558
- * MediaServer 请求实例
3721
+ * 合流、分流 remoteTracks
3559
3722
  */
3560
- readonly service: RCMediaService;
3723
+ private _remoteTracks;
3724
+ private _appListener;
3725
+ private readonly _pc;
3726
+ private _subscribedList;
3727
+ private _sessionId;
3728
+ private _destroyed;
3561
3729
  /**
3562
- * IM 信令上下文
3730
+ * 北极星上报实例
3563
3731
  */
3564
- readonly context: RTCContext;
3732
+ protected readonly _polarisReport: PolarisReporter;
3565
3733
  /**
3566
- * 运行时
3734
+ * 音量上报实例
3567
3735
  */
3568
- readonly runtime: IRuntime;
3736
+ private readonly _audioLevelReport;
3569
3737
  /**
3570
- * PeerConenction 连接实例
3738
+ * cdn_uris 资源
3571
3739
  */
3572
- readonly peer: RCRTCPeerConnection;
3740
+ private _CDNUris;
3741
+ private _isPulling;
3742
+ private _pullTime;
3743
+ private readonly _store;
3744
+ private _crtUserId;
3745
+ private readonly _reportMediaActionLogger;
3573
3746
  /**
3574
- * 内存只读模块
3747
+ * track 对应的 mediaServer 信息
3575
3748
  */
3576
- readonly store: ReadableStore;
3749
+ private _trackMediaMap;
3750
+ private readonly _logger;
3751
+ constructor(_context: RTCContext, _runtime: IRuntime, _initOptions: IRCRTCInitOptions, _roomId: string, _joinResData: {
3752
+ token: string;
3753
+ kvEntries: IServerRTCRoomEntry[];
3754
+ }, livingType: RCLivingType, _clientSessionId?: string);
3755
+ private _startPull;
3577
3756
  /**
3578
- * 北极星统计工具
3757
+ * 解析服务端返回的 KV 数据,赋值 room 内数据
3579
3758
  */
3580
- readonly polarisReport: PolarisReporter;
3759
+ private _setInitData;
3760
+ protected _assertRoomDestroyed(): RCRTCCode | undefined;
3581
3761
  /**
3582
- * 行为数据采集工具
3762
+ * @description 信令数据处理
3763
+ * @param roomId 数据对应的房间 Id
3764
+ * @param singalData 拉取到的数据
3765
+ * * key RC_ANCHOR_LIST value: 为主播 ID 集合
3766
+ * * key RC_RES_`userId` value: 为主播发布的资源
3767
+ * * key RC_RTC_SESSIONID value: sessionId
3768
+ * * key RC_CDN value: CDN 资源数据
3583
3769
  */
3584
- readonly reportMediaActionLogger: ReportMediaActionLogger;
3585
- constructor(
3770
+ private singalDataChange;
3586
3771
  /**
3587
- * 日志工具
3772
+ * 计算加入离开的主播 ID 列表
3588
3773
  */
3589
- logger: BasicLogger,
3774
+ private _diffAnchorList;
3775
+ private _handleNewJoinedAnchor;
3776
+ private _handleLeftedAnchor;
3590
3777
  /**
3591
- * MediaServer 请求实例
3778
+ * 计算新发布和取消发布的合流资源
3592
3779
  */
3593
- service: RCMediaService,
3780
+ private _diffRoomResource;
3594
3781
  /**
3595
- * IM 信令上下文
3782
+ * 处理主播资源的新增发布
3596
3783
  */
3597
- context: RTCContext,
3784
+ private _dealPublished;
3598
3785
  /**
3599
- * 运行时
3786
+ * 处理主播资源的取消发布
3600
3787
  */
3601
- runtime: IRuntime,
3788
+ private _dealUnpublished;
3602
3789
  /**
3603
- * PeerConenction 连接实例
3790
+ * 处理主播资源的变更
3604
3791
  */
3605
- peer: RCRTCPeerConnection,
3792
+ private _dealModified;
3606
3793
  /**
3607
- * 内存只读模块
3794
+ * 计算主播发布和取消发布的资源,以及资源的状态变更
3795
+ */
3796
+ private _diffAnchorResource;
3797
+ private _onUserUnpublish;
3798
+ private _callAppListener;
3799
+ /**
3800
+ * ice 断线后,尝试重新走 exchange
3801
+ */
3802
+ private _reTryExchange;
3803
+ /**
3804
+ * 获取 subscribe 接口的请求体数据
3805
+ * @param subscribeList 订阅清单
3806
+ * @param publishedStreams 已发布流
3807
+ * @param iceRestart
3608
3808
  */
3609
- store: ReadableStore,
3809
+ protected _createSubscribeParams(subscribeList: ISubscribeAttr[], publishedStreams: {
3810
+ [msid: string]: RCLocalMediaStream;
3811
+ }, iceRestart: boolean): Promise<{
3812
+ reqBody: IBroadcastSubReqBody;
3813
+ offer: RTCSessionDescriptionInit;
3814
+ dynamicBitrate: {
3815
+ min: number;
3816
+ max: number;
3817
+ };
3818
+ }>;
3819
+ private _subscribeHandle;
3610
3820
  /**
3611
- * 北极星统计工具
3821
+ * 添加 peerConnection 事件
3612
3822
  */
3613
- polarisReport: PolarisReporter,
3823
+ private _addPeerCEvent;
3824
+ private _getReqHeaders;
3825
+ private _exchangeHandle;
3826
+ private _dealSubscribeResult;
3614
3827
  /**
3615
- * 行为数据采集工具
3828
+ * 去重、转化参数格式为 ISubscribeAttr
3616
3829
  */
3617
- reportMediaActionLogger: ReportMediaActionLogger);
3830
+ private _getParams;
3831
+ private _reportPubOrSubQualityData;
3832
+ private _updateSubListHandle;
3618
3833
  /**
3619
- * 代理房间实例以获取跨房间连麦时的推送配置
3834
+ * 对比 cdn_uris 资源
3835
+ * @param newCDNUris 新的 cdn_uris 数据
3620
3836
  */
3621
- getPushOtherRooms: () => IPushOtherRooms[];
3622
- }
3623
-
3624
- /**
3625
- * @typeParams T - 事务执行上下文类型
3626
- * @typeParams S - 内存读写模块类型
3627
- */
3628
- declare class BaseInvoker<T, S> {
3629
- protected readonly _logger: BasicLogger;
3837
+ private _diffCDNUris;
3630
3838
  /**
3631
- * 内存数据管理实例
3839
+ * 获取 CDN 资源对应的拉流地址
3840
+ * _CDNUris 无 url 时,说明未开启 CDN 推送
3841
+ * @returns CDNPlayUrl
3632
3842
  */
3633
- protected readonly _context: T;
3843
+ private _getCDNPlayUrl;
3634
3844
  /**
3635
- * 内存读写模块
3845
+ * 获取 CDN 资源对应的拉流地址
3846
+ * @returns CDNPlayUrl
3636
3847
  */
3637
- protected readonly _store: S;
3848
+ getCDNPlayUrl(resolution?: RCResolution, fps?: RCFrameRate): Promise<{
3849
+ code: RCRTCCode;
3850
+ CDNPlayUrl?: string;
3851
+ }>;
3638
3852
  /**
3639
- * 命令终止时返回的错误码定义
3853
+ * 订阅资源
3854
+ * @param tracks
3640
3855
  */
3641
- private abortCode;
3642
- constructor(_logger: BasicLogger,
3856
+ subscribe(tracks: (RCRemoteTrack | ISubscribeAttr)[]): Promise<{
3857
+ code: RCRTCCode;
3858
+ failedList?: ISubscribeAttr[];
3859
+ }>;
3860
+ private __unsubscribe;
3643
3861
  /**
3644
- * 内存数据管理实例
3862
+ * 取消订阅资源
3863
+ * @param tracks
3645
3864
  */
3646
- _context: T,
3865
+ unsubscribe(tracks: RCRemoteTrack[]): Promise<{
3866
+ code: RCRTCCode;
3867
+ failedList?: ISubscribeAttr[];
3868
+ }>;
3647
3869
  /**
3648
- * 内存读写模块
3870
+ * 退出房间并销毁当前房间实例,退出后该房间的所有方法将不可用
3871
+ * @private
3649
3872
  */
3650
- _store: S,
3873
+ __destroy(quitRoom: boolean): Promise<void>;
3651
3874
  /**
3652
- * 命令终止时返回的错误码定义
3875
+ * 根据 trackId 获取房间内的远端资源
3876
+ * @param trackId
3653
3877
  */
3654
- abortCode: RCRTCCode);
3655
- private _queue;
3656
- private _busy;
3657
- private _next;
3658
- private _execute;
3659
- push<R>(command: BaseCommand<R, T, S>): Promise<ICommandResult<R>>;
3660
- private _isDestroyed;
3661
- isDestroyed(): boolean;
3662
- destroy(): void;
3663
- }
3664
- /**
3665
- * 房间任务队列管理
3666
- */
3667
- declare class Invoker extends BaseInvoker<CommandExecuteContext, Store> {
3668
- constructor(context: CommandExecuteContext, store: Store);
3878
+ getRemoteTrack(trackId: string): RCRemoteTrack;
3669
3879
  /**
3670
- * 获取 store 存储实例,返回值类型 `ReadableStore`,避免非 command 定义中修改内存
3880
+ * TODO 待优化
3881
+ * @param trackId
3671
3882
  */
3672
- get store(): ReadableStore;
3673
- destroy(): void;
3674
- }
3675
-
3676
- declare enum CommandPriority {
3677
- LOW = 0,
3678
- NORMAL = 1,
3679
- HIGH = 2
3680
- }
3681
- declare type ICommandResult<R = void> = {
3682
- code: number;
3683
- data?: R;
3684
- };
3685
- /**
3686
- * 命令基类
3687
- * @typeParams R - 返回值类型声明
3688
- * @typeParams T - 命令执行上下文类型
3689
- * @typeParams S - 内存数据缓存模块
3690
- */
3691
- declare abstract class BaseCommand<R = void, T = CommandExecuteContext, S = Store> {
3883
+ getLocalTrack(trackId: string): RCRemoteTrack;
3692
3884
  /**
3693
- * 事务执行函数
3694
- * @param context - 事务执行上下文
3695
- * @param store - 内存读写模块
3696
- * @param invoker - 任务队列
3885
+ * 断线重连后处理逻辑, SDK 内部处理调用
3886
+ * @private
3697
3887
  */
3698
- abstract execute(context: T, store: S, invoker: BaseInvoker<T, S>): Promise<ICommandResult<R>>;
3888
+ __onReconnected(): Promise<void>;
3699
3889
  /**
3700
- * 获取指令优先级,必要时可 override 此函数
3890
+ * 观众房间事件注册
3891
+ * @param tag 参数描述
3701
3892
  */
3702
- get priority(): CommandPriority;
3893
+ registerRoomEventListener(listener: IAudienceRoomEventListener | null): void;
3703
3894
  /**
3704
- * 它返回命令的种类。
3705
- * @returns 命令的种类。
3895
+ * 音量上报
3896
+ * @param handler 业务端传入的音量上报事件
3897
+ * @param _ - 参数已废弃
3706
3898
  */
3707
- get kind(): RCCommandKind;
3708
- }
3709
-
3710
- /**
3711
- * RTC 消息类型常量
3712
- * @private
3713
- */
3714
- declare enum RCRTCMessageType {
3899
+ onAudioLevelChange(handler: IAudioLevelChangeHandler | null, _?: number): void;
3900
+ private _reportListener;
3715
3901
  /**
3716
- * 增量资源发布消息
3717
- * @deprecated
3902
+ * 注册房间数据监控
3903
+ * @param listener
3718
3904
  */
3719
- PUBLISH = "RCRTC:PublishResource",
3905
+ registerReportListener(listener: IRCRTCReportListener | null): void;
3720
3906
  /**
3721
- * 增量资源取消发布消息
3722
- * @deprecated
3907
+ * 获取房间 Id
3723
3908
  */
3724
- UNPUBLISH = "RCRTC:UnpublishResource",
3909
+ getRoomId(): string;
3725
3910
  /**
3726
- * 增量资源状态变更消息
3727
- * @deprecated
3911
+ * 获取当前 userId
3728
3912
  */
3729
- MODIFY = "RCRTC:ModifyResource",
3913
+ getCrtUserId(): string;
3730
3914
  /**
3731
- * 全量资源变更消息
3915
+ * 获取房间当前会话 Id,当房间内已无成员时房间会回收,重新加入时 sessionId 将更新
3732
3916
  */
3733
- TOTAL_CONTENT_RESOURCE = "RCRTC:TotalContentResources",
3917
+ getSessionId(): string;
3734
3918
  /**
3735
- * 房间人员变更
3919
+ * 获取远程主播用户列表
3736
3920
  */
3737
- STATE = "RCRTC:state",
3921
+ getRemoteUserIds(): string[];
3738
3922
  /**
3739
- * 房间属性变更
3923
+ * 获取远端用户的资源列表
3924
+ * @param userId
3925
+ * @returns
3740
3926
  */
3741
- ROOM_NOTIFY = "RCRTC:RoomNtf",
3927
+ getRemoteTracksByUserId(userId: string): RCRemoteTrack[];
3742
3928
  /**
3743
- * 房间用户属性变更
3929
+ * 获取房间内所有已发布的远端资源列表, 包含合流资源
3930
+ * @returns
3744
3931
  */
3745
- USER_NOTIFY = "RCRTC:UserNtf",
3932
+ getRemoteTracks(): RCRemoteTrack[];
3746
3933
  /**
3747
- * 被服务踢出房间
3934
+ * 获取远端 RTC tracks
3748
3935
  */
3749
- KICK = "RCRTC:kick",
3936
+ getRemoteRTCTracks(): RCRemoteTrack[];
3750
3937
  /**
3751
- * 跨房间连麦 PK 请求消息
3938
+ * 获取远端 MCU tracks
3752
3939
  */
3753
- PK_INVITE = "RCRTC:invite",
3940
+ getRemoteMCUTracks(): RCRemoteTrack[];
3754
3941
  /**
3755
- * 连麦请求超时
3942
+ * 获取房间内 CDN 信息
3756
3943
  */
3757
- PK_INVITE_TIMEOUT = "RCRTC:inviteTimeout",
3944
+ getCDNInfo(): {
3945
+ resolution: RCResolution;
3946
+ fps: RCFrameRate;
3947
+ CDNEnable: boolean | undefined;
3948
+ } | {
3949
+ CDNEnable: boolean;
3950
+ resolution?: undefined;
3951
+ fps?: undefined;
3952
+ };
3953
+ getClientSessionId(): string;
3954
+ }
3955
+
3956
+ /**
3957
+ * 北极星上报角色
3958
+ */
3959
+ declare enum PolarisRole {
3758
3960
  /**
3759
- * 跨房间连麦 PK 取消请求消息
3961
+ * 会议参会者、主播
3760
3962
  */
3761
- PK_CANCEL_INVITE = "RCRTC:cancelInvite",
3963
+ MeetingOrAnchor = 1,
3762
3964
  /**
3763
- * 跨房间连麦 PK 请求响应消息
3965
+ * 观众
3764
3966
  */
3765
- PK_INVITE_ANSWER = "RCRTC:answerInvite",
3967
+ Audience = 2
3968
+ }
3969
+
3970
+ declare class PolarisReporter {
3971
+ private readonly _context;
3972
+ private readonly _runtime;
3973
+ private readonly _roomId;
3974
+ private readonly _crtRTCRoom;
3975
+ private readonly _userRole;
3976
+ constructor(_context: RTCContext, _runtime: IRuntime, _roomId: string, _crtRTCRoom: RCAbstractRoom | RCAudienceLivingRoom, _userRole?: PolarisRole);
3977
+ private _send;
3978
+ private _getClientID;
3766
3979
  /**
3767
- * 结束跨房间连麦 PK 消息
3980
+ * 小流需去掉 _tiny,小流 resourceId 为 userId_tag_mediaType_tiny
3768
3981
  */
3769
- PK_END = "RCRTC:endInvite",
3982
+ private _getRealResourceId;
3770
3983
  /**
3771
- * 连麦的房间不再了或离线了,主直播房间会收到的消息通知
3984
+ * 生成北极星上报的 trackId
3985
+ * @param resourceId userId_11_1_tiny 改为 userId_11_tiny_video
3772
3986
  */
3773
- OTHER_ROOM_OFFLINE = "RCRTC:otherRoomOffline",
3987
+ private _getPolarisTrackId;
3774
3988
  /**
3775
- * 订阅、取消订阅动作成功
3989
+ * 上下行 track 包含的公共字段
3776
3990
  */
3777
- ROOM_TASK_FINISH = "RCRTC:roomTaskFinish"
3778
- }
3779
-
3780
- declare type IOnRecvPKMsg = (msg: IReceivedMessage) => void;
3781
- interface IRoomPKEventListener {
3991
+ private _getBaseData;
3992
+ private _getAudioLevel;
3993
+ private _getBitrate;
3994
+ private _getPacketsLostRate;
3995
+ private _getFrameRate;
3996
+ private _getResolution;
3997
+ private _getJitter;
3998
+ private _getNackCount;
3999
+ private _getPliCount;
4000
+ private _getRTT;
4001
+ private _getTrackState;
3782
4002
  /**
3783
- * 收到连麦邀请
4003
+ * 发送上行音视频资源数据
4004
+ * @param data peerConnection stats 解析出来业务所需的所有字段
3784
4005
  */
3785
- onRequestJoinOtherRoom: (info: IPKInviteInfo) => {};
4006
+ sendR3Data(data: IInnerRCRTCStateReport): Promise<RCSendCode>;
3786
4007
  /**
3787
- * 收到取消连麦邀请
4008
+ * 发送下行音视频资源数据
4009
+ * @param data peerConnection stats 解析出来业务所需的所有字段
3788
4010
  */
3789
- onCancelRequestOtherRoom: (info: IPKInviteInfo) => {};
4011
+ sendR4Data(data: IInnerRCRTCStateReport): Promise<RCSendCode>;
3790
4012
  /**
3791
- * 收到连麦 PK 请求响应结果
4013
+ * 加入房间
3792
4014
  */
3793
- onResponseJoinOtherRoom: (info: IPKInviteAnswerInfo) => {};
4015
+ sendR1(): void;
3794
4016
  /**
3795
- * 收到 PK 结束
4017
+ * RTC LIVE 发布、取消发布
4018
+ * RTC 订阅、取消订阅
3796
4019
  */
3797
- onFinishOtherRoom: (info: IPKEndInfo) => {};
4020
+ sendR2(action: string, status: string, trackIds: string[]): void;
3798
4021
  }
3799
- declare class RCLivingPKHandler {
3800
- private _invoker;
3801
- private _PKInfo;
3802
- private readonly _context;
3803
- private readonly _runtime;
3804
- private readonly _service;
3805
- private readonly _initOptions;
4022
+
4023
+ /**
4024
+ * PC 实例管理类
4025
+ */
4026
+ declare class RCRTCPeerConnection extends EventEmitter {
4027
+ readonly _context: RTCContext;
4028
+ private _logger;
3806
4029
  /**
3807
- * 主直播房间
4030
+ * _reTryExchange 方法
3808
4031
  */
3809
- private readonly _mainLivingRoom;
3810
- private readonly _registerPKMsgListener;
4032
+ private readonly _reTryExchange;
3811
4033
  /**
3812
- * 加入 PK 房间回调
4034
+ * 当前用户 id
3813
4035
  */
3814
- private readonly _onJoinedPKRoom;
3815
- protected readonly _clientSessionId?: string | undefined;
4036
+ private readonly _currentUserId;
3816
4037
  /**
3817
- * PK 邀请超时时间,默认 30s
4038
+ * store 实例
3818
4039
  */
3819
- private readonly _inviteTimeout;
3820
- private _appListener;
3821
- private _mainRoomId;
4040
+ private readonly _store;
3822
4041
  /**
3823
- * 跨房间连麦加入的 PK 房间
4042
+ * 北极星上传实例
3824
4043
  */
3825
- private _joinedPKRooms;
3826
- private readonly _logger;
3827
- constructor(_invoker: Invoker, _PKInfo: IPKInfo, _context: RTCContext, _runtime: IRuntime, _service: RCMediaService, _initOptions: IRCRTCInitOptions,
4044
+ private readonly _polarisReport?;
3828
4045
  /**
3829
- * 主直播房间
4046
+ * 是否是房间内观众
3830
4047
  */
3831
- _mainLivingRoom: RCLivingRoom, _registerPKMsgListener: (listener: IOnRecvPKMsg) => void,
4048
+ private readonly _isRoomAudience;
4049
+ static __INNER_EVENT_TRACK_READY__: string;
4050
+ static __INNER_AUDIOLEVEL_CHANGE__: string;
4051
+ static __INNER_ICE_STATE_CHANGE__: string;
4052
+ static __INNER_ICE_CONNECTED__: string;
4053
+ static __INNER_SEI_CONTENT__: string;
4054
+ private readonly _rtcPeerConn;
4055
+ private readonly _sdpStrategy;
4056
+ reportParser: IStatParser | null;
4057
+ private pubLocalTracks;
4058
+ private _reTryExchangeTimer;
4059
+ private _reportStatsTimer;
4060
+ private _reportR3R4ToPolarisTimer;
4061
+ private _isDestroyed;
4062
+ private _formatStatsData?;
4063
+ constructor(_context: RTCContext, _logger: BasicLogger,
3832
4064
  /**
3833
- * 加入 PK 房间回调
4065
+ * _reTryExchange 方法
3834
4066
  */
3835
- _onJoinedPKRoom: (roomId: string, traceId: string) => Promise<void>, _clientSessionId?: string | undefined);
3836
- private _callAppListener;
4067
+ _reTryExchange: () => Promise<ICommandResult<void>>,
3837
4068
  /**
3838
- * 收到连麦邀请
4069
+ * 当前用户 id
3839
4070
  */
3840
- private _onInvite;
4071
+ _currentUserId: string,
3841
4072
  /**
3842
- * 收到取消连麦
4073
+ * store 实例
3843
4074
  */
3844
- private _onCancelInvite;
3845
- private _onInviteTimeout;
4075
+ _store: ReadableStore,
3846
4076
  /**
3847
- * 收到响应连麦
4077
+ * 北极星上传实例
3848
4078
  */
3849
- private _onInviteAnswer;
3850
- private createLeaveOtherRoomCommand;
4079
+ _polarisReport?: PolarisReporter | undefined,
3851
4080
  /**
3852
- * 收到连麦结束
4081
+ * 是否是房间内观众
3853
4082
  */
3854
- private _onPKEnd;
4083
+ _isRoomAudience?: boolean,
3855
4084
  /**
3856
- * 处理跨房间连麦相关消息
4085
+ * 是否启用自定义加密
3857
4086
  */
3858
- private _onRecvPKMsg;
4087
+ encrypt?: boolean);
4088
+ getLocalTracks(): RCLocalTrack[];
4089
+ private _decodeSeiData;
4090
+ private _onConnectionStateChange;
4091
+ private startAutoExecute;
4092
+ private stopAutoExecute;
4093
+ private _onICEConnectionStateChange;
4094
+ private _inRetry;
4095
+ private _handleRetry;
4096
+ private _onTrackReady;
3859
4097
  /**
3860
- * 注册跨房间连麦监听事件
4098
+ * @deprecated use RCLocalTrack.setBitrate instead of setBitrate
3861
4099
  */
3862
- registerRoomPKEventListener(listener: IRoomPKEventListener): void;
4100
+ setBitrate(max: number, min: number, start?: number): Promise<void>;
3863
4101
  /**
3864
- * 发起跨房间连麦请求
3865
- * @param inviteeRoomId 被邀请者所处的房间 roomId
3866
- * @param inviteeUserId 被邀请者 userId
3867
- * @param options.autoMix 是否将本房间资源合并到被邀请者所处房间的 MCU 合流中
3868
- * @param options.extra 拓展字段,可随邀请连麦消息透传给被邀请者
4102
+ * `createOffer` 是一个创建报价并记录报价 SDP 和 SDP 语义的函数
4103
+ * @param {boolean} iceRestart - 布尔值
4104
+ * @returns 具有两个属性的对象:
4105
+ * - sdp:SDP 字符串
4106
+ * - 语义:SDP 语义
3869
4107
  */
3870
- requestJoinOtherRoom(inviteeRoomId: string, inviteeUserId: string, options?: IReqResPKOptions): Promise<{
3871
- code: RCRTCCode | ErrorCode;
3872
- }>;
4108
+ createOffer(iceRestart: boolean): Promise<IOfferInfo>;
4109
+ private _firstConnectFromPub;
3873
4110
  /**
3874
- * 取消跨房间连麦请求
3875
- * @param inviteeRoomId 被邀请者所处的房间 roomId
3876
- * @param inviteeUserId 被邀请者 userId
3877
- * @param extra 附加信息,可随取消邀请连麦消息透传给被邀请者
4111
+ * @param answer
4112
+ * @param fromPub 是否来自于发布动作,用来对外通知连接成功后统计
3878
4113
  */
3879
- cancelRequestJoinOtherRoom(inviteeRoomId: string, inviteeUserId: string, extra?: string): Promise<{
3880
- code: RCRTCCode | ErrorCode;
3881
- }>;
4114
+ setRemoteAnswer(answer: string, fromPub?: boolean): Promise<RCRTCCode>;
4115
+ getLocalTrack(trackId: string): RCLocalTrack | null;
3882
4116
  /**
3883
- * 响应跨房间连麦请求
3884
- * @param inviterRoomId 邀请者所处的房间 roomId
3885
- * @param inviterUserId 邀请者 userId
3886
- * @param agree 是否同意连麦
3887
- * @param options.autoMix 是否将本房间资源合并到邀请者所处房间的 MCU 合流中
3888
- * @param options.extra 附加信息,可随响应连麦消息透传给邀请者
4117
+ * 它将本地轨道添加到对等连接。
4118
+ * @param {RCLocalTrack} track - 要添加的本地轨道。
3889
4119
  */
3890
- responseJoinOtherRoom(inviterRoomId: string, inviterUserId: string, agree: boolean, options?: IReqResPKOptions): Promise<{
3891
- code: RCRTCCode | ErrorCode;
3892
- }>;
4120
+ addLocalTrack(track: RCLocalTrack): void;
3893
4121
  /**
3894
- * 加入副直播房间
3895
- * @roomId 副房间的 roomId
4122
+ * 按 ID 删除本地轨道
4123
+ * @param {string} trackId - 要移除的轨道的 ID。
4124
+ * @returns 正在删除的轨道。
3896
4125
  */
3897
- joinOtherRoom(roomId: string): Promise<{
3898
- code: RCRTCCode;
3899
- room?: RCLivingRoom;
3900
- userIds?: string[];
3901
- tracks?: RCRemoteTrack[];
3902
- CDNEnable?: boolean;
3903
- }>;
4126
+ removeLocalTrackById(trackId: string): void;
4127
+ /**
4128
+ * 它会删除所有本地Track。
4129
+ */
4130
+ removeAllLocalTrack(): void;
3904
4131
  /**
3905
- * 退出副房间
3906
- * @param room 要退出的副房间的 room 实例
3907
- * @param isQuitPK 是否要结束连麦
4132
+ * 从对等连接中删除本地轨道。
4133
+ * @param {RCLocalTrack} track - 要删除的本地轨道。
3908
4134
  */
3909
- leaveOtherRoom(room: RCLivingRoom, isQuitPK?: boolean): Promise<{
3910
- code: RCRTCCode;
3911
- }>;
4135
+ removeLocalTrack(track: RCLocalTrack, isRemoveTiny?: boolean): void;
4136
+ private _updateRecvTransceiverMap;
4137
+ updateSubRemoteTracks(remoteTracks: RCRemoteTrack[]): void;
3912
4138
  /**
3913
- * 获取连麦信息
3914
- * @param roomId 连麦房间的 roomId
4139
+ * 获取当前已发布视频流信息
3915
4140
  */
3916
- getPKInfo(roomId: string): {
3917
- inviteSessionId: string;
3918
- inviterRoomId: string;
3919
- inviterUserId: string;
3920
- inviterUserAutoMix?: boolean | undefined;
3921
- inviteeRoomId: string;
3922
- inviteeUserAutoMix?: boolean | undefined;
3923
- };
4141
+ getOutboundVideoInfo(): OutboundVideoInfo[];
4142
+ private _onLocalTrackMuted;
4143
+ private _onLocalTrackDestroied;
4144
+ private _reportListener;
3924
4145
  /**
3925
- * 获取所有连麦信息
4146
+ * 注册连接数据监控,开启质量数据上报定时器
4147
+ * @param listener
3926
4148
  */
3927
- getAllPKInfo(): IPKInfo;
4149
+ registerReportListener(listener: IRCRTCReportListener | null): void;
3928
4150
  /**
3929
- * 获取已加入的副房间
4151
+ * 组装上行质量报告数据
3930
4152
  */
3931
- getJoinedPKRooms(): {
3932
- [roomId: string]: RCLivingRoom;
3933
- };
3934
- }
3935
-
3936
- declare type ResourceMsgContent = {
4153
+ private _createSenderReport;
3937
4154
  /**
3938
- * 旧版本兼容参数,当收到非 `RTCMessageName.TOTAL_CONTENT_RESOURCE` 时:
3939
- * * ignore 值为 `true` 表示该消息由 signal server 向旧版本 RTCLib 提供的兼容消息,无需处理
3940
- * * 否则认为该消息是由旧版本 RTCLib 主动发出的增量变更消息,需要处理
4155
+ * 组装下行质量报告数据
3941
4156
  */
3942
- ignore?: boolean;
4157
+ private _createReceiverReport;
4158
+ private _createRCRTCStateReport;
3943
4159
  /**
3944
- * 发布到房间内的资源列表,`RTCMessageName.TOTAL_CONTENT_RESOURCE` 消息携带全量数据,否则为增量数据
4160
+ * 获取 peerConnection stats 数据并格式化
4161
+ * @returns 返回格式化后的数据
3945
4162
  */
3946
- uris: IPublishedResource[];
3947
- cdn_uris?: ICDNUris[];
3948
- };
3949
-
3950
- /**
3951
- * 房间抽象基类
3952
- */
3953
- declare abstract class RCAbstractRoom extends EventEmitter {
3954
- protected readonly _context: RTCContext;
3955
- protected readonly _runtime: IRuntime;
3956
- readonly _roomId: string;
3957
- protected readonly _service: RCMediaService;
3958
- protected readonly _initOptions: IRCRTCInitOptions;
3959
- protected readonly _clientSessionId: string;
4163
+ private _getStatsData;
3960
4164
  /**
3961
- * 房间保活 rtcPing
4165
+ * 通知用户质量数据、peerConnection 北极星数据上报
3962
4166
  */
3963
- private readonly _pinger;
4167
+ private _reportHandle;
3964
4168
  /**
3965
- * 北极星上报实例
4169
+ * 获取合流音源信息
3966
4170
  */
3967
- protected readonly _polarisReport: PolarisReporter;
4171
+ private _getLiveAudioState;
3968
4172
  /**
3969
- * 音量上报实例
4173
+ * 北极星上报 R3、R4 数据
3970
4174
  */
3971
- private readonly _audioLevelReport;
3972
- protected readonly _peerConnection: RCRTCPeerConnection;
3973
- protected readonly _invoker: Invoker;
3974
- protected readonly _store: ReadableStore;
3975
- private readonly _reportMediaActionLogger;
3976
- protected readonly _logger: BasicLogger;
3977
- protected readonly _executeCtx: CommandExecuteContext;
4175
+ private _sendR3R4Data;
3978
4176
  /**
3979
- * RCRTCRoom 类的构造函数。
3980
- * @param {RTCContext} _context - RTC上下文,
3981
- * @param {IRuntime} _runtime - 运行时
3982
- * @param {string} _roomId - 房间号
3983
- * @param {RTCMode} _roomMode - RTC模式,
3984
- * @param {RCMediaService} _service - RCMediaService
3985
- * @param {IRCRTCInitOptions} _initOptions - IRCRTCInitOptions
3986
- * @param {boolean} [isUpgrade] - 是否是升级,如果是升级则不会创建新的peerConnection
3987
- * @param {boolean} [isMainRoom] - 无论是主房间,主房间都是用户创建的房间,子房间是用户创建的房间。
3988
- * @param {string} _clientSessionId - 客户端会话 ID,用于标识客户端。
4177
+ * 2s 给北极星上报一次 R3、R4
3989
4178
  */
3990
- constructor(_context: RTCContext, _runtime: IRuntime, _roomId: string, _roomMode: RTCMode, _service: RCMediaService, _initOptions: IRCRTCInitOptions, isUpgrade?: boolean, isMainRoom?: boolean, _clientSessionId?: string, encrypt?: boolean);
4179
+ __reportR3R4ToPolaris(): Promise<void>;
4180
+ getRTCPeerConn(): RTCPeerConnection;
3991
4181
  /**
3992
- * 注册 RCRTCPeerConnection 事件监听器
4182
+ * 关闭 RTCPeerConnection 连接。其生命周期:
4183
+ * 1. 连接生命周期与房间实例一致(包含观众加房间),仅在退出房间时进行关闭。
4184
+ * 2. 观众客户端(观众不加房间)订阅时创建,取消订阅时销毁
3993
4185
  */
3994
- private _setPeerConnectionListener;
3995
- /** 注册命令执行中的事件监听器 */
3996
- private setCommandEventListener;
4186
+ destroy(): void;
4187
+ clearReTryExchangeTimer(): void;
4188
+ isDestroyed(): boolean;
4189
+ }
4190
+
4191
+ /**
4192
+ * 命令执行上下文
4193
+ */
4194
+ declare class CommandExecuteContext extends EventEmitter {
3997
4195
  /**
3998
- * 拉取房间数据
3999
- * @param roomId 房间 id
4196
+ * 日志工具
4000
4197
  */
4001
- private _startPullRTCRoomStatus;
4198
+ readonly logger: BasicLogger;
4002
4199
  /**
4003
- * @private
4200
+ * MediaServer 请求实例
4004
4201
  */
4005
- __innerInit(mode: RTCMode, joinType?: RTCJoinType, livingType?: RCLivingType, innerUserDatas?: IRTCUserData, outerUserDatas?: IRTCUserData, traceId?: string): Promise<{
4006
- code: RCRTCCode | ErrorCode;
4007
- data?: IJoinRTCRoomData;
4008
- }>;
4009
- protected _initWithRoomData(offlineKickTime: number): void;
4010
- private _handlePingResult;
4202
+ readonly service: RCMediaService;
4011
4203
  /**
4012
- * 设置房间上行资源的总码率配置
4013
- * @deprecated use RCLocalTrack.setBitrate instead of setBitrate
4014
- * @description
4015
- * * 自 v5.1.0 版本开始,推荐使用 `RCLocalTrack.setBitrate` 对不同流分别指定码率。
4016
- * * 该方法仅在 SDP `plan-b` 协议下(Chrome 92 与 Safari 11 之前的版本)有效。
4017
- * @param max 音视频发送码率上限,不可小于 200 且不可小于 `min`
4018
- * @param min 音视频发送码率下限,默认值为 1,且不可小于 1,不可大于 `max`
4019
- * @param start 起始码率,默认为码率上限的 70%
4204
+ * IM 信令上下文
4020
4205
  */
4021
- setBitrate(max: number, min: number, start?: number): void;
4022
- private _onTrackReady;
4023
- protected _callAppListener(eventType: keyof IRoomEventListener, ...attrs: any[]): void;
4024
- private _onTrackUnpublish;
4206
+ readonly context: RTCContext;
4025
4207
  /**
4026
- * @private
4208
+ * 运行时
4027
4209
  */
4028
- __parseInnerMessage(message: IReceivedMessage, traceId: string): void;
4210
+ readonly runtime: IRuntime;
4029
4211
  /**
4030
- * 被踢出房间通知
4031
- * @param byServer
4032
- * * 当值为 false 时,说明本端 rtcPing 超时
4033
- * * 当值为 true 时,说明本端收到被踢出房间通知
4034
- * @private
4212
+ * PeerConenction 连接实例
4035
4213
  */
4036
- __kickoff(byServer: boolean, content?: IRCRTCKickContent): Promise<void>;
4037
- private _rtcpeerClosed;
4214
+ readonly peer: RCRTCPeerConnection;
4038
4215
  /**
4039
- * 处理资源变更事件
4040
- * @param content
4041
- * @param messageType 消息类型
4042
- * @param userId 消息发送者
4216
+ * 内存只读模块
4043
4217
  */
4044
- protected _resourceHandle(content: ResourceMsgContent, messageType: RCRTCMessageType.PUBLISH | RCRTCMessageType.UNPUBLISH | RCRTCMessageType.MODIFY | RCRTCMessageType.TOTAL_CONTENT_RESOURCE, userId: string, sentTime: number, traceId: string): Promise<void>;
4045
- private _onTrackPublish;
4218
+ readonly store: ReadableStore;
4046
4219
  /**
4047
- * 处理 `RCRTCMessageType.STATE` 消息
4048
- * @param content
4220
+ * 北极星统计工具
4049
4221
  */
4050
- private _stateHandle;
4222
+ readonly polarisReport: PolarisReporter;
4051
4223
  /**
4052
- * 处理人员应用层事件
4224
+ * 行为数据采集工具
4053
4225
  */
4054
- private _dealUserAppListener;
4226
+ readonly reportMediaActionLogger: ReportMediaActionLogger;
4227
+ constructor(
4055
4228
  /**
4056
- * 获取房间 Id
4229
+ * 日志工具
4057
4230
  */
4058
- getRoomId(): string;
4231
+ logger: BasicLogger,
4059
4232
  /**
4060
- * 获取当前 userId
4233
+ * MediaServer 请求实例
4061
4234
  */
4062
- getCrtUserId(): string;
4235
+ service: RCMediaService,
4063
4236
  /**
4064
- * 获取远程用户列表,不包含当前用户
4237
+ * IM 信令上下文
4065
4238
  */
4066
- getRemoteUserIds(): string[];
4239
+ context: RTCContext,
4067
4240
  /**
4068
- * 获取所有房间已发布的远端资源列表
4069
- * @returns
4241
+ * 运行时
4070
4242
  */
4071
- getRemoteTracks(): RCRemoteTrack[];
4243
+ runtime: IRuntime,
4072
4244
  /**
4073
- * 获取远端用户的资源列表
4074
- * @param userId
4075
- * @returns
4245
+ * PeerConenction 连接实例
4076
4246
  */
4077
- getRemoteTracksByUserId(userId: string): RCRemoteTrack[];
4247
+ peer: RCRTCPeerConnection,
4078
4248
  /**
4079
- * 获取房间当前会话 Id,当房间内已无成员时房间会回收,重新加入时 sessionId 将更新
4249
+ * 内存只读模块
4080
4250
  */
4081
- getSessionId(): string;
4251
+ store: ReadableStore,
4082
4252
  /**
4083
- * 向房间内发消息
4084
- * @param name 消息名称
4085
- * @param content 消息内容
4253
+ * 北极星统计工具
4086
4254
  */
4087
- sendMessage(name: string, content: any): Promise<{
4088
- code: RCRTCCode;
4089
- }>;
4255
+ polarisReport: PolarisReporter,
4090
4256
  /**
4091
- * 设置房间属性
4092
- * @param key 属性名
4093
- * @param value 属性值
4094
- * @param message 是否在设置属性的时候携带消息内容,传空则不往房间中发送消息
4095
- * @param isInner RTC 业务内部使用参数,用户忽略
4257
+ * 行为数据采集工具
4096
4258
  */
4097
- setRoomAttribute(key: string, value: string, message?: {
4098
- name: string;
4099
- content: string;
4100
- }, isInner?: boolean): Promise<{
4101
- code: RCRTCCode;
4102
- }>;
4259
+ reportMediaActionLogger: ReportMediaActionLogger);
4103
4260
  /**
4104
- * 删除房间属性
4105
- * @param keys 待删除的属性名数组
4106
- * @param message 是否在删除属性的时候携带消息内容,传空则不往房间中发送消息
4107
- * @param isInner RTC 业务内部使用参数,用户忽略
4261
+ * 代理房间实例以获取跨房间连麦时的推送配置
4108
4262
  */
4109
- deleteRoomAttributes(keys: string[], message?: {
4110
- name: string;
4111
- content: string;
4112
- }, isInner?: boolean): Promise<{
4113
- code: RCRTCCode;
4114
- }>;
4263
+ getPushOtherRooms: () => IPushOtherRooms[];
4264
+ }
4265
+
4266
+ declare enum CommandPriority {
4267
+ LOW = 0,
4268
+ NORMAL = 1,
4269
+ HIGH = 2
4270
+ }
4271
+ declare type ICommandResult<R = void> = {
4272
+ code: number;
4273
+ data?: R;
4274
+ };
4275
+ /**
4276
+ * 命令基类
4277
+ * @typeParams R - 返回值类型声明
4278
+ * @typeParams T - 命令执行上下文类型
4279
+ * @typeParams S - 内存数据缓存模块
4280
+ */
4281
+ declare abstract class BaseCommand<R = void, T = CommandExecuteContext, S = Store> {
4282
+ /**
4283
+ * 事务执行函数
4284
+ * @param context - 事务执行上下文
4285
+ * @param store - 内存读写模块
4286
+ * @param invoker - 任务队列
4287
+ */
4288
+ abstract execute(context: T, store: S, invoker: BaseInvoker<T, S>): Promise<ICommandResult<R>>;
4115
4289
  /**
4116
- * 获取房间属性
4117
- * @param keys 要查询的属性名数组,当数组长度为空时,取所有已设置的 kv 值
4118
- * @param isInner RTC 业务内部使用参数,用户忽略
4290
+ * 获取指令优先级,必要时可 override 此函数
4119
4291
  */
4120
- getRoomAttributes(keys?: string[], isInner?: boolean): Promise<{
4121
- code: RCRTCCode;
4122
- data?: KVString;
4123
- }>;
4292
+ get priority(): CommandPriority;
4124
4293
  /**
4125
- * 设置当前用户属性(暂不开放)
4126
- * @param key 属性名
4127
- * @param value 属性值
4128
- * @param message 是否在设置属性的时候携带消息内容,传空则不往房间中发送消息
4294
+ * 它返回命令的种类。
4295
+ * @returns 命令的种类。
4129
4296
  */
4130
- private _setUserAttributeValue;
4297
+ get kind(): RCCommandKind;
4298
+ }
4299
+
4300
+ /**
4301
+ * @typeParams T - 事务执行上下文类型
4302
+ * @typeParams S - 内存读写模块类型
4303
+ */
4304
+ declare class BaseInvoker<T, S> {
4305
+ protected readonly _logger: BasicLogger;
4131
4306
  /**
4132
- * 删除当前用户属性(暂不开放)
4133
- * @param keys 待删除的属性名数组
4134
- * @param message 是否在删除属性的时候携带消息内容,传空则不往房间中发送消息
4307
+ * 内存数据管理实例
4135
4308
  */
4136
- private _deleteUserAttributes;
4309
+ protected readonly _context: T;
4137
4310
  /**
4138
- * 获取当前用户属性(暂不开放)
4139
- * @param keys 要查询的属性名数组
4311
+ * 内存读写模块
4140
4312
  */
4141
- private _getUserAttributes;
4313
+ protected readonly _store: S;
4142
4314
  /**
4143
- * 查询房间是否已销毁
4315
+ * 命令终止时返回的错误码定义
4144
4316
  */
4145
- isDestroyed(): boolean;
4317
+ private abortCode;
4318
+ constructor(_logger: BasicLogger,
4146
4319
  /**
4147
- * 退出并销毁当前房间实例,退出后该房间的所有方法将不可用
4148
- * @private
4320
+ * 内存数据管理实例
4149
4321
  */
4150
- __destroy(quitRoom: boolean): Promise<void>;
4322
+ _context: T,
4151
4323
  /**
4152
- * 退出房间之前禁用所有远端资源,避免退出动作耗时过长,
4153
- * 导致在未完全退出的过程中仍能听到房间内的声音问题
4324
+ * 内存读写模块
4154
4325
  */
4155
- private _muteRemoteTracksBeforeQuit;
4156
- private _leaveHandle;
4326
+ _store: S,
4157
4327
  /**
4158
- * 释放 PCManager 上的资源
4328
+ * 命令终止时返回的错误码定义
4159
4329
  */
4160
- private _releasePCManager;
4161
- private _onLocalTrackDestroied;
4330
+ abortCode: RCRTCCode);
4331
+ private _queue;
4332
+ private _busy;
4333
+ private _next;
4334
+ private _execute;
4335
+ push<R>(command: BaseCommand<R, T, S>): Promise<ICommandResult<R>>;
4336
+ private _isDestroyed;
4337
+ isDestroyed(): boolean;
4338
+ destroy(): void;
4339
+ }
4340
+ /**
4341
+ * 房间任务队列管理
4342
+ */
4343
+ declare class Invoker extends BaseInvoker<CommandExecuteContext, Store> {
4344
+ constructor(context: CommandExecuteContext, store: Store);
4162
4345
  /**
4163
- * 本端流状态修改,需通知房间内其他成员
4164
- * @param localTrack
4346
+ * 获取 store 存储实例,返回值类型 `ReadableStore`,避免非 command 定义中修改内存
4165
4347
  */
4166
- private _onLocalTrackMuted;
4348
+ get store(): ReadableStore;
4349
+ destroy(): void;
4350
+ }
4351
+
4352
+ declare enum RCRTCRealtimeTranslationType {
4353
+ OPEN = 1,
4354
+ CLOSE = 0
4355
+ }
4356
+
4357
+ declare class RCMediaService {
4358
+ private readonly _runtime;
4359
+ private readonly _context;
4167
4360
  /**
4168
- * 增量发布资源,若发布的资源 tag 及媒体类型重复,后者将覆盖前者进行发布。
4169
- * @param tracks 待发布的 RCLocalTrack 实例
4170
- * @returns
4361
+ * 自定义 MediaServer 地址,当有值时,不再使用导航内的地址
4171
4362
  */
4172
- publish(tracks: (RCLocalTrack | IPublishAttrs)[]): Promise<IPubSuccessRes>;
4363
+ private readonly _msUrl?;
4173
4364
  /**
4174
- * 获取跨房间连麦需携带参数 pushOtherRooms 的值
4365
+ * 请求超时时长
4175
4366
  */
4176
- protected _getPushOtherRoomsParams(): IPushOtherRooms[];
4367
+ private readonly _timeout;
4177
4368
  /**
4178
- * ice 断线后,尝试重新走 exchange
4369
+ * 已失败的请求地址
4179
4370
  */
4180
- protected _reTryExchange(): Promise<ICommandResult<void>>;
4371
+ private readonly _failedMs;
4181
4372
  /**
4182
- * 增量取消资源发布,若相应资源中存在小流资源,则同时取消发布
4183
- * @param tracks 取消发布的 RCLocalTrack 列表
4373
+ * 服务器指纹数据,客户端不得修改,直接透传
4184
4374
  */
4185
- unpublish(tracks: RCLocalTrack[]): Promise<IPubSuccessRes>;
4375
+ private _rtcFinger;
4186
4376
  /**
4187
- * resourceId 有效性验证
4188
- * @param resourceId
4377
+ * 服务器接口返回的 clusterId 数据,当此数据有值时,后续所有请求向此服务发送
4189
4378
  */
4190
- protected _isValidResourceId(resourceId: string): boolean;
4379
+ private _clusterId;
4191
4380
  /**
4192
- * 订阅资源
4193
- * @param tracks
4381
+ * MCU 服务地址
4194
4382
  */
4195
- subscribe(tracks: (RCRemoteTrack | ISubscribeAttr)[]): Promise<{
4196
- code: RCRTCCode;
4197
- failedList?: ISubscribeAttr[];
4198
- }>;
4383
+ private _configUrl;
4199
4384
  /**
4200
- * 取消订阅资源
4201
- * @param tracks 预取消远端资源
4385
+ * 排好序的探测地址
4202
4386
  */
4203
- unsubscribe(tracks: RCRemoteTrack[]): Promise<{
4204
- code: RCRTCCode;
4205
- failedList?: ISubscribeAttr[];
4206
- }>;
4387
+ private static msInDetector;
4388
+ private static detectorTime;
4389
+ private static detectValidMinute;
4390
+ private _msList;
4391
+ private _qualityMsList;
4392
+ private readonly _logger;
4393
+ constructor(_runtime: IRuntime, _context: RTCContext,
4207
4394
  /**
4208
- * 强制修改订阅列表,仅订阅数组中的资源,取消订阅其他已订阅资源。
4209
- * 当参数为 `[]` 时,意味着不再订阅任何资源
4210
- * @param tracks 变更的资源列表
4395
+ * 自定义 MediaServer 地址,当有值时,不再使用导航内的地址
4211
4396
  */
4212
- updateSubList(tracks: (RCRemoteTrack | ISubscribeAttr)[]): Promise<{
4213
- code: RCRTCCode;
4214
- failedList?: ISubscribeAttr[];
4215
- }>;
4397
+ _msUrl?: string | undefined,
4216
4398
  /**
4217
- * 获取已发布的本地资源
4218
- * @param trackId
4219
- * @returns
4399
+ * 请求超时时长
4220
4400
  */
4221
- getLocalTrack(trackId: string): RCLocalTrack | null;
4401
+ _timeout?: number);
4222
4402
  /**
4223
- * 获取所有已发布的资源
4403
+ * 是否需要嗅探
4404
+ * im 未连接,无 navi 数据时,不需要嗅探
4405
+ * 客户端手动配置 mediaServer 时,不需要嗅探
4406
+ * navi 数据中 detectionServer 为空时,不需要嗅探
4407
+ * navi 数据中 jwt 为空时,不需要嗅探
4408
+ * 在探测有效期内不需要嗅探
4409
+ * RCMediaService.detectorTime 为 0 时,代表未探测过,需要嗅探
4224
4410
  */
4225
- getLocalTracks(): RCLocalTrack[];
4411
+ isNededDetector(): boolean;
4412
+ detectorMediaSever(): void;
4226
4413
  /**
4227
- * 根据 trackId 获取房间内的远端资源
4228
- * @param trackId
4229
- * @returns
4414
+ * 地址探测
4415
+ * RTC 初始化时检测是否可以拿到 navi,可以拿到开始嗅探
4416
+ * 拿不到等 IM 链接成功后,再回调中调用开始嗅探
4230
4417
  */
4231
- getRemoteTrack(trackId: string): RCRemoteAudioTrack | RCRemoteVideoTrack | null;
4418
+ private _startDetector;
4232
4419
  /**
4233
- * 获取当前已经订阅的全量资源
4234
- * returns subscribedTracks ISubscribeAttr[]
4420
+ * 清空 msList 列表,重新请求导航后需清空 msList 列表
4235
4421
  */
4236
- get subscribedTracks(): ISubscribeAttr[];
4237
- private _appListener;
4422
+ clearMSList(): void;
4423
+ getMsList(): string[];
4238
4424
  /**
4239
- * 注册事件监听器,多次注册会导致后者覆盖前者,可以通过使用 `registerRoomEventListener(null)` 取消注册
4240
- * @param listener
4425
+ * _mslist 列表排序:[_clusterId, ping1DetectorUrl, 主域名, ping2DetectorUrl, ..., pingNDetectorUrl, 备用域名list ]
4426
+ * ping1 :ping 结果返回最快值
4241
4427
  */
4242
- registerRoomEventListener(listener: IRoomEventListener | null): void;
4428
+ private _sortMediaServiceList;
4243
4429
  /**
4244
- * 注册房间数据监控
4245
- * @param listener
4246
- * @description 该方法暂仅支持 Chrome 浏览器
4430
+ * 配置 gzip 请求头和请求体
4247
4431
  */
4248
- registerReportListener(listener: IRCRTCReportListener | null): void;
4432
+ private _openGzip;
4249
4433
  /**
4250
- * 音量上报
4251
- * @param handler 音量事件监听函数
4252
- * @param _ - 参数已废弃,SDK 默认以每秒一次进行回调~~上报时间间隔~~
4434
+ * 处理 request 成功的结果
4253
4435
  */
4254
- onAudioLevelChange(handler: IAudioLevelChangeHandler | null, _?: number): void;
4436
+ private _dealRequestSuccessResult;
4255
4437
  /**
4256
- * 断线重连后尝试补发断线过程中的通知信息
4438
+ * 发送请求,请求发送若失败,会继续尝试使用后续可用地址直到无地址可用,此时认为请求失败
4439
+ * @param path
4440
+ * @param header
4441
+ * @param body
4257
4442
  */
4443
+ private _request;
4258
4444
  /**
4259
- * @private
4260
- * @param livingType
4445
+ * 资源协商接口,订阅、发布、变更资源均可以使用此接口。该接口通过 sdp 字段交换 SDP 信息,
4446
+ * 并通过 subscribeList 和 publishList 表明最终发布和订阅的资源。本端产出 offer,服务器产出 answer
4447
+ * 每次接口调用,都会全量覆盖发布和订阅的资源。
4448
+ * @param header
4449
+ * @param body
4261
4450
  */
4262
- __onReconnected(livingType?: RCLivingType): void;
4263
- private _onAudioMuteChange;
4264
- private _onVideoMuteChange;
4451
+ exchange(headers: IRTCReqHeader, body: IExchangeReqBody, traceId: string, isNeedUpdateMsas?: boolean): Promise<{
4452
+ code: RCRTCCode;
4453
+ data?: IExchangeResponse | undefined;
4454
+ qualityMsList?: IMediaServerQualityData[] | undefined;
4455
+ }>;
4265
4456
  /**
4266
- * 存储连麦监听事件
4457
+ * 退出房间
4267
4458
  */
4268
- private _onRecvPKMsg;
4459
+ exit(headers: IRTCReqHeader): Promise<RCRTCCode>;
4269
4460
  /**
4270
- * 注册 PK 业务监听方法
4461
+ * 观众端订阅主播资源
4271
4462
  */
4272
- protected _registerPKMsgListener(listener: IOnRecvPKMsg | null): void;
4463
+ broadcastSubscribe(headers: IRTCReqHeader, body: IBroadcastSubReqBody): Promise<{
4464
+ code: RCRTCCode;
4465
+ data?: IBroadcastSubRespBody | undefined;
4466
+ qualityMsList?: IMediaServerQualityData[] | undefined;
4467
+ }>;
4273
4468
  /**
4274
- * 退出 PK 房间
4469
+ * 观众端退出订阅
4275
4470
  */
4276
- protected _quitAllPKRoom(): Promise<void>;
4277
- getClientSessionId(): string;
4471
+ broadcastExit(headers: IRTCReqHeader): Promise<{
4472
+ code: RCRTCCode;
4473
+ }>;
4278
4474
  /**
4279
- * 切换已发布视频或音频的媒体设备
4280
- * @param oldTrack 已经发布的视频轨道或音频轨道
4281
- * @param newTrack 从新设备获取的视频轨道或音频轨道
4282
- * @returns code 切换结果,RCRTCCode.SUCCESS 表示切换成功
4475
+ * 直播推流、自定义布局配置
4283
4476
  */
4284
- changeMediaDevice(oldTrack: RCCameraVideoTrack | RCMicphoneAudioTrack, newTrack: RCCameraVideoTrack | RCMicphoneAudioTrack): Promise<{
4477
+ setMcuConfig(headers: IMCUReqHeaders, body: IMCUConfig | ISetEnableCDN): Promise<{
4478
+ code: RCRTCCode;
4479
+ res?: any;
4480
+ }>;
4481
+ /**
4482
+ * 房间内观众获取 CDN 资源信息、拉流地址
4483
+ */
4484
+ getCDNResourceInfo(headers: ICDNPlayUrlReqHeaders, url: string, traceId: string): Promise<{
4485
+ code: RCRTCCode;
4486
+ res?: ICDNPlayUrlResponse;
4487
+ }>;
4488
+ updateASRStatus(headers: IRTCReqHeader, body: {
4489
+ 'asr_status': RCRTCASRStatus;
4490
+ }, traceId: string): Promise<{
4285
4491
  code: RCRTCCode;
4492
+ data?: {
4493
+ resultCode: number;
4494
+ } | undefined;
4495
+ qualityMsList?: IMediaServerQualityData[] | undefined;
4496
+ }>;
4497
+ operateRealtimeTranslation(headers: IRTCReqHeader, body: {
4498
+ status: RCRTCRealtimeTranslationType;
4499
+ destLanguage?: string;
4500
+ }, traceId: string): Promise<{
4501
+ code: RCRTCCode;
4502
+ data?: {
4503
+ resultCode: number;
4504
+ } | undefined;
4505
+ qualityMsList?: IMediaServerQualityData[] | undefined;
4286
4506
  }>;
4287
4507
  }
4288
4508
 
@@ -5052,4 +5272,4 @@ declare const helper: {
5052
5272
  ifSupportScreenShare: typeof ifSupportScreenShare;
5053
5273
  };
5054
5274
 
5055
- export { BackgroundPictureFillMode, IAudienceRoomEventListener, IAudioLevelChangeHandler, ICameraVideoProfile, ICreateLocalTrackOptions, IJoinRTCRoomOptions, IJoinResCDNInfo, ILiveAudioState, IMCUOutputConfig, IMCUOutputVideoConfig, IMicphoneAudioProfile, IPKEndInfo, IPKInviteAnswerInfo, IPKInviteInfo, IPubSuccessRes, IPublishAttrs, IPublishedResource, IRCCandidatePairStat, IRCEncryptorHooks, IRCRTCInitOptions, IRCRTCReportListener, IRCRTCStateReport, IRCTrackStat, IRTCUserData, IReqResPKOptions, IRoomEventListener, IRoomPKEventListener, IScreenVideoProfile, ISubscribeAttr, IVideoProfile, MixLayoutMode, MixVideoRenderMode, RCAbstractRoom, RCAudienceClient, RCAudienceLivingRoom, RCAudioBitrate, RCCameraVideoTrack, RCEncryptFunction, RCFrameRate, RCInnerCDNPullIsHttps, RCInnerCDNPullKind, RCKickReason, RCLivingRoom, RCLivingType, RCLocalAudioTrack, RCLocalFileAudioTrack, RCLocalFileTrack, RCLocalFileVideoTrack, RCLocalTrack, RCLocalVideoTrack, RCMCUConfigBuilder, RCMediaStreamCapture, RCMediaType, RCMicphoneAudioTrack, RCRTCClient, RCRTCCode, RCRTCLiveRole, RCRTCPingResult, RCRTCRoom, RCRemoteAudioTrack, RCRemoteTrack, RCRemoteVideoTrack, RCResolution, RCScreenAudioTrack, RCScreenVideoTrack, RCTag, RCTrack, RCVideoBitrate, RTCJoinType, RTCMode, device, helper, installer };
5275
+ export { BackgroundPictureFillMode, IAudienceRoomEventListener, IAudioLevelChangeHandler, ICameraVideoProfile, ICreateLocalTrackOptions, IJoinRTCRoomOptions, IJoinResCDNInfo, ILiveAudioState, IMCUOutputConfig, IMCUOutputVideoConfig, IMicphoneAudioProfile, IPKEndInfo, IPKInviteAnswerInfo, IPKInviteInfo, IPubSuccessRes, IPublishAttrs, IPublishedResource, IRCCandidatePairStat, IRCEncryptorHooks, IRCRTCInitOptions, IRCRTCReportListener, IRCRTCStateReport, IRCTrackStat, IRTCUserData, IReqResPKOptions, IRoomEventListener, IRoomPKEventListener, IScreenVideoProfile, ISubscribeAttr, IVideoProfile, MixLayoutMode, MixVideoRenderMode, RCAbstractRoom, RCAudienceClient, RCAudienceLivingRoom, RCAudioBitrate, RCCameraVideoTrack, RCEncryptFunction, RCFrameRate, RCInnerCDNPullIsHttps, RCInnerCDNPullKind, RCKickReason, RCLivingRoom, RCLivingType, RCLocalAudioTrack, RCLocalFileAudioTrack, RCLocalFileTrack, RCLocalFileVideoTrack, RCLocalTrack, RCLocalVideoTrack, RCMCUConfigBuilder, RCMediaStreamCapture, RCMediaType, RCMicphoneAudioTrack, RCRTCASRContent, RCRTCClient, RCRTCCode, RCRTCLiveRole, RCRTCPingResult, RCRTCRealtimeTranslationContent, RCRTCRoom, RCRemoteAudioTrack, RCRemoteTrack, RCRemoteVideoTrack, RCResolution, RCScreenAudioTrack, RCScreenVideoTrack, RCTag, RCTrack, RCVideoBitrate, RTCJoinType, RTCMode, device, helper, installer };