@volcengine/veplayer 2.0.0-rc.1 → 2.1.0-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.
Files changed (38) hide show
  1. package/README.md +14 -1
  2. package/esm/index.d.ts +2055 -285
  3. package/esm/veplayer.biz.live.development.js +206 -46
  4. package/esm/veplayer.biz.live.production.js +1 -1
  5. package/esm/veplayer.d.ts +4468 -791
  6. package/esm/veplayer.development.css +1 -1
  7. package/esm/veplayer.development.js +884 -288
  8. package/esm/veplayer.live.d.ts +4534 -858
  9. package/esm/veplayer.live.development.css +1 -1
  10. package/esm/veplayer.live.development.js +884 -288
  11. package/esm/veplayer.live.production.css +1 -1
  12. package/esm/veplayer.live.production.js +4 -4
  13. package/esm/veplayer.production.css +1 -1
  14. package/esm/veplayer.production.js +4 -4
  15. package/esm/veplayer.vod.d.ts +2055 -285
  16. package/esm/veplayer.vod.development.css +1 -1
  17. package/esm/veplayer.vod.development.js +653 -213
  18. package/esm/veplayer.vod.production.css +1 -1
  19. package/esm/veplayer.vod.production.js +4 -4
  20. package/package.json +2 -1
  21. package/umd/index.d.ts +2055 -285
  22. package/umd/veplayer.biz.live.development.js +206 -46
  23. package/umd/veplayer.biz.live.production.js +1 -1
  24. package/umd/veplayer.d.ts +4468 -791
  25. package/umd/veplayer.development.css +1 -1
  26. package/umd/veplayer.development.js +884 -288
  27. package/umd/veplayer.live.d.ts +4534 -858
  28. package/umd/veplayer.live.development.css +1 -1
  29. package/umd/veplayer.live.development.js +882 -286
  30. package/umd/veplayer.live.production.css +1 -1
  31. package/umd/veplayer.live.production.js +1 -1
  32. package/umd/veplayer.production.css +1 -1
  33. package/umd/veplayer.production.js +1 -1
  34. package/umd/veplayer.vod.d.ts +2055 -285
  35. package/umd/veplayer.vod.development.css +1 -1
  36. package/umd/veplayer.vod.development.js +653 -213
  37. package/umd/veplayer.vod.production.css +1 -1
  38. package/umd/veplayer.vod.production.js +1 -1
@@ -8,6 +8,16 @@ var __publicField = (obj, key, value) => {
8
8
  return value;
9
9
  };
10
10
 
11
+ var Codec = /* @__PURE__ */ ((Codec2) => {
12
+ Codec2["H265"] = "h265";
13
+ Codec2["H264"] = "h264";
14
+ return Codec2;
15
+ })(Codec || {});
16
+ var DecodeType = /* @__PURE__ */ ((DecodeType2) => {
17
+ DecodeType2["Software"] = "software";
18
+ DecodeType2["Hardware"] = "hardware";
19
+ return DecodeType2;
20
+ })(DecodeType || {});
11
21
  function ownKeys(object, enumerableOnly) {
12
22
  var keys = Object.keys(object);
13
23
  if (Object.getOwnPropertySymbols) {
@@ -1004,6 +1014,9 @@ var __publicField = (obj, key, value) => {
1004
1014
  }
1005
1015
  return /^blob/.test(video.currentSrc) || /^blob/.test(video.src);
1006
1016
  };
1017
+ util.isBlob = function(url) {
1018
+ return /^blob/.test(url);
1019
+ };
1007
1020
  util.generateSessionId = function() {
1008
1021
  var did = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 0;
1009
1022
  var d = (/* @__PURE__ */ new Date()).getTime();
@@ -1064,6 +1077,69 @@ var __publicField = (obj, key, value) => {
1064
1077
  }
1065
1078
  return val % 360;
1066
1079
  };
1080
+ util.getIndexByTime = function(time, segments) {
1081
+ var _len = segments.length;
1082
+ var _index = -1;
1083
+ if (_len < 1) {
1084
+ return _index;
1085
+ }
1086
+ if (time <= segments[0].end || _len < 2) {
1087
+ _index = 0;
1088
+ } else if (time > segments[_len - 1].end) {
1089
+ _index = _len - 1;
1090
+ } else {
1091
+ for (var i = 1; i < _len; i++) {
1092
+ if (time > segments[i - 1].end && time <= segments[i].end) {
1093
+ _index = i;
1094
+ break;
1095
+ }
1096
+ }
1097
+ }
1098
+ return _index;
1099
+ };
1100
+ util.getOffsetCurrentTime = function(currentTime, segments) {
1101
+ var index = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : -1;
1102
+ var _index = -1;
1103
+ if (index >= 0 && index < segments.length) {
1104
+ _index = index;
1105
+ } else {
1106
+ _index = util.getIndexByTime(currentTime, segments);
1107
+ }
1108
+ if (_index < 0) {
1109
+ return -1;
1110
+ }
1111
+ var _len = segments.length;
1112
+ var _segments$_index = segments[_index], start = _segments$_index.start, end = _segments$_index.end, cTime = _segments$_index.cTime, offset = _segments$_index.offset;
1113
+ if (currentTime < start) {
1114
+ return cTime;
1115
+ } else if (currentTime >= start && currentTime <= end) {
1116
+ return currentTime - offset;
1117
+ } else if (currentTime > end && _index >= _len - 1) {
1118
+ return end;
1119
+ }
1120
+ return -1;
1121
+ };
1122
+ util.getCurrentTimeByOffset = function(offsetTime, segments) {
1123
+ var _index = -1;
1124
+ if (!segments || segments.length < 0) {
1125
+ return offsetTime;
1126
+ }
1127
+ for (var i = 0; i < segments.length; i++) {
1128
+ if (offsetTime <= segments[i].duration) {
1129
+ _index = i;
1130
+ break;
1131
+ }
1132
+ }
1133
+ if (_index !== -1) {
1134
+ var start = segments[_index].start;
1135
+ if (_index - 1 < 0) {
1136
+ return start + offsetTime;
1137
+ } else {
1138
+ return start + (offsetTime - segments[_index - 1].duration);
1139
+ }
1140
+ }
1141
+ return offsetTime;
1142
+ };
1067
1143
  function isObject(value) {
1068
1144
  var type = _typeof(value);
1069
1145
  return value !== null && (type === "object" || type === "function");
@@ -1153,7 +1229,7 @@ var __publicField = (obj, key, value) => {
1153
1229
  function debounced() {
1154
1230
  var time = Date.now();
1155
1231
  var isInvoking = shouldInvoke(time);
1156
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
1232
+ for (var _len2 = arguments.length, args = new Array(_len2), _key = 0; _key < _len2; _key++) {
1157
1233
  args[_key] = arguments[_key];
1158
1234
  }
1159
1235
  lastArgs = args;
@@ -1360,7 +1436,7 @@ var __publicField = (obj, key, value) => {
1360
1436
  }
1361
1437
  }
1362
1438
  };
1363
- var version = "3.0.7";
1439
+ var version = "3.0.10-alpha.4";
1364
1440
  var ERROR_TYPE_MAP = {
1365
1441
  1: "media",
1366
1442
  2: "media",
@@ -1446,6 +1522,7 @@ var __publicField = (obj, key, value) => {
1446
1522
  var DURATION_CHANGE = "durationchange";
1447
1523
  var VOLUME_CHANGE = "volumechange";
1448
1524
  var LOADED_DATA = "loadeddata";
1525
+ var LOADED_METADATA = "loadedmetadata";
1449
1526
  var RATE_CHANGE = "ratechange";
1450
1527
  var PROGRESS = "progress";
1451
1528
  var LOAD_START = "loadstart";
@@ -1485,7 +1562,7 @@ var __publicField = (obj, key, value) => {
1485
1562
  var SOURCE_ERROR = "source_error";
1486
1563
  var SOURCE_SUCCESS = "source_success";
1487
1564
  var SWITCH_SUBTITLE = "switch_subtitle";
1488
- var VIDEO_EVENTS = ["play", "playing", "ended", "pause", "error", "seeking", "seeked", "timeupdate", "waiting", "canplay", "canplaythrough", "durationchange", "volumechange", "loadeddata", "ratechange", "progress", "loadstart", "emptied", "stalled", "suspend", "abort", "lowdecode"];
1565
+ var VIDEO_EVENTS = ["play", "playing", "ended", "pause", "error", "seeking", "seeked", "timeupdate", "waiting", "canplay", "canplaythrough", "durationchange", "volumechange", "loadeddata", "loadedmetadata", "ratechange", "progress", "loadstart", "emptied", "stalled", "suspend", "abort", "lowdecode"];
1489
1566
  var STATS_EVENTS = {
1490
1567
  STATS_INFO: "stats_info",
1491
1568
  STATS_DOWNLOAD: "stats_download",
@@ -1514,6 +1591,7 @@ var __publicField = (obj, key, value) => {
1514
1591
  FPS_STUCK,
1515
1592
  FULLSCREEN_CHANGE,
1516
1593
  LOADED_DATA,
1594
+ LOADED_METADATA,
1517
1595
  LOAD_START,
1518
1596
  MINI_STATE_CHANGE,
1519
1597
  PAUSE,
@@ -1651,6 +1729,9 @@ var __publicField = (obj, key, value) => {
1651
1729
  if (options.loop) {
1652
1730
  _this.mediaConfig.loop = "loop";
1653
1731
  }
1732
+ if (options.autoplayMuted && !Object.prototype.hasOwnProperty.call(_this.mediaConfig, "muted")) {
1733
+ _this.mediaConfig.muted = true;
1734
+ }
1654
1735
  _this.media = util.createDom(_this.mediaConfig.mediaType, "", _this.mediaConfig, "");
1655
1736
  if (options.defaultPlaybackRate) {
1656
1737
  _this.media.defaultPlaybackRate = _this.media.playbackRate = options.defaultPlaybackRate;
@@ -1729,10 +1810,11 @@ var __publicField = (obj, key, value) => {
1729
1810
  var _this6 = this;
1730
1811
  video.removeAttribute("src");
1731
1812
  video.load();
1732
- urls.forEach(function(item) {
1813
+ urls.forEach(function(item, index) {
1733
1814
  _this6.media.appendChild(util.createDom("source", "", {
1734
1815
  src: "".concat(item.src),
1735
- type: "".concat(item.type || "")
1816
+ type: "".concat(item.type || ""),
1817
+ "data-index": index + 1
1736
1818
  }));
1737
1819
  });
1738
1820
  var _c = video.children;
@@ -1740,6 +1822,7 @@ var __publicField = (obj, key, value) => {
1740
1822
  return;
1741
1823
  }
1742
1824
  this._videoSourceCount = _c.length;
1825
+ this._videoSourceIndex = _c.length;
1743
1826
  this._vLoadeddata = function(e) {
1744
1827
  _this6.emit(SOURCE_SUCCESS, {
1745
1828
  src: e.target.currentSrc,
@@ -1754,8 +1837,9 @@ var __publicField = (obj, key, value) => {
1754
1837
  }
1755
1838
  }
1756
1839
  !this._sourceError && (this._sourceError = function(e) {
1757
- _this6._videoSourceCount--;
1758
- if (_this6._videoSourceCount === 0) {
1840
+ var _dIndex = parseInt(e.target.getAttribute("data-index"), 10);
1841
+ _this6._videoSourceIndex--;
1842
+ if (_this6._videoSourceIndex === 0 || _dIndex >= _this6._videoSourceCount) {
1759
1843
  var _err = {
1760
1844
  code: 4,
1761
1845
  message: "sources_load_error"
@@ -2082,7 +2166,7 @@ var __publicField = (obj, key, value) => {
2082
2166
  this.emit(WAITING);
2083
2167
  this._currentTime = 0;
2084
2168
  this._duration = 0;
2085
- if (/^blob/.test(this.media.currentSrc) || /^blob/.test(this.media.src)) {
2169
+ if (util.isMSE(this.media)) {
2086
2170
  this.onWaiting();
2087
2171
  return;
2088
2172
  }
@@ -3790,6 +3874,7 @@ var __publicField = (obj, key, value) => {
3790
3874
  },
3791
3875
  enableSwipeHandler: function enableSwipeHandler() {
3792
3876
  },
3877
+ preProcessUrl: null,
3793
3878
  ignores: [],
3794
3879
  whitelist: [],
3795
3880
  inactive: 3e3,
@@ -3871,7 +3956,7 @@ var __publicField = (obj, key, value) => {
3871
3956
  autoHide: false
3872
3957
  });
3873
3958
  });
3874
- _defineProperty(_assertThisInitialized(_this), "onMouseLeave", function() {
3959
+ _defineProperty(_assertThisInitialized(_this), "onMouseLeave", function(e) {
3875
3960
  var _assertThisInitialize2 = _assertThisInitialized(_this), player = _assertThisInitialize2.player;
3876
3961
  player.focus();
3877
3962
  });
@@ -3949,12 +4034,13 @@ var __publicField = (obj, key, value) => {
3949
4034
  }, {
3950
4035
  key: "show",
3951
4036
  value: function show() {
3952
- util.addClass(this.root, "show");
4037
+ this.root.style.display = "";
4038
+ this.player.focus();
3953
4039
  }
3954
4040
  }, {
3955
4041
  key: "hide",
3956
4042
  value: function hide() {
3957
- util.removeClass(this.root, "show");
4043
+ this.root.style.display = "none";
3958
4044
  }
3959
4045
  }, {
3960
4046
  key: "mode",
@@ -4356,6 +4442,7 @@ var __publicField = (obj, key, value) => {
4356
4442
  _this.cssfullscreen = false;
4357
4443
  _this.isRotateFullscreen = false;
4358
4444
  _this._fullscreenEl = null;
4445
+ _this.timeSegments = [];
4359
4446
  _this._cssfullscreenEl = null;
4360
4447
  _this.curDefinition = null;
4361
4448
  _this._orgCss = "";
@@ -4365,7 +4452,7 @@ var __publicField = (obj, key, value) => {
4365
4452
  _this.videoPos = {
4366
4453
  pi: 1,
4367
4454
  scale: 0,
4368
- rotate: 0,
4455
+ rotate: -1,
4369
4456
  x: 0,
4370
4457
  y: 0,
4371
4458
  h: -1,
@@ -4373,11 +4460,21 @@ var __publicField = (obj, key, value) => {
4373
4460
  vy: 0,
4374
4461
  vx: 0
4375
4462
  };
4463
+ _this.sizeInfo = {
4464
+ width: 0,
4465
+ height: 0,
4466
+ left: 0,
4467
+ top: 0
4468
+ };
4376
4469
  _this._accPlayed = {
4377
4470
  t: 0,
4378
4471
  acc: 0,
4379
4472
  loopAcc: 0
4380
4473
  };
4474
+ _this._offsetInfo = {
4475
+ currentTime: -1,
4476
+ duration: 0
4477
+ };
4381
4478
  _this.innerContainer = null;
4382
4479
  _this.controls = null;
4383
4480
  _this.topBar = null;
@@ -4390,6 +4487,9 @@ var __publicField = (obj, key, value) => {
4390
4487
  _this.isUserActive = false;
4391
4488
  _this._onceSeekCanplay = null;
4392
4489
  _this._isPauseBeforeSeek = 0;
4490
+ _this.innerStates = {
4491
+ isActiveLocked: false
4492
+ };
4393
4493
  var rootInit = _this._initDOM();
4394
4494
  if (!rootInit) {
4395
4495
  console.error(new Error("can't find the dom which id is ".concat(_this.config.id, " or this.config.el does not exist")));
@@ -4475,16 +4575,16 @@ var __publicField = (obj, key, value) => {
4475
4575
  this.addClass(STATE_CLASS.NO_START);
4476
4576
  }
4477
4577
  if (this.config.fluid) {
4478
- var _this$config3 = this.config, width = _this$config3.width, height = _this$config3.height;
4479
- if (typeof width !== "number" || typeof height !== "number") {
4480
- width = 600;
4481
- height = 337.5;
4578
+ var _this$config3 = this.config, _width = _this$config3.width, _height = _this$config3.height;
4579
+ if (typeof _width !== "number" || typeof _height !== "number") {
4580
+ _width = 600;
4581
+ _height = 337.5;
4482
4582
  }
4483
4583
  var style = {
4484
4584
  width: "100%",
4485
4585
  height: "0",
4486
4586
  "max-width": "100%",
4487
- "padding-top": "".concat(height * 100 / width, "%")
4587
+ "padding-top": "".concat(_height * 100 / _width, "%")
4488
4588
  };
4489
4589
  Object.keys(style).forEach(function(key) {
4490
4590
  _this2.root.style[key] = style[key];
@@ -4500,6 +4600,11 @@ var __publicField = (obj, key, value) => {
4500
4600
  }
4501
4601
  });
4502
4602
  }
4603
+ var _this$root$getBoundin = this.root.getBoundingClientRect(), width = _this$root$getBoundin.width, height = _this$root$getBoundin.height, left = _this$root$getBoundin.left, top = _this$root$getBoundin.top;
4604
+ this.sizeInfo.width = width;
4605
+ this.sizeInfo.height = height;
4606
+ this.sizeInfo.left = left;
4607
+ this.sizeInfo.top = top;
4503
4608
  return true;
4504
4609
  }
4505
4610
  }, {
@@ -4583,7 +4688,7 @@ var __publicField = (obj, key, value) => {
4583
4688
  var readyState = this.media.readyState;
4584
4689
  XG_DEBUG.logInfo("_startInit readyState", readyState);
4585
4690
  if (this.config.autoplay) {
4586
- !(/^blob/.test(this.media.currentSrc) || /^blob/.test(this.media.src)) && this.load();
4691
+ !util.isMSE(this.media) && this.load();
4587
4692
  (sniffer.os.isIpad || sniffer.os.isPhone) && this.mediaPlay();
4588
4693
  }
4589
4694
  if (readyState >= 2) {
@@ -4811,7 +4916,8 @@ var __publicField = (obj, key, value) => {
4811
4916
  if (!url) {
4812
4917
  url = _this8.url || _this8.config.url;
4813
4918
  }
4814
- var ret = _this8._startInit(url);
4919
+ var _furl = _this8.preProcessUrl(url);
4920
+ var ret = _this8._startInit(_furl.url);
4815
4921
  return ret;
4816
4922
  }).catch(function(e) {
4817
4923
  e.fileName = "player";
@@ -4828,6 +4934,7 @@ var __publicField = (obj, key, value) => {
4828
4934
  if (util.typeOf(url) === "Object") {
4829
4935
  _src = url.url;
4830
4936
  }
4937
+ _src = this.preProcessUrl(_src).url;
4831
4938
  var curTime = this.currentTime;
4832
4939
  var isPaused = this.paused && !this.isError;
4833
4940
  this.src = _src;
@@ -5166,7 +5273,11 @@ var __publicField = (obj, key, value) => {
5166
5273
  this.addClass(STATE_CLASS.LOADING);
5167
5274
  runHooks(this, "retry", function() {
5168
5275
  var cur = _this20.currentTime;
5169
- _this20.src = _this20.config.url;
5276
+ var url = _this20.config.url;
5277
+ var _srcRet = !util.isMSE(_this20.media) ? _this20.preProcessUrl(url) : {
5278
+ url
5279
+ };
5280
+ _this20.src = _srcRet.url;
5170
5281
  !_this20.config.isLive && (_this20.currentTime = cur);
5171
5282
  _this20.once(CANPLAY, function() {
5172
5283
  _this20.mediaPlay();
@@ -5227,7 +5338,7 @@ var __publicField = (obj, key, value) => {
5227
5338
  var fullEl = util.getFullScreenEl();
5228
5339
  if (fullEl === this._fullscreenEl) {
5229
5340
  this.onFullscreenChange();
5230
- return;
5341
+ return Promise.resolve();
5231
5342
  }
5232
5343
  try {
5233
5344
  for (var i = 0; i < GET_FULLSCREEN_API.length; i++) {
@@ -5400,30 +5511,38 @@ var __publicField = (obj, key, value) => {
5400
5511
  key: "onFocus",
5401
5512
  value: function onFocus() {
5402
5513
  var _this21 = this;
5403
- var _ref = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, _ref$autoHide = _ref.autoHide, autoHide = _ref$autoHide === void 0 ? !this.config.closePlayerBlur : _ref$autoHide, _ref$delay = _ref.delay, delay = _ref$delay === void 0 ? this.config.inactive : _ref$delay;
5514
+ var data = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {
5515
+ autoHide: true,
5516
+ delay: 3e3
5517
+ };
5518
+ var innerStates = this.innerStates;
5404
5519
  this.isActive = true;
5405
5520
  this.removeClass(STATE_CLASS.INACTIVE);
5406
5521
  if (this.userTimer) {
5407
5522
  util.clearTimeout(this, this.userTimer);
5408
5523
  this.userTimer = null;
5409
5524
  }
5410
- if (!autoHide) {
5525
+ if (data.isLock !== void 0) {
5526
+ innerStates.isActiveLocked = data.isLock;
5527
+ }
5528
+ if (data.autoHide === false || data.isLock === true || innerStates.isActiveLocked) {
5411
5529
  if (this.userTimer) {
5412
5530
  util.clearTimeout(this, this.userTimer);
5413
5531
  this.userTimer = null;
5414
5532
  }
5415
5533
  return;
5416
5534
  }
5535
+ var time = data && data.delay ? data.delay : this.config.inactive;
5417
5536
  this.userTimer = util.setTimeout(this, function() {
5418
5537
  _this21.userTimer = null;
5419
5538
  _this21.blur();
5420
- }, delay);
5539
+ }, time);
5421
5540
  }
5422
5541
  }, {
5423
5542
  key: "onBlur",
5424
5543
  value: function onBlur() {
5425
- var _ref2 = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, _ref2$ignorePaused = _ref2.ignorePaused, ignorePaused = _ref2$ignorePaused === void 0 ? false : _ref2$ignorePaused;
5426
- if (!this.isActive) {
5544
+ var _ref = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, _ref$ignorePaused = _ref.ignorePaused, ignorePaused = _ref$ignorePaused === void 0 ? false : _ref$ignorePaused;
5545
+ if (!this.isActive || this.innerStates.isActiveLocked) {
5427
5546
  return;
5428
5547
  }
5429
5548
  var closePauseVideoFocus = this.config.closePauseVideoFocus;
@@ -5546,7 +5665,7 @@ var __publicField = (obj, key, value) => {
5546
5665
  }, {
5547
5666
  key: "onTimeupdate",
5548
5667
  value: function onTimeupdate() {
5549
- !this._videoHeight && this.resize();
5668
+ !this._videoHeight && this.media.videoHeight && this.resize();
5550
5669
  if ((this.waitTimer || this.hasClass(STATE_CLASS.LOADING)) && this.media.readyState > 2) {
5551
5670
  this.removeClass(STATE_CLASS.LOADING);
5552
5671
  util.clearTimeout(this, this.waitTimer);
@@ -5621,8 +5740,11 @@ var __publicField = (obj, key, value) => {
5621
5740
  key: "resizePosition",
5622
5741
  value: function resizePosition() {
5623
5742
  var _this$videoPos = this.videoPos, rotate = _this$videoPos.rotate, vy = _this$videoPos.vy, vx = _this$videoPos.vx, h = _this$videoPos.h, w = _this$videoPos.w;
5743
+ if (rotate < 0 && !vy && !vx) {
5744
+ return;
5745
+ }
5624
5746
  var _pi = this.videoPos._pi;
5625
- if (!_pi) {
5747
+ if (!_pi && this.media.videoHeight) {
5626
5748
  _pi = this.media.videoWidth / this.media.videoHeight * 100;
5627
5749
  }
5628
5750
  if (!_pi) {
@@ -5722,9 +5844,14 @@ var __publicField = (obj, key, value) => {
5722
5844
  if (!this.media) {
5723
5845
  return;
5724
5846
  }
5847
+ var containerSize = this.root.getBoundingClientRect();
5848
+ this.sizeInfo.width = containerSize.width;
5849
+ this.sizeInfo.height = containerSize.height;
5850
+ this.sizeInfo.left = containerSize.left;
5851
+ this.sizeInfo.top = containerSize.top;
5725
5852
  var _this$media = this.media, videoWidth = _this$media.videoWidth, videoHeight = _this$media.videoHeight;
5726
5853
  var _this$config6 = this.config, fitVideoSize = _this$config6.fitVideoSize, videoFillMode = _this$config6.videoFillMode;
5727
- if (videoFillMode === "fill" || videoFillMode === "cover") {
5854
+ if (videoFillMode === "fill" || videoFillMode === "cover" || videoFillMode === "contain") {
5728
5855
  this.setAttribute("data-xgfill", videoFillMode);
5729
5856
  }
5730
5857
  if (!videoHeight || !videoWidth) {
@@ -5732,7 +5859,6 @@ var __publicField = (obj, key, value) => {
5732
5859
  }
5733
5860
  this._videoHeight = videoHeight;
5734
5861
  this._videoWidth = videoWidth;
5735
- var containerSize = this.root.getBoundingClientRect();
5736
5862
  var controlsHeight = this.controls && this.innerContainer ? this.controls.root.getBoundingClientRect().height : 0;
5737
5863
  var width = containerSize.width;
5738
5864
  var height = containerSize.height - controlsHeight;
@@ -5787,6 +5913,14 @@ var __publicField = (obj, key, value) => {
5787
5913
  XG_DEBUG.logInfo("setState", "state from:".concat(STATE_ARRAY[this.state], " to:").concat(STATE_ARRAY[newState]));
5788
5914
  this._state = newState;
5789
5915
  }
5916
+ }, {
5917
+ key: "preProcessUrl",
5918
+ value: function preProcessUrl(url, ext) {
5919
+ var preProcessUrl2 = this.config.preProcessUrl;
5920
+ return !util.isBlob(url) && preProcessUrl2 && typeof preProcessUrl2 === "function" ? preProcessUrl2(url, ext) : {
5921
+ url
5922
+ };
5923
+ }
5790
5924
  }, {
5791
5925
  key: "state",
5792
5926
  get: function get() {
@@ -5960,9 +6094,8 @@ var __publicField = (obj, key, value) => {
5960
6094
  }, {
5961
6095
  key: "cumulateTime",
5962
6096
  get: function get() {
5963
- var _accPlayed = this._accPlayed;
5964
- this.updateAcc("get");
5965
- return _accPlayed.acc;
6097
+ var _this$_accPlayed = this._accPlayed, acc = _this$_accPlayed.acc, t = _this$_accPlayed.t;
6098
+ return t ? (/* @__PURE__ */ new Date()).getTime() - t + acc : acc;
5966
6099
  }
5967
6100
  }, {
5968
6101
  key: "zoom",
@@ -6001,6 +6134,22 @@ var __publicField = (obj, key, value) => {
6001
6134
  set: function set(val) {
6002
6135
  REAL_TIME_SPEED = val;
6003
6136
  }
6137
+ }, {
6138
+ key: "offsetCurrentTime",
6139
+ get: function get() {
6140
+ return this._offsetInfo.currentTime || 0;
6141
+ },
6142
+ set: function set(val) {
6143
+ this._offsetInfo.currentTime = val;
6144
+ }
6145
+ }, {
6146
+ key: "offsetDuration",
6147
+ get: function get() {
6148
+ return this._offsetInfo.duration || 0;
6149
+ },
6150
+ set: function set(val) {
6151
+ this._offsetInfo.duration = val || 0;
6152
+ }
6004
6153
  }, {
6005
6154
  key: "hook",
6006
6155
  value: function hook$1(hookName, handler) {
@@ -6126,7 +6275,7 @@ var __publicField = (obj, key, value) => {
6126
6275
  ErrorCode2[ErrorCode2["RUNTIME_NO_CANPLAY_ERROR"] = 9001] = "RUNTIME_NO_CANPLAY_ERROR";
6127
6276
  ErrorCode2[ErrorCode2["RUNTIME_BUFFERBREAK_ERROR"] = 9002] = "RUNTIME_BUFFERBREAK_ERROR";
6128
6277
  ErrorCode2[ErrorCode2["RUNTIME_BWAITING_TIMEOUT_ERROR"] = 9002] = "RUNTIME_BWAITING_TIMEOUT_ERROR";
6129
- ErrorCode2[ErrorCode2["MODULE_LOAD_ERROR"] = 100] = "MODULE_LOAD_ERROR";
6278
+ ErrorCode2[ErrorCode2["MODULE_LOAD_ERROR"] = 110] = "MODULE_LOAD_ERROR";
6130
6279
  ErrorCode2["UNKNOWN"] = "UNKNOWN";
6131
6280
  return ErrorCode2;
6132
6281
  })(ErrorCode || {});
@@ -6212,7 +6361,7 @@ var __publicField = (obj, key, value) => {
6212
6361
  /* Error */
6213
6362
  },
6214
6363
  [
6215
- 100
6364
+ 110
6216
6365
  /* MODULE_LOAD_ERROR */
6217
6366
  ]: {
6218
6367
  messageTextKey: "MODULE_LOAD_ERROR",
@@ -6287,6 +6436,11 @@ var __publicField = (obj, key, value) => {
6287
6436
  }
6288
6437
  };
6289
6438
  class VeError extends Error {
6439
+ /**
6440
+ * @hidden
6441
+ * @param error
6442
+ * @param i18n
6443
+ */
6290
6444
  constructor(error2, i18n) {
6291
6445
  var _a;
6292
6446
  const errorInfo = typeof error2 === "string" ? {
@@ -6294,8 +6448,17 @@ var __publicField = (obj, key, value) => {
6294
6448
  } : error2;
6295
6449
  const message = (i18n == null ? void 0 : i18n.getText(errorInfo == null ? void 0 : errorInfo.messageTextKey)) ?? (errorInfo == null ? void 0 : errorInfo.message) ?? ((_a = errorInfo == null ? void 0 : errorInfo.error) == null ? void 0 : _a.message) ?? (i18n == null ? void 0 : i18n.getText("UNKNOWN"));
6296
6450
  super(message);
6451
+ /**
6452
+ * @brief 错误码,对应[错误码字典](#错误码)。
6453
+ */
6297
6454
  __publicField(this, "errorCode");
6455
+ /**
6456
+ * @brief 错误等级。
6457
+ */
6298
6458
  __publicField(this, "level");
6459
+ /**
6460
+ * @brief 其他错误信息。
6461
+ */
6299
6462
  __publicField(this, "ext");
6300
6463
  this.errorCode = (errorInfo == null ? void 0 : errorInfo.errorCode) ?? "UNKNOWN";
6301
6464
  this.level = (errorInfo == null ? void 0 : errorInfo.level) ?? "Error";
@@ -7632,10 +7795,56 @@ var __publicField = (obj, key, value) => {
7632
7795
  var Touche = /* @__PURE__ */ function() {
7633
7796
  function Touche2(dom) {
7634
7797
  var _this = this;
7635
- var config = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {
7798
+ var _config = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {
7636
7799
  eventType: "touch"
7637
7800
  };
7638
7801
  _classCallCheck(this, Touche2);
7802
+ _defineProperty(this, "onTouchStart", function(e) {
7803
+ var _pos = _this._pos, root = _this.root;
7804
+ var touch = getTouch(e.touches);
7805
+ _pos.x = touch ? parseInt(touch.pageX, 10) : e.pageX;
7806
+ _pos.y = touch ? parseInt(touch.pageX, 10) : e.pageX;
7807
+ _pos.start = true;
7808
+ _this.__setPress(e);
7809
+ root.addEventListener(_this.events.end, _this.onTouchEnd);
7810
+ root.addEventListener(_this.events.cancel, _this.onTouchCancel);
7811
+ root.addEventListener(_this.events.move, _this.onTouchMove);
7812
+ _this.trigger(EVENTS.TOUCH_START, e);
7813
+ });
7814
+ _defineProperty(this, "onTouchCancel", function(e) {
7815
+ _this.onTouchEnd(e);
7816
+ });
7817
+ _defineProperty(this, "onTouchEnd", function(e) {
7818
+ var _pos = _this._pos, root = _this.root;
7819
+ _this.__clearPress();
7820
+ root.removeEventListener(_this.events.cancel, _this.onTouchCancel);
7821
+ root.removeEventListener(_this.events.end, _this.onTouchEnd);
7822
+ root.removeEventListener(_this.events.move, _this.onTouchMove);
7823
+ e.moving = _pos.moving;
7824
+ e.press = _pos.press;
7825
+ _pos.press && _this.trigger(EVENTS.PRESS_END, e);
7826
+ _this.trigger(EVENTS.TOUCH_END, e);
7827
+ !_pos.press && !_pos.moving && _this.__setDb(e);
7828
+ _pos.press = false;
7829
+ _pos.start = false;
7830
+ _pos.moving = false;
7831
+ });
7832
+ _defineProperty(this, "onTouchMove", function(e) {
7833
+ var _pos = _this._pos, config = _this.config;
7834
+ var touch = getTouch(e.touches);
7835
+ var x = touch ? parseInt(touch.pageX, 10) : e.pageX;
7836
+ var y = touch ? parseInt(touch.pageY, 10) : e.pageX;
7837
+ var diffx = x - _pos.x;
7838
+ var diffy = y - _pos.y;
7839
+ if (Math.abs(diffy) < config.miniStep && Math.abs(diffx) < config.miniStep) {
7840
+ return;
7841
+ }
7842
+ _this.__clearPress();
7843
+ _pos.press && _this.trigger(EVENTS.PRESS_END, e);
7844
+ _pos.press = false;
7845
+ _pos.moving = true;
7846
+ _this.trigger(EVENTS.TOUCH_MOVE, e);
7847
+ });
7639
7848
  this._pos = {
7640
7849
  moving: false,
7641
7850
  start: false,
@@ -7643,11 +7852,11 @@ var __publicField = (obj, key, value) => {
7643
7852
  y: 0
7644
7853
  };
7645
7854
  this.config = getDefaultConfig();
7646
- Object.keys(config).map(function(key) {
7647
- _this.config[key] = config[key];
7855
+ Object.keys(_config).map(function(key) {
7856
+ _this.config[key] = _config[key];
7648
7857
  });
7649
7858
  this.root = dom;
7650
- this.events = config.eventType === "mouse" ? MOUSES : TOUCHS;
7859
+ this.events = _config.eventType === "mouse" ? MOUSES : TOUCHS;
7651
7860
  this.pressIntrvalId = null;
7652
7861
  this.dbIntrvalId = null;
7653
7862
  this.__handlers = {};
@@ -7656,10 +7865,6 @@ var __publicField = (obj, key, value) => {
7656
7865
  _createClass(Touche2, [{
7657
7866
  key: "_initEvent",
7658
7867
  value: function _initEvent() {
7659
- this.onTouchStart = this.onTouchStart.bind(this);
7660
- this.onTouchMove = this.onTouchMove.bind(this);
7661
- this.onTouchEnd = this.onTouchEnd.bind(this);
7662
- this.onTouchCancel = this.onTouchCancel.bind(this);
7663
7868
  this.root.addEventListener(this.events.start, this.onTouchStart);
7664
7869
  }
7665
7870
  }, {
@@ -7745,60 +7950,6 @@ var __publicField = (obj, key, value) => {
7745
7950
  }
7746
7951
  });
7747
7952
  }
7748
- }, {
7749
- key: "onTouchStart",
7750
- value: function onTouchStart(e) {
7751
- var _pos = this._pos, root = this.root;
7752
- var touch = getTouch(e.touches);
7753
- _pos.x = touch ? parseInt(touch.pageX, 10) : e.pageX;
7754
- _pos.y = touch ? parseInt(touch.pageX, 10) : e.pageX;
7755
- _pos.start = true;
7756
- this.__setPress(e);
7757
- root.addEventListener(this.events.end, this.onTouchEnd);
7758
- root.addEventListener(this.events.cancel, this.onTouchCancel);
7759
- root.addEventListener(this.events.move, this.onTouchMove);
7760
- this.trigger(EVENTS.TOUCH_START, e);
7761
- }
7762
- }, {
7763
- key: "onTouchCancel",
7764
- value: function onTouchCancel(e) {
7765
- this.onTouchEnd(e);
7766
- }
7767
- }, {
7768
- key: "onTouchEnd",
7769
- value: function onTouchEnd(e) {
7770
- var _pos = this._pos, root = this.root;
7771
- this.__clearPress();
7772
- root.removeEventListener(this.events.cancel, this.onTouchCancel);
7773
- root.removeEventListener(this.events.end, this.onTouchEnd);
7774
- root.removeEventListener(this.events.move, this.onTouchMove);
7775
- e.moving = _pos.moving;
7776
- e.press = _pos.press;
7777
- _pos.press && this.trigger(EVENTS.PRESS_END, e);
7778
- this.trigger(EVENTS.TOUCH_END, e);
7779
- !_pos.press && !_pos.moving && this.__setDb(e);
7780
- _pos.press = false;
7781
- _pos.start = false;
7782
- _pos.moving = false;
7783
- }
7784
- }, {
7785
- key: "onTouchMove",
7786
- value: function onTouchMove(e) {
7787
- var _pos = this._pos, config = this.config;
7788
- var touch = getTouch(e.touches);
7789
- var x = touch ? parseInt(touch.pageX, 10) : e.pageX;
7790
- var y = touch ? parseInt(touch.pageY, 10) : e.pageX;
7791
- var diffx = x - _pos.x;
7792
- var diffy = y - _pos.y;
7793
- if (Math.abs(diffy) < config.miniStep && Math.abs(diffx) < config.miniStep) {
7794
- return;
7795
- }
7796
- this.__clearPress();
7797
- _pos.press && this.trigger(EVENTS.PRESS_END, e);
7798
- _pos.press = false;
7799
- _pos.moving = true;
7800
- this.trigger(EVENTS.TOUCH_MOVE, e);
7801
- }
7802
7953
  }, {
7803
7954
  key: "destroy",
7804
7955
  value: function destroy() {
@@ -7808,8 +7959,8 @@ var __publicField = (obj, key, value) => {
7808
7959
  touchmove: "onTouchMove",
7809
7960
  touchstart: "onTouchStart"
7810
7961
  };
7811
- Object.keys(map).map(function(key) {
7812
- _this4.root.removeEventListener("touchend", _this4[map[key]]);
7962
+ Object.keys(map).forEach(function(key) {
7963
+ _this4.root.removeEventListener(key, _this4[map[key]]);
7813
7964
  });
7814
7965
  }
7815
7966
  }]);
@@ -8460,38 +8611,61 @@ var __publicField = (obj, key, value) => {
8460
8611
  }
8461
8612
  _this = _super.call.apply(_super, [this].concat(args));
8462
8613
  _defineProperty(_assertThisInitialized(_this), "onBodyKeyDown", function(event) {
8463
- var e = event || window.event;
8464
- if (!_this.player || !_this.player.isUserActive && !_this.config.isIgnoreUserActive) {
8614
+ if (!_this.player) {
8465
8615
  return;
8466
8616
  }
8467
- if (_this.config.disable || _this.config.disableBodyTrigger || !_this.checkIsVisible() || e.metaKey || e.altKey || e.ctrlKey) {
8617
+ var e = event || window.event;
8618
+ var keyCode = e.keyCode;
8619
+ var _assertThisInitialize = _assertThisInitialized(_this), _keyState = _assertThisInitialize._keyState, player = _assertThisInitialize.player;
8620
+ var _this$config = _this.config, disable = _this$config.disable, disableBodyTrigger = _this$config.disableBodyTrigger, isIgnoreUserActive = _this$config.isIgnoreUserActive;
8621
+ if (disable || disableBodyTrigger || !player.isUserActive && !isIgnoreUserActive || isDisableTag(e.target) || !_this.checkIsVisible() || e.metaKey || e.altKey || e.ctrlKey) {
8622
+ _keyState.isBodyKeyDown = false;
8468
8623
  return;
8469
8624
  }
8470
- var keyCode = e.keyCode;
8471
- if ((e.target === document.body || _this.config.isGlobalTrigger && !isDisableTag(e.target)) && _this.checkCode(keyCode, true)) {
8472
- preventDefault(e);
8473
- _this.handleKeyCode(keyCode, event);
8474
- return false;
8625
+ if (!event.repeat && !_keyState.isKeyDown) {
8626
+ if ((e.target === document.body || _this.config.isGlobalTrigger && !isDisableTag(e.target)) && _this.checkCode(keyCode, true)) {
8627
+ _keyState.isBodyKeyDown = true;
8628
+ }
8629
+ document.addEventListener("keyup", _this.onBodyKeyUp);
8475
8630
  }
8476
- return false;
8631
+ _keyState.isBodyKeyDown && _this.handleKeyDown(e);
8477
8632
  });
8478
- _defineProperty(_assertThisInitialized(_this), "onKeydown", function(event) {
8479
- var e = event || window.event;
8480
- if (_this.config.disable || _this.config.disableRootTrigger || e.metaKey || e.altKey || e.ctrlKey) {
8633
+ _defineProperty(_assertThisInitialized(_this), "onBodyKeyUp", function(event) {
8634
+ if (!_this.player) {
8481
8635
  return;
8482
8636
  }
8483
- if (!_this.player.isUserActive && !_this.config.isIgnoreUserActive) {
8637
+ document.removeEventListener("keyup", _this.onBodyKeyUp);
8638
+ _this.handleKeyUp(event);
8639
+ });
8640
+ _defineProperty(_assertThisInitialized(_this), "onKeydown", function(event) {
8641
+ if (!_this.player) {
8484
8642
  return;
8485
8643
  }
8486
- if (!_this.player.isUserActive && !_this.config.isIgnoreUserActive) {
8644
+ var e = event || window.event;
8645
+ var _assertThisInitialize2 = _assertThisInitialized(_this), _keyState = _assertThisInitialize2._keyState;
8646
+ if (!e.repeat) {
8647
+ if (_this.config.disable || _this.config.disableRootTrigger || e.metaKey || e.altKey || e.ctrlKey) {
8648
+ return;
8649
+ }
8650
+ if (!_this.player.isUserActive && !_this.config.isIgnoreUserActive) {
8651
+ return;
8652
+ }
8653
+ if (e && (e.keyCode === 37 || _this.checkCode(e.keyCode)) && (e.target === _this.player.root || e.target === _this.player.video || e.target === _this.player.controls.el)) {
8654
+ _keyState.isKeyDown = true;
8655
+ }
8656
+ _this.player.root.addEventListener("keyup", _this.onKeyup);
8657
+ }
8658
+ if (!_keyState.isKeyDown) {
8487
8659
  return;
8488
8660
  }
8489
- if (e && (e.keyCode === 37 || _this.checkCode(e.keyCode)) && (e.target === _this.player.root || e.target === _this.player.video || e.target === _this.player.controls.el)) {
8490
- preventDefault(e);
8491
- } else {
8492
- return true;
8661
+ _this.handleKeyDown(e);
8662
+ });
8663
+ _defineProperty(_assertThisInitialized(_this), "onKeyup", function(event) {
8664
+ if (!_this.player) {
8665
+ return;
8493
8666
  }
8494
- _this.handleKeyCode(e.keyCode, event);
8667
+ _this.player.root.removeEventListener("keyup", _this.onKeyup);
8668
+ _this.handleKeyUp(event);
8495
8669
  });
8496
8670
  return _this;
8497
8671
  }
@@ -8505,7 +8679,7 @@ var __publicField = (obj, key, value) => {
8505
8679
  if (!_this2.keyCodeMap[key]) {
8506
8680
  _this2.keyCodeMap[key] = extendkeyCodeMap[key];
8507
8681
  } else {
8508
- ["keyCode", "action", "disable", "isBodyTarget"].map(function(key1) {
8682
+ ["keyCode", "action", "disable", "pressAction", "disablePress", "isBodyTarget"].map(function(key1) {
8509
8683
  extendkeyCodeMap[key][key1] && (_this2.keyCodeMap[key][key1] = extendkeyCodeMap[key][key1]);
8510
8684
  });
8511
8685
  }
@@ -8525,37 +8699,51 @@ var __publicField = (obj, key, value) => {
8525
8699
  keyCode: 32,
8526
8700
  action: "playPause",
8527
8701
  disable: false,
8702
+ disablePress: false,
8528
8703
  noBodyTarget: false
8529
8704
  },
8530
8705
  up: {
8531
8706
  keyCode: 38,
8532
8707
  action: "upVolume",
8533
8708
  disable: false,
8709
+ disablePress: false,
8534
8710
  noBodyTarget: true
8535
8711
  },
8536
8712
  down: {
8537
8713
  keyCode: 40,
8538
8714
  action: "downVolume",
8539
8715
  disable: false,
8716
+ disablePress: false,
8540
8717
  noBodyTarget: true
8541
8718
  },
8542
8719
  left: {
8543
8720
  keyCode: 37,
8544
8721
  action: "seekBack",
8722
+ disablePress: false,
8545
8723
  disable: false
8546
8724
  },
8547
8725
  right: {
8548
8726
  keyCode: 39,
8549
8727
  action: "seek",
8728
+ pressAction: "changePlaybackRate",
8729
+ disablePress: false,
8550
8730
  disable: false
8551
8731
  },
8552
8732
  esc: {
8553
8733
  keyCode: 27,
8554
8734
  action: "exitFullscreen",
8735
+ disablePress: true,
8555
8736
  disable: false
8556
8737
  }
8557
8738
  };
8558
8739
  this.mergekeyCodeMap();
8740
+ this._keyState = {
8741
+ isKeyDown: false,
8742
+ isBodyKeyDown: false,
8743
+ isPress: false,
8744
+ tt: 0,
8745
+ playbackRate: 0
8746
+ };
8559
8747
  this.player.root.addEventListener("keydown", this.onKeydown);
8560
8748
  document.addEventListener("keydown", this.onBodyKeyDown);
8561
8749
  }
@@ -8589,6 +8777,9 @@ var __publicField = (obj, key, value) => {
8589
8777
  key: "downVolume",
8590
8778
  value: function downVolume(event) {
8591
8779
  var player = this.player;
8780
+ if (player.volume <= 0) {
8781
+ return;
8782
+ }
8592
8783
  var val = parseFloat((player.volume - 0.1).toFixed(1));
8593
8784
  var props = {
8594
8785
  volume: {
@@ -8609,6 +8800,9 @@ var __publicField = (obj, key, value) => {
8609
8800
  key: "upVolume",
8610
8801
  value: function upVolume(event) {
8611
8802
  var player = this.player;
8803
+ if (player.volume >= 1) {
8804
+ return;
8805
+ }
8612
8806
  var val = parseFloat((player.volume + 0.1).toFixed(1));
8613
8807
  var props = {
8614
8808
  volume: {
@@ -8628,42 +8822,57 @@ var __publicField = (obj, key, value) => {
8628
8822
  }, {
8629
8823
  key: "seek",
8630
8824
  value: function seek(event) {
8631
- var _this$player = this.player, currentTime = _this$player.currentTime, duration = _this$player.duration;
8632
- var _time = currentTime;
8633
- if (currentTime + this.seekStep <= duration) {
8634
- _time = currentTime + this.seekStep;
8825
+ var _this$player = this.player, currentTime = _this$player.currentTime, offsetCurrentTime = _this$player.offsetCurrentTime, duration = _this$player.duration, offsetDuration = _this$player.offsetDuration, timeSegments = _this$player.timeSegments;
8826
+ var _time = offsetCurrentTime > -1 ? offsetCurrentTime : currentTime;
8827
+ var _duration = offsetDuration || duration;
8828
+ var _step = event.repeat && this.seekStep >= 4 ? parseInt(this.seekStep / 2, 10) : this.seekStep;
8829
+ if (_time + _step <= _duration) {
8830
+ _time = _time + _step;
8635
8831
  } else {
8636
- _time = duration;
8832
+ _time = _duration;
8637
8833
  }
8834
+ var _seekTime = util.getCurrentTimeByOffset(_time, timeSegments);
8638
8835
  var props = {
8639
8836
  currentTime: {
8640
8837
  from: currentTime,
8641
- to: _time
8838
+ to: _seekTime
8642
8839
  }
8643
8840
  };
8644
8841
  this.emitUserAction(event, "seek", {
8645
8842
  props
8646
8843
  });
8647
- this.player.currentTime = _time;
8844
+ this.player.currentTime = _seekTime;
8648
8845
  }
8649
8846
  }, {
8650
8847
  key: "seekBack",
8651
8848
  value: function seekBack(event) {
8652
- var currentTime = this.player.currentTime;
8653
- var _time = 0;
8654
- if (currentTime - this.seekStep >= 0) {
8655
- _time = currentTime - this.seekStep;
8656
- }
8849
+ var _this$player2 = this.player, currentTime = _this$player2.currentTime, offsetCurrentTime = _this$player2.offsetCurrentTime, timeSegments = _this$player2.timeSegments;
8850
+ var _step = event.repeat ? parseInt(this.seekStep / 2, 10) : this.seekStep;
8851
+ var _time = offsetCurrentTime > -1 ? offsetCurrentTime : currentTime;
8852
+ var _seekTime = _time - _step;
8853
+ if (_seekTime < 0) {
8854
+ _seekTime = 0;
8855
+ }
8856
+ _seekTime = util.getCurrentTimeByOffset(_seekTime, timeSegments);
8657
8857
  var props = {
8658
8858
  currentTime: {
8659
8859
  from: currentTime,
8660
- to: _time
8860
+ to: _seekTime
8661
8861
  }
8662
8862
  };
8663
8863
  this.emitUserAction(event, "seek", {
8664
8864
  props
8665
8865
  });
8666
- this.player.currentTime = _time;
8866
+ this.player.currentTime = _seekTime;
8867
+ }
8868
+ }, {
8869
+ key: "changePlaybackRate",
8870
+ value: function changePlaybackRate(event) {
8871
+ var _keyState = this._keyState, config = this.config, player = this.player;
8872
+ if (_keyState.playbackRate === 0) {
8873
+ _keyState.playbackRate = player.playbackRate;
8874
+ player.playbackRate = config.playbackRate;
8875
+ }
8667
8876
  }
8668
8877
  }, {
8669
8878
  key: "playPause",
@@ -8701,32 +8910,66 @@ var __publicField = (obj, key, value) => {
8701
8910
  player.exitCssFullscreen();
8702
8911
  }
8703
8912
  }
8913
+ }, {
8914
+ key: "handleKeyDown",
8915
+ value: function handleKeyDown(e) {
8916
+ var _keyState = this._keyState;
8917
+ if (e.repeat) {
8918
+ _keyState.isPress = true;
8919
+ var _t = Date.now();
8920
+ if (_t - _keyState.tt < 200) {
8921
+ return;
8922
+ }
8923
+ _keyState.tt = _t;
8924
+ }
8925
+ preventDefault(e);
8926
+ this.handleKeyCode(e.keyCode, e, _keyState.isPress);
8927
+ }
8928
+ }, {
8929
+ key: "handleKeyUp",
8930
+ value: function handleKeyUp(e) {
8931
+ var _keyState = this._keyState;
8932
+ if (_keyState.playbackRate > 0) {
8933
+ this.player.playbackRate = _keyState.playbackRate;
8934
+ _keyState.playbackRate = 0;
8935
+ }
8936
+ _keyState.isKeyDown = false;
8937
+ _keyState.isPress = false;
8938
+ _keyState.tt = 0;
8939
+ }
8704
8940
  }, {
8705
8941
  key: "handleKeyCode",
8706
- value: function handleKeyCode(curKeyCode, event) {
8707
- var _this4 = this;
8708
- Object.keys(this.keyCodeMap).map(function(key) {
8709
- var _this4$keyCodeMap$key = _this4.keyCodeMap[key], action = _this4$keyCodeMap$key.action, keyCode = _this4$keyCodeMap$key.keyCode, disable = _this4$keyCodeMap$key.disable;
8710
- if (keyCode === curKeyCode && !disable) {
8711
- if (typeof action === "function") {
8712
- action(event, _this4.player);
8713
- } else if (typeof action === "string") {
8714
- if (typeof _this4[action] === "function") {
8715
- _this4[action](event, _this4.player);
8942
+ value: function handleKeyCode(curKeyCode, event, isPress) {
8943
+ var arr = Object.keys(this.keyCodeMap);
8944
+ for (var i = 0; i < arr.length; i++) {
8945
+ var _this$keyCodeMap$arr$ = this.keyCodeMap[arr[i]], action = _this$keyCodeMap$arr$.action, keyCode = _this$keyCodeMap$arr$.keyCode, disable = _this$keyCodeMap$arr$.disable, pressAction = _this$keyCodeMap$arr$.pressAction, disablePress = _this$keyCodeMap$arr$.disablePress;
8946
+ if (keyCode === curKeyCode) {
8947
+ if (!disable && !(isPress && disablePress)) {
8948
+ var _action = !isPress ? action : pressAction || action;
8949
+ if (typeof _action === "function") {
8950
+ action(event, this.player, isPress);
8951
+ } else if (typeof _action === "string") {
8952
+ if (typeof this[_action] === "function") {
8953
+ this[_action](event, this.player, isPress);
8954
+ }
8716
8955
  }
8956
+ this.emit(SHORTCUT, _objectSpread2({
8957
+ key: arr[i],
8958
+ target: event.target,
8959
+ isPress
8960
+ }, this.keyCodeMap[arr[i]]));
8717
8961
  }
8718
- _this4.emit(SHORTCUT, _objectSpread2({
8719
- key,
8720
- target: event.target
8721
- }, _this4.keyCodeMap[key]));
8962
+ break;
8722
8963
  }
8723
- });
8964
+ }
8724
8965
  }
8725
8966
  }, {
8726
8967
  key: "destroy",
8727
8968
  value: function destroy() {
8728
8969
  this.player.root.removeEventListener("keydown", this.onKeydown);
8729
8970
  document.removeEventListener("keydown", this.onBodyKeyDown);
8971
+ this.player.root.removeEventListener("keyup", this.onKeyup);
8972
+ document.removeEventListener("keyup", this.onBodyKeyUp);
8730
8973
  }
8731
8974
  }, {
8732
8975
  key: "disable",
@@ -8748,12 +8991,13 @@ var __publicField = (obj, key, value) => {
8748
8991
  get: function get() {
8749
8992
  return {
8750
8993
  seekStep: 10,
8751
- checkVisible: true,
8994
+ checkVisible: false,
8752
8995
  disableBodyTrigger: false,
8753
8996
  disableRootTrigger: false,
8754
8997
  isGlobalTrigger: false,
8755
8998
  keyCodeMap: {},
8756
8999
  disable: false,
9000
+ playbackRate: 2,
8757
9001
  isIgnoreUserActive: false
8758
9002
  };
8759
9003
  }
@@ -10046,6 +10290,9 @@ var __publicField = (obj, key, value) => {
10046
10290
  get url() {
10047
10291
  return this._currentUrlRef.url;
10048
10292
  }
10293
+ set url(url) {
10294
+ this._currentUrlRef.url = url;
10295
+ }
10049
10296
  next() {
10050
10297
  const next = this._currentUrlRef.next;
10051
10298
  /* istanbul ignore next -- @preserve */
@@ -10123,7 +10370,6 @@ var __publicField = (obj, key, value) => {
10123
10370
  __publicField(this, "defaultSource");
10124
10371
  __publicField(this, "defaultDefinition");
10125
10372
  __publicField(this, "maxFallbackRound");
10126
- __publicField(this, "_prepareList", []);
10127
10373
  __publicField(this, "_currentDefinition");
10128
10374
  __publicField(this, "_sources");
10129
10375
  __publicField(this, "_fallbackCount", 0);
@@ -10158,6 +10404,11 @@ var __publicField = (obj, key, value) => {
10158
10404
  var _a;
10159
10405
  return (_a = this.definition) == null ? void 0 : _a.url;
10160
10406
  }
10407
+ set url(url) {
10408
+ if (this.definition) {
10409
+ this.definition.url = url;
10410
+ }
10411
+ }
10161
10412
  /**
10162
10413
  * 以给定的参数搜索源和对应清晰度。`source` 和 `definition`
10163
10414
  * 都是可选的,当未指定时,使用当前的 {@link SourceManager.source}
@@ -10227,14 +10478,6 @@ var __publicField = (obj, key, value) => {
10227
10478
  this.resetFallback();
10228
10479
  return this;
10229
10480
  }
10230
- registerPrepare(prepare) {
10231
- this._prepareList.push(prepare);
10232
- }
10233
- async prepare(url) {
10234
- for (const prepare of this._prepareList) {
10235
- await prepare(url);
10236
- }
10237
- }
10238
10481
  resetFallback() {
10239
10482
  this._fallbackCount = 0;
10240
10483
  }
@@ -10676,12 +10919,13 @@ var __publicField = (obj, key, value) => {
10676
10919
  }
10677
10920
  }
10678
10921
  var optionsIcon = "";
10679
- const ListType = {
10680
- Middle: "middle",
10681
- Bottom: "bottom",
10682
- Fullscreen: "fullscreen",
10683
- Inner: "inner"
10684
- };
10922
+ var ListType = /* @__PURE__ */ ((ListType2) => {
10923
+ ListType2["Middle"] = "middle";
10924
+ ListType2["Bottom"] = "bottom";
10925
+ ListType2["Fullscreen"] = "fullscreen";
10926
+ ListType2["Inner"] = "inner";
10927
+ return ListType2;
10928
+ })(ListType || {});
10685
10929
  var RenderType = /* @__PURE__ */ ((RenderType2) => {
10686
10930
  RenderType2["Icon"] = "Icon";
10687
10931
  RenderType2["Text"] = "Text";
@@ -10689,20 +10933,26 @@ var __publicField = (obj, key, value) => {
10689
10933
  })(RenderType || {});
10690
10934
  const isMobile$1 = sniffer.device === "mobile";
10691
10935
  const MOBILE_LIST_TYPES = [
10692
- ListType.Bottom,
10693
- ListType.Fullscreen,
10694
- ListType.Inner
10936
+ "bottom",
10937
+ "fullscreen",
10938
+ "inner"
10939
+ /* Inner */
10940
+ ];
10941
+ const PC_LIST_TYPES = [
10942
+ "middle"
10943
+ /* Middle */
10695
10944
  ];
10696
- const PC_LIST_TYPES = [ListType.Middle];
10697
10945
  const MODAL_TYPES = [
10698
- ListType.Bottom,
10699
- ListType.Inner,
10700
- ListType.Fullscreen
10946
+ "bottom",
10947
+ "inner",
10948
+ "fullscreen"
10949
+ /* Fullscreen */
10701
10950
  ];
10702
10951
  const CUSTOM_TYPES = [
10703
- ListType.Bottom,
10704
- ListType.Inner,
10705
- ListType.Fullscreen
10952
+ "bottom",
10953
+ "inner",
10954
+ "fullscreen"
10955
+ /* Fullscreen */
10706
10956
  ];
10707
10957
  class OptionsIcon extends Plugin {
10708
10958
  constructor(args) {
@@ -10740,7 +10990,7 @@ var __publicField = (obj, key, value) => {
10740
10990
  // 默认手机端在“右上角”,pc端在控制栏右侧
10741
10991
  position: isMobile$1 ? POSITIONS.ROOT_TOP_RIGHT : POSITIONS.CONTROLS_RIGHT,
10742
10992
  // 默认手机端列表展示底部,pc端在控制栏默认
10743
- listType: isMobile$1 ? ListType.Bottom : ListType.Middle,
10993
+ listType: isMobile$1 ? "bottom" : "middle",
10744
10994
  index: 100,
10745
10995
  list: [],
10746
10996
  listStyle: {},
@@ -10922,10 +11172,10 @@ var __publicField = (obj, key, value) => {
10922
11172
  listType = this.player.config.listType;
10923
11173
  }
10924
11174
  if (!isMobile$1 && (!listType || !MOBILE_LIST_TYPES.includes(listType))) {
10925
- listType = ListType.Bottom;
11175
+ listType = "bottom";
10926
11176
  }
10927
11177
  if (!isMobile$1 && (!listType || !PC_LIST_TYPES.includes(listType))) {
10928
- listType = ListType.Middle;
11178
+ listType = "middle";
10929
11179
  }
10930
11180
  return listType;
10931
11181
  }
@@ -11818,9 +12068,7 @@ var __publicField = (obj, key, value) => {
11818
12068
  toastPlugin.remove(this._toastId);
11819
12069
  }
11820
12070
  this._toastId = toastPlugin.toast(
11821
- `${i18nManager.getText("DEFINITION_SWITCHING")} ${(definition.text && this.player.config.i18nManager.normalize(
11822
- definition.text
11823
- )) ?? definition.definition} ...`,
12071
+ `${i18nManager.getText("DEFINITION_SWITCHING")} ${definition.showText ?? definition.definition} ...`,
11824
12072
  {
11825
12073
  duration: 2e3,
11826
12074
  closable: true
@@ -12627,11 +12875,6 @@ var __publicField = (obj, key, value) => {
12627
12875
  }
12628
12876
  }
12629
12877
  var veplayerBase = "";
12630
- var Codec = /* @__PURE__ */ ((Codec2) => {
12631
- Codec2["H265"] = "h265";
12632
- Codec2["H264"] = "h264";
12633
- return Codec2;
12634
- })(Codec || {});
12635
12878
  const { POSITIONS: XGPosition } = Plugin;
12636
12879
  const POSITIONS = {
12637
12880
  ...XGPosition,
@@ -12641,7 +12884,7 @@ var __publicField = (obj, key, value) => {
12641
12884
  id: "veplayer",
12642
12885
  width: "100%",
12643
12886
  height: "100%",
12644
- decodeType: "hardware",
12887
+ decodeType: DecodeType.Hardware,
12645
12888
  fullscreen: {
12646
12889
  useCssFullscreen: false
12647
12890
  }
@@ -12669,6 +12912,9 @@ var __publicField = (obj, key, value) => {
12669
12912
  return xgOptions;
12670
12913
  };
12671
12914
  class VePlayerBase {
12915
+ /**
12916
+ * @hidden
12917
+ */
12672
12918
  constructor(options = {}) {
12673
12919
  __publicField(this, "_player");
12674
12920
  __publicField(this, "_sourceManager");
@@ -12716,85 +12962,172 @@ var __publicField = (obj, key, value) => {
12716
12962
  veplayer: this
12717
12963
  });
12718
12964
  this.emit(Events.PLAYER_CREATE_FINISH, this._player);
12719
- this._sourceManager.registerPrepare((url) => this.prepare(url));
12720
12965
  this._errorCallback = (err) => this._handleFallback(err);
12721
12966
  this._player.on(ERROR, this._errorCallback);
12722
12967
  }
12968
+ /**
12969
+ * @brief 获取视频的就绪状态,其状态枚举值、枚举名称和说明如下:
12970
+ * - `0`:HAVE_NOTHING,没有关于媒体资源的可用信息
12971
+ * - `1`:HAVE_METADATA,已检索到足够多的媒体资源来初始化元数据, 快进/快退不会引发异常
12972
+ * - `2`:HAVE_CURRENT_DATA,当前播放位置的数据可用,但不足以播放下一帧
12973
+ * - `3`:HAVE_FUTURE_DATA,当前播放位置以及未来至少一小段时间的数据是可用的(至少有两帧以上的数据)
12974
+ * - `4`:HAVE_ENOUGH_DATA,有足够的数据可用,并且下载速率足够,媒体可以不间断地播放到最后
12975
+ */
12723
12976
  get readyState() {
12724
12977
  return this._player.readyState;
12725
12978
  }
12979
+ /**
12980
+ * @brief 获取当前已缓冲的时间范围。
12981
+ */
12726
12982
  get buffered() {
12727
12983
  return this._player.buffered;
12728
12984
  }
12985
+ /**
12986
+ * @brief 获取已经播放的音频/视频的时间范围。
12987
+ */
12729
12988
  get played() {
12730
12989
  return this._player.played;
12731
12990
  }
12991
+ /**
12992
+ * @brief 设置/获取视频当前的播放时间, 单位为 s。
12993
+ */
12732
12994
  get cumulateTime() {
12733
12995
  return this._player.cumulateTime;
12734
12996
  }
12997
+ /**
12998
+ * @brief 获取是否处于焦点状态,处于焦点状态会显示控制栏。
12999
+ */
12735
13000
  get isFocused() {
12736
13001
  return this._player.isActive;
12737
13002
  }
13003
+ /**
13004
+ * @brief 获取播放器是否处于全屏状态。
13005
+ */
12738
13006
  get isFullscreen() {
12739
13007
  return this._player.isFullscreen;
12740
13008
  }
13009
+ /**
13010
+ * @brief 获取播放器是否处于网页全屏状态。
13011
+ */
12741
13012
  get isCssFullscreen() {
12742
13013
  return this._player.isCssfullScreen;
12743
13014
  }
13015
+ /**
13016
+ * @brief 获取视频的网络状态,其状态枚举值、枚举名称和说明如下:
13017
+ * - `0`:NETWORK_EMPTY,目前还没有数据,readyState 的值是 HAVE_NOTHING
13018
+ * - `1`:NETWORK_IDLE,HTMLMediaElement 处于活动状态并已选择资源,但未使用网络
13019
+ * - `2`:NETWORK_LOADING,浏览器正在下载 HTMLMediaElement 数据
13020
+ * - `3`:NETWORK_NO_SOURCE,未找到 HTMLMediaElement src。
13021
+ */
12744
13022
  get networkState() {
12745
13023
  return this._player.networkState;
12746
13024
  }
13025
+ /**
13026
+ * @brief 获取当前视频是否处于暂停状态。
13027
+ */
12747
13028
  get paused() {
12748
13029
  return this._player.paused;
12749
13030
  }
13031
+ /**
13032
+ * @brief 获取当前视频是否播放结束。
13033
+ */
12750
13034
  get ended() {
12751
13035
  return this._player.ended;
12752
13036
  }
13037
+ /**
13038
+ * @brief 获取播放器当前所处的状态,其状态枚举值、枚举名称和说明如下:
13039
+ * - `0`:ERROR,播放出现错误
13040
+ * - `1`:INITIAL,初始化
13041
+ * - `2`:READY,配置/事件/插件等均已经初始化/绑定/实例化完成
13042
+ * - `3`:ATTACHING,进入媒体对象挂载阶段
13043
+ * - `4`:ATTACHED,媒体对象已经挂载到了 DOM 中
13044
+ * - `5`:NOTALLOW,播放被阻止
13045
+ * - `6`:RUNNING,已经成功起播进入播放流程
13046
+ * - `7`:ENDED,播放结束
13047
+ * - `8`:DESTROYED,播放器实例处于已被销毁
13048
+ */
12753
13049
  get state() {
12754
13050
  return this._player.state;
12755
13051
  }
13052
+ /**
13053
+ * 获取当前播放视频的拉流地址。
13054
+ */
12756
13055
  get url() {
12757
13056
  return this._player.config.url;
12758
13057
  }
13058
+ /**
13059
+ * @brief 获取当播放视频的线路名称唯一标识(name)。
13060
+ */
12759
13061
  get source() {
12760
13062
  var _a;
12761
13063
  return (_a = this._sourceManager.source) == null ? void 0 : _a.name;
12762
13064
  }
13065
+ /**
13066
+ * @brief 获取当前播放视频的清晰度唯一标识(definition)。
13067
+ */
12763
13068
  get definition() {
12764
13069
  var _a;
12765
13070
  return (_a = this._sourceManager.definition) == null ? void 0 : _a.definition;
12766
13071
  }
13072
+ /**
13073
+ * @brief 获取和设置播放器的跨域配置信息,更多信息参考 [crossorigin](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/crossorigin) 属性介绍。
13074
+ */
12767
13075
  get crossOrigin() {
12768
13076
  return this._player.crossOrigin;
12769
13077
  }
13078
+ /**
13079
+ * @brief 获取和设置播放器的跨域配置信息,更多信息参考 [crossorigin](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/crossorigin) 属性介绍。
13080
+ */
12770
13081
  set crossOrigin(crossOrigin) {
12771
13082
  this._player.crossOrigin = crossOrigin;
12772
13083
  }
13084
+ /**
13085
+ * @brief 获取和设置视频的音量,取值范围为 [0,1]。
13086
+ */
12773
13087
  // eslint-disable-next-line @typescript-eslint/member-ordering
12774
13088
  get volume() {
12775
13089
  return this._player.volume;
12776
13090
  }
13091
+ /**
13092
+ * @brief 获取和设置视频的音量,取值范围为 [0,1]。
13093
+ */
12777
13094
  set volume(volume) {
12778
13095
  this._player.volume = volume;
12779
13096
  }
13097
+ /**
13098
+ * @brief 获取和设置视频静音状态。
13099
+ * - `true`:静音
13100
+ * - `false`:非静音
13101
+ */
12780
13102
  // eslint-disable-next-line @typescript-eslint/member-ordering
12781
13103
  get muted() {
12782
13104
  return this._player.muted;
12783
13105
  }
13106
+ /**
13107
+ * @brief 获取和设置视频静音状态。
13108
+ * - `true`:静音
13109
+ * - `false`:非静音
13110
+ */
12784
13111
  set muted(isMuted) {
12785
13112
  this._player.muted = isMuted;
12786
13113
  }
13114
+ /**
13115
+ * @brief 获取和设置当前语言。
13116
+ */
12787
13117
  // eslint-disable-next-line @typescript-eslint/member-ordering
12788
13118
  get lang() {
12789
13119
  return this._i18nManager.getLang();
12790
13120
  }
13121
+ /**
13122
+ * @brief 获取和设置当前语言。
13123
+ */
12791
13124
  set lang(lang) {
12792
13125
  var _a, _b;
12793
13126
  if (this._player.lang === lang) {
12794
13127
  return;
12795
13128
  }
12796
13129
  if (!VeI18n.isLangValid(lang)) {
12797
- const langKeys = VeI18n.langKeys().join(",");
13130
+ const langKeys = VeI18n.langKeys.join(",");
12798
13131
  const message = {
12799
13132
  en: `Sorry, we couldn't set the language to ${lang} because it's not currently supported. The list of supported languages includes ${langKeys}.`,
12800
13133
  "zh-cn": `不支持当前设置的语言${lang}, 支持的语言有${langKeys}, 请重新设置`
@@ -12809,8 +13142,11 @@ var __publicField = (obj, key, value) => {
12809
13142
  get _src() {
12810
13143
  return this._player.currentSrc;
12811
13144
  }
13145
+ /**
13146
+ * @hidden
13147
+ */
12812
13148
  static async create(options = {}, Constructor) {
12813
- var _a;
13149
+ var _a, _b, _c;
12814
13150
  const sourceManager = new SourceManager({
12815
13151
  sources: Source.normalize({
12816
13152
  url: options.url,
@@ -12822,18 +13158,28 @@ var __publicField = (obj, key, value) => {
12822
13158
  defaultDefinition: options.defaultDefinition,
12823
13159
  maxFallbackRound: options.maxFallbackRound
12824
13160
  });
13161
+ const prepareResult = await ((_a = options == null ? void 0 : options.preparePlugins) == null ? void 0 : _a.call(
13162
+ options,
13163
+ sourceManager.url ?? ""
13164
+ ));
13165
+ if ((_b = prepareResult == null ? void 0 : prepareResult.options) == null ? void 0 : _b.url) {
13166
+ sourceManager.url = (_c = prepareResult == null ? void 0 : prepareResult.options) == null ? void 0 : _c.url;
13167
+ }
12825
13168
  options.url = sourceManager.url;
12826
- const prepareResult = await ((_a = options == null ? void 0 : options.preparePlugins) == null ? void 0 : _a.call(options, options.url ?? ""));
12827
13169
  return new (Constructor ?? VePlayerBase)({
12828
13170
  ...options,
12829
13171
  prepareResult,
12830
13172
  sourceManager
12831
13173
  });
12832
13174
  }
13175
+ /**
13176
+ * @brief 调用此方法切换拉流地址、线路、清晰度。
13177
+ * @param target 目标地址,可以是播放地址,也可以是线路和清晰度
13178
+ * @param options 更多配置信息
13179
+ */
12833
13180
  async switch(target, options) {
12834
13181
  var _a, _b;
12835
13182
  if (typeof target === "string" && this._sourceManager.sources.length === 1 && ((_b = (_a = this._sourceManager.sources) == null ? void 0 : _a[0].definitions) == null ? void 0 : _b.length) === 1) {
12836
- this._sourceManager.updateSources(target);
12837
13183
  await this._switchUrl(target);
12838
13184
  return this._sourceManager.definition;
12839
13185
  }
@@ -12846,12 +13192,22 @@ var __publicField = (obj, key, value) => {
12846
13192
  await this._switch(targetDefinition);
12847
13193
  return targetDefinition;
12848
13194
  }
13195
+ /**
13196
+ * @brief 调用此方法更新拉流地址列表。
13197
+ * @param playlist 要更新的播放列表。
13198
+ * @param target 更新后默认播放的资源。
13199
+ */
12849
13200
  updatePlaylist(playlist, target) {
12850
13201
  const sourceManager = this._sourceManager.updateSources(playlist, target);
12851
13202
  return this._switch(sourceManager.definition);
12852
13203
  }
12853
13204
  // TODO: 等西瓜播放器完善错误码后增加函数重载以提供更好的类型
12854
- once(event, callback, ...args) {
13205
+ /**
13206
+ * @brief 调用此方法监听指定事件,事件处理函数只执行一次。
13207
+ * @param event 表示事件的名称。
13208
+ * @param callback 表示事件的名称。
13209
+ */
13210
+ once(event, callback) {
12855
13211
  var _a;
12856
13212
  const { xgCallback, xgEventName } = this._transformEvent(event, callback);
12857
13213
  if (xgCallback) {
@@ -12859,27 +13215,45 @@ var __publicField = (obj, key, value) => {
12859
13215
  this._events[event] = /* @__PURE__ */ new Map();
12860
13216
  }
12861
13217
  this._events[event].set(callback, xgCallback);
12862
- this._player.once(xgEventName, xgCallback, ...args);
13218
+ this._player.once(xgEventName, xgCallback);
12863
13219
  }
12864
13220
  }
12865
- off(event, callback, ...args) {
13221
+ /**
13222
+ * @brief 调用此方法解绑或移除指定事件的事件监听。
13223
+ * @param event 表示事件的名称。
13224
+ * @param callback 表示事件的名称。
13225
+ */
13226
+ off(event, callback) {
12866
13227
  var _a;
12867
13228
  const xgCallback = (_a = this._events[event]) == null ? void 0 : _a.get(callback);
12868
13229
  const { xgEventName } = this._transformEvent(event);
12869
13230
  if (xgCallback) {
12870
- this._player.off(xgEventName, xgCallback, ...args);
13231
+ this._player.off(xgEventName, xgCallback);
12871
13232
  this._events[event].delete(callback);
12872
13233
  }
12873
13234
  }
12874
- emit(event, data, ...args) {
13235
+ /**
13236
+ * @brief 调用此方法触发指定事件。
13237
+ * @param event 表示事件的名称。
13238
+ * @param data 事件信息。
13239
+ */
13240
+ emit(event, data) {
12875
13241
  const { xgEventName } = this._transformEvent(event);
12876
- this._player.emit(xgEventName, data, ...args);
13242
+ this._player.emit(xgEventName, data);
12877
13243
  }
13244
+ /**
13245
+ * @brief 调用此方法解绑或移除指定事件的所有事件监听。
13246
+ */
12878
13247
  offAll() {
12879
13248
  this._events = {};
12880
13249
  this._player.offAll();
12881
13250
  }
12882
- on(event, callback, ...args) {
13251
+ /**
13252
+ * @brief 调用此方法监听指定事件。
13253
+ * @param event 事件。
13254
+ * @param callback 事件回调。
13255
+ */
13256
+ on(event, callback) {
12883
13257
  var _a;
12884
13258
  const { xgCallback, xgEventName } = this._transformEvent(event, callback);
12885
13259
  if (xgCallback) {
@@ -12887,56 +13261,105 @@ var __publicField = (obj, key, value) => {
12887
13261
  this._events[event] = /* @__PURE__ */ new Map();
12888
13262
  }
12889
13263
  this._events[event].set(callback, xgCallback);
12890
- this._player.on(xgEventName, xgCallback, ...args);
13264
+ this._player.on(xgEventName, xgCallback);
12891
13265
  }
12892
13266
  }
13267
+ /**
13268
+ * @brief 调用此方法开始播放 。
13269
+ */
12893
13270
  play() {
12894
13271
  /* istanbul ignore next -- @preserve */
12895
13272
  return this._player.play();
12896
13273
  }
13274
+ /**
13275
+ * @brief 调用此方法暂停播放。
13276
+ */
12897
13277
  pause() {
12898
13278
  /* istanbul ignore next -- @preserve */
12899
13279
  return this._player.pause();
12900
13280
  }
13281
+ /**
13282
+ * @brief 调用此方法打开画中画。
13283
+ */
12901
13284
  requestPIP() {
12902
13285
  var _a;
12903
13286
  /* istanbul ignore next -- @preserve */
12904
13287
  (_a = this._player.plugins.pip) == null ? void 0 : _a.requestPIP();
12905
13288
  }
13289
+ /**
13290
+ * @brief 调用此方法关闭画中画。
13291
+ */
12906
13292
  exitPIP() {
12907
13293
  var _a;
12908
13294
  /* istanbul ignore next -- @preserve */
12909
13295
  (_a = this._player.plugins.pip) == null ? void 0 : _a.exitPIP();
12910
13296
  }
13297
+ /**
13298
+ * @brief 调用此方法重新拉流。
13299
+ */
12911
13300
  retry() {
12912
- this._player.emit(Events.RETRY);
12913
13301
  return this._player.retry();
12914
13302
  }
13303
+ /**
13304
+ * @brief 播放器获取焦点,调用该方法 `veplayer.isFocused` 将会变为 `true`,并触发 `PLAYER_FOCUS` 事件。
13305
+ * @param data 播放器获取焦点配置信息。
13306
+ */
12915
13307
  focus(data) {
12916
13308
  return this._player.focus(data);
12917
13309
  }
13310
+ /**
13311
+ * @brief 播放器失去焦点,调用该方法 `veplayer.isFocused` 将会变为 `false`,并触发 `PLAYER_BLUR` 事件。
13312
+ * @param data 播放器失去焦点配置信息。
13313
+ */
12918
13314
  blur(data) {
12919
13315
  return this._player.blur(data);
12920
13316
  }
12921
- getFullscreen(el) {
13317
+ /**
13318
+ * @brief 调用此方法进入系统全屏状态。如果该方法调用的时候处于网页全屏状态会自动退出网页全屏,下发事件 `Events.FULLSCREEN_CHANGE`。
13319
+ * @param el 全屏作用的 DOM 节点。
13320
+ */
13321
+ requestFullscreen(el) {
12922
13322
  return this._player.getFullscreen(el);
12923
13323
  }
13324
+ /**
13325
+ * @brief 调用此方法退出系统全屏状态,调用该方法 `veplayer.isFullscreen` 将会变为 `false`,并触发 `Events.FULLSCREEN_CHANGE` 事件。
13326
+ * @param el 全屏作用的 DOM 节点。
13327
+ */
12924
13328
  exitFullscreen(el) {
12925
13329
  return this._player.exitFullscreen(el);
12926
13330
  }
12927
- getCssFullscreen(el) {
13331
+ /**
13332
+ * @brief 调用此方法进入网页样式全屏状态,播放器进入网页全屏,利用 CSS 模拟实现全屏效果。如果该接口调用的时候处于全屏状态,会自动退出全屏,下发事件 `Events.CSS_FULLSCREEN_CHANGE`。
13333
+ * @param el 全屏作用的 DOM 节点。
13334
+ */
13335
+ requestCssFullscreen(el) {
12928
13336
  return this._player.getCssFullscreen(el);
12929
13337
  }
13338
+ /**
13339
+ * @brief 调用此方法退出网页样式全屏状态。 调用该方法 `veplayer.isFullscreen` 将会变为 `false`,并触发 `Events.CSS_FULLSCREEN_CHANGE` 事件。
13340
+ */
12930
13341
  exitCssFullscreen() {
12931
13342
  return this._player.exitCssFullscreen();
12932
13343
  }
13344
+ /**
13345
+ * @brief 调用此方法在当前播放器上注册指定插件。
13346
+ * @param plugin 插件构造函数。
13347
+ * @param config 插件的配置列表。
13348
+ */
12933
13349
  registerPlugin(plugin, config) {
12934
13350
  return this._player.registerPlugin(plugin, config);
12935
13351
  }
12936
- unRegisterPlugin(plugin, removedFromConfig) {
12937
- return this._player.unRegisterPlugin(plugin, removedFromConfig);
13352
+ /**
13353
+ * @brief 调用此方法在当前播放器上销毁/注销指定插件。
13354
+ * @param plugin 插件实例或者插件名称。
13355
+ */
13356
+ unRegisterPlugin(plugin) {
13357
+ return this._player.unRegisterPlugin(plugin);
12938
13358
  }
12939
- // 显示插件
13359
+ /**
13360
+ * @brief 调用此接口显示指定插件图标。
13361
+ * @param pluginNames 插件名称
13362
+ */
12940
13363
  showIcon(pluginNames) {
12941
13364
  const morePlugin = this._player.getPlugin("more");
12942
13365
  pluginNames.forEach((pluginName) => {
@@ -12950,7 +13373,10 @@ var __publicField = (obj, key, value) => {
12950
13373
  }
12951
13374
  });
12952
13375
  }
12953
- // 隐藏插件显示
13376
+ /**
13377
+ * @brief 调用此接口隐藏指定插件图标。
13378
+ * @param pluginNames 插件名称
13379
+ */
12954
13380
  hideIcon(pluginNames) {
12955
13381
  const morePlugin = this._player.getPlugin("more");
12956
13382
  pluginNames.forEach((pluginName) => {
@@ -12964,10 +13390,16 @@ var __publicField = (obj, key, value) => {
12964
13390
  }
12965
13391
  });
12966
13392
  }
13393
+ /**
13394
+ * @brief 调用此方法销毁播放器实例。
13395
+ */
12967
13396
  destroy() {
12968
13397
  this._player.off(ERROR, this._errorCallback);
12969
13398
  this._player.destroy();
12970
13399
  }
13400
+ /**
13401
+ * @hidden
13402
+ */
12971
13403
  async prepare(url) {
12972
13404
  var _a, _b;
12973
13405
  const result = await ((_a = this._preparePlugins) == null ? void 0 : _a.call(this, url));
@@ -12983,9 +13415,12 @@ var __publicField = (obj, key, value) => {
12983
13415
  if (result == null ? void 0 : result.options) {
12984
13416
  this._player.setConfig(result.options);
12985
13417
  }
12986
- return addedPlugins.map((plugin) => {
12987
- return this._player.registerPlugin(plugin);
12988
- });
13418
+ return {
13419
+ plugins: addedPlugins.map((plugin) => {
13420
+ return this._player.registerPlugin(plugin);
13421
+ }),
13422
+ options: result == null ? void 0 : result.options
13423
+ };
12989
13424
  }
12990
13425
  async _handleFallback(err) {
12991
13426
  this._player.addClass(STATE_CLASS.ENTER);
@@ -13020,7 +13455,10 @@ var __publicField = (obj, key, value) => {
13020
13455
  async _switch(targetDefinition) {
13021
13456
  var _a, _b, _c, _d, _e, _f;
13022
13457
  const preDefinition = clonedeep(this._sourceManager.definition);
13023
- const newPlugins = await this.prepare(targetDefinition.url);
13458
+ const { plugins: newPlugins, options } = await this.prepare(targetDefinition.url) || {};
13459
+ if (options == null ? void 0 : options.url) {
13460
+ targetDefinition.url = options == null ? void 0 : options.url;
13461
+ }
13024
13462
  this._sourceManager.switch(targetDefinition);
13025
13463
  (_b = (_a = this._player) == null ? void 0 : _a.plugins) == null ? void 0 : _b.sources.renderItemList();
13026
13464
  (_d = (_c = this._player) == null ? void 0 : _c.plugins) == null ? void 0 : _d.definition.renderItemList();
@@ -13036,11 +13474,13 @@ var __publicField = (obj, key, value) => {
13036
13474
  }
13037
13475
  }
13038
13476
  async _switchUrl(url) {
13039
- const newPlugins = await this.prepare(url);
13477
+ const { plugins: newPlugins, options } = await this.prepare(url) || {};
13478
+ const newUrl = (options == null ? void 0 : options.url) ?? url;
13479
+ this._sourceManager.updateSources(newUrl);
13040
13480
  if (newPlugins == null ? void 0 : newPlugins.length) {
13041
- this._callBeforePlayerInitForUrl(newPlugins, url);
13481
+ this._callBeforePlayerInitForUrl(newPlugins, newUrl);
13042
13482
  } else {
13043
- const res = this._player.switchURL(url, false);
13483
+ const res = this._player.switchURL(newUrl, false);
13044
13484
  const curTime = this._player.currentTime;
13045
13485
  if (res && res.then) {
13046
13486
  return res;