ckplayer-plus 1.0.7 → 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/vue.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.7/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.7") > -1) {
413
+ if (!allowCdn || !cdn || cdn.indexOf("1.0.8") > -1) {
411
414
  return folder + "/" + file;
412
415
  }
413
416
  if (cdn.slice(-1) !== "/") {
@@ -618,10 +621,44 @@ var require_ckplayer = __commonJS({
618
621
  if (!seekTime) {
619
622
  applyResumeSeekState(parseResumeSeekFromVars());
620
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;
621
655
  }, destroyStreamPlayers = function() {
622
656
  clearSeekRetry();
623
657
  seekApplyLock = false;
624
658
  hlsStartPositionUsed = false;
659
+ hlsResumeTarget = -1;
660
+ hlsLoadAt = -1;
661
+ hlsLoadTs = 0;
625
662
  decodeRecoverCount = 0;
626
663
  if (hls) {
627
664
  try {
@@ -780,6 +817,9 @@ var require_ckplayer = __commonJS({
780
817
  if (firstSeekTime < 0) {
781
818
  firstSeekTime = resumeAt;
782
819
  }
820
+ hlsResumeTarget = resumeAt;
821
+ hlsLoadAt = resumeAt;
822
+ hlsLoadTs = Date.now();
783
823
  seekTime = 0;
784
824
  hlsStartPositionUsed = true;
785
825
  clearSeekRetry();
@@ -792,6 +832,21 @@ var require_ckplayer = __commonJS({
792
832
  applyPendingSeek();
793
833
  }
794
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
+ });
795
850
  hls.on(Hls.Events.ERROR, function(event2, data) {
796
851
  var code = 9;
797
852
  var message2 = language["error"]["loadingFailed"];
@@ -1539,14 +1594,9 @@ var require_ckplayer = __commonJS({
1539
1594
  firstSeekTime = t;
1540
1595
  }
1541
1596
  }
1542
- if (hls && typeof hls.startLoad === "function") {
1597
+ if (hlsSeekTo(t, !!force)) {
1543
1598
  clearSeekRetry();
1544
1599
  seekTime = 0;
1545
- try {
1546
- hls.startLoad(t);
1547
- } catch (event2) {
1548
- seekTime = t;
1549
- }
1550
1600
  return;
1551
1601
  }
1552
1602
  var readyEnough = !isUndefined(video.readyState) && video.readyState >= 2;
@@ -2818,13 +2868,8 @@ var require_ckplayer = __commonJS({
2818
2868
  applyPendingSeek(false);
2819
2869
  return player;
2820
2870
  }
2821
- if (hls && typeof hls.startLoad === "function") {
2871
+ if (hlsSeekTo(target, false)) {
2822
2872
  seekTime = 0;
2823
- try {
2824
- hls.startLoad(target);
2825
- } catch (event2) {
2826
- seekTime = target;
2827
- }
2828
2873
  return player;
2829
2874
  }
2830
2875
  try {
@@ -6041,7 +6086,7 @@ var require_ckplayer = __commonJS({
6041
6086
  if (!isRetry && (!vars || vars["cdnFallback"] !== false)) {
6042
6087
  var cdn = typeof window !== "undefined" && window.ckplayerPlusCdn ? window.ckplayerPlusCdn : ckplayerPlusDefaultCdn;
6043
6088
  var m2 = String(file).match(/\/(hls\.js|flv\.js|mpegts\.js|language)\/([^/?#]+)(?:[?#].*)?$/i);
6044
- if (cdn && cdn.indexOf("1.0.7") === -1 && m2) {
6089
+ if (cdn && cdn.indexOf("1.0.8") === -1 && m2) {
6045
6090
  if (cdn.slice(-1) !== "/") {
6046
6091
  cdn += "/";
6047
6092
  }
@@ -6842,6 +6887,9 @@ function buildPlayerConfig(input) {
6842
6887
  if (input.pluginPath) {
6843
6888
  config.pluginPath = input.pluginPath;
6844
6889
  }
6890
+ if (input.seek != null && input.seek !== "" && !isNaN(parseFloat(input.seek)) && parseFloat(input.seek) > 0) {
6891
+ config.seek = parseFloat(input.seek);
6892
+ }
6845
6893
  for (var key in opts) {
6846
6894
  if (Object.prototype.hasOwnProperty.call(opts, key) && key !== "container") {
6847
6895
  config[key] = opts[key];
@@ -6867,6 +6915,8 @@ var CkPlayer = {
6867
6915
  autoPlug: { type: Boolean, default: true },
6868
6916
  volume: { type: Number, default: 0.8 },
6869
6917
  pluginPath: { type: String, default: "" },
6918
+ /** 续播秒数;请在创建时传入,不要在 onReady 里再 player.seek 同一时间点 */
6919
+ seek: { default: 0 },
6870
6920
  options: { type: Object, default: function() {
6871
6921
  return {};
6872
6922
  } },
@@ -6908,6 +6958,10 @@ var CkPlayer = {
6908
6958
  pluginPath: function() {
6909
6959
  this.reinit();
6910
6960
  },
6961
+ seek: function(val) {
6962
+ if (!this.player || val == null || val === "" || isNaN(parseFloat(val)) || parseFloat(val) <= 0) return;
6963
+ this.player.seek(parseFloat(val));
6964
+ },
6911
6965
  volume: function(vol) {
6912
6966
  if (this.player && typeof this.player.volume === "function" && typeof vol === "number") {
6913
6967
  this.player.volume(vol);
@@ -6926,6 +6980,7 @@ var CkPlayer = {
6926
6980
  autoPlug: this.autoPlug,
6927
6981
  volume: this.volume,
6928
6982
  pluginPath: this.pluginPath,
6983
+ seek: this.seek,
6929
6984
  options: this.options,
6930
6985
  cookie: this.instanceId
6931
6986
  });
package/dist/vue.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.7/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.7") > -1) {
408
+ if (!allowCdn || !cdn || cdn.indexOf("1.0.8") > -1) {
406
409
  return folder + "/" + file;
407
410
  }
408
411
  if (cdn.slice(-1) !== "/") {
@@ -613,10 +616,44 @@ var require_ckplayer = __commonJS({
613
616
  if (!seekTime) {
614
617
  applyResumeSeekState(parseResumeSeekFromVars());
615
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;
616
650
  }, destroyStreamPlayers = function() {
617
651
  clearSeekRetry();
618
652
  seekApplyLock = false;
619
653
  hlsStartPositionUsed = false;
654
+ hlsResumeTarget = -1;
655
+ hlsLoadAt = -1;
656
+ hlsLoadTs = 0;
620
657
  decodeRecoverCount = 0;
621
658
  if (hls) {
622
659
  try {
@@ -775,6 +812,9 @@ var require_ckplayer = __commonJS({
775
812
  if (firstSeekTime < 0) {
776
813
  firstSeekTime = resumeAt;
777
814
  }
815
+ hlsResumeTarget = resumeAt;
816
+ hlsLoadAt = resumeAt;
817
+ hlsLoadTs = Date.now();
778
818
  seekTime = 0;
779
819
  hlsStartPositionUsed = true;
780
820
  clearSeekRetry();
@@ -787,6 +827,21 @@ var require_ckplayer = __commonJS({
787
827
  applyPendingSeek();
788
828
  }
789
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
+ });
790
845
  hls.on(Hls.Events.ERROR, function(event2, data) {
791
846
  var code = 9;
792
847
  var message2 = language["error"]["loadingFailed"];
@@ -1534,14 +1589,9 @@ var require_ckplayer = __commonJS({
1534
1589
  firstSeekTime = t;
1535
1590
  }
1536
1591
  }
1537
- if (hls && typeof hls.startLoad === "function") {
1592
+ if (hlsSeekTo(t, !!force)) {
1538
1593
  clearSeekRetry();
1539
1594
  seekTime = 0;
1540
- try {
1541
- hls.startLoad(t);
1542
- } catch (event2) {
1543
- seekTime = t;
1544
- }
1545
1595
  return;
1546
1596
  }
1547
1597
  var readyEnough = !isUndefined(video.readyState) && video.readyState >= 2;
@@ -2813,13 +2863,8 @@ var require_ckplayer = __commonJS({
2813
2863
  applyPendingSeek(false);
2814
2864
  return player;
2815
2865
  }
2816
- if (hls && typeof hls.startLoad === "function") {
2866
+ if (hlsSeekTo(target, false)) {
2817
2867
  seekTime = 0;
2818
- try {
2819
- hls.startLoad(target);
2820
- } catch (event2) {
2821
- seekTime = target;
2822
- }
2823
2868
  return player;
2824
2869
  }
2825
2870
  try {
@@ -6036,7 +6081,7 @@ var require_ckplayer = __commonJS({
6036
6081
  if (!isRetry && (!vars || vars["cdnFallback"] !== false)) {
6037
6082
  var cdn = typeof window !== "undefined" && window.ckplayerPlusCdn ? window.ckplayerPlusCdn : ckplayerPlusDefaultCdn;
6038
6083
  var m2 = String(file).match(/\/(hls\.js|flv\.js|mpegts\.js|language)\/([^/?#]+)(?:[?#].*)?$/i);
6039
- if (cdn && cdn.indexOf("1.0.7") === -1 && m2) {
6084
+ if (cdn && cdn.indexOf("1.0.8") === -1 && m2) {
6040
6085
  if (cdn.slice(-1) !== "/") {
6041
6086
  cdn += "/";
6042
6087
  }
@@ -6829,6 +6874,9 @@ function buildPlayerConfig(input) {
6829
6874
  if (input.pluginPath) {
6830
6875
  config.pluginPath = input.pluginPath;
6831
6876
  }
6877
+ if (input.seek != null && input.seek !== "" && !isNaN(parseFloat(input.seek)) && parseFloat(input.seek) > 0) {
6878
+ config.seek = parseFloat(input.seek);
6879
+ }
6832
6880
  for (var key in opts) {
6833
6881
  if (Object.prototype.hasOwnProperty.call(opts, key) && key !== "container") {
6834
6882
  config[key] = opts[key];
@@ -6854,6 +6902,8 @@ var CkPlayer = {
6854
6902
  autoPlug: { type: Boolean, default: true },
6855
6903
  volume: { type: Number, default: 0.8 },
6856
6904
  pluginPath: { type: String, default: "" },
6905
+ /** 续播秒数;请在创建时传入,不要在 onReady 里再 player.seek 同一时间点 */
6906
+ seek: { default: 0 },
6857
6907
  options: { type: Object, default: function() {
6858
6908
  return {};
6859
6909
  } },
@@ -6895,6 +6945,10 @@ var CkPlayer = {
6895
6945
  pluginPath: function() {
6896
6946
  this.reinit();
6897
6947
  },
6948
+ seek: function(val) {
6949
+ if (!this.player || val == null || val === "" || isNaN(parseFloat(val)) || parseFloat(val) <= 0) return;
6950
+ this.player.seek(parseFloat(val));
6951
+ },
6898
6952
  volume: function(vol) {
6899
6953
  if (this.player && typeof this.player.volume === "function" && typeof vol === "number") {
6900
6954
  this.player.volume(vol);
@@ -6913,6 +6967,7 @@ var CkPlayer = {
6913
6967
  autoPlug: this.autoPlug,
6914
6968
  volume: this.volume,
6915
6969
  pluginPath: this.pluginPath,
6970
+ seek: this.seek,
6916
6971
  options: this.options,
6917
6972
  cookie: this.instanceId
6918
6973
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ckplayer-plus",
3
- "version": "1.0.7",
3
+ "version": "1.0.8",
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
@@ -11,6 +11,8 @@ export interface CkPlayerProps {
11
11
  autoPlug?: boolean;
12
12
  volume?: number;
13
13
  pluginPath?: string;
14
+ /** 续播秒数,创建时传入;异步拿到进度后可改此 prop,无需 onReady 再 seek */
15
+ seek?: number | string;
14
16
  options?: Partial<CkplayerConfig>;
15
17
  width?: string;
16
18
  height?: string;