ckplayer-plus 1.1.0 → 1.1.1

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
@@ -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.1/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.1") > -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,38 @@ 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;
845
+ hlsConf.startPosition = hlsPriorLoadTime(resumeAt);
846
846
  }
847
847
  hls = new Hls(hlsConf);
848
848
  hls.loadSource(url);
849
849
  hls.attachMedia(video);
850
850
  hls.on(Hls.Events.MANIFEST_PARSED, function() {
851
+ if (hlsResumeWarmup && seekTime > 0) {
852
+ try {
853
+ hls.startLoad(hlsPriorLoadTime(seekTime));
854
+ } catch (event2) {
855
+ }
856
+ return;
857
+ }
851
858
  if (!hlsStartPositionUsed) {
852
859
  applyPendingSeek();
853
860
  }
854
861
  });
855
862
  hls.on(Hls.Events.FRAG_BUFFERED, function(event2, data) {
863
+ if (hlsResumeWarmup && seekTime > 0) {
864
+ if (hlsCanSafelySeekTo(seekTime)) {
865
+ hlsResumeWarmup = false;
866
+ applySeekToMedia(seekTime);
867
+ }
868
+ return;
869
+ }
856
870
  if (hlsResumeTarget <= 0 || !data || !data.frag) {
857
871
  return;
858
872
  }
@@ -1585,12 +1599,53 @@ var require_ckplayer = __commonJS({
1585
1599
  } catch (event2) {
1586
1600
  }
1587
1601
  return false;
1602
+ }, hlsPriorLoadTime = function(t) {
1603
+ if (isNaN(t) || t <= 0) {
1604
+ return 0;
1605
+ }
1606
+ return Math.max(0, t - 12);
1607
+ }, hlsCanSafelySeekTo = function(t) {
1608
+ if (!video || isUndefined(video.buffered) || isNaN(t) || t < 0) {
1609
+ return false;
1610
+ }
1611
+ try {
1612
+ var buf = video.buffered;
1613
+ var needFrom = hlsPriorLoadTime(t);
1614
+ for (var i = 0; i < buf.length; i++) {
1615
+ var start = buf.start(i);
1616
+ var end = buf.end(i);
1617
+ if (t <= end + 0.15 && needFrom >= start - 0.35) {
1618
+ return true;
1619
+ }
1620
+ }
1621
+ } catch (event2) {
1622
+ }
1623
+ return false;
1588
1624
  }, clearSeekRetry = function() {
1589
1625
  if (seekRetryTimer) {
1590
1626
  clearTimeout(seekRetryTimer);
1591
1627
  seekRetryTimer = null;
1592
1628
  }
1593
1629
  seekRetryCount = 0;
1630
+ }, startPendingAutoplay = function() {
1631
+ if (!autoplayPending || !video || !vars["autoplay"] || seekTime || seekApplyLock || loadedmetadataNum < 1) {
1632
+ return;
1633
+ }
1634
+ autoplayPending = false;
1635
+ player.play();
1636
+ }, applySeekToMedia = function(t) {
1637
+ clearSeekRetry();
1638
+ seekApplyLock = true;
1639
+ seekTime = 0;
1640
+ try {
1641
+ video.currentTime = t;
1642
+ } catch (event2) {
1643
+ seekTime = t;
1644
+ seekApplyLock = false;
1645
+ }
1646
+ setTimeout(function() {
1647
+ seekApplyLock = false;
1648
+ }, 800);
1594
1649
  }, applyPendingSeek = function(force) {
1595
1650
  if (!seekTime || !video || seekApplyLock) {
1596
1651
  return;
@@ -1614,14 +1669,39 @@ var require_ckplayer = __commonJS({
1614
1669
  firstSeekTime = t;
1615
1670
  }
1616
1671
  }
1617
- if (hlsSeekTo(t, !!force)) {
1618
- clearSeekRetry();
1619
- seekTime = 0;
1672
+ if (hlsResumeWarmup) {
1673
+ if (hlsCanSafelySeekTo(t)) {
1674
+ hlsResumeWarmup = false;
1675
+ applySeekToMedia(t);
1676
+ }
1620
1677
  return;
1621
1678
  }
1622
- var readyEnough = !isUndefined(video.readyState) && video.readyState >= 2;
1623
- var bufferedOk = timeInBuffered(t);
1624
- if (!force && !bufferedOk && (!readyEnough || video.readyState < 3)) {
1679
+ if (hls && typeof hls.startLoad === "function") {
1680
+ if (!hlsCanSafelySeekTo(t) && t > 1) {
1681
+ hlsResumeWarmup = true;
1682
+ hlsResumeTarget = t;
1683
+ try {
1684
+ hls.startLoad(hlsPriorLoadTime(t));
1685
+ } catch (event2) {
1686
+ }
1687
+ seekRetryCount++;
1688
+ if (seekRetryCount <= 50) {
1689
+ if (seekRetryTimer) {
1690
+ clearTimeout(seekRetryTimer);
1691
+ }
1692
+ seekRetryTimer = setTimeout(function() {
1693
+ applyPendingSeek(false);
1694
+ }, 200);
1695
+ }
1696
+ return;
1697
+ }
1698
+ if (hlsSeekTo(t, !!force)) {
1699
+ clearSeekRetry();
1700
+ seekTime = 0;
1701
+ return;
1702
+ }
1703
+ }
1704
+ if (!force && (!isUndefined(video.readyState) && video.readyState < 1)) {
1625
1705
  seekRetryCount++;
1626
1706
  if (seekRetryCount <= 50) {
1627
1707
  if (seekRetryTimer) {
@@ -1633,45 +1713,54 @@ var require_ckplayer = __commonJS({
1633
1713
  return;
1634
1714
  }
1635
1715
  }
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);
1716
+ applySeekToMedia(t);
1648
1717
  }, recoverDecodeError = function() {
1649
- if (decodeRecoverCount >= 2) {
1718
+ if (decodeRecoverCount >= 3) {
1650
1719
  return false;
1651
1720
  }
1652
1721
  decodeRecoverCount++;
1653
- var resumeAt = playTime > 0 ? playTime : vars["seek"] ? parseFloat(vars["seek"]) : 0;
1722
+ var resumeAt = hlsResumeTarget > 0 ? hlsResumeTarget : playTime > 0 ? playTime : vars["seek"] ? parseFloat(vars["seek"]) : 0;
1654
1723
  if (isNaN(resumeAt) || resumeAt < 0) {
1655
1724
  resumeAt = 0;
1656
1725
  }
1726
+ var loadFrom = Math.max(0, resumeAt - 12 * decodeRecoverCount);
1727
+ seekApplyLock = false;
1728
+ clearSeekRetry();
1657
1729
  try {
1658
1730
  if (hls && typeof hls.recoverMediaError === "function") {
1659
1731
  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
1732
  }
1669
1733
  } catch (event2) {
1670
1734
  }
1735
+ if (resumeAt > 0 && hls && typeof hls.startLoad === "function") {
1736
+ seekTime = resumeAt;
1737
+ hlsResumeTarget = resumeAt;
1738
+ hlsResumeWarmup = true;
1739
+ hlsLoadAt = -1;
1740
+ hlsLoadTs = 0;
1741
+ try {
1742
+ hls.startLoad(loadFrom);
1743
+ } catch (event2) {
1744
+ }
1745
+ setTimeout(function() {
1746
+ if (hlsCanSafelySeekTo(resumeAt)) {
1747
+ hlsResumeWarmup = false;
1748
+ applySeekToMedia(resumeAt);
1749
+ if (video && video.paused && vars["autoplay"]) {
1750
+ try {
1751
+ video.play();
1752
+ } catch (e2) {
1753
+ }
1754
+ }
1755
+ } else {
1756
+ applyPendingSeek(false);
1757
+ }
1758
+ }, 500);
1759
+ return true;
1760
+ }
1671
1761
  try {
1672
1762
  var soft = Math.max(0, resumeAt - 1.5);
1673
1763
  seekTime = resumeAt;
1674
- seekApplyLock = false;
1675
1764
  if (video) {
1676
1765
  video.currentTime = soft;
1677
1766
  }
@@ -1730,6 +1819,7 @@ var require_ckplayer = __commonJS({
1730
1819
  C["loading"].hide();
1731
1820
  eventTarget("canplay");
1732
1821
  applyPendingSeek();
1822
+ startPendingAutoplay();
1733
1823
  },
1734
1824
  loadedData: function() {
1735
1825
  eventTarget("loadeddata");
@@ -1782,6 +1872,7 @@ var require_ckplayer = __commonJS({
1782
1872
  }
1783
1873
  pSliderMouseDown = false;
1784
1874
  loadedmetadataNum++;
1875
+ startPendingAutoplay();
1785
1876
  if (!isUndefined(ad) && !isUndefined(ad["frontPlay"]) && ad["frontPlay"] && loadedmetadataNum > 1) {
1786
1877
  player.play();
1787
1878
  calculationAdFrontTime(duration);
@@ -1865,8 +1956,6 @@ var require_ckplayer = __commonJS({
1865
1956
  msg = errorInfo.message;
1866
1957
  }
1867
1958
  if (code === 3 && recoverDecodeError()) {
1868
- CT.error = { code, message: msg };
1869
- eventTarget("error", CT.error);
1870
1959
  return;
1871
1960
  }
1872
1961
  CT.error = { code, message: msg };
@@ -1906,8 +1995,6 @@ var require_ckplayer = __commonJS({
1906
1995
  },
1907
1996
  stalled: function() {
1908
1997
  eventTarget("stalled");
1909
- CT.error = { code: 13, message: "load:stalled" };
1910
- eventTarget("error", CT.error);
1911
1998
  },
1912
1999
  suspend: function() {
1913
2000
  eventTarget("suspend");
@@ -1920,9 +2007,7 @@ var require_ckplayer = __commonJS({
1920
2007
  seeked: function() {
1921
2008
  seekApplyLock = false;
1922
2009
  decodeRecoverCount = 0;
1923
- if (paused) {
1924
- player.play();
1925
- }
2010
+ startPendingAutoplay();
1926
2011
  pSliderMouseDown = false;
1927
2012
  eventTarget("seek", { time: this.currentTime, state: "seeked" });
1928
2013
  eventTarget("seeked");
@@ -2699,9 +2784,12 @@ var require_ckplayer = __commonJS({
2699
2784
  } else {
2700
2785
  if (loadedmetadataNum > 0 && video) {
2701
2786
  try {
2702
- video.play();
2787
+ var playPromise = video.play();
2788
+ if (playPromise && typeof playPromise.catch === "function") {
2789
+ playPromise.catch(function() {
2790
+ });
2791
+ }
2703
2792
  } catch (event2) {
2704
- console.error(event2);
2705
2793
  }
2706
2794
  }
2707
2795
  }
@@ -2888,6 +2976,17 @@ var require_ckplayer = __commonJS({
2888
2976
  applyPendingSeek(false);
2889
2977
  return player;
2890
2978
  }
2979
+ if (hls && target > 1 && !hlsCanSafelySeekTo(target)) {
2980
+ seekTime = target;
2981
+ hlsResumeWarmup = true;
2982
+ hlsResumeTarget = target;
2983
+ try {
2984
+ hls.startLoad(hlsPriorLoadTime(target));
2985
+ } catch (event2) {
2986
+ }
2987
+ applyPendingSeek(false);
2988
+ return player;
2989
+ }
2891
2990
  if (hlsSeekTo(target, false)) {
2892
2991
  seekTime = 0;
2893
2992
  return player;
@@ -6106,7 +6205,7 @@ var require_ckplayer = __commonJS({
6106
6205
  if (!isRetry && (!vars || vars["cdnFallback"] !== false)) {
6107
6206
  var cdn = typeof window !== "undefined" && window.ckplayerPlusCdn ? window.ckplayerPlusCdn : ckplayerPlusDefaultCdn;
6108
6207
  var m = String(file).match(/\/(hls\.js|flv\.js|mpegts\.js|language)\/([^/?#]+)(?:[?#].*)?$/i);
6109
- if (cdn && cdn.indexOf("1.1.0") === -1 && m) {
6208
+ if (cdn && cdn.indexOf("1.1.1") === -1 && m) {
6110
6209
  if (cdn.slice(-1) !== "/") {
6111
6210
  cdn += "/";
6112
6211
  }