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.js CHANGED
@@ -119,8 +119,8 @@ var require_ckplayer = __commonJS({
119
119
  //默认需要跳转的秒数
120
120
  next: null,
121
121
  //下一集按钮动作
122
- loaded: "",
123
- //加载播放器后调用的函数
122
+ loaded: null,
123
+ //加载播放器后调用的函数(仅支持 function)
124
124
  plug: "",
125
125
  //使用插件
126
126
  duration: 0,
@@ -204,7 +204,7 @@ var require_ckplayer = __commonJS({
204
204
  cdnFallback: true
205
205
  // getPath 失败时是否回退到 jsDelivr(内网可设 false,并配置 pluginPath)
206
206
  };
207
- var ckplayerPlusDefaultCdn = "https://cdn.jsdelivr.net/npm/ckplayer-plus@1.1.0/dist/";
207
+ var ckplayerPlusDefaultCdn = "https://cdn.jsdelivr.net/npm/ckplayer-plus@1.1.1/dist/";
208
208
  function ckplayerEmbed(videoObj) {
209
209
  var rightMenu = [
210
210
  {
@@ -232,9 +232,11 @@ var require_ckplayer = __commonJS({
232
232
  var seekRetryTimer = null;
233
233
  var seekRetryCount = 0;
234
234
  var seekApplyLock = false;
235
+ var autoplayPending = false;
235
236
  var decodeRecoverCount = 0;
236
237
  var hlsStartPositionUsed = false;
237
238
  var hlsResumeTarget = -1;
239
+ var hlsResumeWarmup = false;
238
240
  var hlsLoadAt = -1;
239
241
  var hlsLoadTs = 0;
240
242
  var oldTime = 0, playTime = 0, firstSeekTime = -1, maxSeeTime = 0;
@@ -424,7 +426,7 @@ var require_ckplayer = __commonJS({
424
426
  }
425
427
  var allowCdn = !vars || vars["cdnFallback"] !== false;
426
428
  var cdn = typeof window !== "undefined" && window.ckplayerPlusCdn ? window.ckplayerPlusCdn : ckplayerPlusDefaultCdn;
427
- if (!allowCdn || !cdn || cdn.indexOf("1.1.0") > -1) {
429
+ if (!allowCdn || !cdn || cdn.indexOf("1.1.1") > -1) {
428
430
  return folder + "/" + file;
429
431
  }
430
432
  if (cdn.slice(-1) !== "/") {
@@ -518,8 +520,8 @@ var require_ckplayer = __commonJS({
518
520
  player.volume(0);
519
521
  player.muted();
520
522
  recoveryVolume = true;
521
- video.attr("autoplay", "autoplay");
522
- paused = false;
523
+ video.attr("preload", "auto");
524
+ autoplayPending = true;
523
525
  } else {
524
526
  video.attr("preload", "metadata");
525
527
  }
@@ -671,6 +673,7 @@ var require_ckplayer = __commonJS({
671
673
  seekApplyLock = false;
672
674
  hlsStartPositionUsed = false;
673
675
  hlsResumeTarget = -1;
676
+ hlsResumeWarmup = false;
674
677
  hlsLoadAt = -1;
675
678
  hlsLoadTs = 0;
676
679
  decodeRecoverCount = 0;
@@ -826,27 +829,38 @@ var require_ckplayer = __commonJS({
826
829
  resumeAt = parseResumeSeekFromVars();
827
830
  }
828
831
  if (resumeAt && resumeAt > 0 && (isUndefined(vars["live"]) || !vars["live"])) {
829
- hlsConf.startPosition = resumeAt;
830
832
  maxSeeTime = Math.max(maxSeeTime, resumeAt);
831
833
  if (firstSeekTime < 0) {
832
834
  firstSeekTime = resumeAt;
833
835
  }
836
+ seekTime = resumeAt;
834
837
  hlsResumeTarget = resumeAt;
835
- hlsLoadAt = resumeAt;
836
- hlsLoadTs = Date.now();
837
- seekTime = 0;
838
- hlsStartPositionUsed = true;
839
- clearSeekRetry();
838
+ hlsResumeWarmup = true;
839
+ hlsConf.startPosition = hlsPriorLoadTime(resumeAt);
840
840
  }
841
841
  hls = new Hls(hlsConf);
842
842
  hls.loadSource(url);
843
843
  hls.attachMedia(video);
844
844
  hls.on(Hls.Events.MANIFEST_PARSED, function() {
845
+ if (hlsResumeWarmup && seekTime > 0) {
846
+ try {
847
+ hls.startLoad(hlsPriorLoadTime(seekTime));
848
+ } catch (event2) {
849
+ }
850
+ return;
851
+ }
845
852
  if (!hlsStartPositionUsed) {
846
853
  applyPendingSeek();
847
854
  }
848
855
  });
849
856
  hls.on(Hls.Events.FRAG_BUFFERED, function(event2, data) {
857
+ if (hlsResumeWarmup && seekTime > 0) {
858
+ if (hlsCanSafelySeekTo(seekTime)) {
859
+ hlsResumeWarmup = false;
860
+ applySeekToMedia(seekTime);
861
+ }
862
+ return;
863
+ }
850
864
  if (hlsResumeTarget <= 0 || !data || !data.frag) {
851
865
  return;
852
866
  }
@@ -1579,12 +1593,53 @@ var require_ckplayer = __commonJS({
1579
1593
  } catch (event2) {
1580
1594
  }
1581
1595
  return false;
1596
+ }, hlsPriorLoadTime = function(t) {
1597
+ if (isNaN(t) || t <= 0) {
1598
+ return 0;
1599
+ }
1600
+ return Math.max(0, t - 12);
1601
+ }, hlsCanSafelySeekTo = function(t) {
1602
+ if (!video || isUndefined(video.buffered) || isNaN(t) || t < 0) {
1603
+ return false;
1604
+ }
1605
+ try {
1606
+ var buf = video.buffered;
1607
+ var needFrom = hlsPriorLoadTime(t);
1608
+ for (var i = 0; i < buf.length; i++) {
1609
+ var start = buf.start(i);
1610
+ var end = buf.end(i);
1611
+ if (t <= end + 0.15 && needFrom >= start - 0.35) {
1612
+ return true;
1613
+ }
1614
+ }
1615
+ } catch (event2) {
1616
+ }
1617
+ return false;
1582
1618
  }, clearSeekRetry = function() {
1583
1619
  if (seekRetryTimer) {
1584
1620
  clearTimeout(seekRetryTimer);
1585
1621
  seekRetryTimer = null;
1586
1622
  }
1587
1623
  seekRetryCount = 0;
1624
+ }, startPendingAutoplay = function() {
1625
+ if (!autoplayPending || !video || !vars["autoplay"] || seekTime || seekApplyLock || loadedmetadataNum < 1) {
1626
+ return;
1627
+ }
1628
+ autoplayPending = false;
1629
+ player.play();
1630
+ }, applySeekToMedia = function(t) {
1631
+ clearSeekRetry();
1632
+ seekApplyLock = true;
1633
+ seekTime = 0;
1634
+ try {
1635
+ video.currentTime = t;
1636
+ } catch (event2) {
1637
+ seekTime = t;
1638
+ seekApplyLock = false;
1639
+ }
1640
+ setTimeout(function() {
1641
+ seekApplyLock = false;
1642
+ }, 800);
1588
1643
  }, applyPendingSeek = function(force) {
1589
1644
  if (!seekTime || !video || seekApplyLock) {
1590
1645
  return;
@@ -1608,14 +1663,39 @@ var require_ckplayer = __commonJS({
1608
1663
  firstSeekTime = t;
1609
1664
  }
1610
1665
  }
1611
- if (hlsSeekTo(t, !!force)) {
1612
- clearSeekRetry();
1613
- seekTime = 0;
1666
+ if (hlsResumeWarmup) {
1667
+ if (hlsCanSafelySeekTo(t)) {
1668
+ hlsResumeWarmup = false;
1669
+ applySeekToMedia(t);
1670
+ }
1614
1671
  return;
1615
1672
  }
1616
- var readyEnough = !isUndefined(video.readyState) && video.readyState >= 2;
1617
- var bufferedOk = timeInBuffered(t);
1618
- if (!force && !bufferedOk && (!readyEnough || video.readyState < 3)) {
1673
+ if (hls && typeof hls.startLoad === "function") {
1674
+ if (!hlsCanSafelySeekTo(t) && t > 1) {
1675
+ hlsResumeWarmup = true;
1676
+ hlsResumeTarget = t;
1677
+ try {
1678
+ hls.startLoad(hlsPriorLoadTime(t));
1679
+ } catch (event2) {
1680
+ }
1681
+ seekRetryCount++;
1682
+ if (seekRetryCount <= 50) {
1683
+ if (seekRetryTimer) {
1684
+ clearTimeout(seekRetryTimer);
1685
+ }
1686
+ seekRetryTimer = setTimeout(function() {
1687
+ applyPendingSeek(false);
1688
+ }, 200);
1689
+ }
1690
+ return;
1691
+ }
1692
+ if (hlsSeekTo(t, !!force)) {
1693
+ clearSeekRetry();
1694
+ seekTime = 0;
1695
+ return;
1696
+ }
1697
+ }
1698
+ if (!force && (!isUndefined(video.readyState) && video.readyState < 1)) {
1619
1699
  seekRetryCount++;
1620
1700
  if (seekRetryCount <= 50) {
1621
1701
  if (seekRetryTimer) {
@@ -1627,45 +1707,54 @@ var require_ckplayer = __commonJS({
1627
1707
  return;
1628
1708
  }
1629
1709
  }
1630
- clearSeekRetry();
1631
- seekApplyLock = true;
1632
- seekTime = 0;
1633
- try {
1634
- video.currentTime = t;
1635
- } catch (event2) {
1636
- seekTime = t;
1637
- seekApplyLock = false;
1638
- }
1639
- setTimeout(function() {
1640
- seekApplyLock = false;
1641
- }, 800);
1710
+ applySeekToMedia(t);
1642
1711
  }, recoverDecodeError = function() {
1643
- if (decodeRecoverCount >= 2) {
1712
+ if (decodeRecoverCount >= 3) {
1644
1713
  return false;
1645
1714
  }
1646
1715
  decodeRecoverCount++;
1647
- var resumeAt = playTime > 0 ? playTime : vars["seek"] ? parseFloat(vars["seek"]) : 0;
1716
+ var resumeAt = hlsResumeTarget > 0 ? hlsResumeTarget : playTime > 0 ? playTime : vars["seek"] ? parseFloat(vars["seek"]) : 0;
1648
1717
  if (isNaN(resumeAt) || resumeAt < 0) {
1649
1718
  resumeAt = 0;
1650
1719
  }
1720
+ var loadFrom = Math.max(0, resumeAt - 12 * decodeRecoverCount);
1721
+ seekApplyLock = false;
1722
+ clearSeekRetry();
1651
1723
  try {
1652
1724
  if (hls && typeof hls.recoverMediaError === "function") {
1653
1725
  hls.recoverMediaError();
1654
- if (resumeAt > 0) {
1655
- seekTime = resumeAt;
1656
- seekApplyLock = false;
1657
- setTimeout(function() {
1658
- applyPendingSeek(true);
1659
- }, 300);
1660
- }
1661
- return true;
1662
1726
  }
1663
1727
  } catch (event2) {
1664
1728
  }
1729
+ if (resumeAt > 0 && hls && typeof hls.startLoad === "function") {
1730
+ seekTime = resumeAt;
1731
+ hlsResumeTarget = resumeAt;
1732
+ hlsResumeWarmup = true;
1733
+ hlsLoadAt = -1;
1734
+ hlsLoadTs = 0;
1735
+ try {
1736
+ hls.startLoad(loadFrom);
1737
+ } catch (event2) {
1738
+ }
1739
+ setTimeout(function() {
1740
+ if (hlsCanSafelySeekTo(resumeAt)) {
1741
+ hlsResumeWarmup = false;
1742
+ applySeekToMedia(resumeAt);
1743
+ if (video && video.paused && vars["autoplay"]) {
1744
+ try {
1745
+ video.play();
1746
+ } catch (e2) {
1747
+ }
1748
+ }
1749
+ } else {
1750
+ applyPendingSeek(false);
1751
+ }
1752
+ }, 500);
1753
+ return true;
1754
+ }
1665
1755
  try {
1666
1756
  var soft = Math.max(0, resumeAt - 1.5);
1667
1757
  seekTime = resumeAt;
1668
- seekApplyLock = false;
1669
1758
  if (video) {
1670
1759
  video.currentTime = soft;
1671
1760
  }
@@ -1724,6 +1813,7 @@ var require_ckplayer = __commonJS({
1724
1813
  C["loading"].hide();
1725
1814
  eventTarget("canplay");
1726
1815
  applyPendingSeek();
1816
+ startPendingAutoplay();
1727
1817
  },
1728
1818
  loadedData: function() {
1729
1819
  eventTarget("loadeddata");
@@ -1776,6 +1866,7 @@ var require_ckplayer = __commonJS({
1776
1866
  }
1777
1867
  pSliderMouseDown = false;
1778
1868
  loadedmetadataNum++;
1869
+ startPendingAutoplay();
1779
1870
  if (!isUndefined(ad) && !isUndefined(ad["frontPlay"]) && ad["frontPlay"] && loadedmetadataNum > 1) {
1780
1871
  player.play();
1781
1872
  calculationAdFrontTime(duration);
@@ -1859,8 +1950,6 @@ var require_ckplayer = __commonJS({
1859
1950
  msg = errorInfo.message;
1860
1951
  }
1861
1952
  if (code === 3 && recoverDecodeError()) {
1862
- CT.error = { code, message: msg };
1863
- eventTarget("error", CT.error);
1864
1953
  return;
1865
1954
  }
1866
1955
  CT.error = { code, message: msg };
@@ -1900,8 +1989,6 @@ var require_ckplayer = __commonJS({
1900
1989
  },
1901
1990
  stalled: function() {
1902
1991
  eventTarget("stalled");
1903
- CT.error = { code: 13, message: "load:stalled" };
1904
- eventTarget("error", CT.error);
1905
1992
  },
1906
1993
  suspend: function() {
1907
1994
  eventTarget("suspend");
@@ -1914,9 +2001,7 @@ var require_ckplayer = __commonJS({
1914
2001
  seeked: function() {
1915
2002
  seekApplyLock = false;
1916
2003
  decodeRecoverCount = 0;
1917
- if (paused) {
1918
- player.play();
1919
- }
2004
+ startPendingAutoplay();
1920
2005
  pSliderMouseDown = false;
1921
2006
  eventTarget("seek", { time: this.currentTime, state: "seeked" });
1922
2007
  eventTarget("seeked");
@@ -2693,9 +2778,12 @@ var require_ckplayer = __commonJS({
2693
2778
  } else {
2694
2779
  if (loadedmetadataNum > 0 && video) {
2695
2780
  try {
2696
- video.play();
2781
+ var playPromise = video.play();
2782
+ if (playPromise && typeof playPromise.catch === "function") {
2783
+ playPromise.catch(function() {
2784
+ });
2785
+ }
2697
2786
  } catch (event2) {
2698
- console.error(event2);
2699
2787
  }
2700
2788
  }
2701
2789
  }
@@ -2882,6 +2970,17 @@ var require_ckplayer = __commonJS({
2882
2970
  applyPendingSeek(false);
2883
2971
  return player;
2884
2972
  }
2973
+ if (hls && target > 1 && !hlsCanSafelySeekTo(target)) {
2974
+ seekTime = target;
2975
+ hlsResumeWarmup = true;
2976
+ hlsResumeTarget = target;
2977
+ try {
2978
+ hls.startLoad(hlsPriorLoadTime(target));
2979
+ } catch (event2) {
2980
+ }
2981
+ applyPendingSeek(false);
2982
+ return player;
2983
+ }
2885
2984
  if (hlsSeekTo(target, false)) {
2886
2985
  seekTime = 0;
2887
2986
  return player;
@@ -6100,7 +6199,7 @@ var require_ckplayer = __commonJS({
6100
6199
  if (!isRetry && (!vars || vars["cdnFallback"] !== false)) {
6101
6200
  var cdn = typeof window !== "undefined" && window.ckplayerPlusCdn ? window.ckplayerPlusCdn : ckplayerPlusDefaultCdn;
6102
6201
  var m = String(file).match(/\/(hls\.js|flv\.js|mpegts\.js|language)\/([^/?#]+)(?:[?#].*)?$/i);
6103
- if (cdn && cdn.indexOf("1.1.0") === -1 && m) {
6202
+ if (cdn && cdn.indexOf("1.1.1") === -1 && m) {
6104
6203
  if (cdn.slice(-1) !== "/") {
6105
6204
  cdn += "/";
6106
6205
  }