ckplayer-plus 1.1.0 → 1.1.2

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.cjs CHANGED
@@ -125,8 +125,8 @@ var require_ckplayer = __commonJS({
125
125
  //默认需要跳转的秒数
126
126
  next: null,
127
127
  //下一集按钮动作
128
- loaded: "",
129
- //加载播放器后调用的函数
128
+ loaded: null,
129
+ //加载播放器后调用的函数(仅支持 function)
130
130
  plug: "",
131
131
  //使用插件
132
132
  duration: 0,
@@ -210,7 +210,7 @@ var require_ckplayer = __commonJS({
210
210
  cdnFallback: true
211
211
  // getPath 失败时是否回退到 jsDelivr(内网可设 false,并配置 pluginPath)
212
212
  };
213
- var ckplayerPlusDefaultCdn = "https://cdn.jsdelivr.net/npm/ckplayer-plus@1.1.0/dist/";
213
+ var ckplayerPlusDefaultCdn = "https://cdn.jsdelivr.net/npm/ckplayer-plus@1.1.2/dist/";
214
214
  function ckplayerEmbed(videoObj) {
215
215
  var rightMenu = [
216
216
  {
@@ -238,9 +238,11 @@ var require_ckplayer = __commonJS({
238
238
  var seekRetryTimer = null;
239
239
  var seekRetryCount = 0;
240
240
  var seekApplyLock = false;
241
+ var autoplayPending = false;
241
242
  var decodeRecoverCount = 0;
242
243
  var hlsStartPositionUsed = false;
243
244
  var hlsResumeTarget = -1;
245
+ var hlsResumeWarmup = false;
244
246
  var hlsLoadAt = -1;
245
247
  var hlsLoadTs = 0;
246
248
  var oldTime = 0, playTime = 0, firstSeekTime = -1, maxSeeTime = 0;
@@ -430,7 +432,7 @@ var require_ckplayer = __commonJS({
430
432
  }
431
433
  var allowCdn = !vars || vars["cdnFallback"] !== false;
432
434
  var cdn = typeof window !== "undefined" && window.ckplayerPlusCdn ? window.ckplayerPlusCdn : ckplayerPlusDefaultCdn;
433
- if (!allowCdn || !cdn || cdn.indexOf("1.1.0") > -1) {
435
+ if (!allowCdn || !cdn || cdn.indexOf("1.1.2") > -1) {
434
436
  return folder + "/" + file;
435
437
  }
436
438
  if (cdn.slice(-1) !== "/") {
@@ -524,8 +526,8 @@ var require_ckplayer = __commonJS({
524
526
  player.volume(0);
525
527
  player.muted();
526
528
  recoveryVolume = true;
527
- video.attr("autoplay", "autoplay");
528
- paused = false;
529
+ video.attr("preload", "auto");
530
+ autoplayPending = true;
529
531
  } else {
530
532
  video.attr("preload", "metadata");
531
533
  }
@@ -677,6 +679,7 @@ var require_ckplayer = __commonJS({
677
679
  seekApplyLock = false;
678
680
  hlsStartPositionUsed = false;
679
681
  hlsResumeTarget = -1;
682
+ hlsResumeWarmup = false;
680
683
  hlsLoadAt = -1;
681
684
  hlsLoadTs = 0;
682
685
  decodeRecoverCount = 0;
@@ -832,27 +835,50 @@ var require_ckplayer = __commonJS({
832
835
  resumeAt = parseResumeSeekFromVars();
833
836
  }
834
837
  if (resumeAt && resumeAt > 0 && (isUndefined(vars["live"]) || !vars["live"])) {
835
- hlsConf.startPosition = resumeAt;
836
838
  maxSeeTime = Math.max(maxSeeTime, resumeAt);
837
839
  if (firstSeekTime < 0) {
838
840
  firstSeekTime = resumeAt;
839
841
  }
842
+ seekTime = resumeAt;
840
843
  hlsResumeTarget = resumeAt;
841
- hlsLoadAt = resumeAt;
842
- hlsLoadTs = Date.now();
843
- seekTime = 0;
844
- hlsStartPositionUsed = true;
845
- clearSeekRetry();
844
+ hlsResumeWarmup = true;
846
845
  }
847
846
  hls = new Hls(hlsConf);
848
847
  hls.loadSource(url);
849
848
  hls.attachMedia(video);
850
849
  hls.on(Hls.Events.MANIFEST_PARSED, function() {
850
+ if (hlsResumeWarmup && seekTime > 0) {
851
+ var loadAt = hlsPriorLoadTime(seekTime);
852
+ try {
853
+ hls.startLoad(loadAt);
854
+ } catch (event2) {
855
+ }
856
+ setTimeout(function() {
857
+ if (!hlsResumeWarmup || !seekTime) {
858
+ return;
859
+ }
860
+ var target = seekTime;
861
+ if (hlsCanSafelySeekTo(target)) {
862
+ finishResumeSeek(target);
863
+ return;
864
+ }
865
+ var snap = hlsPriorLoadTime(target);
866
+ hlsResumeWarmup = false;
867
+ finishResumeSeek(snap);
868
+ }, 5e3);
869
+ return;
870
+ }
851
871
  if (!hlsStartPositionUsed) {
852
872
  applyPendingSeek();
853
873
  }
854
874
  });
855
875
  hls.on(Hls.Events.FRAG_BUFFERED, function(event2, data) {
876
+ if (hlsResumeWarmup && seekTime > 0) {
877
+ if (hlsCanSafelySeekTo(seekTime)) {
878
+ finishResumeSeek(seekTime);
879
+ }
880
+ return;
881
+ }
856
882
  if (hlsResumeTarget <= 0 || !data || !data.frag) {
857
883
  return;
858
884
  }
@@ -1585,12 +1611,116 @@ var require_ckplayer = __commonJS({
1585
1611
  } catch (event2) {
1586
1612
  }
1587
1613
  return false;
1614
+ }, hlsFragAround = function(t) {
1615
+ if (!hls || isNaN(t) || t < 0) {
1616
+ return null;
1617
+ }
1618
+ try {
1619
+ var level = -1;
1620
+ if (typeof hls.currentLevel === "number" && hls.currentLevel >= 0) {
1621
+ level = hls.currentLevel;
1622
+ } else if (typeof hls.firstLevel === "number" && hls.firstLevel >= 0) {
1623
+ level = hls.firstLevel;
1624
+ } else {
1625
+ level = 0;
1626
+ }
1627
+ var details = hls.levels && hls.levels[level] && hls.levels[level].details;
1628
+ var frags = details && details.fragments;
1629
+ if (!frags || !frags.length) {
1630
+ return null;
1631
+ }
1632
+ for (var i = 0; i < frags.length; i++) {
1633
+ var f = frags[i];
1634
+ if (!f) {
1635
+ continue;
1636
+ }
1637
+ var start = f.start || 0;
1638
+ var end = start + (f.duration || 0);
1639
+ if (t >= start - 0.05 && t < end + 0.05) {
1640
+ return f;
1641
+ }
1642
+ }
1643
+ return frags[frags.length - 1];
1644
+ } catch (event2) {
1645
+ }
1646
+ return null;
1647
+ }, hlsPriorLoadTime = function(t) {
1648
+ if (isNaN(t) || t <= 0) {
1649
+ return 0;
1650
+ }
1651
+ var frag = hlsFragAround(t);
1652
+ if (frag && !isUndefined(frag.start)) {
1653
+ return Math.max(0, frag.start);
1654
+ }
1655
+ return Math.max(0, t - 12);
1656
+ }, hlsCanSafelySeekTo = function(t) {
1657
+ if (!video || isUndefined(video.buffered) || isNaN(t) || t < 0) {
1658
+ return false;
1659
+ }
1660
+ if (!timeInBuffered(t)) {
1661
+ return false;
1662
+ }
1663
+ var fragStart = hlsPriorLoadTime(t);
1664
+ try {
1665
+ var buf = video.buffered;
1666
+ for (var i = 0; i < buf.length; i++) {
1667
+ var start = buf.start(i);
1668
+ var end = buf.end(i);
1669
+ if (fragStart >= start - 0.35 && t <= end + 0.15) {
1670
+ return true;
1671
+ }
1672
+ }
1673
+ } catch (event2) {
1674
+ }
1675
+ return false;
1676
+ }, finishResumeSeek = function(t) {
1677
+ hlsResumeWarmup = false;
1678
+ applySeekToMedia(t);
1679
+ setTimeout(function() {
1680
+ if (!video) {
1681
+ return;
1682
+ }
1683
+ if (C["buffer"]) {
1684
+ C["buffer"].hide();
1685
+ }
1686
+ waited = true;
1687
+ if (vars["autoplay"] || autoplayPending) {
1688
+ try {
1689
+ var p = video.play();
1690
+ if (p && typeof p.then === "function") {
1691
+ p.catch(function() {
1692
+ });
1693
+ }
1694
+ } catch (event2) {
1695
+ }
1696
+ autoplayPending = false;
1697
+ }
1698
+ }, 120);
1588
1699
  }, clearSeekRetry = function() {
1589
1700
  if (seekRetryTimer) {
1590
1701
  clearTimeout(seekRetryTimer);
1591
1702
  seekRetryTimer = null;
1592
1703
  }
1593
1704
  seekRetryCount = 0;
1705
+ }, startPendingAutoplay = function() {
1706
+ if (!autoplayPending || !video || !vars["autoplay"] || seekTime || seekApplyLock || loadedmetadataNum < 1) {
1707
+ return;
1708
+ }
1709
+ autoplayPending = false;
1710
+ player.play();
1711
+ }, applySeekToMedia = function(t) {
1712
+ clearSeekRetry();
1713
+ seekApplyLock = true;
1714
+ seekTime = 0;
1715
+ try {
1716
+ video.currentTime = t;
1717
+ } catch (event2) {
1718
+ seekTime = t;
1719
+ seekApplyLock = false;
1720
+ }
1721
+ setTimeout(function() {
1722
+ seekApplyLock = false;
1723
+ }, 800);
1594
1724
  }, applyPendingSeek = function(force) {
1595
1725
  if (!seekTime || !video || seekApplyLock) {
1596
1726
  return;
@@ -1614,14 +1744,38 @@ var require_ckplayer = __commonJS({
1614
1744
  firstSeekTime = t;
1615
1745
  }
1616
1746
  }
1617
- if (hlsSeekTo(t, !!force)) {
1618
- clearSeekRetry();
1619
- seekTime = 0;
1747
+ if (hlsResumeWarmup) {
1748
+ if (hlsCanSafelySeekTo(t)) {
1749
+ finishResumeSeek(t);
1750
+ }
1620
1751
  return;
1621
1752
  }
1622
- var readyEnough = !isUndefined(video.readyState) && video.readyState >= 2;
1623
- var bufferedOk = timeInBuffered(t);
1624
- if (!force && !bufferedOk && (!readyEnough || video.readyState < 3)) {
1753
+ if (hls && typeof hls.startLoad === "function") {
1754
+ if (!hlsCanSafelySeekTo(t) && t > 1) {
1755
+ hlsResumeWarmup = true;
1756
+ hlsResumeTarget = t;
1757
+ try {
1758
+ hls.startLoad(hlsPriorLoadTime(t));
1759
+ } catch (event2) {
1760
+ }
1761
+ seekRetryCount++;
1762
+ if (seekRetryCount <= 50) {
1763
+ if (seekRetryTimer) {
1764
+ clearTimeout(seekRetryTimer);
1765
+ }
1766
+ seekRetryTimer = setTimeout(function() {
1767
+ applyPendingSeek(false);
1768
+ }, 200);
1769
+ }
1770
+ return;
1771
+ }
1772
+ if (hlsSeekTo(t, !!force)) {
1773
+ clearSeekRetry();
1774
+ seekTime = 0;
1775
+ return;
1776
+ }
1777
+ }
1778
+ if (!force && (!isUndefined(video.readyState) && video.readyState < 1)) {
1625
1779
  seekRetryCount++;
1626
1780
  if (seekRetryCount <= 50) {
1627
1781
  if (seekRetryTimer) {
@@ -1633,57 +1787,52 @@ var require_ckplayer = __commonJS({
1633
1787
  return;
1634
1788
  }
1635
1789
  }
1636
- clearSeekRetry();
1637
- seekApplyLock = true;
1638
- seekTime = 0;
1639
- try {
1640
- video.currentTime = t;
1641
- } catch (event2) {
1642
- seekTime = t;
1643
- seekApplyLock = false;
1644
- }
1645
- setTimeout(function() {
1646
- seekApplyLock = false;
1647
- }, 800);
1790
+ applySeekToMedia(t);
1648
1791
  }, recoverDecodeError = function() {
1649
- if (decodeRecoverCount >= 2) {
1792
+ if (decodeRecoverCount >= 3) {
1650
1793
  return false;
1651
1794
  }
1652
1795
  decodeRecoverCount++;
1653
- var resumeAt = playTime > 0 ? playTime : vars["seek"] ? parseFloat(vars["seek"]) : 0;
1796
+ var resumeAt = hlsResumeTarget > 0 ? hlsResumeTarget : playTime > 0 ? playTime : vars["seek"] ? parseFloat(vars["seek"]) : 0;
1654
1797
  if (isNaN(resumeAt) || resumeAt < 0) {
1655
1798
  resumeAt = 0;
1656
1799
  }
1800
+ var loadFrom = hlsPriorLoadTime(resumeAt);
1801
+ if (decodeRecoverCount >= 2) {
1802
+ loadFrom = Math.max(0, loadFrom - 10);
1803
+ }
1804
+ seekApplyLock = false;
1805
+ clearSeekRetry();
1657
1806
  try {
1658
1807
  if (hls && typeof hls.recoverMediaError === "function") {
1659
1808
  hls.recoverMediaError();
1660
- if (resumeAt > 0) {
1661
- seekTime = resumeAt;
1662
- seekApplyLock = false;
1663
- setTimeout(function() {
1664
- applyPendingSeek(true);
1665
- }, 300);
1666
- }
1667
- return true;
1668
1809
  }
1669
1810
  } catch (event2) {
1670
1811
  }
1671
- try {
1672
- var soft = Math.max(0, resumeAt - 1.5);
1673
- seekTime = resumeAt;
1674
- seekApplyLock = false;
1675
- if (video) {
1676
- video.currentTime = soft;
1812
+ if (resumeAt > 0 && hls && typeof hls.startLoad === "function") {
1813
+ var target = decodeRecoverCount >= 3 ? loadFrom : resumeAt;
1814
+ seekTime = target;
1815
+ hlsResumeTarget = resumeAt;
1816
+ hlsResumeWarmup = true;
1817
+ hlsLoadAt = -1;
1818
+ hlsLoadTs = 0;
1819
+ try {
1820
+ hls.startLoad(loadFrom);
1821
+ } catch (event2) {
1677
1822
  }
1678
1823
  setTimeout(function() {
1679
- applyPendingSeek(true);
1680
- if (video && video.paused && vars["autoplay"]) {
1681
- try {
1682
- video.play();
1683
- } catch (e2) {
1684
- }
1824
+ if (hlsCanSafelySeekTo(target)) {
1825
+ finishResumeSeek(target);
1826
+ } else if (decodeRecoverCount >= 2) {
1827
+ finishResumeSeek(loadFrom);
1828
+ } else {
1829
+ applyPendingSeek(false);
1685
1830
  }
1686
- }, 400);
1831
+ }, 600);
1832
+ return true;
1833
+ }
1834
+ try {
1835
+ finishResumeSeek(Math.max(0, resumeAt - 1.5));
1687
1836
  return true;
1688
1837
  } catch (event2) {
1689
1838
  }
@@ -1730,6 +1879,7 @@ var require_ckplayer = __commonJS({
1730
1879
  C["loading"].hide();
1731
1880
  eventTarget("canplay");
1732
1881
  applyPendingSeek();
1882
+ startPendingAutoplay();
1733
1883
  },
1734
1884
  loadedData: function() {
1735
1885
  eventTarget("loadeddata");
@@ -1782,6 +1932,7 @@ var require_ckplayer = __commonJS({
1782
1932
  }
1783
1933
  pSliderMouseDown = false;
1784
1934
  loadedmetadataNum++;
1935
+ startPendingAutoplay();
1785
1936
  if (!isUndefined(ad) && !isUndefined(ad["frontPlay"]) && ad["frontPlay"] && loadedmetadataNum > 1) {
1786
1937
  player.play();
1787
1938
  calculationAdFrontTime(duration);
@@ -1865,8 +2016,6 @@ var require_ckplayer = __commonJS({
1865
2016
  msg = errorInfo.message;
1866
2017
  }
1867
2018
  if (code === 3 && recoverDecodeError()) {
1868
- CT.error = { code, message: msg };
1869
- eventTarget("error", CT.error);
1870
2019
  return;
1871
2020
  }
1872
2021
  CT.error = { code, message: msg };
@@ -1906,8 +2055,6 @@ var require_ckplayer = __commonJS({
1906
2055
  },
1907
2056
  stalled: function() {
1908
2057
  eventTarget("stalled");
1909
- CT.error = { code: 13, message: "load:stalled" };
1910
- eventTarget("error", CT.error);
1911
2058
  },
1912
2059
  suspend: function() {
1913
2060
  eventTarget("suspend");
@@ -1920,15 +2067,13 @@ var require_ckplayer = __commonJS({
1920
2067
  seeked: function() {
1921
2068
  seekApplyLock = false;
1922
2069
  decodeRecoverCount = 0;
1923
- if (paused) {
1924
- player.play();
1925
- }
2070
+ startPendingAutoplay();
1926
2071
  pSliderMouseDown = false;
1927
2072
  eventTarget("seek", { time: this.currentTime, state: "seeked" });
1928
2073
  eventTarget("seeked");
1929
2074
  },
1930
2075
  seeking: function() {
1931
- if (paused) {
2076
+ if (paused && !seekApplyLock && !hlsResumeWarmup && !seekTime) {
1932
2077
  player.play();
1933
2078
  }
1934
2079
  var seekingTime = this.currentTime;
@@ -2699,9 +2844,12 @@ var require_ckplayer = __commonJS({
2699
2844
  } else {
2700
2845
  if (loadedmetadataNum > 0 && video) {
2701
2846
  try {
2702
- video.play();
2847
+ var playPromise = video.play();
2848
+ if (playPromise && typeof playPromise.catch === "function") {
2849
+ playPromise.catch(function() {
2850
+ });
2851
+ }
2703
2852
  } catch (event2) {
2704
- console.error(event2);
2705
2853
  }
2706
2854
  }
2707
2855
  }
@@ -2888,6 +3036,17 @@ var require_ckplayer = __commonJS({
2888
3036
  applyPendingSeek(false);
2889
3037
  return player;
2890
3038
  }
3039
+ if (hls && target > 1 && !hlsCanSafelySeekTo(target)) {
3040
+ seekTime = target;
3041
+ hlsResumeWarmup = true;
3042
+ hlsResumeTarget = target;
3043
+ try {
3044
+ hls.startLoad(hlsPriorLoadTime(target));
3045
+ } catch (event2) {
3046
+ }
3047
+ applyPendingSeek(false);
3048
+ return player;
3049
+ }
2891
3050
  if (hlsSeekTo(target, false)) {
2892
3051
  seekTime = 0;
2893
3052
  return player;
@@ -6106,7 +6265,7 @@ var require_ckplayer = __commonJS({
6106
6265
  if (!isRetry && (!vars || vars["cdnFallback"] !== false)) {
6107
6266
  var cdn = typeof window !== "undefined" && window.ckplayerPlusCdn ? window.ckplayerPlusCdn : ckplayerPlusDefaultCdn;
6108
6267
  var m = String(file).match(/\/(hls\.js|flv\.js|mpegts\.js|language)\/([^/?#]+)(?:[?#].*)?$/i);
6109
- if (cdn && cdn.indexOf("1.1.0") === -1 && m) {
6268
+ if (cdn && cdn.indexOf("1.1.2") === -1 && m) {
6110
6269
  if (cdn.slice(-1) !== "/") {
6111
6270
  cdn += "/";
6112
6271
  }
@@ -6924,15 +7083,16 @@ function buildPlayerConfig(input) {
6924
7083
  if (input.pluginPath) {
6925
7084
  config.pluginPath = input.pluginPath;
6926
7085
  }
6927
- if (input.seek != null && input.seek !== "" && !isNaN(parseFloat(input.seek)) && parseFloat(input.seek) > 0) {
7086
+ var hasSeekProp = input.seek != null && input.seek !== "" && !isNaN(parseFloat(input.seek)) && parseFloat(input.seek) > 0;
7087
+ if (hasSeekProp) {
6928
7088
  config.seek = parseFloat(input.seek);
6929
7089
  }
6930
7090
  for (var key in opts) {
6931
- if (Object.prototype.hasOwnProperty.call(opts, key) && key !== "container") {
7091
+ if (Object.prototype.hasOwnProperty.call(opts, key) && key !== "container" && !(key === "seek" && hasSeekProp)) {
6932
7092
  config[key] = opts[key];
6933
7093
  }
6934
7094
  }
6935
- if (typeof config.loaded === "string") {
7095
+ if (config.loaded != null && typeof config.loaded !== "function") {
6936
7096
  delete config.loaded;
6937
7097
  }
6938
7098
  return config;