@byteplus/veplayer-plugin 2.8.0-rc.9 → 2.8.1-rc.0

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.
@@ -478,6 +478,38 @@
478
478
  return false;
479
479
  }
480
480
  }
481
+ function _objectWithoutPropertiesLoose$1(source, excluded) {
482
+ if (source == null)
483
+ return {};
484
+ var target = {};
485
+ var sourceKeys = Object.keys(source);
486
+ var key, i;
487
+ for (i = 0; i < sourceKeys.length; i++) {
488
+ key = sourceKeys[i];
489
+ if (excluded.indexOf(key) >= 0)
490
+ continue;
491
+ target[key] = source[key];
492
+ }
493
+ return target;
494
+ }
495
+ function _objectWithoutProperties$1(source, excluded) {
496
+ if (source == null)
497
+ return {};
498
+ var target = _objectWithoutPropertiesLoose$1(source, excluded);
499
+ var key, i;
500
+ if (Object.getOwnPropertySymbols) {
501
+ var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
502
+ for (i = 0; i < sourceSymbolKeys.length; i++) {
503
+ key = sourceSymbolKeys[i];
504
+ if (excluded.indexOf(key) >= 0)
505
+ continue;
506
+ if (!Object.prototype.propertyIsEnumerable.call(source, key))
507
+ continue;
508
+ target[key] = source[key];
509
+ }
510
+ }
511
+ return target;
512
+ }
481
513
  function _assertThisInitialized$1(self2) {
482
514
  if (self2 === void 0) {
483
515
  throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
@@ -4011,7 +4043,7 @@
4011
4043
  }]);
4012
4044
  return XhrLoader2;
4013
4045
  }(EventEmitter);
4014
- var _excluded = ["retry", "retryDelay", "onRetryError", "transformError"];
4046
+ var _excluded$1 = ["retry", "retryDelay", "onRetryError", "transformError"];
4015
4047
  var Task = /* @__PURE__ */ function() {
4016
4048
  function Task2(type, config) {
4017
4049
  _classCallCheck$1(this, Task2);
@@ -4031,7 +4063,7 @@
4031
4063
  key: "exec",
4032
4064
  value: function exec() {
4033
4065
  var _this = this;
4034
- var _this$_config = this._config, retry = _this$_config.retry, retryDelay = _this$_config.retryDelay, onRetryError = _this$_config.onRetryError, transformError = _this$_config.transformError, rest = _objectWithoutProperties(_this$_config, _excluded);
4066
+ var _this$_config = this._config, retry = _this$_config.retry, retryDelay = _this$_config.retryDelay, onRetryError = _this$_config.onRetryError, transformError = _this$_config.transformError, rest = _objectWithoutProperties(_this$_config, _excluded$1);
4035
4067
  var request = /* @__PURE__ */ function() {
4036
4068
  var _ref = _asyncToGenerator(/* @__PURE__ */ _regeneratorRuntime().mark(function _callee() {
4037
4069
  var response, error, isRetry;
@@ -4947,7 +4979,9 @@
4947
4979
  lib.parseRemoteCandidates = parser.parseRemoteCandidates;
4948
4980
  lib.parseImageAttributes = parser.parseImageAttributes;
4949
4981
  lib.parseSimulcastStreamList = parser.parseSimulcastStreamList;
4950
- function getOption(opts) {
4982
+ var _excluded = ["adaptiveJitterBuffer"];
4983
+ function getOption(options) {
4984
+ var _ref = options || {}, _ref$adaptiveJitterBu = _ref.adaptiveJitterBuffer, adaptiveJitterBuffer = _ref$adaptiveJitterBu === void 0 ? {} : _ref$adaptiveJitterBu, opts = _objectWithoutProperties$1(_ref, _excluded);
4951
4985
  return _objectSpread2$2({
4952
4986
  retryCount: 0,
4953
4987
  retryDelay: 1e3,
@@ -4963,6 +4997,7 @@
4963
4997
  connectionStateChangeTimeout: 5e3,
4964
4998
  enableNetworkQuality: false,
4965
4999
  hackCreateOfferIssue: false,
5000
+ progressiveSetDelay: false,
4966
5001
  networkQuality: {
4967
5002
  networkQos: {
4968
5003
  1: {
@@ -4993,9 +5028,14 @@
4993
5028
  }
4994
5029
  },
4995
5030
  enableAdaptiveJitterBuffer: false,
4996
- adaptiveJitterBuffer: {
4997
- networkWindow: 3
4998
- },
5031
+ adaptiveJitterBuffer: _objectSpread2$2({
5032
+ networkWindow: 3,
5033
+ windowMethod: "max",
5034
+ loopInterval: 500,
5035
+ maxAvSyncDelay: 400,
5036
+ maxJitterBufferDiff: 500,
5037
+ maxStep: 500
5038
+ }, adaptiveJitterBuffer),
4999
5039
  networkStrategy: {
5000
5040
  1: {
5001
5041
  "jitterBuffer": null
@@ -6444,6 +6484,12 @@
6444
6484
  if (stat.fecPacketsReceived !== void 0) {
6445
6485
  currentStats.fecPacketsReceived = stat.fecPacketsReceived;
6446
6486
  }
6487
+ if (stat.estimatedPlayoutTimestamp !== void 0) {
6488
+ currentStats.estimatedPlayoutTimestamp = stat.estimatedPlayoutTimestamp;
6489
+ }
6490
+ if (stat.totalSamplesDuration !== void 0) {
6491
+ currentStats.totalSamplesDuration = stat.totalSamplesDuration;
6492
+ }
6447
6493
  } else if (stat.type === "codec") {
6448
6494
  currentStats.recordSampleRate = stat.clockRate;
6449
6495
  if (stat.channels) {
@@ -6471,13 +6517,17 @@
6471
6517
  var statsInterval = diffNumber(oldStats, newStats, "timestamp");
6472
6518
  var packetsLostDiff = diffNumber(oldStats, newStats, "packetsLost");
6473
6519
  var jitterBufferDelay = Math.round(diffNumber(oldStats, newStats, "jitterBufferDelay") / diffNumber(oldStats, newStats, "jitterBufferEmittedCount") * 1e3);
6520
+ var packetsReceived = diffNumber(oldStats, newStats, "packetsReceived");
6474
6521
  return {
6475
- audioLossRate: +(packetsLostDiff / (diffNumber(oldStats, newStats, "packetsReceived") + packetsLostDiff)).toFixed(2),
6522
+ audioLossRate: +(packetsLostDiff / (packetsReceived + packetsLostDiff)).toFixed(2),
6476
6523
  receivedKBitrate: +(diffNumber(oldStats, newStats, "bytesReceived") * 8 / statsInterval).toFixed(2),
6477
6524
  statsInterval,
6478
6525
  rtt: newStats.rtt || 0,
6479
6526
  jitterBufferDelay,
6527
+ packetsReceived,
6480
6528
  numChannels: newStats.numChannels || 1,
6529
+ estimatedPlayoutTimestamp: newStats.estimatedPlayoutTimestamp,
6530
+ samplesDuration: Math.round(diffNumber(oldStats, newStats, "totalSamplesDuration") * 1e3),
6481
6531
  receivedSampleRate: diffNumber(oldStats, newStats, "totalSamplesReceived") / statsInterval,
6482
6532
  concealedSamples: Math.round(diffNumber(oldStats, newStats, "concealedSamples")),
6483
6533
  concealmentEvent: Math.round(diffNumber(oldStats, newStats, "concealmentEvents")),
@@ -6521,6 +6571,9 @@
6521
6571
  currentStats.width = stat.frameWidth;
6522
6572
  currentStats.height = stat.frameHeight;
6523
6573
  }
6574
+ if (stat.estimatedPlayoutTimestamp !== void 0) {
6575
+ currentStats.estimatedPlayoutTimestamp = stat.estimatedPlayoutTimestamp;
6576
+ }
6524
6577
  } else if (stat.type === "track" && stat.frameWidth !== void 0) {
6525
6578
  currentStats.width = stat.frameWidth;
6526
6579
  currentStats.height = stat.frameHeight;
@@ -6553,6 +6606,7 @@
6553
6606
  statsInterval,
6554
6607
  width: newStats.width || 0,
6555
6608
  height: newStats.height || 0,
6609
+ estimatedPlayoutTimestamp: newStats.estimatedPlayoutTimestamp,
6556
6610
  videoLossRate: +(packetsLostDiff / (diffNumber(oldStats, newStats, "packetsReceived") + packetsLostDiff)),
6557
6611
  receivedKBitrate: +(diffNumber(oldStats, newStats, "bytesReceived") * 8 / statsInterval).toFixed(2),
6558
6612
  decoderOutputFrameRate: Math.round(diffNumber(oldStats, newStats, "framesDecoded") * 1e3 / statsInterval),
@@ -6810,33 +6864,165 @@
6810
6864
  });
6811
6865
  });
6812
6866
  _defineProperty$2(_assertThisInitialized$1(_this), "_setDelay", function(delayHint) {
6813
- var videoDelaySync = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true;
6814
- var currentDelay = _this._getDelay();
6815
- delayHint = typeof delayHint === "number" && delayHint > 0 ? delayHint : null;
6816
- if (currentDelay === delayHint)
6817
- return;
6818
- try {
6819
- var videoReceiver = _this._videoTransceicer.receiver;
6820
- var audioReceiver = _this._audioTransceicer.receiver;
6867
+ if (_this._opts.progressiveSetDelay) {
6868
+ _this._startSetDelayLoop(delayHint);
6869
+ } else {
6870
+ var _this$_audioTransceic2;
6821
6871
  var key = [
6822
6872
  "playoutDelayHint",
6823
6873
  "jitterBufferDelayHint",
6824
6874
  "jitterBufferTarget"
6825
6875
  ].find(function(key2) {
6826
- return key2 in videoReceiver && key2 in audioReceiver;
6876
+ var _this$_audioTransceic, _this$_videoTransceic;
6877
+ return key2 in ((_this$_audioTransceic = _this._audioTransceicer) === null || _this$_audioTransceic === void 0 ? void 0 : _this$_audioTransceic.receiver) && key2 in ((_this$_videoTransceic = _this._videoTransceicer) === null || _this$_videoTransceic === void 0 ? void 0 : _this$_videoTransceic.receiver);
6827
6878
  });
6828
- if (key) {
6829
- audioReceiver[key] = delayHint;
6830
- if (!videoDelaySync) {
6831
- videoReceiver[key] = delayHint;
6832
- logger.log("set videoReceiver.".concat(key, " = ").concat(delayHint));
6833
- }
6834
- logger.log("set audioReceiver.".concat(key, " = ").concat(delayHint));
6835
- }
6836
- } catch (error) {
6837
- logger.error("set delay error", error);
6879
+ if (!key)
6880
+ return;
6881
+ delayHint = typeof delayHint === "number" && delayHint > 0 ? delayHint : null;
6882
+ if (((_this$_audioTransceic2 = _this._audioTransceicer) === null || _this$_audioTransceic2 === void 0 ? void 0 : _this$_audioTransceic2.receiver[key]) === delayHint)
6883
+ return;
6884
+ _this._audioTransceicer.receiver[key] = delayHint;
6885
+ _this._videoTransceicer.receiver[key] = delayHint;
6838
6886
  }
6839
6887
  });
6888
+ _defineProperty$2(_assertThisInitialized$1(_this), "_targetDelayHint", null);
6889
+ _defineProperty$2(_assertThisInitialized$1(_this), "_setDelayTimer", null);
6890
+ _defineProperty$2(_assertThisInitialized$1(_this), "_setDelayError", null);
6891
+ _defineProperty$2(_assertThisInitialized$1(_this), "_startSetDelayLoop", /* @__PURE__ */ function() {
6892
+ var _ref3 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee4(delayHint) {
6893
+ var key, preAudioStats, preVideoStats, _this$_opts$adaptiveJ, loopInterval, maxAvSyncDelay, maxJitterBufferDiff, maxStep, avDiffTooMuchCount;
6894
+ return _regeneratorRuntime$1().wrap(function _callee4$(_context4) {
6895
+ while (1)
6896
+ switch (_context4.prev = _context4.next) {
6897
+ case 0:
6898
+ key = [
6899
+ "playoutDelayHint",
6900
+ "jitterBufferDelayHint",
6901
+ "jitterBufferTarget"
6902
+ ].find(function(key2) {
6903
+ var _this$_audioTransceic3, _this$_videoTransceic2;
6904
+ return key2 in ((_this$_audioTransceic3 = _this._audioTransceicer) === null || _this$_audioTransceic3 === void 0 ? void 0 : _this$_audioTransceic3.receiver) && key2 in ((_this$_videoTransceic2 = _this._videoTransceicer) === null || _this$_videoTransceic2 === void 0 ? void 0 : _this$_videoTransceic2.receiver);
6905
+ });
6906
+ if (key) {
6907
+ _context4.next = 3;
6908
+ break;
6909
+ }
6910
+ return _context4.abrupt("return");
6911
+ case 3:
6912
+ delayHint = typeof delayHint === "number" && delayHint > 0 ? delayHint : null;
6913
+ if (!(_this._targetDelayHint === delayHint)) {
6914
+ _context4.next = 6;
6915
+ break;
6916
+ }
6917
+ return _context4.abrupt("return");
6918
+ case 6:
6919
+ _this._targetDelayHint = delayHint;
6920
+ if (!_this._setDelayTimer) {
6921
+ _context4.next = 9;
6922
+ break;
6923
+ }
6924
+ return _context4.abrupt("return");
6925
+ case 9:
6926
+ preAudioStats = null;
6927
+ preVideoStats = null;
6928
+ _this$_opts$adaptiveJ = _this._opts.adaptiveJitterBuffer, loopInterval = _this$_opts$adaptiveJ.loopInterval, maxAvSyncDelay = _this$_opts$adaptiveJ.maxAvSyncDelay, maxJitterBufferDiff = _this$_opts$adaptiveJ.maxJitterBufferDiff, maxStep = _this$_opts$adaptiveJ.maxStep;
6929
+ avDiffTooMuchCount = 0;
6930
+ _this._setDelayTimer = setInterval(/* @__PURE__ */ _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee3() {
6931
+ var _this$_audioTransceic4, _this$_videoTransceic3, currentTargetDelay, targetDelayMs, currentTargetDelayMs, _yield$Promise$all, _yield$Promise$all2, curAudioStats, curVideoStats, audioStats, videoStats, av_sync_diff, currentAudioDelay, currentVideoDelay, addOrReduce, nextJitterBufferDelay;
6932
+ return _regeneratorRuntime$1().wrap(function _callee3$(_context3) {
6933
+ while (1)
6934
+ switch (_context3.prev = _context3.next) {
6935
+ case 0:
6936
+ _context3.prev = 0;
6937
+ if (!(!((_this$_audioTransceic4 = _this._audioTransceicer) !== null && _this$_audioTransceic4 !== void 0 && _this$_audioTransceic4.receiver) || !((_this$_videoTransceic3 = _this._videoTransceicer) !== null && _this$_videoTransceic3 !== void 0 && _this$_videoTransceic3.receiver))) {
6938
+ _context3.next = 5;
6939
+ break;
6940
+ }
6941
+ preAudioStats = null;
6942
+ preVideoStats = null;
6943
+ return _context3.abrupt("return");
6944
+ case 5:
6945
+ currentTargetDelay = _this._audioTransceicer.receiver[key];
6946
+ if (!(currentTargetDelay === _this._targetDelayHint)) {
6947
+ _context3.next = 8;
6948
+ break;
6949
+ }
6950
+ return _context3.abrupt("return");
6951
+ case 8:
6952
+ targetDelayMs = _this._targetDelayHint * 1e3;
6953
+ currentTargetDelayMs = currentTargetDelay * 1e3;
6954
+ _context3.next = 12;
6955
+ return Promise.all([getRecvAudioStats(_this._audioTransceicer.receiver.getStats()), getRecvVideoStats(_this._videoTransceicer.receiver.getStats())]);
6956
+ case 12:
6957
+ _yield$Promise$all = _context3.sent;
6958
+ _yield$Promise$all2 = _slicedToArray(_yield$Promise$all, 2);
6959
+ curAudioStats = _yield$Promise$all2[0];
6960
+ curVideoStats = _yield$Promise$all2[1];
6961
+ if (!(preAudioStats && preVideoStats)) {
6962
+ _context3.next = 36;
6963
+ break;
6964
+ }
6965
+ audioStats = diffRecvAudioStats(preAudioStats, curAudioStats);
6966
+ videoStats = diffRecvVideoStats(preVideoStats, curVideoStats);
6967
+ if (videoStats.estimatedPlayoutTimestamp && audioStats.estimatedPlayoutTimestamp) {
6968
+ av_sync_diff = videoStats.estimatedPlayoutTimestamp - audioStats.estimatedPlayoutTimestamp;
6969
+ }
6970
+ currentAudioDelay = audioStats.jitterBufferDelay;
6971
+ currentVideoDelay = videoStats.jitterBufferDelay;
6972
+ if (!(currentAudioDelay && currentVideoDelay)) {
6973
+ _context3.next = 36;
6974
+ break;
6975
+ }
6976
+ if (!(Math.abs(currentAudioDelay - currentVideoDelay) > maxAvSyncDelay || av_sync_diff && Math.abs(av_sync_diff) > maxAvSyncDelay)) {
6977
+ _context3.next = 27;
6978
+ break;
6979
+ }
6980
+ if (avDiffTooMuchCount++ > 8 && currentVideoDelay > currentAudioDelay) {
6981
+ _this._audioTransceicer.receiver[key] = Math.min(currentVideoDelay / 1e3, _this._targetDelayHint);
6982
+ avDiffTooMuchCount = 0;
6983
+ }
6984
+ logger.log("av_jb_diff(".concat(currentAudioDelay - currentVideoDelay, "=").concat(currentAudioDelay, "-").concat(currentVideoDelay, ") or av_sync_diff(").concat(av_sync_diff, ") too much, skip setting"));
6985
+ return _context3.abrupt("return");
6986
+ case 27:
6987
+ avDiffTooMuchCount = 0;
6988
+ if (!(currentTargetDelay !== null && (Math.abs(currentAudioDelay - currentTargetDelayMs) > maxJitterBufferDiff || Math.abs(currentVideoDelay - currentTargetDelayMs) > maxJitterBufferDiff))) {
6989
+ _context3.next = 31;
6990
+ break;
6991
+ }
6992
+ logger.log("audio(".concat(currentAudioDelay - currentTargetDelayMs, "),video(").concat(currentVideoDelay - currentTargetDelayMs, "). current_target_diff too much, skip setting"));
6993
+ return _context3.abrupt("return");
6994
+ case 31:
6995
+ addOrReduce = targetDelayMs > (currentTargetDelayMs || currentAudioDelay) ? 1 : -1;
6996
+ nextJitterBufferDelay = (Math.abs(targetDelayMs - (currentTargetDelayMs || currentAudioDelay)) > maxStep ? (currentTargetDelayMs || currentAudioDelay) + addOrReduce * maxStep : targetDelayMs) / 1e3;
6997
+ nextJitterBufferDelay = nextJitterBufferDelay > 0.2 ? nextJitterBufferDelay : null;
6998
+ logger.log("set receiver.".concat(key, " = ").concat(nextJitterBufferDelay));
6999
+ _this._audioTransceicer.receiver[key] = nextJitterBufferDelay;
7000
+ case 36:
7001
+ preAudioStats = curAudioStats;
7002
+ preVideoStats = curVideoStats;
7003
+ _context3.next = 44;
7004
+ break;
7005
+ case 40:
7006
+ _context3.prev = 40;
7007
+ _context3.t0 = _context3["catch"](0);
7008
+ logger.error("set delay loop error:", _context3.t0);
7009
+ _this._setDelayError = _context3.t0.message || _context3.t0.toString() || "unknown error";
7010
+ case 44:
7011
+ case "end":
7012
+ return _context3.stop();
7013
+ }
7014
+ }, _callee3, null, [[0, 40]]);
7015
+ })), loopInterval);
7016
+ case 14:
7017
+ case "end":
7018
+ return _context4.stop();
7019
+ }
7020
+ }, _callee4);
7021
+ }));
7022
+ return function(_x) {
7023
+ return _ref3.apply(this, arguments);
7024
+ };
7025
+ }());
6840
7026
  _defineProperty$2(_assertThisInitialized$1(_this), "_getDelay", function() {
6841
7027
  try {
6842
7028
  var key = ["playoutDelayHint", "jitterBufferDelayHint", "jitterBufferTarget"].find(function(key2) {
@@ -6912,25 +7098,25 @@
6912
7098
  }, {
6913
7099
  key: "load",
6914
7100
  value: function() {
6915
- var _load = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee3(url) {
7101
+ var _load = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee5(url) {
6916
7102
  var _this2 = this;
6917
7103
  var encodedTransformSupported, lastPc;
6918
- return _regeneratorRuntime$1().wrap(function _callee3$(_context3) {
7104
+ return _regeneratorRuntime$1().wrap(function _callee5$(_context5) {
6919
7105
  while (1)
6920
- switch (_context3.prev = _context3.next) {
7106
+ switch (_context5.prev = _context5.next) {
6921
7107
  case 0:
6922
7108
  this._disconnect();
6923
7109
  this._url = url;
6924
7110
  this._retry = this._opts.retryCount;
6925
7111
  if (!this._opts.hackCreateOfferIssue) {
6926
- _context3.next = 6;
7112
+ _context5.next = 6;
6927
7113
  break;
6928
7114
  }
6929
- _context3.next = 6;
7115
+ _context5.next = 6;
6930
7116
  return this._createEmptyPeer();
6931
7117
  case 6:
6932
7118
  encodedTransformSupported = isLegacyEncodedTransformSupported();
6933
- _context3.prev = 7;
7119
+ _context5.prev = 7;
6934
7120
  lastPc = this._pc;
6935
7121
  if (lastPc) {
6936
7122
  lastPc.close();
@@ -6939,24 +7125,24 @@
6939
7125
  encodedInsertableStreams: encodedTransformSupported && this._opts.enableSei ? true : void 0
6940
7126
  });
6941
7127
  this._bindRTCEvents();
6942
- _context3.next = 14;
7128
+ _context5.next = 14;
6943
7129
  return this._connect(url);
6944
7130
  case 14:
6945
- _context3.next = 19;
7131
+ _context5.next = 19;
6946
7132
  break;
6947
7133
  case 16:
6948
- _context3.prev = 16;
6949
- _context3.t0 = _context3["catch"](7);
7134
+ _context5.prev = 16;
7135
+ _context5.t0 = _context5["catch"](7);
6950
7136
  setTimeout(function() {
6951
- return _this2._emitError(StreamingError.create(ERR.OTHER, null, _context3.t0));
7137
+ return _this2._emitError(StreamingError.create(ERR.OTHER, null, _context5.t0));
6952
7138
  });
6953
7139
  case 19:
6954
7140
  case "end":
6955
- return _context3.stop();
7141
+ return _context5.stop();
6956
7142
  }
6957
- }, _callee3, this, [[7, 16]]);
7143
+ }, _callee5, this, [[7, 16]]);
6958
7144
  }));
6959
- function load(_x) {
7145
+ function load(_x2) {
6960
7146
  return _load.apply(this, arguments);
6961
7147
  }
6962
7148
  return load;
@@ -7094,15 +7280,15 @@
7094
7280
  }, {
7095
7281
  key: "_connect",
7096
7282
  value: function() {
7097
- var _connect2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee4() {
7283
+ var _connect2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee6() {
7098
7284
  var pc, offer, parsed, finnalUrl, _this$_opts, _answer$remoteSdp, _this$_opts2, _answer$remoteSdp2, _parsed$media, parseSession, sessionId, reqStart, res, answer, err, _parsed;
7099
- return _regeneratorRuntime$1().wrap(function _callee4$(_context4) {
7285
+ return _regeneratorRuntime$1().wrap(function _callee6$(_context6) {
7100
7286
  while (1)
7101
- switch (_context4.prev = _context4.next) {
7287
+ switch (_context6.prev = _context6.next) {
7102
7288
  case 0:
7103
7289
  pc = this._pc;
7104
7290
  if (!pc.addTransceiver) {
7105
- _context4.next = 11;
7291
+ _context6.next = 11;
7106
7292
  break;
7107
7293
  }
7108
7294
  this._audioTransceicer = pc.addTransceiver("audio", {
@@ -7111,26 +7297,26 @@
7111
7297
  this._videoTransceicer = pc.addTransceiver("video", {
7112
7298
  direction: "recvonly"
7113
7299
  });
7114
- this._opts.delayHint !== void 0 && this._setDelay(this._opts.delayHint, this._opts.videoDelaySync);
7300
+ this._setDelay(this._opts.delayHint);
7115
7301
  if (this._opts.enableSei) {
7116
7302
  this.initVideoEncodedTransform();
7117
7303
  this.initAudioEncodedTransform();
7118
7304
  }
7119
- _context4.next = 8;
7305
+ _context6.next = 8;
7120
7306
  return pc.createOffer();
7121
7307
  case 8:
7122
- offer = _context4.sent;
7123
- _context4.next = 14;
7308
+ offer = _context6.sent;
7309
+ _context6.next = 14;
7124
7310
  break;
7125
7311
  case 11:
7126
- _context4.next = 13;
7312
+ _context6.next = 13;
7127
7313
  return pc.createOffer({
7128
7314
  iceRestart: true,
7129
7315
  offerToReceiveAudio: true,
7130
7316
  offerToReceiveVideo: true
7131
7317
  });
7132
7318
  case 13:
7133
- offer = _context4.sent;
7319
+ offer = _context6.sent;
7134
7320
  case 14:
7135
7321
  if (this._opts.hackCreateOfferIssue) {
7136
7322
  this._createEmptyPeer();
@@ -7159,11 +7345,11 @@
7159
7345
  });
7160
7346
  offer.sdp = lib.write(parsed);
7161
7347
  logger.log("local offer modified:\n", offer.sdp);
7162
- _context4.next = 23;
7348
+ _context6.next = 23;
7163
7349
  return pc.setLocalDescription(offer);
7164
7350
  case 23:
7165
7351
  finnalUrl = this._url;
7166
- _context4.prev = 24;
7352
+ _context6.prev = 24;
7167
7353
  if (this._opts.preProcessUrl) {
7168
7354
  finnalUrl = this._opts.preProcessUrl(finnalUrl).url;
7169
7355
  }
@@ -7176,7 +7362,7 @@
7176
7362
  sessionId
7177
7363
  });
7178
7364
  reqStart = Date.now();
7179
- _context4.next = 33;
7365
+ _context6.next = 33;
7180
7366
  return this._loader.load(finnalUrl, {
7181
7367
  body: JSON.stringify({
7182
7368
  sessionId,
@@ -7185,22 +7371,22 @@
7185
7371
  })
7186
7372
  });
7187
7373
  case 33:
7188
- res = _context4.sent;
7374
+ res = _context6.sent;
7189
7375
  this.emit(EVENT.LOAD_RESPONSE_HEADERS, {
7190
7376
  headers: res.response.headers
7191
7377
  });
7192
7378
  answer = res === null || res === void 0 ? void 0 : res.data;
7193
7379
  if (!((answer === null || answer === void 0 ? void 0 : answer.code) === 404 || (answer === null || answer === void 0 ? void 0 : answer.code) === 403)) {
7194
- _context4.next = 41;
7380
+ _context6.next = 41;
7195
7381
  break;
7196
7382
  }
7197
7383
  err = StreamingError.create(answer.code === 404 ? ERR.NETWORK_NOTFOUND : ERR.NETWORK_FORBIDDEN, null, answer);
7198
7384
  err.errorType = ERR.NETWORK;
7199
7385
  this._emitError(err);
7200
- return _context4.abrupt("return");
7386
+ return _context6.abrupt("return");
7201
7387
  case 41:
7202
7388
  if (!((answer === null || answer === void 0 ? void 0 : answer.code) !== 200)) {
7203
- _context4.next = 43;
7389
+ _context6.next = 43;
7204
7390
  break;
7205
7391
  }
7206
7392
  throw new Error("code: ".concat(answer === null || answer === void 0 ? void 0 : answer.code, ", message:").concat(answer === null || answer === void 0 ? void 0 : answer.message));
@@ -7234,27 +7420,27 @@
7234
7420
  logger.log("answer modified:\n", answer.remoteSdp.sdp);
7235
7421
  this._rctConnectStartTs = Date.now();
7236
7422
  if (!(pc.signalingState === "closed")) {
7237
- _context4.next = 53;
7423
+ _context6.next = 53;
7238
7424
  break;
7239
7425
  }
7240
- return _context4.abrupt("return");
7426
+ return _context6.abrupt("return");
7241
7427
  case 53:
7242
- _context4.next = 55;
7428
+ _context6.next = 55;
7243
7429
  return pc.setRemoteDescription(answer.remoteSdp);
7244
7430
  case 55:
7245
7431
  this._networkEvaluate = new NetworkEvaluate(pc, this._opts.networkEvaluateInterval);
7246
7432
  this._listenPeerStateTimeout();
7247
- _context4.next = 62;
7433
+ _context6.next = 62;
7248
7434
  break;
7249
7435
  case 59:
7250
- _context4.prev = 59;
7251
- _context4.t0 = _context4["catch"](24);
7252
- this._emitError(StreamingError.network(_context4.t0));
7436
+ _context6.prev = 59;
7437
+ _context6.t0 = _context6["catch"](24);
7438
+ this._emitError(StreamingError.network(_context6.t0));
7253
7439
  case 62:
7254
7440
  case "end":
7255
- return _context4.stop();
7441
+ return _context6.stop();
7256
7442
  }
7257
- }, _callee4, this, [[24, 59]]);
7443
+ }, _callee6, this, [[24, 59]]);
7258
7444
  }));
7259
7445
  function _connect() {
7260
7446
  return _connect2.apply(this, arguments);
@@ -7285,12 +7471,21 @@
7285
7471
  value: function _startRtcReport() {
7286
7472
  var _this7 = this;
7287
7473
  this._stopRtcReport();
7288
- this._rtcReportTimer = setInterval(/* @__PURE__ */ _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee5() {
7289
- var _yield$Promise$all, _yield$Promise$all2, curAudioStats, curVideoStats, _this7$_audioStallObs, _this7$_videoStallObs, _this7$_networkQualit, _this7$_networkQualit2, audioStats, videoStats, audioStallInfo, videoStallInfo, _ref4, _ref5, quality, qualityInfo, targetDelay;
7290
- return _regeneratorRuntime$1().wrap(function _callee5$(_context5) {
7474
+ this._rtcReportTimer = setInterval(/* @__PURE__ */ _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee7() {
7475
+ var _this7$_audioTranscei, _this7$_videoTranscei;
7476
+ var _yield$Promise$all3, _yield$Promise$all4, curAudioStats, curVideoStats, _this7$_audioStallObs, _this7$_videoStallObs, _this7$_networkQualit, _this7$_networkQualit2, audioStats, videoStats, audioStallInfo, videoStallInfo, _ref6, _ref7, quality, qualityInfo, av_sync_diff;
7477
+ return _regeneratorRuntime$1().wrap(function _callee7$(_context7) {
7291
7478
  while (1)
7292
- switch (_context5.prev = _context5.next) {
7479
+ switch (_context7.prev = _context7.next) {
7293
7480
  case 0:
7481
+ if (!(!((_this7$_audioTranscei = _this7._audioTransceicer) !== null && _this7$_audioTranscei !== void 0 && _this7$_audioTranscei.receiver) || !((_this7$_videoTranscei = _this7._videoTransceicer) !== null && _this7$_videoTranscei !== void 0 && _this7$_videoTranscei.receiver))) {
7482
+ _context7.next = 4;
7483
+ break;
7484
+ }
7485
+ _this7._preAudioStats = null;
7486
+ _this7._preVideoStats = null;
7487
+ return _context7.abrupt("return");
7488
+ case 4:
7294
7489
  if (!_this7._audioStallObserver && _this7._audioTransceicer) {
7295
7490
  _this7._audioStallObserver = new AudioStallObserver();
7296
7491
  _this7._audioStallObserver.start(_this7._audioTransceicer);
@@ -7302,43 +7497,45 @@
7302
7497
  if (!_this7._networkQuality && _this7._opts.enableNetworkQuality) {
7303
7498
  _this7._networkQuality = new NetworkQuality(_this7._pc, _this7._opts.networkQuality);
7304
7499
  }
7305
- _context5.next = 5;
7500
+ _context7.next = 9;
7306
7501
  return Promise.all([getRecvAudioStats(_this7._audioTransceicer.receiver.getStats()), getRecvVideoStats(_this7._videoTransceicer.receiver.getStats())]);
7307
- case 5:
7308
- _yield$Promise$all = _context5.sent;
7309
- _yield$Promise$all2 = _slicedToArray(_yield$Promise$all, 2);
7310
- curAudioStats = _yield$Promise$all2[0];
7311
- curVideoStats = _yield$Promise$all2[1];
7502
+ case 9:
7503
+ _yield$Promise$all3 = _context7.sent;
7504
+ _yield$Promise$all4 = _slicedToArray(_yield$Promise$all3, 2);
7505
+ curAudioStats = _yield$Promise$all4[0];
7506
+ curVideoStats = _yield$Promise$all4[1];
7312
7507
  if (!(_this7._preAudioStats && _this7._preVideoStats)) {
7313
- _context5.next = 21;
7508
+ _context7.next = 26;
7314
7509
  break;
7315
7510
  }
7316
7511
  audioStats = diffRecvAudioStats(_this7._preAudioStats, curAudioStats);
7317
7512
  videoStats = diffRecvVideoStats(_this7._preVideoStats, curVideoStats);
7318
- _context5.next = 14;
7513
+ _context7.next = 18;
7319
7514
  return (_this7$_audioStallObs = _this7._audioStallObserver) === null || _this7$_audioStallObs === void 0 ? void 0 : _this7$_audioStallObs.getAudioStallInfo();
7320
- case 14:
7321
- audioStallInfo = _context5.sent;
7322
- _context5.next = 17;
7515
+ case 18:
7516
+ audioStallInfo = _context7.sent;
7517
+ _context7.next = 21;
7323
7518
  return (_this7$_videoStallObs = _this7._videoStallObserver) === null || _this7$_videoStallObs === void 0 ? void 0 : _this7$_videoStallObs.getStallInfo({
7324
7519
  interval: videoStats.statsInterval,
7325
7520
  frameRateReceived: videoStats.frameRateReceived,
7326
7521
  frameRateDecoded: videoStats.frameRateDecoded,
7327
7522
  bitrate: videoStats.receivedKBitrate
7328
7523
  });
7329
- case 17:
7330
- videoStallInfo = _context5.sent;
7331
- _ref4 = (_this7$_networkQualit = (_this7$_networkQualit2 = _this7._networkQuality) === null || _this7$_networkQualit2 === void 0 ? void 0 : _this7$_networkQualit2.getDownlinkQuality(_objectSpread2$2(_objectSpread2$2({}, audioStats), {}, {
7524
+ case 21:
7525
+ videoStallInfo = _context7.sent;
7526
+ _ref6 = (_this7$_networkQualit = (_this7$_networkQualit2 = _this7._networkQuality) === null || _this7$_networkQualit2 === void 0 ? void 0 : _this7$_networkQualit2.getDownlinkQuality(_objectSpread2$2(_objectSpread2$2({}, audioStats), {}, {
7332
7527
  stallDuration: audioStallInfo.stallDuration
7333
7528
  }), _objectSpread2$2(_objectSpread2$2({}, videoStats), {}, {
7334
- stallDuration: videoStallInfo.stall.stallDuration100ms
7335
- }))) !== null && _this7$_networkQualit !== void 0 ? _this7$_networkQualit : [], _ref5 = _slicedToArray(_ref4, 2), quality = _ref5[0], qualityInfo = _ref5[1];
7529
+ stallDuration: videoStallInfo.stall.stallDuration100ms || videoStallInfo.stall.stallDuration500ms
7530
+ }))) !== null && _this7$_networkQualit !== void 0 ? _this7$_networkQualit : [], _ref7 = _slicedToArray(_ref6, 2), quality = _ref7[0], qualityInfo = _ref7[1];
7336
7531
  if (_this7._opts.enableAdaptiveJitterBuffer) {
7337
- targetDelay = _this7._handleJitterBuffer(qualityInfo === null || qualityInfo === void 0 ? void 0 : qualityInfo.qualityQos, _this7._opts.adaptiveJitterBuffer, _this7._opts.networkStrategy);
7532
+ _this7._handleJitterBuffer(qualityInfo === null || qualityInfo === void 0 ? void 0 : qualityInfo.qualityQos, _this7._opts.adaptiveJitterBuffer, _this7._opts.networkStrategy);
7533
+ }
7534
+ if (videoStats.estimatedPlayoutTimestamp && audioStats.estimatedPlayoutTimestamp) {
7535
+ av_sync_diff = videoStats.estimatedPlayoutTimestamp - audioStats.estimatedPlayoutTimestamp;
7338
7536
  }
7339
7537
  _this7.emit(EXTEND_EVENTS.RTC_NETWORK, {
7340
7538
  interval: videoStats.statsInterval,
7341
- visibility_state: document.visibilityState,
7342
7539
  network_quality: quality,
7343
7540
  audio_stall_duration: audioStallInfo.stallDuration,
7344
7541
  audio_stall_count: audioStallInfo.stallCount,
@@ -7364,16 +7561,20 @@
7364
7561
  quality_audio_qoe: qualityInfo === null || qualityInfo === void 0 ? void 0 : qualityInfo.audioQoe,
7365
7562
  quality_video_qoe: qualityInfo === null || qualityInfo === void 0 ? void 0 : qualityInfo.videoQoe,
7366
7563
  current_delay: _this7._getDelay(),
7367
- target_delay: targetDelay
7564
+ visibility_state: document.visibilityState,
7565
+ target_delay: _this7._targetDelayHint,
7566
+ av_sync_diff,
7567
+ set_delay_error: _this7._setDelayError || null
7368
7568
  });
7369
- case 21:
7569
+ case 26:
7370
7570
  _this7._preAudioStats = curAudioStats;
7371
7571
  _this7._preVideoStats = curVideoStats;
7372
- case 23:
7572
+ _this7.set_delay_error = null;
7573
+ case 29:
7373
7574
  case "end":
7374
- return _context5.stop();
7575
+ return _context7.stop();
7375
7576
  }
7376
- }, _callee5);
7577
+ }, _callee7);
7377
7578
  })), 2e3);
7378
7579
  }
7379
7580
  }, {
@@ -7386,15 +7587,21 @@
7386
7587
  var validNetworkQualityResult = this._networkQualityResult.filter(Boolean);
7387
7588
  if (validNetworkQualityResult.length === adaptiveJitterBuffer.networkWindow) {
7388
7589
  var _networkStrategy$aver;
7389
- var sorted = _toConsumableArray$1(validNetworkQualityResult).sort(function(a, b) {
7390
- return a - b;
7391
- });
7392
- var mid = Math.floor(sorted.length / 2);
7393
- var averageQuality = sorted.length % 2 !== 0 ? sorted[mid] : (sorted[mid - 1] + sorted[mid]) / 2;
7590
+ var averageQuality;
7591
+ if (adaptiveJitterBuffer.windowMethod === "min") {
7592
+ averageQuality = Math.min.apply(Math, _toConsumableArray$1(validNetworkQualityResult));
7593
+ } else if (adaptiveJitterBuffer.windowMethod === "max") {
7594
+ averageQuality = Math.max.apply(Math, _toConsumableArray$1(validNetworkQualityResult));
7595
+ } else {
7596
+ var sorted = _toConsumableArray$1(validNetworkQualityResult).sort(function(a, b) {
7597
+ return a - b;
7598
+ });
7599
+ var mid = Math.floor(sorted.length / 2);
7600
+ averageQuality = sorted.length % 2 !== 0 ? sorted[mid] : (sorted[mid - 1] + sorted[mid]) / 2;
7601
+ }
7394
7602
  if (averageQuality && ((_networkStrategy$aver = networkStrategy[averageQuality]) === null || _networkStrategy$aver === void 0 ? void 0 : _networkStrategy$aver.jitterBuffer) !== void 0) {
7395
- var _networkStrategy$aver2, _networkStrategy$aver3;
7396
- this._setDelay((_networkStrategy$aver2 = networkStrategy[averageQuality]) === null || _networkStrategy$aver2 === void 0 ? void 0 : _networkStrategy$aver2.jitterBuffer);
7397
- return (_networkStrategy$aver3 = networkStrategy[averageQuality]) === null || _networkStrategy$aver3 === void 0 ? void 0 : _networkStrategy$aver3.jitterBuffer;
7603
+ var _networkStrategy$aver2;
7604
+ this._startSetDelayLoop((_networkStrategy$aver2 = networkStrategy[averageQuality]) === null || _networkStrategy$aver2 === void 0 ? void 0 : _networkStrategy$aver2.jitterBuffer);
7398
7605
  }
7399
7606
  }
7400
7607
  }
@@ -7408,6 +7615,8 @@
7408
7615
  this._audioStallObserver = null;
7409
7616
  this._videoStallObserver = null;
7410
7617
  this._networkQuality = null;
7618
+ this._preAudioStats = null;
7619
+ this._preVideoStats = null;
7411
7620
  if (this._rtcReportTimer) {
7412
7621
  clearInterval(this._rtcReportTimer);
7413
7622
  this._rtcReportTimer = 0;
@@ -7435,28 +7644,31 @@
7435
7644
  this._clearPeerStateTimeout();
7436
7645
  if (this._pc) {
7437
7646
  this._pc.close();
7647
+ if (this._media) {
7648
+ this._media.srcObject = null;
7649
+ }
7438
7650
  }
7439
7651
  }
7440
7652
  }, {
7441
7653
  key: "_createEmptyPeer",
7442
7654
  value: function() {
7443
- var _createEmptyPeer2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee6() {
7655
+ var _createEmptyPeer2 = _asyncToGenerator$1(/* @__PURE__ */ _regeneratorRuntime$1().mark(function _callee8() {
7444
7656
  var pc;
7445
- return _regeneratorRuntime$1().wrap(function _callee6$(_context6) {
7657
+ return _regeneratorRuntime$1().wrap(function _callee8$(_context8) {
7446
7658
  while (1)
7447
- switch (_context6.prev = _context6.next) {
7659
+ switch (_context8.prev = _context8.next) {
7448
7660
  case 0:
7449
7661
  pc = new RTCPeerConnection();
7450
- _context6.next = 3;
7662
+ _context8.next = 3;
7451
7663
  return pc.createOffer();
7452
7664
  case 3:
7453
7665
  pc.close();
7454
7666
  pc = null;
7455
7667
  case 5:
7456
7668
  case "end":
7457
- return _context6.stop();
7669
+ return _context8.stop();
7458
7670
  }
7459
- }, _callee6);
7671
+ }, _callee8);
7460
7672
  }));
7461
7673
  function _createEmptyPeer() {
7462
7674
  return _createEmptyPeer2.apply(this, arguments);
@@ -7603,7 +7815,7 @@
7603
7815
  }, {
7604
7816
  key: "version",
7605
7817
  get: function get() {
7606
- return "0.2.1-alpha.37";
7818
+ return "0.2.1-alpha.42";
7607
7819
  }
7608
7820
  }, {
7609
7821
  key: "beforePlayerInit",