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.cjs CHANGED
@@ -212,7 +212,7 @@ var require_ckplayer = __commonJS({
212
212
  cdnFallback: true
213
213
  // getPath 失败时是否回退到 jsDelivr(内网可设 false,并配置 pluginPath)
214
214
  };
215
- var ckplayerPlusDefaultCdn = "https://cdn.jsdelivr.net/npm/ckplayer-plus@1.0.3/dist/";
215
+ var ckplayerPlusDefaultCdn = "https://cdn.jsdelivr.net/npm/ckplayer-plus@1.0.6/dist/";
216
216
  function ckplayerEmbed(videoObj) {
217
217
  var rightMenu = [
218
218
  {
@@ -237,6 +237,11 @@ var require_ckplayer = __commonJS({
237
237
  var paused = true;
238
238
  var loadTime = 0;
239
239
  var seekTime = 0;
240
+ var seekRetryTimer = null;
241
+ var seekRetryCount = 0;
242
+ var seekApplyLock = false;
243
+ var decodeRecoverCount = 0;
244
+ var hlsStartPositionUsed = false;
240
245
  var oldTime = 0, playTime = 0, firstSeekTime = -1, maxSeeTime = 0;
241
246
  var isChangeDef = true;
242
247
  var playType = "";
@@ -375,26 +380,34 @@ var require_ckplayer = __commonJS({
375
380
  } else {
376
381
  return embed(obj2);
377
382
  }
383
+ }, isUnreliablePluginBase = function(base2) {
384
+ if (!base2 || valType(base2) != "string") {
385
+ return true;
386
+ }
387
+ return /\/(?:assets|\.vite\/deps|_next\/static|chunks?)\/?$/i.test(base2);
378
388
  }, resolveAssetPath = function(folder, file) {
379
- var base = "";
389
+ var base2 = "";
380
390
  if (vars && vars["pluginPath"]) {
381
- base = vars["pluginPath"];
391
+ base2 = vars["pluginPath"];
382
392
  } else if (typeof window !== "undefined" && window.ckplayerBasePath) {
383
- base = window.ckplayerBasePath;
393
+ base2 = window.ckplayerBasePath;
394
+ }
395
+ if (base2 && isUnreliablePluginBase(base2)) {
396
+ base2 = "";
384
397
  }
385
- if (base) {
386
- if (base.slice(-1) !== "/") {
387
- base += "/";
398
+ if (base2) {
399
+ if (base2.slice(-1) !== "/") {
400
+ base2 += "/";
388
401
  }
389
- return base + folder + "/" + file;
402
+ return base2 + folder + "/" + file;
390
403
  }
391
404
  var fromScript = getPath(folder) + file;
392
- if (fromScript && fromScript.indexOf(folder + "/") > -1 && fromScript.indexOf("undefined") === -1) {
405
+ if (fromScript && fromScript.indexOf(folder + "/") > -1 && fromScript.indexOf("undefined") === -1 && !isUnreliablePluginBase(getPath())) {
393
406
  return fromScript;
394
407
  }
395
408
  var allowCdn = !vars || vars["cdnFallback"] !== false;
396
409
  var cdn = typeof window !== "undefined" && window.ckplayerPlusCdn ? window.ckplayerPlusCdn : ckplayerPlusDefaultCdn;
397
- if (!allowCdn || !cdn || cdn.indexOf("1.0.3") > -1) {
410
+ if (!allowCdn || !cdn || cdn.indexOf("1.0.6") > -1) {
398
411
  return folder + "/" + file;
399
412
  }
400
413
  if (cdn.slice(-1) !== "/") {
@@ -708,11 +721,24 @@ var require_ckplayer = __commonJS({
708
721
  }, hlsPlayer = function(url) {
709
722
  var startHls = function() {
710
723
  if (typeof Hls !== "undefined" && !isUndefined(Hls) && Hls.isSupported()) {
711
- hls = new Hls();
724
+ var hlsConf = {};
725
+ if (seekTime && seekTime > 0 && (isUndefined(vars["live"]) || !vars["live"])) {
726
+ hlsConf.startPosition = seekTime;
727
+ maxSeeTime = Math.max(maxSeeTime, seekTime);
728
+ if (firstSeekTime < 0) {
729
+ firstSeekTime = seekTime;
730
+ }
731
+ seekTime = 0;
732
+ hlsStartPositionUsed = true;
733
+ clearSeekRetry();
734
+ }
735
+ hls = new Hls(hlsConf);
712
736
  hls.loadSource(url);
713
737
  hls.attachMedia(video);
714
738
  hls.on(Hls.Events.MANIFEST_PARSED, function() {
715
- applyPendingSeek();
739
+ if (!hlsStartPositionUsed) {
740
+ applyPendingSeek();
741
+ }
716
742
  });
717
743
  hls.on(Hls.Events.ERROR, function(event2, data) {
718
744
  var code = 9;
@@ -730,6 +756,13 @@ var require_ckplayer = __commonJS({
730
756
  }
731
757
  }
732
758
  }
759
+ if (fatal && data.type === Hls.ErrorTypes.MEDIA_ERROR && hls && typeof hls.recoverMediaError === "function") {
760
+ try {
761
+ hls.recoverMediaError();
762
+ fatal = false;
763
+ } catch (errRecover) {
764
+ }
765
+ }
733
766
  CT.error = { code, message: message2 };
734
767
  eventTarget("error", CT.error);
735
768
  if (fatal) {
@@ -1411,8 +1444,28 @@ var require_ckplayer = __commonJS({
1411
1444
  checkTrack();
1412
1445
  }
1413
1446
  }
1414
- }, applyPendingSeek = function() {
1415
- if (!seekTime || !video) {
1447
+ }, timeInBuffered = function(t) {
1448
+ if (!video || isUndefined(video.buffered)) {
1449
+ return false;
1450
+ }
1451
+ try {
1452
+ var buf = video.buffered;
1453
+ for (var i2 = 0; i2 < buf.length; i2++) {
1454
+ if (t >= buf.start(i2) - 0.35 && t <= buf.end(i2) + 0.15) {
1455
+ return true;
1456
+ }
1457
+ }
1458
+ } catch (event2) {
1459
+ }
1460
+ return false;
1461
+ }, clearSeekRetry = function() {
1462
+ if (seekRetryTimer) {
1463
+ clearTimeout(seekRetryTimer);
1464
+ seekRetryTimer = null;
1465
+ }
1466
+ seekRetryCount = 0;
1467
+ }, applyPendingSeek = function(force) {
1468
+ if (!seekTime || !video || seekApplyLock) {
1416
1469
  return;
1417
1470
  }
1418
1471
  if (!isUndefined(vars["live"]) && (valType(vars["live"]) == "boolean" && vars["live"] || valType(vars["live"]) == "number")) {
@@ -1423,18 +1476,92 @@ var require_ckplayer = __commonJS({
1423
1476
  if (dur && isFinite(dur) && dur > 0 && t >= dur) {
1424
1477
  t = Math.max(0, dur - 0.3);
1425
1478
  }
1479
+ if (t <= 0) {
1480
+ seekTime = 0;
1481
+ clearSeekRetry();
1482
+ return;
1483
+ }
1484
+ var readyEnough = !isUndefined(video.readyState) && video.readyState >= 2;
1485
+ var bufferedOk = timeInBuffered(t);
1486
+ if (!force && !bufferedOk && (!readyEnough || video.readyState < 3)) {
1487
+ seekRetryCount++;
1488
+ if (seekRetryCount <= 50) {
1489
+ try {
1490
+ if (hls && typeof hls.startLoad === "function") {
1491
+ hls.startLoad(t);
1492
+ }
1493
+ } catch (event2) {
1494
+ }
1495
+ if (seekRetryTimer) {
1496
+ clearTimeout(seekRetryTimer);
1497
+ }
1498
+ seekRetryTimer = setTimeout(function() {
1499
+ applyPendingSeek(false);
1500
+ }, 200);
1501
+ return;
1502
+ }
1503
+ }
1504
+ clearSeekRetry();
1426
1505
  if (t > 0) {
1427
1506
  maxSeeTime = Math.max(maxSeeTime, t);
1428
1507
  if (firstSeekTime < 0) {
1429
1508
  firstSeekTime = t;
1430
1509
  }
1431
1510
  }
1511
+ seekApplyLock = true;
1432
1512
  seekTime = 0;
1433
1513
  try {
1434
1514
  video.currentTime = t;
1435
1515
  } catch (event2) {
1436
1516
  seekTime = t;
1517
+ seekApplyLock = false;
1518
+ }
1519
+ setTimeout(function() {
1520
+ seekApplyLock = false;
1521
+ }, 800);
1522
+ }, recoverDecodeError = function() {
1523
+ if (decodeRecoverCount >= 2) {
1524
+ return false;
1525
+ }
1526
+ decodeRecoverCount++;
1527
+ var resumeAt = playTime > 0 ? playTime : vars["seek"] ? parseFloat(vars["seek"]) : 0;
1528
+ if (isNaN(resumeAt) || resumeAt < 0) {
1529
+ resumeAt = 0;
1437
1530
  }
1531
+ try {
1532
+ if (hls && typeof hls.recoverMediaError === "function") {
1533
+ hls.recoverMediaError();
1534
+ if (resumeAt > 0) {
1535
+ seekTime = resumeAt;
1536
+ seekApplyLock = false;
1537
+ setTimeout(function() {
1538
+ applyPendingSeek(true);
1539
+ }, 300);
1540
+ }
1541
+ return true;
1542
+ }
1543
+ } catch (event2) {
1544
+ }
1545
+ try {
1546
+ var soft = Math.max(0, resumeAt - 1.5);
1547
+ seekTime = resumeAt;
1548
+ seekApplyLock = false;
1549
+ if (video) {
1550
+ video.currentTime = soft;
1551
+ }
1552
+ setTimeout(function() {
1553
+ applyPendingSeek(true);
1554
+ if (video && video.paused && vars["autoplay"]) {
1555
+ try {
1556
+ video.play();
1557
+ } catch (e2) {
1558
+ }
1559
+ }
1560
+ }, 400);
1561
+ return true;
1562
+ } catch (event2) {
1563
+ }
1564
+ return false;
1438
1565
  }, loadedMetaData = function() {
1439
1566
  eventTarget("loadedMetaData", {
1440
1567
  width: CK.getWidth(),
@@ -1611,6 +1738,11 @@ var require_ckplayer = __commonJS({
1611
1738
  if (!isUndefined(errorInfo.message)) {
1612
1739
  msg = errorInfo.message;
1613
1740
  }
1741
+ if (code === 3 && recoverDecodeError()) {
1742
+ CT.error = { code, message: msg };
1743
+ eventTarget("error", CT.error);
1744
+ return;
1745
+ }
1614
1746
  CT.error = { code, message: msg };
1615
1747
  showError();
1616
1748
  } else {
@@ -1660,6 +1792,8 @@ var require_ckplayer = __commonJS({
1660
1792
  eventTarget("error", CT.error);
1661
1793
  },
1662
1794
  seeked: function() {
1795
+ seekApplyLock = false;
1796
+ decodeRecoverCount = 0;
1663
1797
  if (paused) {
1664
1798
  player.play();
1665
1799
  }
@@ -2611,10 +2745,6 @@ var require_ckplayer = __commonJS({
2611
2745
  firstSeekTime = target;
2612
2746
  }
2613
2747
  }
2614
- try {
2615
- video.currentTime = target;
2616
- } catch (event2) {
2617
- }
2618
2748
  return player;
2619
2749
  }
2620
2750
  if (duration && isFinite(duration) && duration > 0 && target > duration) {
@@ -2626,6 +2756,11 @@ var require_ckplayer = __commonJS({
2626
2756
  if (vars["timeScheduleAdjust"] == 5 && target > maxSeeTime && seekTime && Math.abs(seekTime - target) < 0.5) {
2627
2757
  maxSeeTime = Math.max(maxSeeTime, target);
2628
2758
  }
2759
+ if (target > 0.5 && !timeInBuffered(target) && video.readyState < 3) {
2760
+ seekTime = target;
2761
+ applyPendingSeek(false);
2762
+ return player;
2763
+ }
2629
2764
  try {
2630
2765
  video.currentTime = target;
2631
2766
  seekTime = 0;
@@ -5785,7 +5920,7 @@ var require_ckplayer = __commonJS({
5785
5920
  }
5786
5921
  varsTime += time;
5787
5922
  return language["lookBack"] + date("H:i:s", varsTime);
5788
- }, loadJs = function(file, callback2) {
5923
+ }, loadJs = function(file, callback2, isRetry) {
5789
5924
  var fn2 = function() {
5790
5925
  };
5791
5926
  if (!isUndefined(callback2)) {
@@ -5820,19 +5955,37 @@ var require_ckplayer = __commonJS({
5820
5955
  ;
5821
5956
  }, 10);
5822
5957
  };
5823
- var w3c = function() {
5824
- if (valType(fn2) == "function") {
5825
- fn2();
5958
+ var removeScript = function() {
5959
+ try {
5960
+ if (script.parentNode) {
5961
+ script.parentNode.removeChild(script);
5962
+ }
5963
+ } catch (event2) {
5826
5964
  }
5965
+ };
5966
+ var w3c = function() {
5827
5967
  removeListener(script, "load", w3c);
5828
5968
  removeListener(script, "error", w3cError);
5969
+ doReady();
5829
5970
  };
5830
5971
  var w3cError = function() {
5831
- if (valType(fn2) == "function") {
5832
- fn2();
5833
- }
5834
5972
  removeListener(script, "load", w3c);
5835
5973
  removeListener(script, "error", w3cError);
5974
+ removeScript();
5975
+ if (!isRetry && (!vars || vars["cdnFallback"] !== false)) {
5976
+ var cdn = typeof window !== "undefined" && window.ckplayerPlusCdn ? window.ckplayerPlusCdn : ckplayerPlusDefaultCdn;
5977
+ var m2 = String(file).match(/\/(hls\.js|flv\.js|mpegts\.js|language)\/([^/?#]+)(?:[?#].*)?$/i);
5978
+ if (cdn && cdn.indexOf("1.0.6") === -1 && m2) {
5979
+ if (cdn.slice(-1) !== "/") {
5980
+ cdn += "/";
5981
+ }
5982
+ var retryUrl = cdn + m2[1] + "/" + m2[2];
5983
+ if (retryUrl !== file) {
5984
+ loadJs(retryUrl, callback2, true);
5985
+ return;
5986
+ }
5987
+ }
5988
+ }
5836
5989
  };
5837
5990
  try {
5838
5991
  addListener(script, "load", w3c);
@@ -6058,14 +6211,19 @@ var require_ckplayer = __commonJS({
6058
6211
  }
6059
6212
  function getPath(siz) {
6060
6213
  if (typeof window !== "undefined" && window.ckplayerBasePath) {
6061
- var base = window.ckplayerBasePath;
6062
- if (base.slice(-1) !== "/") {
6063
- base += "/";
6214
+ var base2 = window.ckplayerBasePath;
6215
+ if (/\/(?:assets|\.vite\/deps|_next\/static|chunks?)\/?$/i.test(base2)) {
6216
+ base2 = "";
6064
6217
  }
6065
- if (!isUndefined(siz)) {
6066
- return base + siz + "/";
6218
+ if (base2) {
6219
+ if (base2.slice(-1) !== "/") {
6220
+ base2 += "/";
6221
+ }
6222
+ if (!isUndefined(siz)) {
6223
+ return base2 + siz + "/";
6224
+ }
6225
+ return base2;
6067
6226
  }
6068
- return base;
6069
6227
  }
6070
6228
  var scriptList = document.scripts || [], thisPath = scriptList.length ? scriptList[scriptList.length - 1].src : "";
6071
6229
  for (var i2 = 0; i2 < scriptList.length; i2++) {
@@ -6583,10 +6741,14 @@ var import_ckplayer = __toESM(require_ckplayer());
6583
6741
  var import_meta = {};
6584
6742
  try {
6585
6743
  if (typeof window !== "undefined" && !window.ckplayerBasePath) {
6586
- window.ckplayerBasePath = new URL("./", import_meta.url).href;
6744
+ base = new URL("./", import_meta.url).href;
6745
+ if (/\/dist\/$/i.test(base) || /\/ckplayer-plus(?:@[^/]+)?\/(?:dist\/)?$/i.test(base) || /\/node_modules\/ckplayer-plus\/(?:dist\/)?$/i.test(base)) {
6746
+ window.ckplayerBasePath = base;
6747
+ }
6587
6748
  }
6588
6749
  } catch (e) {
6589
6750
  }
6751
+ var base;
6590
6752
  function guessPlug2(url) {
6591
6753
  if (!url || typeof url !== "string") return "";
6592
6754
  var path = url.split("?")[0].split("#")[0].toLowerCase();