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/react.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;
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) {
1432
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++) {
@@ -6574,13 +6732,17 @@ var import_ckplayer = __toESM(require_ckplayer());
6574
6732
  var import_meta = {};
6575
6733
  try {
6576
6734
  if (typeof window !== "undefined" && !window.ckplayerBasePath) {
6577
- window.ckplayerBasePath = new URL("./", import_meta.url).href;
6735
+ base = new URL("./", import_meta.url).href;
6736
+ if (/\/dist\/$/i.test(base) || /\/ckplayer-plus(?:@[^/]+)?\/(?:dist\/)?$/i.test(base) || /\/node_modules\/ckplayer-plus\/(?:dist\/)?$/i.test(base)) {
6737
+ window.ckplayerBasePath = base;
6738
+ }
6578
6739
  }
6579
6740
  } catch (e) {
6580
6741
  }
6742
+ var base;
6581
6743
  var index_default = import_ckplayer.default;
6582
6744
 
6583
- // src/react/CkPlayer.js
6745
+ // src/shared.js
6584
6746
  var EVENT_MAP = {
6585
6747
  play: "onPlay",
6586
6748
  pause: "onPause",
@@ -6596,6 +6758,34 @@ var EVENT_MAP = {
6596
6758
  function createUid() {
6597
6759
  return "ckp-" + Math.random().toString(36).slice(2, 10);
6598
6760
  }
6761
+ function buildPlayerConfig(input) {
6762
+ var opts = input.options || {};
6763
+ var config = {
6764
+ container: input.container,
6765
+ video: input.video,
6766
+ poster: input.poster || "",
6767
+ autoplay: !!input.autoplay,
6768
+ live: input.live != null ? input.live : false,
6769
+ plug: input.plug || "",
6770
+ autoPlug: input.autoPlug !== false,
6771
+ volume: input.volume != null ? input.volume : 0.8,
6772
+ cookie: opts.cookie || input.cookie || createUid()
6773
+ };
6774
+ if (input.pluginPath) {
6775
+ config.pluginPath = input.pluginPath;
6776
+ }
6777
+ for (var key in opts) {
6778
+ if (Object.prototype.hasOwnProperty.call(opts, key) && key !== "container") {
6779
+ config[key] = opts[key];
6780
+ }
6781
+ }
6782
+ if (typeof config.loaded === "string") {
6783
+ delete config.loaded;
6784
+ }
6785
+ return config;
6786
+ }
6787
+
6788
+ // src/react/CkPlayer.js
6599
6789
  var CkPlayer = forwardRef(function CkPlayer2(props, ref) {
6600
6790
  var containerRef = useRef(null);
6601
6791
  var playerRef = useRef(null);
@@ -6610,47 +6800,30 @@ var CkPlayer = forwardRef(function CkPlayer2(props, ref) {
6610
6800
  var autoPlug = props.autoPlug;
6611
6801
  var volume = props.volume;
6612
6802
  var pluginPath = props.pluginPath;
6613
- var options = props.options;
6614
6803
  var width = props.width != null ? props.width : "100%";
6615
6804
  var height = props.height != null ? props.height : "400px";
6616
6805
  var className = props.className || "";
6617
6806
  var style = props.style;
6618
6807
  useEffect(function() {
6619
- var cancelled = false;
6620
6808
  var el = containerRef.current;
6621
6809
  if (typeof window === "undefined" || !el) {
6622
6810
  return void 0;
6623
6811
  }
6624
- var opts = propsRef.current && propsRef.current.options || {};
6625
- var config = {
6812
+ var current = propsRef.current || {};
6813
+ var config = buildPlayerConfig({
6626
6814
  container: el,
6627
- video: propsRef.current.video,
6628
- poster: propsRef.current.poster || "",
6629
- autoplay: !!propsRef.current.autoplay,
6630
- live: propsRef.current.live != null ? propsRef.current.live : false,
6631
- plug: propsRef.current.plug || "",
6632
- autoPlug: propsRef.current.autoPlug !== false,
6633
- volume: propsRef.current.volume != null ? propsRef.current.volume : 0.8,
6634
- cookie: opts.cookie || instanceIdRef.current
6635
- };
6636
- if (propsRef.current.pluginPath) {
6637
- config.pluginPath = propsRef.current.pluginPath;
6638
- }
6639
- Object.keys(opts).forEach(function(key) {
6640
- if (key !== "container") {
6641
- config[key] = opts[key];
6642
- }
6815
+ video: current.video,
6816
+ poster: current.poster,
6817
+ autoplay: current.autoplay,
6818
+ live: current.live,
6819
+ plug: current.plug,
6820
+ autoPlug: current.autoPlug,
6821
+ volume: current.volume,
6822
+ pluginPath: current.pluginPath,
6823
+ options: current.options,
6824
+ cookie: instanceIdRef.current
6643
6825
  });
6644
- if (typeof config.loaded === "string") {
6645
- delete config.loaded;
6646
- }
6647
6826
  var player2 = new index_default(config);
6648
- if (cancelled) {
6649
- if (player2 && typeof player2.remove === "function") {
6650
- player2.remove();
6651
- }
6652
- return void 0;
6653
- }
6654
6827
  playerRef.current = player2;
6655
6828
  Object.keys(EVENT_MAP).forEach(function(name) {
6656
6829
  if (typeof player2[name] === "function") {
@@ -6666,7 +6839,6 @@ var CkPlayer = forwardRef(function CkPlayer2(props, ref) {
6666
6839
  propsRef.current.onReady(player2);
6667
6840
  }
6668
6841
  return function cleanup() {
6669
- cancelled = true;
6670
6842
  if (playerRef.current && typeof playerRef.current.remove === "function") {
6671
6843
  try {
6672
6844
  playerRef.current.remove();
@@ -6675,7 +6847,12 @@ var CkPlayer = forwardRef(function CkPlayer2(props, ref) {
6675
6847
  }
6676
6848
  playerRef.current = null;
6677
6849
  };
6678
- }, [video2, poster, autoplay, live, plug, autoPlug, volume, pluginPath]);
6850
+ }, [video2, poster, autoplay, live, plug, autoPlug, pluginPath]);
6851
+ useEffect(function() {
6852
+ if (playerRef.current && typeof volume === "number" && typeof playerRef.current.volume === "function") {
6853
+ playerRef.current.volume(volume);
6854
+ }
6855
+ }, [volume]);
6679
6856
  useImperativeHandle(ref, function() {
6680
6857
  return {
6681
6858
  play: function() {