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.js CHANGED
@@ -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.5/dist/";
207
+ var ckplayerPlusDefaultCdn = "https://cdn.jsdelivr.net/npm/ckplayer-plus@1.1.7/dist/";
208
208
  function ckplayerEmbed(videoObj) {
209
209
  var rightMenu = [
210
210
  {
@@ -239,6 +239,9 @@ var require_ckplayer = __commonJS({
239
239
  var hlsResumeWarmup = false;
240
240
  var hlsLoadAt = -1;
241
241
  var hlsLoadTs = 0;
242
+ var hlsScrubResumePlay = false;
243
+ var hlsScrubbing = false;
244
+ var hlsResumeSettling = false;
242
245
  var oldTime = 0, playTime = 0, firstSeekTime = -1, maxSeeTime = 0;
243
246
  var isChangeDef = true;
244
247
  var playType = "";
@@ -426,7 +429,7 @@ var require_ckplayer = __commonJS({
426
429
  }
427
430
  var allowCdn = !vars || vars["cdnFallback"] !== false;
428
431
  var cdn = typeof window !== "undefined" && window.ckplayerPlusCdn ? window.ckplayerPlusCdn : ckplayerPlusDefaultCdn;
429
- if (!allowCdn || !cdn || cdn.indexOf("1.1.5") > -1) {
432
+ if (!allowCdn || !cdn || cdn.indexOf("1.1.7") > -1) {
430
433
  return folder + "/" + file;
431
434
  }
432
435
  if (cdn.slice(-1) !== "/") {
@@ -678,50 +681,71 @@ var require_ckplayer = __commonJS({
678
681
  }
679
682
  return true;
680
683
  }, hlsInteractiveSeek = function(target) {
681
- if (!hls || !video || typeof hls.startLoad !== "function") {
684
+ if (!hls || !video) {
682
685
  return false;
683
686
  }
684
687
  if (isNaN(target) || target < 0) {
685
688
  target = 0;
686
689
  }
690
+ var dur = duration || video.duration || 0;
691
+ if (dur && isFinite(dur) && dur > 0 && target >= dur) {
692
+ target = Math.max(0, dur - 0.3);
693
+ }
687
694
  var wasPlaying = !paused;
695
+ hlsScrubbing = true;
696
+ hlsScrubResumePlay = wasPlaying;
688
697
  clearSeekRetry();
689
698
  hlsResumeWarmup = false;
690
- hlsResumeTarget = target;
699
+ hlsResumeSettling = false;
700
+ hlsResumeTarget = -1;
691
701
  seekTime = 0;
692
702
  seekApplyLock = true;
693
- var loadAt = hlsFragStartTime(target);
694
- if (loadAt <= 0 && target > 0) {
695
- loadAt = Math.max(0, target);
696
- }
697
- hlsLoadAt = loadAt;
698
- hlsLoadTs = Date.now();
699
- try {
700
- hls.startLoad(loadAt);
701
- } catch (event2) {
703
+ if (timeInBuffered(target)) {
704
+ try {
705
+ video.currentTime = target;
706
+ } catch (event2) {
707
+ seekApplyLock = false;
708
+ hlsScrubbing = false;
709
+ return false;
710
+ }
711
+ setTimeout(function() {
712
+ seekApplyLock = false;
713
+ hlsScrubbing = false;
714
+ if (C["buffer"]) {
715
+ C["buffer"].hide();
716
+ }
717
+ waited = true;
718
+ if (wasPlaying) {
719
+ hlsScrubResumePlay = false;
720
+ try {
721
+ player.play();
722
+ } catch (errPlay) {
723
+ }
724
+ } else {
725
+ hlsScrubResumePlay = false;
726
+ }
727
+ }, 80);
728
+ return true;
702
729
  }
703
730
  try {
704
731
  video.currentTime = target;
705
732
  } catch (event2) {
706
- seekTime = target;
733
+ seekApplyLock = false;
734
+ hlsScrubbing = false;
735
+ return false;
707
736
  }
708
737
  setTimeout(function() {
709
738
  seekApplyLock = false;
710
- if (!video) {
711
- return;
712
- }
713
- if (C["buffer"]) {
714
- C["buffer"].hide();
715
- }
716
- waited = true;
717
- if (wasPlaying && paused) {
718
- try {
719
- player.play();
720
- } catch (errPlay) {
721
- }
722
- }
723
- }, 200);
739
+ }, 120);
724
740
  return true;
741
+ }, hidePlaybackBuffer = function() {
742
+ waited = true;
743
+ if (C["buffer"]) {
744
+ C["buffer"].hide();
745
+ }
746
+ if (C["loading"]) {
747
+ C["loading"].hide();
748
+ }
725
749
  }, destroyStreamPlayers = function() {
726
750
  clearSeekRetry();
727
751
  seekApplyLock = false;
@@ -730,6 +754,9 @@ var require_ckplayer = __commonJS({
730
754
  hlsResumeWarmup = false;
731
755
  hlsLoadAt = -1;
732
756
  hlsLoadTs = 0;
757
+ hlsScrubResumePlay = false;
758
+ hlsScrubbing = false;
759
+ hlsResumeSettling = false;
733
760
  decodeRecoverCount = 0;
734
761
  if (hls) {
735
762
  try {
@@ -874,9 +901,12 @@ var require_ckplayer = __commonJS({
874
901
  hls = null;
875
902
  }
876
903
  var hlsConf = {
877
- // 10s 分片流在续播点附近需要略大缓冲,减少卡住转圈
904
+ // 对齐常见在线 M3U8 播放器:更大前向/后向缓冲,拖动更易命中已缓存区间
905
+ enableWorker: false,
878
906
  maxBufferLength: 30,
879
- maxMaxBufferLength: 60
907
+ maxMaxBufferLength: 600,
908
+ maxBufferSize: 60 * 1e3 * 1e3,
909
+ backBufferLength: 90
880
910
  };
881
911
  var resumeAt = seekTime;
882
912
  if (!resumeAt) {
@@ -889,38 +919,40 @@ var require_ckplayer = __commonJS({
889
919
  }
890
920
  seekTime = resumeAt;
891
921
  hlsResumeTarget = resumeAt;
892
- hlsResumeWarmup = true;
893
- hlsConf.autoStartLoad = false;
922
+ hlsResumeSettling = true;
923
+ hlsResumeWarmup = false;
894
924
  }
895
925
  hls = new Hls(hlsConf);
896
926
  hls.loadSource(url);
897
927
  hls.attachMedia(video);
898
928
  hls.on(Hls.Events.MANIFEST_PARSED, function() {
899
- if (hlsResumeWarmup && seekTime > 0) {
900
- var loadAt = hlsPriorLoadTime(seekTime);
901
- hlsLoadAt = loadAt;
902
- hlsLoadTs = Date.now();
929
+ if (seekTime > 0 && hlsResumeSettling) {
903
930
  hlsStartPositionUsed = true;
904
- try {
905
- hls.startLoad(loadAt);
906
- } catch (event2) {
907
- }
908
- setTimeout(function() {
909
- if (!hlsResumeWarmup || !seekTime) {
931
+ var tryResume = function() {
932
+ if (!seekTime || !hlsResumeSettling) {
910
933
  return;
911
934
  }
912
- var target = seekTime;
913
- if (hlsCanSafelySeekTo(target)) {
914
- finishResumeSeek(target);
935
+ var t = seekTime;
936
+ if (video && (video.readyState >= 1 || duration && isFinite(duration) && duration > 0)) {
937
+ finishResumeSeek(t);
915
938
  return;
916
939
  }
917
- var snap = hlsFragStartTime(target);
918
- if (timeInBuffered(snap) || hlsCanSafelySeekTo(snap)) {
919
- finishResumeSeek(snap);
920
- return;
940
+ seekRetryCount++;
941
+ if (seekRetryCount <= 25) {
942
+ if (seekRetryTimer) {
943
+ clearTimeout(seekRetryTimer);
944
+ }
945
+ seekRetryTimer = setTimeout(tryResume, 120);
946
+ } else {
947
+ finishResumeSeek(t);
948
+ }
949
+ };
950
+ tryResume();
951
+ setTimeout(function() {
952
+ if (hlsResumeSettling && seekTime > 0) {
953
+ finishResumeSeek(seekTime);
921
954
  }
922
- finishResumeSeek(Math.max(0, loadAt));
923
- }, 5e3);
955
+ }, 4e3);
924
956
  return;
925
957
  }
926
958
  if (!hlsStartPositionUsed) {
@@ -928,10 +960,7 @@ var require_ckplayer = __commonJS({
928
960
  }
929
961
  });
930
962
  hls.on(Hls.Events.FRAG_BUFFERED, function(event2, data) {
931
- if (hlsResumeWarmup && seekTime > 0) {
932
- if (hlsCanSafelySeekTo(seekTime)) {
933
- finishResumeSeek(seekTime);
934
- }
963
+ if (hlsResumeSettling && seekTime > 0) {
935
964
  return;
936
965
  }
937
966
  if (hlsResumeTarget <= 0 || !data || !data.frag) {
@@ -940,12 +969,7 @@ var require_ckplayer = __commonJS({
940
969
  var fragStart = data.frag.start;
941
970
  var fragEnd = fragStart + data.frag.duration;
942
971
  if (hlsResumeTarget >= fragStart - 0.5 && hlsResumeTarget <= fragEnd + 0.5) {
943
- if (!waited) {
944
- waited = true;
945
- if (C["buffer"]) {
946
- C["buffer"].hide();
947
- }
948
- }
972
+ hidePlaybackBuffer();
949
973
  }
950
974
  });
951
975
  hls.on(Hls.Events.ERROR, function(event2, data) {
@@ -964,11 +988,27 @@ var require_ckplayer = __commonJS({
964
988
  }
965
989
  }
966
990
  }
967
- if (fatal && data.type === Hls.ErrorTypes.MEDIA_ERROR && hls && typeof hls.recoverMediaError === "function") {
968
- try {
969
- hls.recoverMediaError();
970
- fatal = false;
971
- } catch (errRecover) {
991
+ if (fatal && hls) {
992
+ if (data.type === Hls.ErrorTypes.NETWORK_ERROR && typeof hls.startLoad === "function") {
993
+ try {
994
+ if (data.details === "keyLoadError") {
995
+ setTimeout(function() {
996
+ if (hls && typeof hls.startLoad === "function") {
997
+ hls.startLoad();
998
+ }
999
+ }, 2e3);
1000
+ } else {
1001
+ hls.startLoad();
1002
+ }
1003
+ fatal = false;
1004
+ } catch (errNet) {
1005
+ }
1006
+ } else if (data.type === Hls.ErrorTypes.MEDIA_ERROR && typeof hls.recoverMediaError === "function") {
1007
+ try {
1008
+ hls.recoverMediaError();
1009
+ fatal = false;
1010
+ } catch (errRecover) {
1011
+ }
972
1012
  }
973
1013
  }
974
1014
  CT.error = { code, message: message2 };
@@ -1781,6 +1821,7 @@ var require_ckplayer = __commonJS({
1781
1821
  return false;
1782
1822
  }, finishResumeSeek = function(t) {
1783
1823
  hlsResumeWarmup = false;
1824
+ hlsResumeSettling = false;
1784
1825
  autoplayPending = false;
1785
1826
  applySeekToMedia(t);
1786
1827
  setTimeout(function() {
@@ -1792,10 +1833,7 @@ var require_ckplayer = __commonJS({
1792
1833
  } catch (event2) {
1793
1834
  }
1794
1835
  paused = true;
1795
- if (C["buffer"]) {
1796
- C["buffer"].hide();
1797
- }
1798
- waited = true;
1836
+ hidePlaybackBuffer();
1799
1837
  if (!vars["controls"] && C["centerPlay"]) {
1800
1838
  C["centerPlay"].show();
1801
1839
  }
@@ -1845,6 +1883,7 @@ var require_ckplayer = __commonJS({
1845
1883
  if (t <= 0) {
1846
1884
  seekTime = 0;
1847
1885
  clearSeekRetry();
1886
+ hlsResumeSettling = false;
1848
1887
  return;
1849
1888
  }
1850
1889
  if (t > 0) {
@@ -1853,42 +1892,22 @@ var require_ckplayer = __commonJS({
1853
1892
  firstSeekTime = t;
1854
1893
  }
1855
1894
  }
1856
- if (hls && typeof hls.startLoad === "function") {
1857
- if (hlsCanSafelySeekTo(t)) {
1858
- finishResumeSeek(t);
1859
- return;
1860
- }
1861
- if (t > 1) {
1862
- hlsResumeWarmup = true;
1863
- hlsResumeTarget = t;
1864
- var loadAt = hlsPriorLoadTime(t);
1865
- var shouldLoad = !!force;
1866
- if (!shouldLoad) {
1867
- if (!(hlsLoadAt >= 0 && Math.abs(hlsLoadAt - loadAt) < 1.5 && Date.now() - hlsLoadTs < 4e3)) {
1868
- shouldLoad = true;
1869
- }
1870
- }
1871
- if (shouldLoad) {
1872
- hlsLoadAt = loadAt;
1873
- hlsLoadTs = Date.now();
1874
- try {
1875
- hls.startLoad(loadAt);
1876
- } catch (event2) {
1877
- }
1878
- }
1895
+ if (hls) {
1896
+ hlsResumeSettling = true;
1897
+ if (!force && (!isUndefined(video.readyState) && video.readyState < 1) && !(dur && isFinite(dur) && dur > 0)) {
1879
1898
  seekRetryCount++;
1880
- if (seekRetryCount <= 50) {
1899
+ if (seekRetryCount <= 40) {
1881
1900
  if (seekRetryTimer) {
1882
1901
  clearTimeout(seekRetryTimer);
1883
1902
  }
1884
1903
  seekRetryTimer = setTimeout(function() {
1885
1904
  applyPendingSeek(false);
1886
- }, 200);
1905
+ }, 120);
1887
1906
  return;
1888
1907
  }
1889
- finishResumeSeek(hlsFragStartTime(t) || loadAt || t);
1890
- return;
1891
1908
  }
1909
+ finishResumeSeek(t);
1910
+ return;
1892
1911
  }
1893
1912
  if (!force && (!isUndefined(video.readyState) && video.readyState < 1)) {
1894
1913
  seekRetryCount++;
@@ -1992,6 +2011,7 @@ var require_ckplayer = __commonJS({
1992
2011
  },
1993
2012
  canPlay: function() {
1994
2013
  C["loading"].hide();
2014
+ hidePlaybackBuffer();
1995
2015
  eventTarget("canplay");
1996
2016
  applyPendingSeek();
1997
2017
  startPendingAutoplay();
@@ -2182,60 +2202,72 @@ var require_ckplayer = __commonJS({
2182
2202
  seeked: function() {
2183
2203
  seekApplyLock = false;
2184
2204
  decodeRecoverCount = 0;
2205
+ hlsScrubbing = false;
2206
+ hlsResumeSettling = false;
2185
2207
  startPendingAutoplay();
2186
2208
  pSliderMouseDown = false;
2209
+ hidePlaybackBuffer();
2210
+ if (hlsScrubResumePlay) {
2211
+ hlsScrubResumePlay = false;
2212
+ try {
2213
+ player.play();
2214
+ } catch (event2) {
2215
+ }
2216
+ }
2187
2217
  eventTarget("seek", { time: this.currentTime, state: "seeked" });
2188
2218
  eventTarget("seeked");
2189
2219
  },
2190
2220
  seeking: function() {
2191
- if (paused && !seekApplyLock && !hlsResumeWarmup && !seekTime && !autoplayPending) {
2221
+ if (paused && !seekApplyLock && !hlsResumeWarmup && !hlsResumeSettling && !hlsScrubbing && !seekTime && !autoplayPending) {
2192
2222
  player.play();
2193
2223
  }
2194
2224
  var seekingTime = this.currentTime;
2195
2225
  if (firstSeekTime == -1) {
2196
2226
  firstSeekTime = seekingTime;
2197
2227
  }
2198
- switch (vars["timeScheduleAdjust"]) {
2199
- case 0:
2200
- if (oldTime != seekingTime) {
2201
- waitingMessage = false;
2202
- player.seek(oldTime);
2203
- message(language["timeScheduleAdjust"]["prohibit"]);
2204
- return;
2205
- }
2206
- break;
2207
- case 2:
2208
- if (seekingTime < oldTime) {
2209
- waitingMessage = false;
2210
- player.seek(oldTime);
2211
- message(language["timeScheduleAdjust"]["prohibitBackOff"]);
2212
- return;
2213
- }
2214
- break;
2215
- case 3:
2216
- if (seekingTime > oldTime) {
2217
- waitingMessage = false;
2218
- player.seek(oldTime);
2219
- message(language["timeScheduleAdjust"]["prohibitForward"]);
2220
- return;
2221
- }
2222
- break;
2223
- case 4:
2224
- if (seekingTime < firstSeekTime) {
2225
- waitingMessage = false;
2226
- player.seek(firstSeekTime);
2227
- message(language["timeScheduleAdjust"]["prohibitLookBack"]);
2228
- return;
2229
- }
2230
- break;
2231
- case 5:
2232
- if (seekingTime > maxSeeTime) {
2233
- waitingMessage = false;
2234
- player.seek(maxSeeTime);
2235
- message(language["timeScheduleAdjust"]["prohibitForwardNotViewed"]);
2236
- return;
2237
- }
2238
- break;
2228
+ if (!(hlsScrubbing || hlsScrubResumePlay || hlsResumeSettling || hlsResumeWarmup)) {
2229
+ switch (vars["timeScheduleAdjust"]) {
2230
+ case 0:
2231
+ if (oldTime != seekingTime) {
2232
+ waitingMessage = false;
2233
+ player.seek(oldTime);
2234
+ message(language["timeScheduleAdjust"]["prohibit"]);
2235
+ return;
2236
+ }
2237
+ break;
2238
+ case 2:
2239
+ if (seekingTime < oldTime) {
2240
+ waitingMessage = false;
2241
+ player.seek(oldTime);
2242
+ message(language["timeScheduleAdjust"]["prohibitBackOff"]);
2243
+ return;
2244
+ }
2245
+ break;
2246
+ case 3:
2247
+ if (seekingTime > oldTime) {
2248
+ waitingMessage = false;
2249
+ player.seek(oldTime);
2250
+ message(language["timeScheduleAdjust"]["prohibitForward"]);
2251
+ return;
2252
+ }
2253
+ break;
2254
+ case 4:
2255
+ if (seekingTime < firstSeekTime) {
2256
+ waitingMessage = false;
2257
+ player.seek(firstSeekTime);
2258
+ message(language["timeScheduleAdjust"]["prohibitLookBack"]);
2259
+ return;
2260
+ }
2261
+ break;
2262
+ case 5:
2263
+ if (seekingTime > maxSeeTime) {
2264
+ waitingMessage = false;
2265
+ player.seek(maxSeeTime);
2266
+ message(language["timeScheduleAdjust"]["prohibitForwardNotViewed"]);
2267
+ return;
2268
+ }
2269
+ break;
2270
+ }
2239
2271
  }
2240
2272
  eventTarget("seek", { time: seekingTime, state: "seeking" });
2241
2273
  eventTarget("seeking");
@@ -2247,10 +2279,15 @@ var require_ckplayer = __commonJS({
2247
2279
  waiting: function() {
2248
2280
  waited = false;
2249
2281
  eventTarget("buffer", "start");
2250
- C["centerPlay"].hide();
2282
+ if (!(hlsScrubbing || hlsScrubResumePlay || hlsResumeSettling)) {
2283
+ C["centerPlay"].hide();
2284
+ }
2251
2285
  if (!vars["controls"]) {
2252
2286
  C["buffer"].show();
2253
2287
  }
2288
+ if (hlsScrubbing || hlsScrubResumePlay || hlsResumeSettling) {
2289
+ return;
2290
+ }
2254
2291
  if (!waitingMessage) {
2255
2292
  waitingMessage = true;
2256
2293
  } else {
@@ -2263,6 +2300,7 @@ var require_ckplayer = __commonJS({
2263
2300
  C["bar"]["playAndPause"]["pause"].show();
2264
2301
  C["bar"]["playAndPause"]["refresh"].hide();
2265
2302
  C["centerPlay"].hide();
2303
+ hidePlaybackBuffer();
2266
2304
  if (playType == "button") {
2267
2305
  C["bar"]["pbox"].removeClass("ck-bar-progress-out");
2268
2306
  } else {
@@ -4981,6 +5019,7 @@ var require_ckplayer = __commonJS({
4981
5019
  e = e || window.event;
4982
5020
  var eleOffset = slider.offset(), bgOffset = bg.offset(), client = getClient(e);
4983
5021
  pSliderMouseDown = true;
5022
+ hlsScrubbing = true;
4984
5023
  posRecord = client["x"];
4985
5024
  var left = eleOffset["left"] - bgOffset["left"];
4986
5025
  sliderDownTime = left * duration / (bg.getWidth() - slider.getWidth());
@@ -5076,6 +5115,11 @@ var require_ckplayer = __commonJS({
5076
5115
  eventTarget("playback", { time: playbackTime2, date: date("Y-m-d H:i:s", playbackTime2) });
5077
5116
  eventTarget("seek", { time: playbackTime2, state: "seeking", date: date("Y-m-d H:i:s", playbackTime2) });
5078
5117
  }
5118
+ setTimeout(function() {
5119
+ if (!pSliderMouseDown) {
5120
+ hlsScrubbing = false;
5121
+ }
5122
+ }, 800);
5079
5123
  C["bar"]["pbox"].removeClass("ck-bar-progress-slider-move");
5080
5124
  if (isMouseLeave) {
5081
5125
  tip();
@@ -6377,7 +6421,7 @@ var require_ckplayer = __commonJS({
6377
6421
  if (!isRetry && (!vars || vars["cdnFallback"] !== false)) {
6378
6422
  var cdn = typeof window !== "undefined" && window.ckplayerPlusCdn ? window.ckplayerPlusCdn : ckplayerPlusDefaultCdn;
6379
6423
  var m = String(file).match(/\/(hls\.js|flv\.js|mpegts\.js|language)\/([^/?#]+)(?:[?#].*)?$/i);
6380
- if (cdn && cdn.indexOf("1.1.5") === -1 && m) {
6424
+ if (cdn && cdn.indexOf("1.1.7") === -1 && m) {
6381
6425
  if (cdn.slice(-1) !== "/") {
6382
6426
  cdn += "/";
6383
6427
  }