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/vue.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.2/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.2") > -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,50 @@ 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;
840
839
  }
841
840
  hls = new Hls(hlsConf);
842
841
  hls.loadSource(url);
843
842
  hls.attachMedia(video);
844
843
  hls.on(Hls.Events.MANIFEST_PARSED, function() {
844
+ if (hlsResumeWarmup && seekTime > 0) {
845
+ var loadAt = hlsPriorLoadTime(seekTime);
846
+ try {
847
+ hls.startLoad(loadAt);
848
+ } catch (event2) {
849
+ }
850
+ setTimeout(function() {
851
+ if (!hlsResumeWarmup || !seekTime) {
852
+ return;
853
+ }
854
+ var target = seekTime;
855
+ if (hlsCanSafelySeekTo(target)) {
856
+ finishResumeSeek(target);
857
+ return;
858
+ }
859
+ var snap = hlsPriorLoadTime(target);
860
+ hlsResumeWarmup = false;
861
+ finishResumeSeek(snap);
862
+ }, 5e3);
863
+ return;
864
+ }
845
865
  if (!hlsStartPositionUsed) {
846
866
  applyPendingSeek();
847
867
  }
848
868
  });
849
869
  hls.on(Hls.Events.FRAG_BUFFERED, function(event2, data) {
870
+ if (hlsResumeWarmup && seekTime > 0) {
871
+ if (hlsCanSafelySeekTo(seekTime)) {
872
+ finishResumeSeek(seekTime);
873
+ }
874
+ return;
875
+ }
850
876
  if (hlsResumeTarget <= 0 || !data || !data.frag) {
851
877
  return;
852
878
  }
@@ -1579,12 +1605,116 @@ var require_ckplayer = __commonJS({
1579
1605
  } catch (event2) {
1580
1606
  }
1581
1607
  return false;
1608
+ }, hlsFragAround = function(t) {
1609
+ if (!hls || isNaN(t) || t < 0) {
1610
+ return null;
1611
+ }
1612
+ try {
1613
+ var level = -1;
1614
+ if (typeof hls.currentLevel === "number" && hls.currentLevel >= 0) {
1615
+ level = hls.currentLevel;
1616
+ } else if (typeof hls.firstLevel === "number" && hls.firstLevel >= 0) {
1617
+ level = hls.firstLevel;
1618
+ } else {
1619
+ level = 0;
1620
+ }
1621
+ var details = hls.levels && hls.levels[level] && hls.levels[level].details;
1622
+ var frags = details && details.fragments;
1623
+ if (!frags || !frags.length) {
1624
+ return null;
1625
+ }
1626
+ for (var i = 0; i < frags.length; i++) {
1627
+ var f = frags[i];
1628
+ if (!f) {
1629
+ continue;
1630
+ }
1631
+ var start = f.start || 0;
1632
+ var end = start + (f.duration || 0);
1633
+ if (t >= start - 0.05 && t < end + 0.05) {
1634
+ return f;
1635
+ }
1636
+ }
1637
+ return frags[frags.length - 1];
1638
+ } catch (event2) {
1639
+ }
1640
+ return null;
1641
+ }, hlsPriorLoadTime = function(t) {
1642
+ if (isNaN(t) || t <= 0) {
1643
+ return 0;
1644
+ }
1645
+ var frag = hlsFragAround(t);
1646
+ if (frag && !isUndefined(frag.start)) {
1647
+ return Math.max(0, frag.start);
1648
+ }
1649
+ return Math.max(0, t - 12);
1650
+ }, hlsCanSafelySeekTo = function(t) {
1651
+ if (!video || isUndefined(video.buffered) || isNaN(t) || t < 0) {
1652
+ return false;
1653
+ }
1654
+ if (!timeInBuffered(t)) {
1655
+ return false;
1656
+ }
1657
+ var fragStart = hlsPriorLoadTime(t);
1658
+ try {
1659
+ var buf = video.buffered;
1660
+ for (var i = 0; i < buf.length; i++) {
1661
+ var start = buf.start(i);
1662
+ var end = buf.end(i);
1663
+ if (fragStart >= start - 0.35 && t <= end + 0.15) {
1664
+ return true;
1665
+ }
1666
+ }
1667
+ } catch (event2) {
1668
+ }
1669
+ return false;
1670
+ }, finishResumeSeek = function(t) {
1671
+ hlsResumeWarmup = false;
1672
+ applySeekToMedia(t);
1673
+ setTimeout(function() {
1674
+ if (!video) {
1675
+ return;
1676
+ }
1677
+ if (C["buffer"]) {
1678
+ C["buffer"].hide();
1679
+ }
1680
+ waited = true;
1681
+ if (vars["autoplay"] || autoplayPending) {
1682
+ try {
1683
+ var p = video.play();
1684
+ if (p && typeof p.then === "function") {
1685
+ p.catch(function() {
1686
+ });
1687
+ }
1688
+ } catch (event2) {
1689
+ }
1690
+ autoplayPending = false;
1691
+ }
1692
+ }, 120);
1582
1693
  }, clearSeekRetry = function() {
1583
1694
  if (seekRetryTimer) {
1584
1695
  clearTimeout(seekRetryTimer);
1585
1696
  seekRetryTimer = null;
1586
1697
  }
1587
1698
  seekRetryCount = 0;
1699
+ }, startPendingAutoplay = function() {
1700
+ if (!autoplayPending || !video || !vars["autoplay"] || seekTime || seekApplyLock || loadedmetadataNum < 1) {
1701
+ return;
1702
+ }
1703
+ autoplayPending = false;
1704
+ player.play();
1705
+ }, applySeekToMedia = function(t) {
1706
+ clearSeekRetry();
1707
+ seekApplyLock = true;
1708
+ seekTime = 0;
1709
+ try {
1710
+ video.currentTime = t;
1711
+ } catch (event2) {
1712
+ seekTime = t;
1713
+ seekApplyLock = false;
1714
+ }
1715
+ setTimeout(function() {
1716
+ seekApplyLock = false;
1717
+ }, 800);
1588
1718
  }, applyPendingSeek = function(force) {
1589
1719
  if (!seekTime || !video || seekApplyLock) {
1590
1720
  return;
@@ -1608,14 +1738,38 @@ var require_ckplayer = __commonJS({
1608
1738
  firstSeekTime = t;
1609
1739
  }
1610
1740
  }
1611
- if (hlsSeekTo(t, !!force)) {
1612
- clearSeekRetry();
1613
- seekTime = 0;
1741
+ if (hlsResumeWarmup) {
1742
+ if (hlsCanSafelySeekTo(t)) {
1743
+ finishResumeSeek(t);
1744
+ }
1614
1745
  return;
1615
1746
  }
1616
- var readyEnough = !isUndefined(video.readyState) && video.readyState >= 2;
1617
- var bufferedOk = timeInBuffered(t);
1618
- if (!force && !bufferedOk && (!readyEnough || video.readyState < 3)) {
1747
+ if (hls && typeof hls.startLoad === "function") {
1748
+ if (!hlsCanSafelySeekTo(t) && t > 1) {
1749
+ hlsResumeWarmup = true;
1750
+ hlsResumeTarget = t;
1751
+ try {
1752
+ hls.startLoad(hlsPriorLoadTime(t));
1753
+ } catch (event2) {
1754
+ }
1755
+ seekRetryCount++;
1756
+ if (seekRetryCount <= 50) {
1757
+ if (seekRetryTimer) {
1758
+ clearTimeout(seekRetryTimer);
1759
+ }
1760
+ seekRetryTimer = setTimeout(function() {
1761
+ applyPendingSeek(false);
1762
+ }, 200);
1763
+ }
1764
+ return;
1765
+ }
1766
+ if (hlsSeekTo(t, !!force)) {
1767
+ clearSeekRetry();
1768
+ seekTime = 0;
1769
+ return;
1770
+ }
1771
+ }
1772
+ if (!force && (!isUndefined(video.readyState) && video.readyState < 1)) {
1619
1773
  seekRetryCount++;
1620
1774
  if (seekRetryCount <= 50) {
1621
1775
  if (seekRetryTimer) {
@@ -1627,57 +1781,52 @@ var require_ckplayer = __commonJS({
1627
1781
  return;
1628
1782
  }
1629
1783
  }
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);
1784
+ applySeekToMedia(t);
1642
1785
  }, recoverDecodeError = function() {
1643
- if (decodeRecoverCount >= 2) {
1786
+ if (decodeRecoverCount >= 3) {
1644
1787
  return false;
1645
1788
  }
1646
1789
  decodeRecoverCount++;
1647
- var resumeAt = playTime > 0 ? playTime : vars["seek"] ? parseFloat(vars["seek"]) : 0;
1790
+ var resumeAt = hlsResumeTarget > 0 ? hlsResumeTarget : playTime > 0 ? playTime : vars["seek"] ? parseFloat(vars["seek"]) : 0;
1648
1791
  if (isNaN(resumeAt) || resumeAt < 0) {
1649
1792
  resumeAt = 0;
1650
1793
  }
1794
+ var loadFrom = hlsPriorLoadTime(resumeAt);
1795
+ if (decodeRecoverCount >= 2) {
1796
+ loadFrom = Math.max(0, loadFrom - 10);
1797
+ }
1798
+ seekApplyLock = false;
1799
+ clearSeekRetry();
1651
1800
  try {
1652
1801
  if (hls && typeof hls.recoverMediaError === "function") {
1653
1802
  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
1803
  }
1663
1804
  } catch (event2) {
1664
1805
  }
1665
- try {
1666
- var soft = Math.max(0, resumeAt - 1.5);
1667
- seekTime = resumeAt;
1668
- seekApplyLock = false;
1669
- if (video) {
1670
- video.currentTime = soft;
1806
+ if (resumeAt > 0 && hls && typeof hls.startLoad === "function") {
1807
+ var target = decodeRecoverCount >= 3 ? loadFrom : resumeAt;
1808
+ seekTime = target;
1809
+ hlsResumeTarget = resumeAt;
1810
+ hlsResumeWarmup = true;
1811
+ hlsLoadAt = -1;
1812
+ hlsLoadTs = 0;
1813
+ try {
1814
+ hls.startLoad(loadFrom);
1815
+ } catch (event2) {
1671
1816
  }
1672
1817
  setTimeout(function() {
1673
- applyPendingSeek(true);
1674
- if (video && video.paused && vars["autoplay"]) {
1675
- try {
1676
- video.play();
1677
- } catch (e2) {
1678
- }
1818
+ if (hlsCanSafelySeekTo(target)) {
1819
+ finishResumeSeek(target);
1820
+ } else if (decodeRecoverCount >= 2) {
1821
+ finishResumeSeek(loadFrom);
1822
+ } else {
1823
+ applyPendingSeek(false);
1679
1824
  }
1680
- }, 400);
1825
+ }, 600);
1826
+ return true;
1827
+ }
1828
+ try {
1829
+ finishResumeSeek(Math.max(0, resumeAt - 1.5));
1681
1830
  return true;
1682
1831
  } catch (event2) {
1683
1832
  }
@@ -1724,6 +1873,7 @@ var require_ckplayer = __commonJS({
1724
1873
  C["loading"].hide();
1725
1874
  eventTarget("canplay");
1726
1875
  applyPendingSeek();
1876
+ startPendingAutoplay();
1727
1877
  },
1728
1878
  loadedData: function() {
1729
1879
  eventTarget("loadeddata");
@@ -1776,6 +1926,7 @@ var require_ckplayer = __commonJS({
1776
1926
  }
1777
1927
  pSliderMouseDown = false;
1778
1928
  loadedmetadataNum++;
1929
+ startPendingAutoplay();
1779
1930
  if (!isUndefined(ad) && !isUndefined(ad["frontPlay"]) && ad["frontPlay"] && loadedmetadataNum > 1) {
1780
1931
  player.play();
1781
1932
  calculationAdFrontTime(duration);
@@ -1859,8 +2010,6 @@ var require_ckplayer = __commonJS({
1859
2010
  msg = errorInfo.message;
1860
2011
  }
1861
2012
  if (code === 3 && recoverDecodeError()) {
1862
- CT.error = { code, message: msg };
1863
- eventTarget("error", CT.error);
1864
2013
  return;
1865
2014
  }
1866
2015
  CT.error = { code, message: msg };
@@ -1900,8 +2049,6 @@ var require_ckplayer = __commonJS({
1900
2049
  },
1901
2050
  stalled: function() {
1902
2051
  eventTarget("stalled");
1903
- CT.error = { code: 13, message: "load:stalled" };
1904
- eventTarget("error", CT.error);
1905
2052
  },
1906
2053
  suspend: function() {
1907
2054
  eventTarget("suspend");
@@ -1914,15 +2061,13 @@ var require_ckplayer = __commonJS({
1914
2061
  seeked: function() {
1915
2062
  seekApplyLock = false;
1916
2063
  decodeRecoverCount = 0;
1917
- if (paused) {
1918
- player.play();
1919
- }
2064
+ startPendingAutoplay();
1920
2065
  pSliderMouseDown = false;
1921
2066
  eventTarget("seek", { time: this.currentTime, state: "seeked" });
1922
2067
  eventTarget("seeked");
1923
2068
  },
1924
2069
  seeking: function() {
1925
- if (paused) {
2070
+ if (paused && !seekApplyLock && !hlsResumeWarmup && !seekTime) {
1926
2071
  player.play();
1927
2072
  }
1928
2073
  var seekingTime = this.currentTime;
@@ -2693,9 +2838,12 @@ var require_ckplayer = __commonJS({
2693
2838
  } else {
2694
2839
  if (loadedmetadataNum > 0 && video) {
2695
2840
  try {
2696
- video.play();
2841
+ var playPromise = video.play();
2842
+ if (playPromise && typeof playPromise.catch === "function") {
2843
+ playPromise.catch(function() {
2844
+ });
2845
+ }
2697
2846
  } catch (event2) {
2698
- console.error(event2);
2699
2847
  }
2700
2848
  }
2701
2849
  }
@@ -2882,6 +3030,17 @@ var require_ckplayer = __commonJS({
2882
3030
  applyPendingSeek(false);
2883
3031
  return player;
2884
3032
  }
3033
+ if (hls && target > 1 && !hlsCanSafelySeekTo(target)) {
3034
+ seekTime = target;
3035
+ hlsResumeWarmup = true;
3036
+ hlsResumeTarget = target;
3037
+ try {
3038
+ hls.startLoad(hlsPriorLoadTime(target));
3039
+ } catch (event2) {
3040
+ }
3041
+ applyPendingSeek(false);
3042
+ return player;
3043
+ }
2885
3044
  if (hlsSeekTo(target, false)) {
2886
3045
  seekTime = 0;
2887
3046
  return player;
@@ -6100,7 +6259,7 @@ var require_ckplayer = __commonJS({
6100
6259
  if (!isRetry && (!vars || vars["cdnFallback"] !== false)) {
6101
6260
  var cdn = typeof window !== "undefined" && window.ckplayerPlusCdn ? window.ckplayerPlusCdn : ckplayerPlusDefaultCdn;
6102
6261
  var m = String(file).match(/\/(hls\.js|flv\.js|mpegts\.js|language)\/([^/?#]+)(?:[?#].*)?$/i);
6103
- if (cdn && cdn.indexOf("1.1.0") === -1 && m) {
6262
+ if (cdn && cdn.indexOf("1.1.2") === -1 && m) {
6104
6263
  if (cdn.slice(-1) !== "/") {
6105
6264
  cdn += "/";
6106
6265
  }
@@ -6899,15 +7058,16 @@ function buildPlayerConfig(input) {
6899
7058
  if (input.pluginPath) {
6900
7059
  config.pluginPath = input.pluginPath;
6901
7060
  }
6902
- if (input.seek != null && input.seek !== "" && !isNaN(parseFloat(input.seek)) && parseFloat(input.seek) > 0) {
7061
+ var hasSeekProp = input.seek != null && input.seek !== "" && !isNaN(parseFloat(input.seek)) && parseFloat(input.seek) > 0;
7062
+ if (hasSeekProp) {
6903
7063
  config.seek = parseFloat(input.seek);
6904
7064
  }
6905
7065
  for (var key in opts) {
6906
- if (Object.prototype.hasOwnProperty.call(opts, key) && key !== "container") {
7066
+ if (Object.prototype.hasOwnProperty.call(opts, key) && key !== "container" && !(key === "seek" && hasSeekProp)) {
6907
7067
  config[key] = opts[key];
6908
7068
  }
6909
7069
  }
6910
- if (typeof config.loaded === "string") {
7070
+ if (config.loaded != null && typeof config.loaded !== "function") {
6911
7071
  delete config.loaded;
6912
7072
  }
6913
7073
  return config;
@@ -7040,7 +7200,9 @@ var CkPlayer = {
7040
7200
  pause: function() {
7041
7201
  if (this.player) this.player.pause();
7042
7202
  },
7043
- seek: function(time) {
7203
+ // `seek` is a prop, so it cannot also be an Options API method in Vue 3.
7204
+ // Call getPlayer().seek(time) for the underlying-player API.
7205
+ seekTo: function(time) {
7044
7206
  if (!this.player) return;
7045
7207
  var t = typeof time === "string" ? parseFloat(time) : time;
7046
7208
  if (!isNaN(t)) this.player.seek(t);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ckplayer-plus",
3
- "version": "1.1.0",
3
+ "version": "1.1.2",
4
4
  "description": "Enhanced ckplayer X3 packaging with Vue 2/3 and React wrappers — ESM-ready HTML5 video player",
5
5
  "keywords": [
6
6
  "ckplayer",
package/types/vue.d.ts CHANGED
@@ -36,7 +36,7 @@ declare const CkPlayer: {
36
36
  methods: {
37
37
  play(): void;
38
38
  pause(): void;
39
- seek(time: number): void;
39
+ seekTo(time: number): void;
40
40
  setVolume(vol: number): void;
41
41
  muted(): void;
42
42
  exitMuted(): void;