@rongcloud/plugin-rtc 5.4.7-alpha.1 → 5.4.7-alpha.4

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.
@@ -46,6 +46,11 @@ export default abstract class ASdpBuilder {
46
46
  * @returns SDP 标头和音频和视频流的字符串。
47
47
  */
48
48
  abstract stringify(): string;
49
+ /**
50
+ * 它将 SDP 标头中的 `a=group` 行替换为 `b=AS` 和 `b=TIAS` 行
51
+ * @param {number} maxBitrate - 流的最大比特率。
52
+ */
53
+ setHeaderBitrate(maxBitrate: number): void;
49
54
  /**
50
55
  * 它获取音频流并将它们映射到一个新数组,其中每个项目都是调用 setAudioItemBitrate 函数的结果
51
56
  * @param {IRCTrackBitrate} bitrate - 以 kbps 为单位的比特率。
package/dist/helper.d.ts CHANGED
@@ -42,6 +42,10 @@ export declare const isValidLocation: boolean;
42
42
  * @param track
43
43
  */
44
44
  export declare const getVideoTrackInfo: (track: MediaStreamTrack) => {
45
+ /**
46
+ * applyConstraints 方法应用的宽高约束不一定可以立马生效
47
+ * 取值优先 constraints
48
+ */
45
49
  width: number;
46
50
  height: number;
47
51
  frameRate: number;
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  /*
2
- * RCRTC - v5.4.7-alpha.1
3
- * CommitId - 1379fbc027ed59d4c014e63771b9606d8810a217
4
- * Tue Aug 30 2022 21:58:03 GMT+0800 (China Standard Time)
2
+ * RCRTC - v5.4.7-alpha.4
3
+ * CommitId - 1297531a6457c0e72d9fa276eee9a49a7b3c596e
4
+ * Tue Sep 13 2022 20:41:55 GMT+0800 (China Standard Time)
5
5
  * ©2020 RongCloud, Inc. All rights reserved.
6
6
  */
7
7
  import { EventEmitter, RTCMode, IRuntime, RTCPluginContext, IJoinRTCRoomData, IReceivedMessage, ErrorCode, RTCJoinType, IRTCUserData, KVString, IServerRTCRoomEntry, LogLevel, IRTCJoinedInfo, IPluginGenerator } from '@rongcloud/engine';
package/dist/index.esm.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /*
2
- * RCRTC - v5.4.7-alpha.1
3
- * CommitId - 1379fbc027ed59d4c014e63771b9606d8810a217
4
- * Tue Aug 30 2022 21:58:03 GMT+0800 (China Standard Time)
2
+ * RCRTC - v5.4.7-alpha.4
3
+ * CommitId - 1297531a6457c0e72d9fa276eee9a49a7b3c596e
4
+ * Tue Sep 13 2022 20:41:55 GMT+0800 (China Standard Time)
5
5
  * ©2020 RongCloud, Inc. All rights reserved.
6
6
  */
7
7
  import { Logger, EventEmitter, logger as logger$1, LogSource, isNumber, validate, ErrorCode, HttpMethod, ConnectionStatus, RTCMode, notEmptyString, isObject as isObject$1, isString, RTCJoinType, RTCApiType, isArray, assert, ConversationType, isHttpUrl, isBoolean, isUndefined, RTCIdentityChangeType, VersionManage } from '@rongcloud/engine';
@@ -6227,22 +6227,22 @@ var RCMediaType;
6227
6227
  const RongRTCVideoBitrate = {
6228
6228
  [RCResolution.W176_H132]: { width: 176, height: 132, maxBitrate: 150, minBitrate: 80 },
6229
6229
  [RCResolution.W176_H144]: { width: 176, height: 144, maxBitrate: 150, minBitrate: 80 },
6230
- [RCResolution.W180_H180]: { width: 192, height: 192, maxBitrate: 200, minBitrate: 100 },
6231
- [RCResolution.W240_H180]: { width: 240, height: 192, maxBitrate: 240, minBitrate: 120 },
6230
+ [RCResolution.W180_H180]: { width: 180, height: 180, maxBitrate: 200, minBitrate: 100 },
6231
+ [RCResolution.W240_H180]: { width: 240, height: 180, maxBitrate: 240, minBitrate: 120 },
6232
6232
  [RCResolution.W240_H240]: { width: 240, height: 240, maxBitrate: 280, minBitrate: 120 },
6233
6233
  [RCResolution.W256_H144]: { width: 256, height: 144, maxBitrate: 240, minBitrate: 120 },
6234
- [RCResolution.W320_H180]: { width: 320, height: 192, maxBitrate: 280, minBitrate: 120 },
6234
+ [RCResolution.W320_H180]: { width: 320, height: 180, maxBitrate: 280, minBitrate: 120 },
6235
6235
  [RCResolution.W320_H240]: { width: 320, height: 240, maxBitrate: 400, minBitrate: 120 },
6236
- [RCResolution.W360_H360]: { width: 368, height: 368, maxBitrate: 520, minBitrate: 140 },
6237
- [RCResolution.W480_H360]: { width: 480, height: 368, maxBitrate: 650, minBitrate: 150 },
6236
+ [RCResolution.W360_H360]: { width: 360, height: 360, maxBitrate: 520, minBitrate: 140 },
6237
+ [RCResolution.W480_H360]: { width: 480, height: 360, maxBitrate: 650, minBitrate: 150 },
6238
6238
  [RCResolution.W480_H480]: { width: 480, height: 480, maxBitrate: 800, minBitrate: 180 },
6239
- [RCResolution.W640_H360]: { width: 640, height: 368, maxBitrate: 800, minBitrate: 180 },
6239
+ [RCResolution.W640_H360]: { width: 640, height: 360, maxBitrate: 800, minBitrate: 180 },
6240
6240
  [RCResolution.W640_H480]: { width: 640, height: 480, maxBitrate: 900, minBitrate: 200 },
6241
6241
  [RCResolution.W720_H480]: { width: 720, height: 480, maxBitrate: 1000, minBitrate: 200 },
6242
6242
  [RCResolution.W848_H480]: { width: 848, height: 480, maxBitrate: 1860, minBitrate: 200 },
6243
6243
  [RCResolution.W960_H720]: { width: 960, height: 720, maxBitrate: 2000, minBitrate: 250 },
6244
6244
  [RCResolution.W1280_H720]: { width: 1280, height: 720, maxBitrate: 2200, minBitrate: 250 },
6245
- [RCResolution.W1920_H1080]: { width: 1920, height: 1088, maxBitrate: 4000, minBitrate: 400 }
6245
+ [RCResolution.W1920_H1080]: { width: 1920, height: 1080, maxBitrate: 4000, minBitrate: 400 }
6246
6246
  };
6247
6247
  /**
6248
6248
  * 分辨率适配
@@ -7349,8 +7349,12 @@ const getVideoTrackInfo = (track) => {
7349
7349
  const settings = track.getSettings();
7350
7350
  const constraints = track.getConstraints();
7351
7351
  return {
7352
- width: settings.width || getValue(constraints.width),
7353
- height: settings.height || getValue(constraints.height),
7352
+ /**
7353
+ * applyConstraints 方法应用的宽高约束不一定可以立马生效
7354
+ * 取值优先 constraints
7355
+ */
7356
+ width: getValue(constraints.width) || settings.width || 0,
7357
+ height: getValue(constraints.height) || settings.height || 0,
7354
7358
  frameRate: settings.frameRate || getValue(constraints.frameRate)
7355
7359
  };
7356
7360
  };
@@ -7935,7 +7939,7 @@ const getCommonHeader = () => ({
7935
7939
  'Content-Type': 'application/json;charset=UTF-8',
7936
7940
  'Cache-Control': 'no-cache',
7937
7941
  ClientType: `web|${browserInfo.browser}|${browserInfo.version}`,
7938
- ClientVersion: "5.4.7-alpha.1",
7942
+ ClientVersion: "5.4.7-alpha.4",
7939
7943
  'Client-Session-Id': getUUID(),
7940
7944
  'Request-Id': Date.now().toString()
7941
7945
  });
@@ -8025,11 +8029,12 @@ class RCMediaService {
8025
8029
  path,
8026
8030
  headers,
8027
8031
  body,
8028
- reqId
8032
+ reqId,
8033
+ timeout: this._timeout
8029
8034
  }, {
8030
8035
  logSource: LogSource.RTC
8031
8036
  });
8032
- logger.info(`request -> Request-Id: ${reqId}, url: ${url}, headers: ${JSON.stringify(mergeHeaders)}, body: ${jsonBody}`);
8037
+ logger.info(`request -> Request-Id: ${reqId}, url: ${url}, headers: ${JSON.stringify(mergeHeaders)}, body: ${jsonBody}, timeout: ${this._timeout}`);
8033
8038
  const { status, data } = yield this._runtime.httpReq({
8034
8039
  url,
8035
8040
  body: jsonBody,
@@ -9263,6 +9268,13 @@ class ASdpBuilder {
9263
9268
  }
9264
9269
  return stream;
9265
9270
  }
9271
+ /**
9272
+ * 它将 SDP 标头中的 `a=group` 行替换为 `b=AS` 和 `b=TIAS` 行
9273
+ * @param {number} maxBitrate - 流的最大比特率。
9274
+ */
9275
+ setHeaderBitrate(maxBitrate) {
9276
+ this.SDPHeader = this.SDPHeader.replace(/(\r\ns=[^\r\n]+)/ig, `$1\r\nc=IN IP4 0.0.0.0\r\nb=AS:${maxBitrate * ASdpBuilder.KBitrate}\r\nb=TIAS:${maxBitrate * ASdpBuilder.KBitrate * 850}`);
9277
+ }
9266
9278
  /**
9267
9279
  * 它获取音频流并将它们映射到一个新数组,其中每个项目都是调用 setAudioItemBitrate 函数的结果
9268
9280
  * @param {IRCTrackBitrate} bitrate - 以 kbps 为单位的比特率。
@@ -9353,7 +9365,7 @@ class ASdpBuilder {
9353
9365
  */
9354
9366
  addAudioBlineAS(sdpAudioBlock, bitrate) {
9355
9367
  if (!/\bb=AS:\d+\b/ig.test(sdpAudioBlock)) {
9356
- return sdpAudioBlock.replace(/^(m=audio[^\r\n]+)/, `$1\r\nb=AS:${bitrate.max * ASdpBuilder.KBitrate}`);
9368
+ return sdpAudioBlock.replace(/(\bc=IN[^\r\n]+)/ig, `$1\r\nb=AS:${bitrate.max * ASdpBuilder.KBitrate}\r\nb=TIAS:${bitrate.max * ASdpBuilder.KBitrate * 850}`);
9357
9369
  }
9358
9370
  return sdpAudioBlock;
9359
9371
  }
@@ -9451,7 +9463,7 @@ class ASdpBuilder {
9451
9463
  addVideoBlineAS(sdpVideoBlock, bitrate) {
9452
9464
  // b=AS: 定义本端带宽信息
9453
9465
  if (!/\bb=AS:\d+\b/ig.test(sdpVideoBlock)) {
9454
- return sdpVideoBlock.replace(/^(m=video[^\r\n]+)/, `$1\r\nb=AS:${bitrate.max * ASdpBuilder.KBitrate}`);
9466
+ return sdpVideoBlock.replace(/(\bc=IN[^\r\n]+)/ig, `$1\r\nb=AS:${bitrate.max * ASdpBuilder.KBitrate}\r\nb=TIAS:${bitrate.max * ASdpBuilder.KBitrate * 850}`);
9455
9467
  }
9456
9468
  return sdpVideoBlock;
9457
9469
  }
@@ -10823,7 +10835,7 @@ class PolarisReporter {
10823
10835
  * 加入房间
10824
10836
  */
10825
10837
  sendR1() {
10826
- const rtcVersion = "5.4.7-alpha.1";
10838
+ const rtcVersion = "5.4.7-alpha.4";
10827
10839
  const imVersion = this._context.getCoreVersion();
10828
10840
  const platform = 'web';
10829
10841
  const pcName = navigator.platform;
@@ -12430,6 +12442,16 @@ class PublishCommand extends BaseCommand {
12430
12442
  const { track: localTrack } = track instanceof RCLocalTrack ? { track } : track;
12431
12443
  localTracks.push(localTrack);
12432
12444
  });
12445
+ /**
12446
+ * 将发布的视频流按从小到大进行排序
12447
+ */
12448
+ tracks.sort((item, nextItem) => {
12449
+ const { track: localTrack } = item instanceof RCLocalTrack ? { track: item } : item;
12450
+ const { max: maxBitrate } = localTrack.getBitrate();
12451
+ const { track: nextLocalTrack } = nextItem instanceof RCLocalTrack ? { track: nextItem } : nextItem;
12452
+ const { max: maxNextBitrate } = nextLocalTrack.getBitrate();
12453
+ return maxBitrate - maxNextBitrate;
12454
+ });
12433
12455
  /**
12434
12456
  * 一个 peerConnection 上行不超过 10 个
12435
12457
  */
@@ -12443,10 +12465,10 @@ class PublishCommand extends BaseCommand {
12443
12465
  * 资源发布应先与 mediaserver 交换资源,建 PeerConnection 通道,后通知房间
12444
12466
  * 资源取消发布则应先通知取消发布,后与 mediaServer 协商取消资源发布
12445
12467
  */
12446
- tracks.forEach(track => {
12468
+ for (let index = 0; index < tracks.length; index++) {
12469
+ const track = tracks[index];
12447
12470
  // 向 RTCPeerConnection 添加轨道数据
12448
12471
  const { track: localTrack, pubTiny } = track instanceof RCLocalTrack ? { pubTiny: false, track } : track;
12449
- pc.addLocalTrack(localTrack);
12450
12472
  // 拷贝生成小流并添加至 RTCPeerConnection
12451
12473
  if (localTrack.isVideoTrack()) {
12452
12474
  if (pubTiny) {
@@ -12457,17 +12479,18 @@ class PublishCommand extends BaseCommand {
12457
12479
  const resolution = pubTiny.resolution || RCResolution.W176_H144;
12458
12480
  const { width, height } = transResolution(resolution);
12459
12481
  const frameRate = transFrameRate(rcFrameRate);
12460
- cloneTrack.applyConstraints({ width, height, frameRate });
12482
+ yield cloneTrack.applyConstraints({ width, height, frameRate });
12461
12483
  }
12462
12484
  catch (error) {
12463
12485
  cloneTrack === null || cloneTrack === void 0 ? void 0 : cloneTrack.stop();
12464
12486
  logger.warn(`pubTiny failed -> id: ${localTrack.getTrackId()}, msg: ${error.message}`);
12465
- return;
12487
+ break;
12466
12488
  }
12467
12489
  pc.addLocalTrack(new RCLocalVideoTrack(localTrack.getTag(), localTrack.getUserId(), cloneTrack, true));
12468
12490
  }
12469
12491
  }
12470
- });
12492
+ pc.addLocalTrack(localTrack);
12493
+ }
12471
12494
  // 客户端主动调用 api 发请求时,清除 ice 断线重连的定时器
12472
12495
  pc.clearReTryExchangeTimer();
12473
12496
  // 发送 /exchange 请求
@@ -19306,9 +19329,9 @@ const installer = {
19306
19329
  logger.error('Please use the https protocol or use `http://localhost` to open the page!');
19307
19330
  return false;
19308
19331
  }
19309
- VersionManage.add('plugin-rtc', "5.4.7-alpha.1");
19310
- if (!VersionManage.validEngine(">=5.3.3-beem-alpha.2 || >=5.3.4")) {
19311
- logger.error(`The current engine version '${VersionManage.getInfo().engine}' error, plugin-rtc required engine version at least '${">=5.3.3-beem-alpha.2 || >=5.3.4"}'.`);
19332
+ VersionManage.add('plugin-rtc', "5.4.7-alpha.4");
19333
+ if (!VersionManage.validEngine("5.3.4 - 5.4.5")) {
19334
+ logger.error(`The current engine version '${VersionManage.getInfo().engine}' error, plugin-rtc required engine version at least '${"5.3.4 - 5.4.5"}'.`);
19312
19335
  return false;
19313
19336
  }
19314
19337
  return true;
@@ -19317,7 +19340,7 @@ const installer = {
19317
19340
  var _a, _b, _c, _d, _e, _f, _g, _h;
19318
19341
  logger.setLogLevel(options.logLevel);
19319
19342
  logger.setLogStdout(options.logStdout);
19320
- logger.warn(`RCRTC Version: ${"5.4.7-alpha.1"}, Commit: ${"1379fbc027ed59d4c014e63771b9606d8810a217"}`);
19343
+ logger.warn(`RCRTC Version: ${"5.4.7-alpha.4"}, Commit: ${"1297531a6457c0e72d9fa276eee9a49a7b3c596e"}`);
19321
19344
  logger.warn(`browserInfo.browser -> ${browserInfo.browser}`);
19322
19345
  logger.warn(`browserInfo.supportsUnifiedPlan -> ${browserInfo.supportsUnifiedPlan}`);
19323
19346
  logger.warn(`browserInfo.version -> ${browserInfo.version}`);
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /*
2
- * RCRTC - v5.4.7-alpha.1
3
- * CommitId - 1379fbc027ed59d4c014e63771b9606d8810a217
4
- * Tue Aug 30 2022 21:58:03 GMT+0800 (China Standard Time)
2
+ * RCRTC - v5.4.7-alpha.4
3
+ * CommitId - 1297531a6457c0e72d9fa276eee9a49a7b3c596e
4
+ * Tue Sep 13 2022 20:41:55 GMT+0800 (China Standard Time)
5
5
  * ©2020 RongCloud, Inc. All rights reserved.
6
6
  */
7
7
  'use strict';
@@ -6230,22 +6230,22 @@ exports.RCMediaType = void 0;
6230
6230
  const RongRTCVideoBitrate = {
6231
6231
  [exports.RCResolution.W176_H132]: { width: 176, height: 132, maxBitrate: 150, minBitrate: 80 },
6232
6232
  [exports.RCResolution.W176_H144]: { width: 176, height: 144, maxBitrate: 150, minBitrate: 80 },
6233
- [exports.RCResolution.W180_H180]: { width: 192, height: 192, maxBitrate: 200, minBitrate: 100 },
6234
- [exports.RCResolution.W240_H180]: { width: 240, height: 192, maxBitrate: 240, minBitrate: 120 },
6233
+ [exports.RCResolution.W180_H180]: { width: 180, height: 180, maxBitrate: 200, minBitrate: 100 },
6234
+ [exports.RCResolution.W240_H180]: { width: 240, height: 180, maxBitrate: 240, minBitrate: 120 },
6235
6235
  [exports.RCResolution.W240_H240]: { width: 240, height: 240, maxBitrate: 280, minBitrate: 120 },
6236
6236
  [exports.RCResolution.W256_H144]: { width: 256, height: 144, maxBitrate: 240, minBitrate: 120 },
6237
- [exports.RCResolution.W320_H180]: { width: 320, height: 192, maxBitrate: 280, minBitrate: 120 },
6237
+ [exports.RCResolution.W320_H180]: { width: 320, height: 180, maxBitrate: 280, minBitrate: 120 },
6238
6238
  [exports.RCResolution.W320_H240]: { width: 320, height: 240, maxBitrate: 400, minBitrate: 120 },
6239
- [exports.RCResolution.W360_H360]: { width: 368, height: 368, maxBitrate: 520, minBitrate: 140 },
6240
- [exports.RCResolution.W480_H360]: { width: 480, height: 368, maxBitrate: 650, minBitrate: 150 },
6239
+ [exports.RCResolution.W360_H360]: { width: 360, height: 360, maxBitrate: 520, minBitrate: 140 },
6240
+ [exports.RCResolution.W480_H360]: { width: 480, height: 360, maxBitrate: 650, minBitrate: 150 },
6241
6241
  [exports.RCResolution.W480_H480]: { width: 480, height: 480, maxBitrate: 800, minBitrate: 180 },
6242
- [exports.RCResolution.W640_H360]: { width: 640, height: 368, maxBitrate: 800, minBitrate: 180 },
6242
+ [exports.RCResolution.W640_H360]: { width: 640, height: 360, maxBitrate: 800, minBitrate: 180 },
6243
6243
  [exports.RCResolution.W640_H480]: { width: 640, height: 480, maxBitrate: 900, minBitrate: 200 },
6244
6244
  [exports.RCResolution.W720_H480]: { width: 720, height: 480, maxBitrate: 1000, minBitrate: 200 },
6245
6245
  [exports.RCResolution.W848_H480]: { width: 848, height: 480, maxBitrate: 1860, minBitrate: 200 },
6246
6246
  [exports.RCResolution.W960_H720]: { width: 960, height: 720, maxBitrate: 2000, minBitrate: 250 },
6247
6247
  [exports.RCResolution.W1280_H720]: { width: 1280, height: 720, maxBitrate: 2200, minBitrate: 250 },
6248
- [exports.RCResolution.W1920_H1080]: { width: 1920, height: 1088, maxBitrate: 4000, minBitrate: 400 }
6248
+ [exports.RCResolution.W1920_H1080]: { width: 1920, height: 1080, maxBitrate: 4000, minBitrate: 400 }
6249
6249
  };
6250
6250
  /**
6251
6251
  * 分辨率适配
@@ -7352,8 +7352,12 @@ const getVideoTrackInfo = (track) => {
7352
7352
  const settings = track.getSettings();
7353
7353
  const constraints = track.getConstraints();
7354
7354
  return {
7355
- width: settings.width || getValue(constraints.width),
7356
- height: settings.height || getValue(constraints.height),
7355
+ /**
7356
+ * applyConstraints 方法应用的宽高约束不一定可以立马生效
7357
+ * 取值优先 constraints
7358
+ */
7359
+ width: getValue(constraints.width) || settings.width || 0,
7360
+ height: getValue(constraints.height) || settings.height || 0,
7357
7361
  frameRate: settings.frameRate || getValue(constraints.frameRate)
7358
7362
  };
7359
7363
  };
@@ -7938,7 +7942,7 @@ const getCommonHeader = () => ({
7938
7942
  'Content-Type': 'application/json;charset=UTF-8',
7939
7943
  'Cache-Control': 'no-cache',
7940
7944
  ClientType: `web|${browserInfo.browser}|${browserInfo.version}`,
7941
- ClientVersion: "5.4.7-alpha.1",
7945
+ ClientVersion: "5.4.7-alpha.4",
7942
7946
  'Client-Session-Id': getUUID(),
7943
7947
  'Request-Id': Date.now().toString()
7944
7948
  });
@@ -8028,11 +8032,12 @@ class RCMediaService {
8028
8032
  path,
8029
8033
  headers,
8030
8034
  body,
8031
- reqId
8035
+ reqId,
8036
+ timeout: this._timeout
8032
8037
  }, {
8033
8038
  logSource: engine.LogSource.RTC
8034
8039
  });
8035
- logger.info(`request -> Request-Id: ${reqId}, url: ${url}, headers: ${JSON.stringify(mergeHeaders)}, body: ${jsonBody}`);
8040
+ logger.info(`request -> Request-Id: ${reqId}, url: ${url}, headers: ${JSON.stringify(mergeHeaders)}, body: ${jsonBody}, timeout: ${this._timeout}`);
8036
8041
  const { status, data } = yield this._runtime.httpReq({
8037
8042
  url,
8038
8043
  body: jsonBody,
@@ -9266,6 +9271,13 @@ class ASdpBuilder {
9266
9271
  }
9267
9272
  return stream;
9268
9273
  }
9274
+ /**
9275
+ * 它将 SDP 标头中的 `a=group` 行替换为 `b=AS` 和 `b=TIAS` 行
9276
+ * @param {number} maxBitrate - 流的最大比特率。
9277
+ */
9278
+ setHeaderBitrate(maxBitrate) {
9279
+ this.SDPHeader = this.SDPHeader.replace(/(\r\ns=[^\r\n]+)/ig, `$1\r\nc=IN IP4 0.0.0.0\r\nb=AS:${maxBitrate * ASdpBuilder.KBitrate}\r\nb=TIAS:${maxBitrate * ASdpBuilder.KBitrate * 850}`);
9280
+ }
9269
9281
  /**
9270
9282
  * 它获取音频流并将它们映射到一个新数组,其中每个项目都是调用 setAudioItemBitrate 函数的结果
9271
9283
  * @param {IRCTrackBitrate} bitrate - 以 kbps 为单位的比特率。
@@ -9356,7 +9368,7 @@ class ASdpBuilder {
9356
9368
  */
9357
9369
  addAudioBlineAS(sdpAudioBlock, bitrate) {
9358
9370
  if (!/\bb=AS:\d+\b/ig.test(sdpAudioBlock)) {
9359
- return sdpAudioBlock.replace(/^(m=audio[^\r\n]+)/, `$1\r\nb=AS:${bitrate.max * ASdpBuilder.KBitrate}`);
9371
+ return sdpAudioBlock.replace(/(\bc=IN[^\r\n]+)/ig, `$1\r\nb=AS:${bitrate.max * ASdpBuilder.KBitrate}\r\nb=TIAS:${bitrate.max * ASdpBuilder.KBitrate * 850}`);
9360
9372
  }
9361
9373
  return sdpAudioBlock;
9362
9374
  }
@@ -9454,7 +9466,7 @@ class ASdpBuilder {
9454
9466
  addVideoBlineAS(sdpVideoBlock, bitrate) {
9455
9467
  // b=AS: 定义本端带宽信息
9456
9468
  if (!/\bb=AS:\d+\b/ig.test(sdpVideoBlock)) {
9457
- return sdpVideoBlock.replace(/^(m=video[^\r\n]+)/, `$1\r\nb=AS:${bitrate.max * ASdpBuilder.KBitrate}`);
9469
+ return sdpVideoBlock.replace(/(\bc=IN[^\r\n]+)/ig, `$1\r\nb=AS:${bitrate.max * ASdpBuilder.KBitrate}\r\nb=TIAS:${bitrate.max * ASdpBuilder.KBitrate * 850}`);
9458
9470
  }
9459
9471
  return sdpVideoBlock;
9460
9472
  }
@@ -10826,7 +10838,7 @@ class PolarisReporter {
10826
10838
  * 加入房间
10827
10839
  */
10828
10840
  sendR1() {
10829
- const rtcVersion = "5.4.7-alpha.1";
10841
+ const rtcVersion = "5.4.7-alpha.4";
10830
10842
  const imVersion = this._context.getCoreVersion();
10831
10843
  const platform = 'web';
10832
10844
  const pcName = navigator.platform;
@@ -12433,6 +12445,16 @@ class PublishCommand extends BaseCommand {
12433
12445
  const { track: localTrack } = track instanceof RCLocalTrack ? { track } : track;
12434
12446
  localTracks.push(localTrack);
12435
12447
  });
12448
+ /**
12449
+ * 将发布的视频流按从小到大进行排序
12450
+ */
12451
+ tracks.sort((item, nextItem) => {
12452
+ const { track: localTrack } = item instanceof RCLocalTrack ? { track: item } : item;
12453
+ const { max: maxBitrate } = localTrack.getBitrate();
12454
+ const { track: nextLocalTrack } = nextItem instanceof RCLocalTrack ? { track: nextItem } : nextItem;
12455
+ const { max: maxNextBitrate } = nextLocalTrack.getBitrate();
12456
+ return maxBitrate - maxNextBitrate;
12457
+ });
12436
12458
  /**
12437
12459
  * 一个 peerConnection 上行不超过 10 个
12438
12460
  */
@@ -12446,10 +12468,10 @@ class PublishCommand extends BaseCommand {
12446
12468
  * 资源发布应先与 mediaserver 交换资源,建 PeerConnection 通道,后通知房间
12447
12469
  * 资源取消发布则应先通知取消发布,后与 mediaServer 协商取消资源发布
12448
12470
  */
12449
- tracks.forEach(track => {
12471
+ for (let index = 0; index < tracks.length; index++) {
12472
+ const track = tracks[index];
12450
12473
  // 向 RTCPeerConnection 添加轨道数据
12451
12474
  const { track: localTrack, pubTiny } = track instanceof RCLocalTrack ? { pubTiny: false, track } : track;
12452
- pc.addLocalTrack(localTrack);
12453
12475
  // 拷贝生成小流并添加至 RTCPeerConnection
12454
12476
  if (localTrack.isVideoTrack()) {
12455
12477
  if (pubTiny) {
@@ -12460,17 +12482,18 @@ class PublishCommand extends BaseCommand {
12460
12482
  const resolution = pubTiny.resolution || exports.RCResolution.W176_H144;
12461
12483
  const { width, height } = transResolution(resolution);
12462
12484
  const frameRate = transFrameRate(rcFrameRate);
12463
- cloneTrack.applyConstraints({ width, height, frameRate });
12485
+ yield cloneTrack.applyConstraints({ width, height, frameRate });
12464
12486
  }
12465
12487
  catch (error) {
12466
12488
  cloneTrack === null || cloneTrack === void 0 ? void 0 : cloneTrack.stop();
12467
12489
  logger.warn(`pubTiny failed -> id: ${localTrack.getTrackId()}, msg: ${error.message}`);
12468
- return;
12490
+ break;
12469
12491
  }
12470
12492
  pc.addLocalTrack(new RCLocalVideoTrack(localTrack.getTag(), localTrack.getUserId(), cloneTrack, true));
12471
12493
  }
12472
12494
  }
12473
- });
12495
+ pc.addLocalTrack(localTrack);
12496
+ }
12474
12497
  // 客户端主动调用 api 发请求时,清除 ice 断线重连的定时器
12475
12498
  pc.clearReTryExchangeTimer();
12476
12499
  // 发送 /exchange 请求
@@ -19309,9 +19332,9 @@ const installer = {
19309
19332
  logger.error('Please use the https protocol or use `http://localhost` to open the page!');
19310
19333
  return false;
19311
19334
  }
19312
- engine.VersionManage.add('plugin-rtc', "5.4.7-alpha.1");
19313
- if (!engine.VersionManage.validEngine(">=5.3.3-beem-alpha.2 || >=5.3.4")) {
19314
- logger.error(`The current engine version '${engine.VersionManage.getInfo().engine}' error, plugin-rtc required engine version at least '${">=5.3.3-beem-alpha.2 || >=5.3.4"}'.`);
19335
+ engine.VersionManage.add('plugin-rtc', "5.4.7-alpha.4");
19336
+ if (!engine.VersionManage.validEngine("5.3.4 - 5.4.5")) {
19337
+ logger.error(`The current engine version '${engine.VersionManage.getInfo().engine}' error, plugin-rtc required engine version at least '${"5.3.4 - 5.4.5"}'.`);
19315
19338
  return false;
19316
19339
  }
19317
19340
  return true;
@@ -19320,7 +19343,7 @@ const installer = {
19320
19343
  var _a, _b, _c, _d, _e, _f, _g, _h;
19321
19344
  logger.setLogLevel(options.logLevel);
19322
19345
  logger.setLogStdout(options.logStdout);
19323
- logger.warn(`RCRTC Version: ${"5.4.7-alpha.1"}, Commit: ${"1379fbc027ed59d4c014e63771b9606d8810a217"}`);
19346
+ logger.warn(`RCRTC Version: ${"5.4.7-alpha.4"}, Commit: ${"1297531a6457c0e72d9fa276eee9a49a7b3c596e"}`);
19324
19347
  logger.warn(`browserInfo.browser -> ${browserInfo.browser}`);
19325
19348
  logger.warn(`browserInfo.supportsUnifiedPlan -> ${browserInfo.supportsUnifiedPlan}`);
19326
19349
  logger.warn(`browserInfo.version -> ${browserInfo.version}`);
package/dist/index.umd.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /*
2
- * RCRTC - v5.4.7-alpha.1
3
- * CommitId - 1379fbc027ed59d4c014e63771b9606d8810a217
4
- * Tue Aug 30 2022 21:58:03 GMT+0800 (China Standard Time)
2
+ * RCRTC - v5.4.7-alpha.4
3
+ * CommitId - 1297531a6457c0e72d9fa276eee9a49a7b3c596e
4
+ * Tue Sep 13 2022 20:41:55 GMT+0800 (China Standard Time)
5
5
  * ©2020 RongCloud, Inc. All rights reserved.
6
6
  */
7
7
  (function (global, factory) {
@@ -6230,22 +6230,22 @@
6230
6230
  const RongRTCVideoBitrate = {
6231
6231
  [exports.RCResolution.W176_H132]: { width: 176, height: 132, maxBitrate: 150, minBitrate: 80 },
6232
6232
  [exports.RCResolution.W176_H144]: { width: 176, height: 144, maxBitrate: 150, minBitrate: 80 },
6233
- [exports.RCResolution.W180_H180]: { width: 192, height: 192, maxBitrate: 200, minBitrate: 100 },
6234
- [exports.RCResolution.W240_H180]: { width: 240, height: 192, maxBitrate: 240, minBitrate: 120 },
6233
+ [exports.RCResolution.W180_H180]: { width: 180, height: 180, maxBitrate: 200, minBitrate: 100 },
6234
+ [exports.RCResolution.W240_H180]: { width: 240, height: 180, maxBitrate: 240, minBitrate: 120 },
6235
6235
  [exports.RCResolution.W240_H240]: { width: 240, height: 240, maxBitrate: 280, minBitrate: 120 },
6236
6236
  [exports.RCResolution.W256_H144]: { width: 256, height: 144, maxBitrate: 240, minBitrate: 120 },
6237
- [exports.RCResolution.W320_H180]: { width: 320, height: 192, maxBitrate: 280, minBitrate: 120 },
6237
+ [exports.RCResolution.W320_H180]: { width: 320, height: 180, maxBitrate: 280, minBitrate: 120 },
6238
6238
  [exports.RCResolution.W320_H240]: { width: 320, height: 240, maxBitrate: 400, minBitrate: 120 },
6239
- [exports.RCResolution.W360_H360]: { width: 368, height: 368, maxBitrate: 520, minBitrate: 140 },
6240
- [exports.RCResolution.W480_H360]: { width: 480, height: 368, maxBitrate: 650, minBitrate: 150 },
6239
+ [exports.RCResolution.W360_H360]: { width: 360, height: 360, maxBitrate: 520, minBitrate: 140 },
6240
+ [exports.RCResolution.W480_H360]: { width: 480, height: 360, maxBitrate: 650, minBitrate: 150 },
6241
6241
  [exports.RCResolution.W480_H480]: { width: 480, height: 480, maxBitrate: 800, minBitrate: 180 },
6242
- [exports.RCResolution.W640_H360]: { width: 640, height: 368, maxBitrate: 800, minBitrate: 180 },
6242
+ [exports.RCResolution.W640_H360]: { width: 640, height: 360, maxBitrate: 800, minBitrate: 180 },
6243
6243
  [exports.RCResolution.W640_H480]: { width: 640, height: 480, maxBitrate: 900, minBitrate: 200 },
6244
6244
  [exports.RCResolution.W720_H480]: { width: 720, height: 480, maxBitrate: 1000, minBitrate: 200 },
6245
6245
  [exports.RCResolution.W848_H480]: { width: 848, height: 480, maxBitrate: 1860, minBitrate: 200 },
6246
6246
  [exports.RCResolution.W960_H720]: { width: 960, height: 720, maxBitrate: 2000, minBitrate: 250 },
6247
6247
  [exports.RCResolution.W1280_H720]: { width: 1280, height: 720, maxBitrate: 2200, minBitrate: 250 },
6248
- [exports.RCResolution.W1920_H1080]: { width: 1920, height: 1088, maxBitrate: 4000, minBitrate: 400 }
6248
+ [exports.RCResolution.W1920_H1080]: { width: 1920, height: 1080, maxBitrate: 4000, minBitrate: 400 }
6249
6249
  };
6250
6250
  /**
6251
6251
  * 分辨率适配
@@ -7352,8 +7352,12 @@
7352
7352
  const settings = track.getSettings();
7353
7353
  const constraints = track.getConstraints();
7354
7354
  return {
7355
- width: settings.width || getValue(constraints.width),
7356
- height: settings.height || getValue(constraints.height),
7355
+ /**
7356
+ * applyConstraints 方法应用的宽高约束不一定可以立马生效
7357
+ * 取值优先 constraints
7358
+ */
7359
+ width: getValue(constraints.width) || settings.width || 0,
7360
+ height: getValue(constraints.height) || settings.height || 0,
7357
7361
  frameRate: settings.frameRate || getValue(constraints.frameRate)
7358
7362
  };
7359
7363
  };
@@ -7938,7 +7942,7 @@
7938
7942
  'Content-Type': 'application/json;charset=UTF-8',
7939
7943
  'Cache-Control': 'no-cache',
7940
7944
  ClientType: `web|${browserInfo.browser}|${browserInfo.version}`,
7941
- ClientVersion: "5.4.7-alpha.1",
7945
+ ClientVersion: "5.4.7-alpha.4",
7942
7946
  'Client-Session-Id': getUUID(),
7943
7947
  'Request-Id': Date.now().toString()
7944
7948
  });
@@ -8028,11 +8032,12 @@
8028
8032
  path,
8029
8033
  headers,
8030
8034
  body,
8031
- reqId
8035
+ reqId,
8036
+ timeout: this._timeout
8032
8037
  }, {
8033
8038
  logSource: engine.LogSource.RTC
8034
8039
  });
8035
- logger.info(`request -> Request-Id: ${reqId}, url: ${url}, headers: ${JSON.stringify(mergeHeaders)}, body: ${jsonBody}`);
8040
+ logger.info(`request -> Request-Id: ${reqId}, url: ${url}, headers: ${JSON.stringify(mergeHeaders)}, body: ${jsonBody}, timeout: ${this._timeout}`);
8036
8041
  const { status, data } = yield this._runtime.httpReq({
8037
8042
  url,
8038
8043
  body: jsonBody,
@@ -9266,6 +9271,13 @@
9266
9271
  }
9267
9272
  return stream;
9268
9273
  }
9274
+ /**
9275
+ * 它将 SDP 标头中的 `a=group` 行替换为 `b=AS` 和 `b=TIAS` 行
9276
+ * @param {number} maxBitrate - 流的最大比特率。
9277
+ */
9278
+ setHeaderBitrate(maxBitrate) {
9279
+ this.SDPHeader = this.SDPHeader.replace(/(\r\ns=[^\r\n]+)/ig, `$1\r\nc=IN IP4 0.0.0.0\r\nb=AS:${maxBitrate * ASdpBuilder.KBitrate}\r\nb=TIAS:${maxBitrate * ASdpBuilder.KBitrate * 850}`);
9280
+ }
9269
9281
  /**
9270
9282
  * 它获取音频流并将它们映射到一个新数组,其中每个项目都是调用 setAudioItemBitrate 函数的结果
9271
9283
  * @param {IRCTrackBitrate} bitrate - 以 kbps 为单位的比特率。
@@ -9356,7 +9368,7 @@
9356
9368
  */
9357
9369
  addAudioBlineAS(sdpAudioBlock, bitrate) {
9358
9370
  if (!/\bb=AS:\d+\b/ig.test(sdpAudioBlock)) {
9359
- return sdpAudioBlock.replace(/^(m=audio[^\r\n]+)/, `$1\r\nb=AS:${bitrate.max * ASdpBuilder.KBitrate}`);
9371
+ return sdpAudioBlock.replace(/(\bc=IN[^\r\n]+)/ig, `$1\r\nb=AS:${bitrate.max * ASdpBuilder.KBitrate}\r\nb=TIAS:${bitrate.max * ASdpBuilder.KBitrate * 850}`);
9360
9372
  }
9361
9373
  return sdpAudioBlock;
9362
9374
  }
@@ -9454,7 +9466,7 @@
9454
9466
  addVideoBlineAS(sdpVideoBlock, bitrate) {
9455
9467
  // b=AS: 定义本端带宽信息
9456
9468
  if (!/\bb=AS:\d+\b/ig.test(sdpVideoBlock)) {
9457
- return sdpVideoBlock.replace(/^(m=video[^\r\n]+)/, `$1\r\nb=AS:${bitrate.max * ASdpBuilder.KBitrate}`);
9469
+ return sdpVideoBlock.replace(/(\bc=IN[^\r\n]+)/ig, `$1\r\nb=AS:${bitrate.max * ASdpBuilder.KBitrate}\r\nb=TIAS:${bitrate.max * ASdpBuilder.KBitrate * 850}`);
9458
9470
  }
9459
9471
  return sdpVideoBlock;
9460
9472
  }
@@ -10826,7 +10838,7 @@
10826
10838
  * 加入房间
10827
10839
  */
10828
10840
  sendR1() {
10829
- const rtcVersion = "5.4.7-alpha.1";
10841
+ const rtcVersion = "5.4.7-alpha.4";
10830
10842
  const imVersion = this._context.getCoreVersion();
10831
10843
  const platform = 'web';
10832
10844
  const pcName = navigator.platform;
@@ -12433,6 +12445,16 @@
12433
12445
  const { track: localTrack } = track instanceof RCLocalTrack ? { track } : track;
12434
12446
  localTracks.push(localTrack);
12435
12447
  });
12448
+ /**
12449
+ * 将发布的视频流按从小到大进行排序
12450
+ */
12451
+ tracks.sort((item, nextItem) => {
12452
+ const { track: localTrack } = item instanceof RCLocalTrack ? { track: item } : item;
12453
+ const { max: maxBitrate } = localTrack.getBitrate();
12454
+ const { track: nextLocalTrack } = nextItem instanceof RCLocalTrack ? { track: nextItem } : nextItem;
12455
+ const { max: maxNextBitrate } = nextLocalTrack.getBitrate();
12456
+ return maxBitrate - maxNextBitrate;
12457
+ });
12436
12458
  /**
12437
12459
  * 一个 peerConnection 上行不超过 10 个
12438
12460
  */
@@ -12446,10 +12468,10 @@
12446
12468
  * 资源发布应先与 mediaserver 交换资源,建 PeerConnection 通道,后通知房间
12447
12469
  * 资源取消发布则应先通知取消发布,后与 mediaServer 协商取消资源发布
12448
12470
  */
12449
- tracks.forEach(track => {
12471
+ for (let index = 0; index < tracks.length; index++) {
12472
+ const track = tracks[index];
12450
12473
  // 向 RTCPeerConnection 添加轨道数据
12451
12474
  const { track: localTrack, pubTiny } = track instanceof RCLocalTrack ? { pubTiny: false, track } : track;
12452
- pc.addLocalTrack(localTrack);
12453
12475
  // 拷贝生成小流并添加至 RTCPeerConnection
12454
12476
  if (localTrack.isVideoTrack()) {
12455
12477
  if (pubTiny) {
@@ -12460,17 +12482,18 @@
12460
12482
  const resolution = pubTiny.resolution || exports.RCResolution.W176_H144;
12461
12483
  const { width, height } = transResolution(resolution);
12462
12484
  const frameRate = transFrameRate(rcFrameRate);
12463
- cloneTrack.applyConstraints({ width, height, frameRate });
12485
+ yield cloneTrack.applyConstraints({ width, height, frameRate });
12464
12486
  }
12465
12487
  catch (error) {
12466
12488
  cloneTrack === null || cloneTrack === void 0 ? void 0 : cloneTrack.stop();
12467
12489
  logger.warn(`pubTiny failed -> id: ${localTrack.getTrackId()}, msg: ${error.message}`);
12468
- return;
12490
+ break;
12469
12491
  }
12470
12492
  pc.addLocalTrack(new RCLocalVideoTrack(localTrack.getTag(), localTrack.getUserId(), cloneTrack, true));
12471
12493
  }
12472
12494
  }
12473
- });
12495
+ pc.addLocalTrack(localTrack);
12496
+ }
12474
12497
  // 客户端主动调用 api 发请求时,清除 ice 断线重连的定时器
12475
12498
  pc.clearReTryExchangeTimer();
12476
12499
  // 发送 /exchange 请求
@@ -19309,9 +19332,9 @@
19309
19332
  logger.error('Please use the https protocol or use `http://localhost` to open the page!');
19310
19333
  return false;
19311
19334
  }
19312
- engine.VersionManage.add('plugin-rtc', "5.4.7-alpha.1");
19313
- if (!engine.VersionManage.validEngine(">=5.3.3-beem-alpha.2 || >=5.3.4")) {
19314
- logger.error(`The current engine version '${engine.VersionManage.getInfo().engine}' error, plugin-rtc required engine version at least '${">=5.3.3-beem-alpha.2 || >=5.3.4"}'.`);
19335
+ engine.VersionManage.add('plugin-rtc', "5.4.7-alpha.4");
19336
+ if (!engine.VersionManage.validEngine("5.3.4 - 5.4.5")) {
19337
+ logger.error(`The current engine version '${engine.VersionManage.getInfo().engine}' error, plugin-rtc required engine version at least '${"5.3.4 - 5.4.5"}'.`);
19315
19338
  return false;
19316
19339
  }
19317
19340
  return true;
@@ -19320,7 +19343,7 @@
19320
19343
  var _a, _b, _c, _d, _e, _f, _g, _h;
19321
19344
  logger.setLogLevel(options.logLevel);
19322
19345
  logger.setLogStdout(options.logStdout);
19323
- logger.warn(`RCRTC Version: ${"5.4.7-alpha.1"}, Commit: ${"1379fbc027ed59d4c014e63771b9606d8810a217"}`);
19346
+ logger.warn(`RCRTC Version: ${"5.4.7-alpha.4"}, Commit: ${"1297531a6457c0e72d9fa276eee9a49a7b3c596e"}`);
19324
19347
  logger.warn(`browserInfo.browser -> ${browserInfo.browser}`);
19325
19348
  logger.warn(`browserInfo.supportsUnifiedPlan -> ${browserInfo.supportsUnifiedPlan}`);
19326
19349
  logger.warn(`browserInfo.version -> ${browserInfo.version}`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rongcloud/plugin-rtc",
3
- "version": "5.4.7-alpha.1",
3
+ "version": "5.4.7-alpha.4",
4
4
  "description": "@rongcloud/plugin-rtc",
5
5
  "main": "./dist/index.js",
6
6
  "__attrs__": {
@@ -31,7 +31,7 @@
31
31
  "node": ">=10.0.0"
32
32
  },
33
33
  "peerDependencies": {
34
- "@rongcloud/engine": ">=5.3.3-beem-alpha.2 || >=5.3.4"
34
+ "@rongcloud/engine": "5.3.4 - 5.4.5"
35
35
  },
36
- "__commit__": "1379fbc027ed59d4c014e63771b9606d8810a217"
36
+ "__commit__": "1297531a6457c0e72d9fa276eee9a49a7b3c596e"
37
37
  }