ckplayer-plus 1.0.6 → 1.0.8

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/react.cjs CHANGED
@@ -212,7 +212,7 @@ var require_ckplayer = __commonJS({
212
212
  cdnFallback: true
213
213
  // getPath 失败时是否回退到 jsDelivr(内网可设 false,并配置 pluginPath)
214
214
  };
215
- var ckplayerPlusDefaultCdn = "https://cdn.jsdelivr.net/npm/ckplayer-plus@1.0.6/dist/";
215
+ var ckplayerPlusDefaultCdn = "https://cdn.jsdelivr.net/npm/ckplayer-plus@1.0.8/dist/";
216
216
  function ckplayerEmbed(videoObj) {
217
217
  var rightMenu = [
218
218
  {
@@ -242,6 +242,9 @@ var require_ckplayer = __commonJS({
242
242
  var seekApplyLock = false;
243
243
  var decodeRecoverCount = 0;
244
244
  var hlsStartPositionUsed = false;
245
+ var hlsResumeTarget = -1;
246
+ var hlsLoadAt = -1;
247
+ var hlsLoadTs = 0;
245
248
  var oldTime = 0, playTime = 0, firstSeekTime = -1, maxSeeTime = 0;
246
249
  var isChangeDef = true;
247
250
  var playType = "";
@@ -407,7 +410,7 @@ var require_ckplayer = __commonJS({
407
410
  }
408
411
  var allowCdn = !vars || vars["cdnFallback"] !== false;
409
412
  var cdn = typeof window !== "undefined" && window.ckplayerPlusCdn ? window.ckplayerPlusCdn : ckplayerPlusDefaultCdn;
410
- if (!allowCdn || !cdn || cdn.indexOf("1.0.6") > -1) {
413
+ if (!allowCdn || !cdn || cdn.indexOf("1.0.8") > -1) {
411
414
  return folder + "/" + file;
412
415
  }
413
416
  if (cdn.slice(-1) !== "/") {
@@ -565,9 +568,120 @@ var require_ckplayer = __commonJS({
565
568
  changeVideo(video.attr("src"));
566
569
  }
567
570
  return player;
571
+ }, parseResumeSeekFromVars = function() {
572
+ if (isUndefined(vars["seek"])) {
573
+ return 0;
574
+ }
575
+ if (valType(vars["seek"]) == "number" && vars["seek"] > 0) {
576
+ return vars["seek"];
577
+ }
578
+ if (valType(vars["seek"]) == "string" && vars["seek"] == "cookie" && cookieName) {
579
+ var cke = player.cookie(cookieName);
580
+ if (cke && cke["time"]) {
581
+ return cke["time"];
582
+ }
583
+ return 0;
584
+ }
585
+ if (valType(vars["seek"]) == "string" && vars["seek"] !== "" && !isNaN(parseFloat(vars["seek"]))) {
586
+ return parseFloat(vars["seek"]);
587
+ }
588
+ return 0;
589
+ }, applyResumeSeekState = function(t) {
590
+ if (!t || t <= 0) {
591
+ return;
592
+ }
593
+ seekTime = t;
594
+ maxSeeTime = Math.max(maxSeeTime, t);
595
+ if (firstSeekTime < 0) {
596
+ firstSeekTime = t;
597
+ }
598
+ }, prepareCookieAndSeek = function() {
599
+ if (vars["cookie"]) {
600
+ if (valType(vars["cookie"]) == "array" && vars["cookie"].length >= 2) {
601
+ if (vars["cookie"][0] && valType(vars["cookie"][0]) == "string") {
602
+ cookieName = vars["cookie"][0];
603
+ }
604
+ if (vars["cookie"][1] && valType(vars["cookie"][1]) == "number") {
605
+ cookieTime = vars["cookie"][1];
606
+ }
607
+ }
608
+ if (valType(vars["cookie"]) == "object" && !isUndefined(vars["cookie"]["name"])) {
609
+ cookieName = vars["cookie"]["name"];
610
+ if (!isUndefined(vars["cookie"]["hour"]) && valType(vars["cookie"]["hour"]) == "number") {
611
+ cookieTime = vars["cookie"]["hour"];
612
+ }
613
+ }
614
+ if (valType(vars["cookie"]) == "string") {
615
+ cookieName = vars["cookie"];
616
+ }
617
+ if (cookieName) {
618
+ cookieName = cookieName.replace(/[ ]*,[ ]*|[ ]+/g, "").replace(/[ ]*;[ ]*|[ ]+/g, "");
619
+ }
620
+ }
621
+ if (!seekTime) {
622
+ applyResumeSeekState(parseResumeSeekFromVars());
623
+ }
624
+ }, hlsSeekTo = function(target, force) {
625
+ if (!hls || typeof hls.startLoad !== "function" || !video) {
626
+ return false;
627
+ }
628
+ if (isNaN(target) || target < 0) {
629
+ target = 0;
630
+ }
631
+ var curTime = video.currentTime || 0;
632
+ if (!force) {
633
+ if (hlsResumeTarget >= 0 && Math.abs(hlsResumeTarget - target) < 1.5) {
634
+ if (timeInBuffered(target) && Math.abs(curTime - target) < 2.5) {
635
+ return true;
636
+ }
637
+ }
638
+ if (timeInBuffered(target) && Math.abs(curTime - target) < 1.5) {
639
+ hlsResumeTarget = target;
640
+ return true;
641
+ }
642
+ if (hlsLoadAt >= 0 && Math.abs(hlsLoadAt - target) < 1.5 && Date.now() - hlsLoadTs < 4e3) {
643
+ return true;
644
+ }
645
+ }
646
+ hlsLoadAt = target;
647
+ hlsLoadTs = Date.now();
648
+ hlsResumeTarget = target;
649
+ try {
650
+ hls.startLoad(target);
651
+ } catch (event2) {
652
+ return false;
653
+ }
654
+ return true;
655
+ }, destroyStreamPlayers = function() {
656
+ clearSeekRetry();
657
+ seekApplyLock = false;
658
+ hlsStartPositionUsed = false;
659
+ hlsResumeTarget = -1;
660
+ hlsLoadAt = -1;
661
+ hlsLoadTs = 0;
662
+ decodeRecoverCount = 0;
663
+ if (hls) {
664
+ try {
665
+ hls.destroy();
666
+ } catch (event2) {
667
+ }
668
+ hls = null;
669
+ }
670
+ if (pugPlayer) {
671
+ try {
672
+ pugPlayer.pause();
673
+ pugPlayer.unload();
674
+ pugPlayer.detachMediaElement();
675
+ pugPlayer.destroy();
676
+ } catch (event2) {
677
+ }
678
+ pugPlayer = null;
679
+ }
568
680
  }, changeVideo = function(vstr) {
569
681
  var i2 = 0;
570
682
  ensureAutoPlug(vstr);
683
+ prepareCookieAndSeek();
684
+ destroyStreamPlayers();
571
685
  if (video.attr("src") || video.htm()) {
572
686
  player.pause();
573
687
  }
@@ -652,46 +766,6 @@ var require_ckplayer = __commonJS({
652
766
  if (isChangeDef) {
653
767
  checkDefinition();
654
768
  }
655
- if (vars["cookie"]) {
656
- if (valType(vars["cookie"]) == "array" && vars["cookie"].length >= 2) {
657
- if (vars["cookie"][0] && valType(vars["cookie"][0]) == "string") {
658
- cookieName = vars["cookie"][0];
659
- }
660
- if (vars["cookie"][1] && valType(vars["cookie"][1]) == "number") {
661
- cookieTime = vars["cookie"][1];
662
- }
663
- }
664
- if (valType(vars["cookie"]) == "object" && !isUndefined(vars["cookie"]["name"])) {
665
- cookieName = vars["cookie"]["name"];
666
- if (!isUndefined(vars["cookie"]["hour"]) && valType(vars["cookie"]["hour"]) == "number") {
667
- cookieTime = vars["cookie"]["hour"];
668
- }
669
- }
670
- if (valType(vars["cookie"]) == "string") {
671
- cookieName = vars["cookie"];
672
- }
673
- if (cookieName) {
674
- cookieName = cookieName.replace(/[ ]*,[ ]*|[ ]+/g, "").replace(/[ ]*;[ ]*|[ ]+/g, "");
675
- }
676
- }
677
- if (!isUndefined(vars["seek"]) && !seekTime) {
678
- if (valType(vars["seek"]) == "number" && vars["seek"] > 0) {
679
- seekTime = vars["seek"];
680
- } else if (valType(vars["seek"]) == "string" && vars["seek"] == "cookie" && cookieName) {
681
- var cke = player.cookie(cookieName);
682
- if (cke) {
683
- seekTime = cke["time"];
684
- }
685
- } else if (valType(vars["seek"]) == "string" && vars["seek"] !== "" && !isNaN(parseFloat(vars["seek"]))) {
686
- seekTime = parseFloat(vars["seek"]);
687
- }
688
- if (seekTime && seekTime > 0) {
689
- maxSeeTime = Math.max(maxSeeTime, seekTime);
690
- if (firstSeekTime < 0) {
691
- firstSeekTime = seekTime;
692
- }
693
- }
694
- }
695
769
  }, plugPlayer = function(url) {
696
770
  switch (vars["plug"]) {
697
771
  case "hls.js":
@@ -721,13 +795,31 @@ var require_ckplayer = __commonJS({
721
795
  }, hlsPlayer = function(url) {
722
796
  var startHls = function() {
723
797
  if (typeof Hls !== "undefined" && !isUndefined(Hls) && Hls.isSupported()) {
724
- var hlsConf = {};
725
- if (seekTime && seekTime > 0 && (isUndefined(vars["live"]) || !vars["live"])) {
726
- hlsConf.startPosition = seekTime;
727
- maxSeeTime = Math.max(maxSeeTime, seekTime);
798
+ if (hls) {
799
+ try {
800
+ hls.destroy();
801
+ } catch (event2) {
802
+ }
803
+ hls = null;
804
+ }
805
+ var hlsConf = {
806
+ // 10s 分片流在续播点附近需要略大缓冲,减少卡住转圈
807
+ maxBufferLength: 30,
808
+ maxMaxBufferLength: 60
809
+ };
810
+ var resumeAt = seekTime;
811
+ if (!resumeAt) {
812
+ resumeAt = parseResumeSeekFromVars();
813
+ }
814
+ if (resumeAt && resumeAt > 0 && (isUndefined(vars["live"]) || !vars["live"])) {
815
+ hlsConf.startPosition = resumeAt;
816
+ maxSeeTime = Math.max(maxSeeTime, resumeAt);
728
817
  if (firstSeekTime < 0) {
729
- firstSeekTime = seekTime;
818
+ firstSeekTime = resumeAt;
730
819
  }
820
+ hlsResumeTarget = resumeAt;
821
+ hlsLoadAt = resumeAt;
822
+ hlsLoadTs = Date.now();
731
823
  seekTime = 0;
732
824
  hlsStartPositionUsed = true;
733
825
  clearSeekRetry();
@@ -740,6 +832,21 @@ var require_ckplayer = __commonJS({
740
832
  applyPendingSeek();
741
833
  }
742
834
  });
835
+ hls.on(Hls.Events.FRAG_BUFFERED, function(event2, data) {
836
+ if (hlsResumeTarget <= 0 || !data || !data.frag) {
837
+ return;
838
+ }
839
+ var fragStart = data.frag.start;
840
+ var fragEnd = fragStart + data.frag.duration;
841
+ if (hlsResumeTarget >= fragStart - 0.5 && hlsResumeTarget <= fragEnd + 0.5) {
842
+ if (!waited) {
843
+ waited = true;
844
+ if (C["buffer"]) {
845
+ C["buffer"].hide();
846
+ }
847
+ }
848
+ }
849
+ });
743
850
  hls.on(Hls.Events.ERROR, function(event2, data) {
744
851
  var code = 9;
745
852
  var message2 = language["error"]["loadingFailed"];
@@ -1481,17 +1588,22 @@ var require_ckplayer = __commonJS({
1481
1588
  clearSeekRetry();
1482
1589
  return;
1483
1590
  }
1591
+ if (t > 0) {
1592
+ maxSeeTime = Math.max(maxSeeTime, t);
1593
+ if (firstSeekTime < 0) {
1594
+ firstSeekTime = t;
1595
+ }
1596
+ }
1597
+ if (hlsSeekTo(t, !!force)) {
1598
+ clearSeekRetry();
1599
+ seekTime = 0;
1600
+ return;
1601
+ }
1484
1602
  var readyEnough = !isUndefined(video.readyState) && video.readyState >= 2;
1485
1603
  var bufferedOk = timeInBuffered(t);
1486
1604
  if (!force && !bufferedOk && (!readyEnough || video.readyState < 3)) {
1487
1605
  seekRetryCount++;
1488
1606
  if (seekRetryCount <= 50) {
1489
- try {
1490
- if (hls && typeof hls.startLoad === "function") {
1491
- hls.startLoad(t);
1492
- }
1493
- } catch (event2) {
1494
- }
1495
1607
  if (seekRetryTimer) {
1496
1608
  clearTimeout(seekRetryTimer);
1497
1609
  }
@@ -1502,12 +1614,6 @@ var require_ckplayer = __commonJS({
1502
1614
  }
1503
1615
  }
1504
1616
  clearSeekRetry();
1505
- if (t > 0) {
1506
- maxSeeTime = Math.max(maxSeeTime, t);
1507
- if (firstSeekTime < 0) {
1508
- firstSeekTime = t;
1509
- }
1510
- }
1511
1617
  seekApplyLock = true;
1512
1618
  seekTime = 0;
1513
1619
  try {
@@ -2171,7 +2277,8 @@ var require_ckplayer = __commonJS({
2171
2277
  ad["frontPlay"] = false;
2172
2278
  C["ad"].hide();
2173
2279
  allBarShow();
2174
- seekTime = vars["seek"];
2280
+ seekTime = 0;
2281
+ applyResumeSeekState(parseResumeSeekFromVars());
2175
2282
  if (ad["front"]["video"]) {
2176
2283
  changeVideo(vars["video"]);
2177
2284
  } else {
@@ -2756,11 +2863,15 @@ var require_ckplayer = __commonJS({
2756
2863
  if (vars["timeScheduleAdjust"] == 5 && target > maxSeeTime && seekTime && Math.abs(seekTime - target) < 0.5) {
2757
2864
  maxSeeTime = Math.max(maxSeeTime, target);
2758
2865
  }
2759
- if (target > 0.5 && !timeInBuffered(target) && video.readyState < 3) {
2866
+ if (target > 0.5 && !timeInBuffered(target) && video.readyState < 3 && !hls) {
2760
2867
  seekTime = target;
2761
2868
  applyPendingSeek(false);
2762
2869
  return player;
2763
2870
  }
2871
+ if (hlsSeekTo(target, false)) {
2872
+ seekTime = 0;
2873
+ return player;
2874
+ }
2764
2875
  try {
2765
2876
  video.currentTime = target;
2766
2877
  seekTime = 0;
@@ -5975,7 +6086,7 @@ var require_ckplayer = __commonJS({
5975
6086
  if (!isRetry && (!vars || vars["cdnFallback"] !== false)) {
5976
6087
  var cdn = typeof window !== "undefined" && window.ckplayerPlusCdn ? window.ckplayerPlusCdn : ckplayerPlusDefaultCdn;
5977
6088
  var m2 = String(file).match(/\/(hls\.js|flv\.js|mpegts\.js|language)\/([^/?#]+)(?:[?#].*)?$/i);
5978
- if (cdn && cdn.indexOf("1.0.6") === -1 && m2) {
6089
+ if (cdn && cdn.indexOf("1.0.8") === -1 && m2) {
5979
6090
  if (cdn.slice(-1) !== "/") {
5980
6091
  cdn += "/";
5981
6092
  }
@@ -6787,6 +6898,9 @@ function buildPlayerConfig(input) {
6787
6898
  if (input.pluginPath) {
6788
6899
  config.pluginPath = input.pluginPath;
6789
6900
  }
6901
+ if (input.seek != null && input.seek !== "" && !isNaN(parseFloat(input.seek)) && parseFloat(input.seek) > 0) {
6902
+ config.seek = parseFloat(input.seek);
6903
+ }
6790
6904
  for (var key in opts) {
6791
6905
  if (Object.prototype.hasOwnProperty.call(opts, key) && key !== "container") {
6792
6906
  config[key] = opts[key];
package/dist/react.js CHANGED
@@ -207,7 +207,7 @@ var require_ckplayer = __commonJS({
207
207
  cdnFallback: true
208
208
  // getPath 失败时是否回退到 jsDelivr(内网可设 false,并配置 pluginPath)
209
209
  };
210
- var ckplayerPlusDefaultCdn = "https://cdn.jsdelivr.net/npm/ckplayer-plus@1.0.6/dist/";
210
+ var ckplayerPlusDefaultCdn = "https://cdn.jsdelivr.net/npm/ckplayer-plus@1.0.8/dist/";
211
211
  function ckplayerEmbed(videoObj) {
212
212
  var rightMenu = [
213
213
  {
@@ -237,6 +237,9 @@ var require_ckplayer = __commonJS({
237
237
  var seekApplyLock = false;
238
238
  var decodeRecoverCount = 0;
239
239
  var hlsStartPositionUsed = false;
240
+ var hlsResumeTarget = -1;
241
+ var hlsLoadAt = -1;
242
+ var hlsLoadTs = 0;
240
243
  var oldTime = 0, playTime = 0, firstSeekTime = -1, maxSeeTime = 0;
241
244
  var isChangeDef = true;
242
245
  var playType = "";
@@ -402,7 +405,7 @@ var require_ckplayer = __commonJS({
402
405
  }
403
406
  var allowCdn = !vars || vars["cdnFallback"] !== false;
404
407
  var cdn = typeof window !== "undefined" && window.ckplayerPlusCdn ? window.ckplayerPlusCdn : ckplayerPlusDefaultCdn;
405
- if (!allowCdn || !cdn || cdn.indexOf("1.0.6") > -1) {
408
+ if (!allowCdn || !cdn || cdn.indexOf("1.0.8") > -1) {
406
409
  return folder + "/" + file;
407
410
  }
408
411
  if (cdn.slice(-1) !== "/") {
@@ -560,9 +563,120 @@ var require_ckplayer = __commonJS({
560
563
  changeVideo(video.attr("src"));
561
564
  }
562
565
  return player;
566
+ }, parseResumeSeekFromVars = function() {
567
+ if (isUndefined(vars["seek"])) {
568
+ return 0;
569
+ }
570
+ if (valType(vars["seek"]) == "number" && vars["seek"] > 0) {
571
+ return vars["seek"];
572
+ }
573
+ if (valType(vars["seek"]) == "string" && vars["seek"] == "cookie" && cookieName) {
574
+ var cke = player.cookie(cookieName);
575
+ if (cke && cke["time"]) {
576
+ return cke["time"];
577
+ }
578
+ return 0;
579
+ }
580
+ if (valType(vars["seek"]) == "string" && vars["seek"] !== "" && !isNaN(parseFloat(vars["seek"]))) {
581
+ return parseFloat(vars["seek"]);
582
+ }
583
+ return 0;
584
+ }, applyResumeSeekState = function(t) {
585
+ if (!t || t <= 0) {
586
+ return;
587
+ }
588
+ seekTime = t;
589
+ maxSeeTime = Math.max(maxSeeTime, t);
590
+ if (firstSeekTime < 0) {
591
+ firstSeekTime = t;
592
+ }
593
+ }, prepareCookieAndSeek = function() {
594
+ if (vars["cookie"]) {
595
+ if (valType(vars["cookie"]) == "array" && vars["cookie"].length >= 2) {
596
+ if (vars["cookie"][0] && valType(vars["cookie"][0]) == "string") {
597
+ cookieName = vars["cookie"][0];
598
+ }
599
+ if (vars["cookie"][1] && valType(vars["cookie"][1]) == "number") {
600
+ cookieTime = vars["cookie"][1];
601
+ }
602
+ }
603
+ if (valType(vars["cookie"]) == "object" && !isUndefined(vars["cookie"]["name"])) {
604
+ cookieName = vars["cookie"]["name"];
605
+ if (!isUndefined(vars["cookie"]["hour"]) && valType(vars["cookie"]["hour"]) == "number") {
606
+ cookieTime = vars["cookie"]["hour"];
607
+ }
608
+ }
609
+ if (valType(vars["cookie"]) == "string") {
610
+ cookieName = vars["cookie"];
611
+ }
612
+ if (cookieName) {
613
+ cookieName = cookieName.replace(/[ ]*,[ ]*|[ ]+/g, "").replace(/[ ]*;[ ]*|[ ]+/g, "");
614
+ }
615
+ }
616
+ if (!seekTime) {
617
+ applyResumeSeekState(parseResumeSeekFromVars());
618
+ }
619
+ }, hlsSeekTo = function(target, force) {
620
+ if (!hls || typeof hls.startLoad !== "function" || !video) {
621
+ return false;
622
+ }
623
+ if (isNaN(target) || target < 0) {
624
+ target = 0;
625
+ }
626
+ var curTime = video.currentTime || 0;
627
+ if (!force) {
628
+ if (hlsResumeTarget >= 0 && Math.abs(hlsResumeTarget - target) < 1.5) {
629
+ if (timeInBuffered(target) && Math.abs(curTime - target) < 2.5) {
630
+ return true;
631
+ }
632
+ }
633
+ if (timeInBuffered(target) && Math.abs(curTime - target) < 1.5) {
634
+ hlsResumeTarget = target;
635
+ return true;
636
+ }
637
+ if (hlsLoadAt >= 0 && Math.abs(hlsLoadAt - target) < 1.5 && Date.now() - hlsLoadTs < 4e3) {
638
+ return true;
639
+ }
640
+ }
641
+ hlsLoadAt = target;
642
+ hlsLoadTs = Date.now();
643
+ hlsResumeTarget = target;
644
+ try {
645
+ hls.startLoad(target);
646
+ } catch (event2) {
647
+ return false;
648
+ }
649
+ return true;
650
+ }, destroyStreamPlayers = function() {
651
+ clearSeekRetry();
652
+ seekApplyLock = false;
653
+ hlsStartPositionUsed = false;
654
+ hlsResumeTarget = -1;
655
+ hlsLoadAt = -1;
656
+ hlsLoadTs = 0;
657
+ decodeRecoverCount = 0;
658
+ if (hls) {
659
+ try {
660
+ hls.destroy();
661
+ } catch (event2) {
662
+ }
663
+ hls = null;
664
+ }
665
+ if (pugPlayer) {
666
+ try {
667
+ pugPlayer.pause();
668
+ pugPlayer.unload();
669
+ pugPlayer.detachMediaElement();
670
+ pugPlayer.destroy();
671
+ } catch (event2) {
672
+ }
673
+ pugPlayer = null;
674
+ }
563
675
  }, changeVideo = function(vstr) {
564
676
  var i2 = 0;
565
677
  ensureAutoPlug(vstr);
678
+ prepareCookieAndSeek();
679
+ destroyStreamPlayers();
566
680
  if (video.attr("src") || video.htm()) {
567
681
  player.pause();
568
682
  }
@@ -647,46 +761,6 @@ var require_ckplayer = __commonJS({
647
761
  if (isChangeDef) {
648
762
  checkDefinition();
649
763
  }
650
- if (vars["cookie"]) {
651
- if (valType(vars["cookie"]) == "array" && vars["cookie"].length >= 2) {
652
- if (vars["cookie"][0] && valType(vars["cookie"][0]) == "string") {
653
- cookieName = vars["cookie"][0];
654
- }
655
- if (vars["cookie"][1] && valType(vars["cookie"][1]) == "number") {
656
- cookieTime = vars["cookie"][1];
657
- }
658
- }
659
- if (valType(vars["cookie"]) == "object" && !isUndefined(vars["cookie"]["name"])) {
660
- cookieName = vars["cookie"]["name"];
661
- if (!isUndefined(vars["cookie"]["hour"]) && valType(vars["cookie"]["hour"]) == "number") {
662
- cookieTime = vars["cookie"]["hour"];
663
- }
664
- }
665
- if (valType(vars["cookie"]) == "string") {
666
- cookieName = vars["cookie"];
667
- }
668
- if (cookieName) {
669
- cookieName = cookieName.replace(/[ ]*,[ ]*|[ ]+/g, "").replace(/[ ]*;[ ]*|[ ]+/g, "");
670
- }
671
- }
672
- if (!isUndefined(vars["seek"]) && !seekTime) {
673
- if (valType(vars["seek"]) == "number" && vars["seek"] > 0) {
674
- seekTime = vars["seek"];
675
- } else if (valType(vars["seek"]) == "string" && vars["seek"] == "cookie" && cookieName) {
676
- var cke = player.cookie(cookieName);
677
- if (cke) {
678
- seekTime = cke["time"];
679
- }
680
- } else if (valType(vars["seek"]) == "string" && vars["seek"] !== "" && !isNaN(parseFloat(vars["seek"]))) {
681
- seekTime = parseFloat(vars["seek"]);
682
- }
683
- if (seekTime && seekTime > 0) {
684
- maxSeeTime = Math.max(maxSeeTime, seekTime);
685
- if (firstSeekTime < 0) {
686
- firstSeekTime = seekTime;
687
- }
688
- }
689
- }
690
764
  }, plugPlayer = function(url) {
691
765
  switch (vars["plug"]) {
692
766
  case "hls.js":
@@ -716,13 +790,31 @@ var require_ckplayer = __commonJS({
716
790
  }, hlsPlayer = function(url) {
717
791
  var startHls = function() {
718
792
  if (typeof Hls !== "undefined" && !isUndefined(Hls) && Hls.isSupported()) {
719
- var hlsConf = {};
720
- if (seekTime && seekTime > 0 && (isUndefined(vars["live"]) || !vars["live"])) {
721
- hlsConf.startPosition = seekTime;
722
- maxSeeTime = Math.max(maxSeeTime, seekTime);
793
+ if (hls) {
794
+ try {
795
+ hls.destroy();
796
+ } catch (event2) {
797
+ }
798
+ hls = null;
799
+ }
800
+ var hlsConf = {
801
+ // 10s 分片流在续播点附近需要略大缓冲,减少卡住转圈
802
+ maxBufferLength: 30,
803
+ maxMaxBufferLength: 60
804
+ };
805
+ var resumeAt = seekTime;
806
+ if (!resumeAt) {
807
+ resumeAt = parseResumeSeekFromVars();
808
+ }
809
+ if (resumeAt && resumeAt > 0 && (isUndefined(vars["live"]) || !vars["live"])) {
810
+ hlsConf.startPosition = resumeAt;
811
+ maxSeeTime = Math.max(maxSeeTime, resumeAt);
723
812
  if (firstSeekTime < 0) {
724
- firstSeekTime = seekTime;
813
+ firstSeekTime = resumeAt;
725
814
  }
815
+ hlsResumeTarget = resumeAt;
816
+ hlsLoadAt = resumeAt;
817
+ hlsLoadTs = Date.now();
726
818
  seekTime = 0;
727
819
  hlsStartPositionUsed = true;
728
820
  clearSeekRetry();
@@ -735,6 +827,21 @@ var require_ckplayer = __commonJS({
735
827
  applyPendingSeek();
736
828
  }
737
829
  });
830
+ hls.on(Hls.Events.FRAG_BUFFERED, function(event2, data) {
831
+ if (hlsResumeTarget <= 0 || !data || !data.frag) {
832
+ return;
833
+ }
834
+ var fragStart = data.frag.start;
835
+ var fragEnd = fragStart + data.frag.duration;
836
+ if (hlsResumeTarget >= fragStart - 0.5 && hlsResumeTarget <= fragEnd + 0.5) {
837
+ if (!waited) {
838
+ waited = true;
839
+ if (C["buffer"]) {
840
+ C["buffer"].hide();
841
+ }
842
+ }
843
+ }
844
+ });
738
845
  hls.on(Hls.Events.ERROR, function(event2, data) {
739
846
  var code = 9;
740
847
  var message2 = language["error"]["loadingFailed"];
@@ -1476,17 +1583,22 @@ var require_ckplayer = __commonJS({
1476
1583
  clearSeekRetry();
1477
1584
  return;
1478
1585
  }
1586
+ if (t > 0) {
1587
+ maxSeeTime = Math.max(maxSeeTime, t);
1588
+ if (firstSeekTime < 0) {
1589
+ firstSeekTime = t;
1590
+ }
1591
+ }
1592
+ if (hlsSeekTo(t, !!force)) {
1593
+ clearSeekRetry();
1594
+ seekTime = 0;
1595
+ return;
1596
+ }
1479
1597
  var readyEnough = !isUndefined(video.readyState) && video.readyState >= 2;
1480
1598
  var bufferedOk = timeInBuffered(t);
1481
1599
  if (!force && !bufferedOk && (!readyEnough || video.readyState < 3)) {
1482
1600
  seekRetryCount++;
1483
1601
  if (seekRetryCount <= 50) {
1484
- try {
1485
- if (hls && typeof hls.startLoad === "function") {
1486
- hls.startLoad(t);
1487
- }
1488
- } catch (event2) {
1489
- }
1490
1602
  if (seekRetryTimer) {
1491
1603
  clearTimeout(seekRetryTimer);
1492
1604
  }
@@ -1497,12 +1609,6 @@ var require_ckplayer = __commonJS({
1497
1609
  }
1498
1610
  }
1499
1611
  clearSeekRetry();
1500
- if (t > 0) {
1501
- maxSeeTime = Math.max(maxSeeTime, t);
1502
- if (firstSeekTime < 0) {
1503
- firstSeekTime = t;
1504
- }
1505
- }
1506
1612
  seekApplyLock = true;
1507
1613
  seekTime = 0;
1508
1614
  try {
@@ -2166,7 +2272,8 @@ var require_ckplayer = __commonJS({
2166
2272
  ad["frontPlay"] = false;
2167
2273
  C["ad"].hide();
2168
2274
  allBarShow();
2169
- seekTime = vars["seek"];
2275
+ seekTime = 0;
2276
+ applyResumeSeekState(parseResumeSeekFromVars());
2170
2277
  if (ad["front"]["video"]) {
2171
2278
  changeVideo(vars["video"]);
2172
2279
  } else {
@@ -2751,11 +2858,15 @@ var require_ckplayer = __commonJS({
2751
2858
  if (vars["timeScheduleAdjust"] == 5 && target > maxSeeTime && seekTime && Math.abs(seekTime - target) < 0.5) {
2752
2859
  maxSeeTime = Math.max(maxSeeTime, target);
2753
2860
  }
2754
- if (target > 0.5 && !timeInBuffered(target) && video.readyState < 3) {
2861
+ if (target > 0.5 && !timeInBuffered(target) && video.readyState < 3 && !hls) {
2755
2862
  seekTime = target;
2756
2863
  applyPendingSeek(false);
2757
2864
  return player;
2758
2865
  }
2866
+ if (hlsSeekTo(target, false)) {
2867
+ seekTime = 0;
2868
+ return player;
2869
+ }
2759
2870
  try {
2760
2871
  video.currentTime = target;
2761
2872
  seekTime = 0;
@@ -5970,7 +6081,7 @@ var require_ckplayer = __commonJS({
5970
6081
  if (!isRetry && (!vars || vars["cdnFallback"] !== false)) {
5971
6082
  var cdn = typeof window !== "undefined" && window.ckplayerPlusCdn ? window.ckplayerPlusCdn : ckplayerPlusDefaultCdn;
5972
6083
  var m2 = String(file).match(/\/(hls\.js|flv\.js|mpegts\.js|language)\/([^/?#]+)(?:[?#].*)?$/i);
5973
- if (cdn && cdn.indexOf("1.0.6") === -1 && m2) {
6084
+ if (cdn && cdn.indexOf("1.0.8") === -1 && m2) {
5974
6085
  if (cdn.slice(-1) !== "/") {
5975
6086
  cdn += "/";
5976
6087
  }
@@ -6774,6 +6885,9 @@ function buildPlayerConfig(input) {
6774
6885
  if (input.pluginPath) {
6775
6886
  config.pluginPath = input.pluginPath;
6776
6887
  }
6888
+ if (input.seek != null && input.seek !== "" && !isNaN(parseFloat(input.seek)) && parseFloat(input.seek) > 0) {
6889
+ config.seek = parseFloat(input.seek);
6890
+ }
6777
6891
  for (var key in opts) {
6778
6892
  if (Object.prototype.hasOwnProperty.call(opts, key) && key !== "container") {
6779
6893
  config[key] = opts[key];