ckplayer-plus 1.1.5 → 1.1.7

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
@@ -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.5/dist/";
213
+ var ckplayerPlusDefaultCdn = "https://cdn.jsdelivr.net/npm/ckplayer-plus@1.1.7/dist/";
214
214
  function ckplayerEmbed(videoObj) {
215
215
  var rightMenu = [
216
216
  {
@@ -245,6 +245,9 @@ var require_ckplayer = __commonJS({
245
245
  var hlsResumeWarmup = false;
246
246
  var hlsLoadAt = -1;
247
247
  var hlsLoadTs = 0;
248
+ var hlsScrubResumePlay = false;
249
+ var hlsScrubbing = false;
250
+ var hlsResumeSettling = false;
248
251
  var oldTime = 0, playTime = 0, firstSeekTime = -1, maxSeeTime = 0;
249
252
  var isChangeDef = true;
250
253
  var playType = "";
@@ -432,7 +435,7 @@ var require_ckplayer = __commonJS({
432
435
  }
433
436
  var allowCdn = !vars || vars["cdnFallback"] !== false;
434
437
  var cdn = typeof window !== "undefined" && window.ckplayerPlusCdn ? window.ckplayerPlusCdn : ckplayerPlusDefaultCdn;
435
- if (!allowCdn || !cdn || cdn.indexOf("1.1.5") > -1) {
438
+ if (!allowCdn || !cdn || cdn.indexOf("1.1.7") > -1) {
436
439
  return folder + "/" + file;
437
440
  }
438
441
  if (cdn.slice(-1) !== "/") {
@@ -684,50 +687,71 @@ var require_ckplayer = __commonJS({
684
687
  }
685
688
  return true;
686
689
  }, hlsInteractiveSeek = function(target) {
687
- if (!hls || !video || typeof hls.startLoad !== "function") {
690
+ if (!hls || !video) {
688
691
  return false;
689
692
  }
690
693
  if (isNaN(target) || target < 0) {
691
694
  target = 0;
692
695
  }
696
+ var dur = duration || video.duration || 0;
697
+ if (dur && isFinite(dur) && dur > 0 && target >= dur) {
698
+ target = Math.max(0, dur - 0.3);
699
+ }
693
700
  var wasPlaying = !paused;
701
+ hlsScrubbing = true;
702
+ hlsScrubResumePlay = wasPlaying;
694
703
  clearSeekRetry();
695
704
  hlsResumeWarmup = false;
696
- hlsResumeTarget = target;
705
+ hlsResumeSettling = false;
706
+ hlsResumeTarget = -1;
697
707
  seekTime = 0;
698
708
  seekApplyLock = true;
699
- var loadAt = hlsFragStartTime(target);
700
- if (loadAt <= 0 && target > 0) {
701
- loadAt = Math.max(0, target);
702
- }
703
- hlsLoadAt = loadAt;
704
- hlsLoadTs = Date.now();
705
- try {
706
- hls.startLoad(loadAt);
707
- } catch (event2) {
709
+ if (timeInBuffered(target)) {
710
+ try {
711
+ video.currentTime = target;
712
+ } catch (event2) {
713
+ seekApplyLock = false;
714
+ hlsScrubbing = false;
715
+ return false;
716
+ }
717
+ setTimeout(function() {
718
+ seekApplyLock = false;
719
+ hlsScrubbing = false;
720
+ if (C["buffer"]) {
721
+ C["buffer"].hide();
722
+ }
723
+ waited = true;
724
+ if (wasPlaying) {
725
+ hlsScrubResumePlay = false;
726
+ try {
727
+ player.play();
728
+ } catch (errPlay) {
729
+ }
730
+ } else {
731
+ hlsScrubResumePlay = false;
732
+ }
733
+ }, 80);
734
+ return true;
708
735
  }
709
736
  try {
710
737
  video.currentTime = target;
711
738
  } catch (event2) {
712
- seekTime = target;
739
+ seekApplyLock = false;
740
+ hlsScrubbing = false;
741
+ return false;
713
742
  }
714
743
  setTimeout(function() {
715
744
  seekApplyLock = false;
716
- if (!video) {
717
- return;
718
- }
719
- if (C["buffer"]) {
720
- C["buffer"].hide();
721
- }
722
- waited = true;
723
- if (wasPlaying && paused) {
724
- try {
725
- player.play();
726
- } catch (errPlay) {
727
- }
728
- }
729
- }, 200);
745
+ }, 120);
730
746
  return true;
747
+ }, hidePlaybackBuffer = function() {
748
+ waited = true;
749
+ if (C["buffer"]) {
750
+ C["buffer"].hide();
751
+ }
752
+ if (C["loading"]) {
753
+ C["loading"].hide();
754
+ }
731
755
  }, destroyStreamPlayers = function() {
732
756
  clearSeekRetry();
733
757
  seekApplyLock = false;
@@ -736,6 +760,9 @@ var require_ckplayer = __commonJS({
736
760
  hlsResumeWarmup = false;
737
761
  hlsLoadAt = -1;
738
762
  hlsLoadTs = 0;
763
+ hlsScrubResumePlay = false;
764
+ hlsScrubbing = false;
765
+ hlsResumeSettling = false;
739
766
  decodeRecoverCount = 0;
740
767
  if (hls) {
741
768
  try {
@@ -880,9 +907,12 @@ var require_ckplayer = __commonJS({
880
907
  hls = null;
881
908
  }
882
909
  var hlsConf = {
883
- // 10s 分片流在续播点附近需要略大缓冲,减少卡住转圈
910
+ // 对齐常见在线 M3U8 播放器:更大前向/后向缓冲,拖动更易命中已缓存区间
911
+ enableWorker: false,
884
912
  maxBufferLength: 30,
885
- maxMaxBufferLength: 60
913
+ maxMaxBufferLength: 600,
914
+ maxBufferSize: 60 * 1e3 * 1e3,
915
+ backBufferLength: 90
886
916
  };
887
917
  var resumeAt = seekTime;
888
918
  if (!resumeAt) {
@@ -895,38 +925,40 @@ var require_ckplayer = __commonJS({
895
925
  }
896
926
  seekTime = resumeAt;
897
927
  hlsResumeTarget = resumeAt;
898
- hlsResumeWarmup = true;
899
- hlsConf.autoStartLoad = false;
928
+ hlsResumeSettling = true;
929
+ hlsResumeWarmup = false;
900
930
  }
901
931
  hls = new Hls(hlsConf);
902
932
  hls.loadSource(url);
903
933
  hls.attachMedia(video);
904
934
  hls.on(Hls.Events.MANIFEST_PARSED, function() {
905
- if (hlsResumeWarmup && seekTime > 0) {
906
- var loadAt = hlsPriorLoadTime(seekTime);
907
- hlsLoadAt = loadAt;
908
- hlsLoadTs = Date.now();
935
+ if (seekTime > 0 && hlsResumeSettling) {
909
936
  hlsStartPositionUsed = true;
910
- try {
911
- hls.startLoad(loadAt);
912
- } catch (event2) {
913
- }
914
- setTimeout(function() {
915
- if (!hlsResumeWarmup || !seekTime) {
937
+ var tryResume = function() {
938
+ if (!seekTime || !hlsResumeSettling) {
916
939
  return;
917
940
  }
918
- var target = seekTime;
919
- if (hlsCanSafelySeekTo(target)) {
920
- finishResumeSeek(target);
941
+ var t = seekTime;
942
+ if (video && (video.readyState >= 1 || duration && isFinite(duration) && duration > 0)) {
943
+ finishResumeSeek(t);
921
944
  return;
922
945
  }
923
- var snap = hlsFragStartTime(target);
924
- if (timeInBuffered(snap) || hlsCanSafelySeekTo(snap)) {
925
- finishResumeSeek(snap);
926
- return;
946
+ seekRetryCount++;
947
+ if (seekRetryCount <= 25) {
948
+ if (seekRetryTimer) {
949
+ clearTimeout(seekRetryTimer);
950
+ }
951
+ seekRetryTimer = setTimeout(tryResume, 120);
952
+ } else {
953
+ finishResumeSeek(t);
954
+ }
955
+ };
956
+ tryResume();
957
+ setTimeout(function() {
958
+ if (hlsResumeSettling && seekTime > 0) {
959
+ finishResumeSeek(seekTime);
927
960
  }
928
- finishResumeSeek(Math.max(0, loadAt));
929
- }, 5e3);
961
+ }, 4e3);
930
962
  return;
931
963
  }
932
964
  if (!hlsStartPositionUsed) {
@@ -934,10 +966,7 @@ var require_ckplayer = __commonJS({
934
966
  }
935
967
  });
936
968
  hls.on(Hls.Events.FRAG_BUFFERED, function(event2, data) {
937
- if (hlsResumeWarmup && seekTime > 0) {
938
- if (hlsCanSafelySeekTo(seekTime)) {
939
- finishResumeSeek(seekTime);
940
- }
969
+ if (hlsResumeSettling && seekTime > 0) {
941
970
  return;
942
971
  }
943
972
  if (hlsResumeTarget <= 0 || !data || !data.frag) {
@@ -946,12 +975,7 @@ var require_ckplayer = __commonJS({
946
975
  var fragStart = data.frag.start;
947
976
  var fragEnd = fragStart + data.frag.duration;
948
977
  if (hlsResumeTarget >= fragStart - 0.5 && hlsResumeTarget <= fragEnd + 0.5) {
949
- if (!waited) {
950
- waited = true;
951
- if (C["buffer"]) {
952
- C["buffer"].hide();
953
- }
954
- }
978
+ hidePlaybackBuffer();
955
979
  }
956
980
  });
957
981
  hls.on(Hls.Events.ERROR, function(event2, data) {
@@ -970,11 +994,27 @@ var require_ckplayer = __commonJS({
970
994
  }
971
995
  }
972
996
  }
973
- if (fatal && data.type === Hls.ErrorTypes.MEDIA_ERROR && hls && typeof hls.recoverMediaError === "function") {
974
- try {
975
- hls.recoverMediaError();
976
- fatal = false;
977
- } catch (errRecover) {
997
+ if (fatal && hls) {
998
+ if (data.type === Hls.ErrorTypes.NETWORK_ERROR && typeof hls.startLoad === "function") {
999
+ try {
1000
+ if (data.details === "keyLoadError") {
1001
+ setTimeout(function() {
1002
+ if (hls && typeof hls.startLoad === "function") {
1003
+ hls.startLoad();
1004
+ }
1005
+ }, 2e3);
1006
+ } else {
1007
+ hls.startLoad();
1008
+ }
1009
+ fatal = false;
1010
+ } catch (errNet) {
1011
+ }
1012
+ } else if (data.type === Hls.ErrorTypes.MEDIA_ERROR && typeof hls.recoverMediaError === "function") {
1013
+ try {
1014
+ hls.recoverMediaError();
1015
+ fatal = false;
1016
+ } catch (errRecover) {
1017
+ }
978
1018
  }
979
1019
  }
980
1020
  CT.error = { code, message: message2 };
@@ -1787,6 +1827,7 @@ var require_ckplayer = __commonJS({
1787
1827
  return false;
1788
1828
  }, finishResumeSeek = function(t) {
1789
1829
  hlsResumeWarmup = false;
1830
+ hlsResumeSettling = false;
1790
1831
  autoplayPending = false;
1791
1832
  applySeekToMedia(t);
1792
1833
  setTimeout(function() {
@@ -1798,10 +1839,7 @@ var require_ckplayer = __commonJS({
1798
1839
  } catch (event2) {
1799
1840
  }
1800
1841
  paused = true;
1801
- if (C["buffer"]) {
1802
- C["buffer"].hide();
1803
- }
1804
- waited = true;
1842
+ hidePlaybackBuffer();
1805
1843
  if (!vars["controls"] && C["centerPlay"]) {
1806
1844
  C["centerPlay"].show();
1807
1845
  }
@@ -1851,6 +1889,7 @@ var require_ckplayer = __commonJS({
1851
1889
  if (t <= 0) {
1852
1890
  seekTime = 0;
1853
1891
  clearSeekRetry();
1892
+ hlsResumeSettling = false;
1854
1893
  return;
1855
1894
  }
1856
1895
  if (t > 0) {
@@ -1859,42 +1898,22 @@ var require_ckplayer = __commonJS({
1859
1898
  firstSeekTime = t;
1860
1899
  }
1861
1900
  }
1862
- if (hls && typeof hls.startLoad === "function") {
1863
- if (hlsCanSafelySeekTo(t)) {
1864
- finishResumeSeek(t);
1865
- return;
1866
- }
1867
- if (t > 1) {
1868
- hlsResumeWarmup = true;
1869
- hlsResumeTarget = t;
1870
- var loadAt = hlsPriorLoadTime(t);
1871
- var shouldLoad = !!force;
1872
- if (!shouldLoad) {
1873
- if (!(hlsLoadAt >= 0 && Math.abs(hlsLoadAt - loadAt) < 1.5 && Date.now() - hlsLoadTs < 4e3)) {
1874
- shouldLoad = true;
1875
- }
1876
- }
1877
- if (shouldLoad) {
1878
- hlsLoadAt = loadAt;
1879
- hlsLoadTs = Date.now();
1880
- try {
1881
- hls.startLoad(loadAt);
1882
- } catch (event2) {
1883
- }
1884
- }
1901
+ if (hls) {
1902
+ hlsResumeSettling = true;
1903
+ if (!force && (!isUndefined(video.readyState) && video.readyState < 1) && !(dur && isFinite(dur) && dur > 0)) {
1885
1904
  seekRetryCount++;
1886
- if (seekRetryCount <= 50) {
1905
+ if (seekRetryCount <= 40) {
1887
1906
  if (seekRetryTimer) {
1888
1907
  clearTimeout(seekRetryTimer);
1889
1908
  }
1890
1909
  seekRetryTimer = setTimeout(function() {
1891
1910
  applyPendingSeek(false);
1892
- }, 200);
1911
+ }, 120);
1893
1912
  return;
1894
1913
  }
1895
- finishResumeSeek(hlsFragStartTime(t) || loadAt || t);
1896
- return;
1897
1914
  }
1915
+ finishResumeSeek(t);
1916
+ return;
1898
1917
  }
1899
1918
  if (!force && (!isUndefined(video.readyState) && video.readyState < 1)) {
1900
1919
  seekRetryCount++;
@@ -1998,6 +2017,7 @@ var require_ckplayer = __commonJS({
1998
2017
  },
1999
2018
  canPlay: function() {
2000
2019
  C["loading"].hide();
2020
+ hidePlaybackBuffer();
2001
2021
  eventTarget("canplay");
2002
2022
  applyPendingSeek();
2003
2023
  startPendingAutoplay();
@@ -2188,60 +2208,72 @@ var require_ckplayer = __commonJS({
2188
2208
  seeked: function() {
2189
2209
  seekApplyLock = false;
2190
2210
  decodeRecoverCount = 0;
2211
+ hlsScrubbing = false;
2212
+ hlsResumeSettling = false;
2191
2213
  startPendingAutoplay();
2192
2214
  pSliderMouseDown = false;
2215
+ hidePlaybackBuffer();
2216
+ if (hlsScrubResumePlay) {
2217
+ hlsScrubResumePlay = false;
2218
+ try {
2219
+ player.play();
2220
+ } catch (event2) {
2221
+ }
2222
+ }
2193
2223
  eventTarget("seek", { time: this.currentTime, state: "seeked" });
2194
2224
  eventTarget("seeked");
2195
2225
  },
2196
2226
  seeking: function() {
2197
- if (paused && !seekApplyLock && !hlsResumeWarmup && !seekTime && !autoplayPending) {
2227
+ if (paused && !seekApplyLock && !hlsResumeWarmup && !hlsResumeSettling && !hlsScrubbing && !seekTime && !autoplayPending) {
2198
2228
  player.play();
2199
2229
  }
2200
2230
  var seekingTime = this.currentTime;
2201
2231
  if (firstSeekTime == -1) {
2202
2232
  firstSeekTime = seekingTime;
2203
2233
  }
2204
- switch (vars["timeScheduleAdjust"]) {
2205
- case 0:
2206
- if (oldTime != seekingTime) {
2207
- waitingMessage = false;
2208
- player.seek(oldTime);
2209
- message(language["timeScheduleAdjust"]["prohibit"]);
2210
- return;
2211
- }
2212
- break;
2213
- case 2:
2214
- if (seekingTime < oldTime) {
2215
- waitingMessage = false;
2216
- player.seek(oldTime);
2217
- message(language["timeScheduleAdjust"]["prohibitBackOff"]);
2218
- return;
2219
- }
2220
- break;
2221
- case 3:
2222
- if (seekingTime > oldTime) {
2223
- waitingMessage = false;
2224
- player.seek(oldTime);
2225
- message(language["timeScheduleAdjust"]["prohibitForward"]);
2226
- return;
2227
- }
2228
- break;
2229
- case 4:
2230
- if (seekingTime < firstSeekTime) {
2231
- waitingMessage = false;
2232
- player.seek(firstSeekTime);
2233
- message(language["timeScheduleAdjust"]["prohibitLookBack"]);
2234
- return;
2235
- }
2236
- break;
2237
- case 5:
2238
- if (seekingTime > maxSeeTime) {
2239
- waitingMessage = false;
2240
- player.seek(maxSeeTime);
2241
- message(language["timeScheduleAdjust"]["prohibitForwardNotViewed"]);
2242
- return;
2243
- }
2244
- break;
2234
+ if (!(hlsScrubbing || hlsScrubResumePlay || hlsResumeSettling || hlsResumeWarmup)) {
2235
+ switch (vars["timeScheduleAdjust"]) {
2236
+ case 0:
2237
+ if (oldTime != seekingTime) {
2238
+ waitingMessage = false;
2239
+ player.seek(oldTime);
2240
+ message(language["timeScheduleAdjust"]["prohibit"]);
2241
+ return;
2242
+ }
2243
+ break;
2244
+ case 2:
2245
+ if (seekingTime < oldTime) {
2246
+ waitingMessage = false;
2247
+ player.seek(oldTime);
2248
+ message(language["timeScheduleAdjust"]["prohibitBackOff"]);
2249
+ return;
2250
+ }
2251
+ break;
2252
+ case 3:
2253
+ if (seekingTime > oldTime) {
2254
+ waitingMessage = false;
2255
+ player.seek(oldTime);
2256
+ message(language["timeScheduleAdjust"]["prohibitForward"]);
2257
+ return;
2258
+ }
2259
+ break;
2260
+ case 4:
2261
+ if (seekingTime < firstSeekTime) {
2262
+ waitingMessage = false;
2263
+ player.seek(firstSeekTime);
2264
+ message(language["timeScheduleAdjust"]["prohibitLookBack"]);
2265
+ return;
2266
+ }
2267
+ break;
2268
+ case 5:
2269
+ if (seekingTime > maxSeeTime) {
2270
+ waitingMessage = false;
2271
+ player.seek(maxSeeTime);
2272
+ message(language["timeScheduleAdjust"]["prohibitForwardNotViewed"]);
2273
+ return;
2274
+ }
2275
+ break;
2276
+ }
2245
2277
  }
2246
2278
  eventTarget("seek", { time: seekingTime, state: "seeking" });
2247
2279
  eventTarget("seeking");
@@ -2253,10 +2285,15 @@ var require_ckplayer = __commonJS({
2253
2285
  waiting: function() {
2254
2286
  waited = false;
2255
2287
  eventTarget("buffer", "start");
2256
- C["centerPlay"].hide();
2288
+ if (!(hlsScrubbing || hlsScrubResumePlay || hlsResumeSettling)) {
2289
+ C["centerPlay"].hide();
2290
+ }
2257
2291
  if (!vars["controls"]) {
2258
2292
  C["buffer"].show();
2259
2293
  }
2294
+ if (hlsScrubbing || hlsScrubResumePlay || hlsResumeSettling) {
2295
+ return;
2296
+ }
2260
2297
  if (!waitingMessage) {
2261
2298
  waitingMessage = true;
2262
2299
  } else {
@@ -2269,6 +2306,7 @@ var require_ckplayer = __commonJS({
2269
2306
  C["bar"]["playAndPause"]["pause"].show();
2270
2307
  C["bar"]["playAndPause"]["refresh"].hide();
2271
2308
  C["centerPlay"].hide();
2309
+ hidePlaybackBuffer();
2272
2310
  if (playType == "button") {
2273
2311
  C["bar"]["pbox"].removeClass("ck-bar-progress-out");
2274
2312
  } else {
@@ -4987,6 +5025,7 @@ var require_ckplayer = __commonJS({
4987
5025
  e = e || window.event;
4988
5026
  var eleOffset = slider.offset(), bgOffset = bg.offset(), client = getClient(e);
4989
5027
  pSliderMouseDown = true;
5028
+ hlsScrubbing = true;
4990
5029
  posRecord = client["x"];
4991
5030
  var left = eleOffset["left"] - bgOffset["left"];
4992
5031
  sliderDownTime = left * duration / (bg.getWidth() - slider.getWidth());
@@ -5082,6 +5121,11 @@ var require_ckplayer = __commonJS({
5082
5121
  eventTarget("playback", { time: playbackTime2, date: date("Y-m-d H:i:s", playbackTime2) });
5083
5122
  eventTarget("seek", { time: playbackTime2, state: "seeking", date: date("Y-m-d H:i:s", playbackTime2) });
5084
5123
  }
5124
+ setTimeout(function() {
5125
+ if (!pSliderMouseDown) {
5126
+ hlsScrubbing = false;
5127
+ }
5128
+ }, 800);
5085
5129
  C["bar"]["pbox"].removeClass("ck-bar-progress-slider-move");
5086
5130
  if (isMouseLeave) {
5087
5131
  tip();
@@ -6383,7 +6427,7 @@ var require_ckplayer = __commonJS({
6383
6427
  if (!isRetry && (!vars || vars["cdnFallback"] !== false)) {
6384
6428
  var cdn = typeof window !== "undefined" && window.ckplayerPlusCdn ? window.ckplayerPlusCdn : ckplayerPlusDefaultCdn;
6385
6429
  var m = String(file).match(/\/(hls\.js|flv\.js|mpegts\.js|language)\/([^/?#]+)(?:[?#].*)?$/i);
6386
- if (cdn && cdn.indexOf("1.1.5") === -1 && m) {
6430
+ if (cdn && cdn.indexOf("1.1.7") === -1 && m) {
6387
6431
  if (cdn.slice(-1) !== "/") {
6388
6432
  cdn += "/";
6389
6433
  }