ckplayer-plus 1.0.3 → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -207,7 +207,7 @@ var require_ckplayer = __commonJS({
207
207
  cdnFallback: true
208
208
  // getPath 失败时是否回退到 jsDelivr(内网可设 false,并配置 pluginPath)
209
209
  };
210
- var ckplayerPlusDefaultCdn = "https://cdn.jsdelivr.net/npm/ckplayer-plus@1.0.3/dist/";
210
+ var ckplayerPlusDefaultCdn = "https://cdn.jsdelivr.net/npm/ckplayer-plus@1.0.6/dist/";
211
211
  function ckplayerEmbed(videoObj) {
212
212
  var rightMenu = [
213
213
  {
@@ -232,6 +232,11 @@ var require_ckplayer = __commonJS({
232
232
  var paused = true;
233
233
  var loadTime = 0;
234
234
  var seekTime = 0;
235
+ var seekRetryTimer = null;
236
+ var seekRetryCount = 0;
237
+ var seekApplyLock = false;
238
+ var decodeRecoverCount = 0;
239
+ var hlsStartPositionUsed = false;
235
240
  var oldTime = 0, playTime = 0, firstSeekTime = -1, maxSeeTime = 0;
236
241
  var isChangeDef = true;
237
242
  var playType = "";
@@ -370,26 +375,34 @@ var require_ckplayer = __commonJS({
370
375
  } else {
371
376
  return embed(obj2);
372
377
  }
378
+ }, isUnreliablePluginBase = function(base2) {
379
+ if (!base2 || valType(base2) != "string") {
380
+ return true;
381
+ }
382
+ return /\/(?:assets|\.vite\/deps|_next\/static|chunks?)\/?$/i.test(base2);
373
383
  }, resolveAssetPath = function(folder, file) {
374
- var base = "";
384
+ var base2 = "";
375
385
  if (vars && vars["pluginPath"]) {
376
- base = vars["pluginPath"];
386
+ base2 = vars["pluginPath"];
377
387
  } else if (typeof window !== "undefined" && window.ckplayerBasePath) {
378
- base = window.ckplayerBasePath;
388
+ base2 = window.ckplayerBasePath;
389
+ }
390
+ if (base2 && isUnreliablePluginBase(base2)) {
391
+ base2 = "";
379
392
  }
380
- if (base) {
381
- if (base.slice(-1) !== "/") {
382
- base += "/";
393
+ if (base2) {
394
+ if (base2.slice(-1) !== "/") {
395
+ base2 += "/";
383
396
  }
384
- return base + folder + "/" + file;
397
+ return base2 + folder + "/" + file;
385
398
  }
386
399
  var fromScript = getPath(folder) + file;
387
- if (fromScript && fromScript.indexOf(folder + "/") > -1 && fromScript.indexOf("undefined") === -1) {
400
+ if (fromScript && fromScript.indexOf(folder + "/") > -1 && fromScript.indexOf("undefined") === -1 && !isUnreliablePluginBase(getPath())) {
388
401
  return fromScript;
389
402
  }
390
403
  var allowCdn = !vars || vars["cdnFallback"] !== false;
391
404
  var cdn = typeof window !== "undefined" && window.ckplayerPlusCdn ? window.ckplayerPlusCdn : ckplayerPlusDefaultCdn;
392
- if (!allowCdn || !cdn || cdn.indexOf("1.0.3") > -1) {
405
+ if (!allowCdn || !cdn || cdn.indexOf("1.0.6") > -1) {
393
406
  return folder + "/" + file;
394
407
  }
395
408
  if (cdn.slice(-1) !== "/") {
@@ -703,11 +716,24 @@ var require_ckplayer = __commonJS({
703
716
  }, hlsPlayer = function(url) {
704
717
  var startHls = function() {
705
718
  if (typeof Hls !== "undefined" && !isUndefined(Hls) && Hls.isSupported()) {
706
- hls = new Hls();
719
+ var hlsConf = {};
720
+ if (seekTime && seekTime > 0 && (isUndefined(vars["live"]) || !vars["live"])) {
721
+ hlsConf.startPosition = seekTime;
722
+ maxSeeTime = Math.max(maxSeeTime, seekTime);
723
+ if (firstSeekTime < 0) {
724
+ firstSeekTime = seekTime;
725
+ }
726
+ seekTime = 0;
727
+ hlsStartPositionUsed = true;
728
+ clearSeekRetry();
729
+ }
730
+ hls = new Hls(hlsConf);
707
731
  hls.loadSource(url);
708
732
  hls.attachMedia(video);
709
733
  hls.on(Hls.Events.MANIFEST_PARSED, function() {
710
- applyPendingSeek();
734
+ if (!hlsStartPositionUsed) {
735
+ applyPendingSeek();
736
+ }
711
737
  });
712
738
  hls.on(Hls.Events.ERROR, function(event2, data) {
713
739
  var code = 9;
@@ -725,6 +751,13 @@ var require_ckplayer = __commonJS({
725
751
  }
726
752
  }
727
753
  }
754
+ if (fatal && data.type === Hls.ErrorTypes.MEDIA_ERROR && hls && typeof hls.recoverMediaError === "function") {
755
+ try {
756
+ hls.recoverMediaError();
757
+ fatal = false;
758
+ } catch (errRecover) {
759
+ }
760
+ }
728
761
  CT.error = { code, message: message2 };
729
762
  eventTarget("error", CT.error);
730
763
  if (fatal) {
@@ -1406,8 +1439,28 @@ var require_ckplayer = __commonJS({
1406
1439
  checkTrack();
1407
1440
  }
1408
1441
  }
1409
- }, applyPendingSeek = function() {
1410
- if (!seekTime || !video) {
1442
+ }, timeInBuffered = function(t) {
1443
+ if (!video || isUndefined(video.buffered)) {
1444
+ return false;
1445
+ }
1446
+ try {
1447
+ var buf = video.buffered;
1448
+ for (var i2 = 0; i2 < buf.length; i2++) {
1449
+ if (t >= buf.start(i2) - 0.35 && t <= buf.end(i2) + 0.15) {
1450
+ return true;
1451
+ }
1452
+ }
1453
+ } catch (event2) {
1454
+ }
1455
+ return false;
1456
+ }, clearSeekRetry = function() {
1457
+ if (seekRetryTimer) {
1458
+ clearTimeout(seekRetryTimer);
1459
+ seekRetryTimer = null;
1460
+ }
1461
+ seekRetryCount = 0;
1462
+ }, applyPendingSeek = function(force) {
1463
+ if (!seekTime || !video || seekApplyLock) {
1411
1464
  return;
1412
1465
  }
1413
1466
  if (!isUndefined(vars["live"]) && (valType(vars["live"]) == "boolean" && vars["live"] || valType(vars["live"]) == "number")) {
@@ -1418,18 +1471,92 @@ var require_ckplayer = __commonJS({
1418
1471
  if (dur && isFinite(dur) && dur > 0 && t >= dur) {
1419
1472
  t = Math.max(0, dur - 0.3);
1420
1473
  }
1474
+ if (t <= 0) {
1475
+ seekTime = 0;
1476
+ clearSeekRetry();
1477
+ return;
1478
+ }
1479
+ var readyEnough = !isUndefined(video.readyState) && video.readyState >= 2;
1480
+ var bufferedOk = timeInBuffered(t);
1481
+ if (!force && !bufferedOk && (!readyEnough || video.readyState < 3)) {
1482
+ seekRetryCount++;
1483
+ if (seekRetryCount <= 50) {
1484
+ try {
1485
+ if (hls && typeof hls.startLoad === "function") {
1486
+ hls.startLoad(t);
1487
+ }
1488
+ } catch (event2) {
1489
+ }
1490
+ if (seekRetryTimer) {
1491
+ clearTimeout(seekRetryTimer);
1492
+ }
1493
+ seekRetryTimer = setTimeout(function() {
1494
+ applyPendingSeek(false);
1495
+ }, 200);
1496
+ return;
1497
+ }
1498
+ }
1499
+ clearSeekRetry();
1421
1500
  if (t > 0) {
1422
1501
  maxSeeTime = Math.max(maxSeeTime, t);
1423
1502
  if (firstSeekTime < 0) {
1424
1503
  firstSeekTime = t;
1425
1504
  }
1426
1505
  }
1506
+ seekApplyLock = true;
1427
1507
  seekTime = 0;
1428
1508
  try {
1429
1509
  video.currentTime = t;
1430
1510
  } catch (event2) {
1431
1511
  seekTime = t;
1512
+ seekApplyLock = false;
1513
+ }
1514
+ setTimeout(function() {
1515
+ seekApplyLock = false;
1516
+ }, 800);
1517
+ }, recoverDecodeError = function() {
1518
+ if (decodeRecoverCount >= 2) {
1519
+ return false;
1520
+ }
1521
+ decodeRecoverCount++;
1522
+ var resumeAt = playTime > 0 ? playTime : vars["seek"] ? parseFloat(vars["seek"]) : 0;
1523
+ if (isNaN(resumeAt) || resumeAt < 0) {
1524
+ resumeAt = 0;
1432
1525
  }
1526
+ try {
1527
+ if (hls && typeof hls.recoverMediaError === "function") {
1528
+ hls.recoverMediaError();
1529
+ if (resumeAt > 0) {
1530
+ seekTime = resumeAt;
1531
+ seekApplyLock = false;
1532
+ setTimeout(function() {
1533
+ applyPendingSeek(true);
1534
+ }, 300);
1535
+ }
1536
+ return true;
1537
+ }
1538
+ } catch (event2) {
1539
+ }
1540
+ try {
1541
+ var soft = Math.max(0, resumeAt - 1.5);
1542
+ seekTime = resumeAt;
1543
+ seekApplyLock = false;
1544
+ if (video) {
1545
+ video.currentTime = soft;
1546
+ }
1547
+ setTimeout(function() {
1548
+ applyPendingSeek(true);
1549
+ if (video && video.paused && vars["autoplay"]) {
1550
+ try {
1551
+ video.play();
1552
+ } catch (e2) {
1553
+ }
1554
+ }
1555
+ }, 400);
1556
+ return true;
1557
+ } catch (event2) {
1558
+ }
1559
+ return false;
1433
1560
  }, loadedMetaData = function() {
1434
1561
  eventTarget("loadedMetaData", {
1435
1562
  width: CK.getWidth(),
@@ -1606,6 +1733,11 @@ var require_ckplayer = __commonJS({
1606
1733
  if (!isUndefined(errorInfo.message)) {
1607
1734
  msg = errorInfo.message;
1608
1735
  }
1736
+ if (code === 3 && recoverDecodeError()) {
1737
+ CT.error = { code, message: msg };
1738
+ eventTarget("error", CT.error);
1739
+ return;
1740
+ }
1609
1741
  CT.error = { code, message: msg };
1610
1742
  showError();
1611
1743
  } else {
@@ -1655,6 +1787,8 @@ var require_ckplayer = __commonJS({
1655
1787
  eventTarget("error", CT.error);
1656
1788
  },
1657
1789
  seeked: function() {
1790
+ seekApplyLock = false;
1791
+ decodeRecoverCount = 0;
1658
1792
  if (paused) {
1659
1793
  player.play();
1660
1794
  }
@@ -2606,10 +2740,6 @@ var require_ckplayer = __commonJS({
2606
2740
  firstSeekTime = target;
2607
2741
  }
2608
2742
  }
2609
- try {
2610
- video.currentTime = target;
2611
- } catch (event2) {
2612
- }
2613
2743
  return player;
2614
2744
  }
2615
2745
  if (duration && isFinite(duration) && duration > 0 && target > duration) {
@@ -2621,6 +2751,11 @@ var require_ckplayer = __commonJS({
2621
2751
  if (vars["timeScheduleAdjust"] == 5 && target > maxSeeTime && seekTime && Math.abs(seekTime - target) < 0.5) {
2622
2752
  maxSeeTime = Math.max(maxSeeTime, target);
2623
2753
  }
2754
+ if (target > 0.5 && !timeInBuffered(target) && video.readyState < 3) {
2755
+ seekTime = target;
2756
+ applyPendingSeek(false);
2757
+ return player;
2758
+ }
2624
2759
  try {
2625
2760
  video.currentTime = target;
2626
2761
  seekTime = 0;
@@ -5780,7 +5915,7 @@ var require_ckplayer = __commonJS({
5780
5915
  }
5781
5916
  varsTime += time;
5782
5917
  return language["lookBack"] + date("H:i:s", varsTime);
5783
- }, loadJs = function(file, callback2) {
5918
+ }, loadJs = function(file, callback2, isRetry) {
5784
5919
  var fn2 = function() {
5785
5920
  };
5786
5921
  if (!isUndefined(callback2)) {
@@ -5815,19 +5950,37 @@ var require_ckplayer = __commonJS({
5815
5950
  ;
5816
5951
  }, 10);
5817
5952
  };
5818
- var w3c = function() {
5819
- if (valType(fn2) == "function") {
5820
- fn2();
5953
+ var removeScript = function() {
5954
+ try {
5955
+ if (script.parentNode) {
5956
+ script.parentNode.removeChild(script);
5957
+ }
5958
+ } catch (event2) {
5821
5959
  }
5960
+ };
5961
+ var w3c = function() {
5822
5962
  removeListener(script, "load", w3c);
5823
5963
  removeListener(script, "error", w3cError);
5964
+ doReady();
5824
5965
  };
5825
5966
  var w3cError = function() {
5826
- if (valType(fn2) == "function") {
5827
- fn2();
5828
- }
5829
5967
  removeListener(script, "load", w3c);
5830
5968
  removeListener(script, "error", w3cError);
5969
+ removeScript();
5970
+ if (!isRetry && (!vars || vars["cdnFallback"] !== false)) {
5971
+ var cdn = typeof window !== "undefined" && window.ckplayerPlusCdn ? window.ckplayerPlusCdn : ckplayerPlusDefaultCdn;
5972
+ var m2 = String(file).match(/\/(hls\.js|flv\.js|mpegts\.js|language)\/([^/?#]+)(?:[?#].*)?$/i);
5973
+ if (cdn && cdn.indexOf("1.0.6") === -1 && m2) {
5974
+ if (cdn.slice(-1) !== "/") {
5975
+ cdn += "/";
5976
+ }
5977
+ var retryUrl = cdn + m2[1] + "/" + m2[2];
5978
+ if (retryUrl !== file) {
5979
+ loadJs(retryUrl, callback2, true);
5980
+ return;
5981
+ }
5982
+ }
5983
+ }
5831
5984
  };
5832
5985
  try {
5833
5986
  addListener(script, "load", w3c);
@@ -6053,14 +6206,19 @@ var require_ckplayer = __commonJS({
6053
6206
  }
6054
6207
  function getPath(siz) {
6055
6208
  if (typeof window !== "undefined" && window.ckplayerBasePath) {
6056
- var base = window.ckplayerBasePath;
6057
- if (base.slice(-1) !== "/") {
6058
- base += "/";
6209
+ var base2 = window.ckplayerBasePath;
6210
+ if (/\/(?:assets|\.vite\/deps|_next\/static|chunks?)\/?$/i.test(base2)) {
6211
+ base2 = "";
6059
6212
  }
6060
- if (!isUndefined(siz)) {
6061
- return base + siz + "/";
6213
+ if (base2) {
6214
+ if (base2.slice(-1) !== "/") {
6215
+ base2 += "/";
6216
+ }
6217
+ if (!isUndefined(siz)) {
6218
+ return base2 + siz + "/";
6219
+ }
6220
+ return base2;
6062
6221
  }
6063
- return base;
6064
6222
  }
6065
6223
  var scriptList = document.scripts || [], thisPath = scriptList.length ? scriptList[scriptList.length - 1].src : "";
6066
6224
  for (var i2 = 0; i2 < scriptList.length; i2++) {
@@ -6571,10 +6729,14 @@ var import_ckplayer = __toESM(require_ckplayer());
6571
6729
  var import_meta = {};
6572
6730
  try {
6573
6731
  if (typeof window !== "undefined" && !window.ckplayerBasePath) {
6574
- window.ckplayerBasePath = new URL("./", import_meta.url).href;
6732
+ base = new URL("./", import_meta.url).href;
6733
+ if (/\/dist\/$/i.test(base) || /\/ckplayer-plus(?:@[^/]+)?\/(?:dist\/)?$/i.test(base) || /\/node_modules\/ckplayer-plus\/(?:dist\/)?$/i.test(base)) {
6734
+ window.ckplayerBasePath = base;
6735
+ }
6575
6736
  }
6576
6737
  } catch (e) {
6577
6738
  }
6739
+ var base;
6578
6740
  function guessPlug2(url) {
6579
6741
  if (!url || typeof url !== "string") return "";
6580
6742
  var path = url.split("?")[0].split("#")[0].toLowerCase();