ckplayer-plus 1.1.5 → 1.1.6

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/ckplayer.js CHANGED
@@ -141,7 +141,7 @@
141
141
  cdnFallback:true// getPath 失败时是否回退到 jsDelivr(内网可设 false,并配置 pluginPath)
142
142
  };
143
143
  // 打包时替换为真实版本;用于 bundler 下 getPath 失效时的 CDN 回退
144
- var ckplayerPlusDefaultCdn='https://cdn.jsdelivr.net/npm/ckplayer-plus@1.1.5/dist/';
144
+ var ckplayerPlusDefaultCdn='https://cdn.jsdelivr.net/npm/ckplayer-plus@1.1.6/dist/';
145
145
  function ckplayerEmbed(videoObj){
146
146
  /*
147
147
  * rightMenu
@@ -181,6 +181,7 @@
181
181
  var hlsResumeWarmup=false;//HLS 续播先预热首个可解码分片,再定位目标时间
182
182
  var hlsLoadAt=-1;//最近一次 hls.startLoad 目标
183
183
  var hlsLoadTs=0;//最近一次 hls.startLoad 时间戳
184
+ var hlsScrubResumePlay=false;//用户拖动后是否需要在 seeked 时恢复播放
184
185
  var oldTime=0,playTime=0,firstSeekTime=-1,maxSeeTime=0;//oldTime=记录上次播放时间,playTime=当前播放时间,firstSeekTime=记录第一次拖动的时间,maxSeeTime=看过的最大时间
185
186
  var isChangeDef=true;//是否需要重置清晰度
186
187
  var playType='';//播放类别,默认='',是通过api接口播放,='button'则判定是通过点击按钮播放
@@ -446,7 +447,7 @@
446
447
  }
447
448
  var allowCdn=!vars || vars['cdnFallback']!==false;
448
449
  var cdn=(typeof window!=='undefined' && window.ckplayerPlusCdn) ? window.ckplayerPlusCdn : ckplayerPlusDefaultCdn;
449
- if(!allowCdn || !cdn || cdn.indexOf('1.1.5')>-1){
450
+ if(!allowCdn || !cdn || cdn.indexOf('1.1.6')>-1){
450
451
  // 避免占位版本或显式关闭 CDN 时请求坏地址;交给相对路径或业务 pluginPath
451
452
  return folder+'/'+file;
452
453
  }
@@ -820,50 +821,37 @@
820
821
  },
821
822
  /*
822
823
  * hlsInteractiveSeek
823
- * 功能:用户拖动/点击进度条时的 HLS 跳转(与首启续播预热分离)
824
- * 立即 currentTime + 按目标片起点 startLoad,保持原播放状态,不走 finishResumeSeek 强制暂停
824
+ * 功能:用户拖动/点击进度条时的 HLS 跳转
825
+ * 对齐 EZ/标准 hls.js 做法:只改 video.currentTime,由 hls.js 内部响应 seeking 拉片。
826
+ * 禁止再手动 startLoad,否则会与内部加载竞态、取消 .ts 并永久转圈。
825
827
  */
826
828
  hlsInteractiveSeek=function(target){
827
- if(!hls || !video || typeof hls.startLoad!=='function'){
829
+ if(!hls || !video){
828
830
  return false;
829
831
  }
830
832
  if(isNaN(target) || target<0){
831
833
  target=0;
832
834
  }
833
- var wasPlaying=!paused;
835
+ var dur=duration || video.duration || 0;
836
+ if(dur && isFinite(dur) && dur>0 && target>=dur){
837
+ target=Math.max(0,dur-0.3);
838
+ }
839
+ hlsScrubResumePlay=!paused;
834
840
  clearSeekRetry();
835
- // 退出续播预热态,避免拖动被当成断点续播而一直等前片 / 强制暂停
836
841
  hlsResumeWarmup=false;
837
- hlsResumeTarget=target;
842
+ hlsResumeTarget=-1;
838
843
  seekTime=0;
839
844
  seekApplyLock=true;
840
- var loadAt=hlsFragStartTime(target);
841
- if(loadAt<=0 && target>0){
842
- loadAt=Math.max(0,target);
843
- }
844
- hlsLoadAt=loadAt;
845
- hlsLoadTs=Date.now();
846
- try{
847
- hls.startLoad(loadAt);
848
- }catch(event){}
849
845
  try{
850
846
  video.currentTime=target;
851
847
  }catch(event){
852
- seekTime=target;
848
+ seekApplyLock=false;
849
+ return false;
853
850
  }
851
+ // 短暂锁避免 seeking 钩子里抢先 play 打断分片;seeked 后再恢复
854
852
  setTimeout(function(){
855
853
  seekApplyLock=false;
856
- if(!video){return;}
857
- if(C['buffer']){
858
- C['buffer'].hide();
859
- }
860
- waited=true;
861
- if(wasPlaying && paused){
862
- try{
863
- player.play();
864
- }catch(errPlay){}
865
- }
866
- },200);
854
+ },120);
867
855
  return true;
868
856
  },
869
857
  /*
@@ -878,6 +866,7 @@
878
866
  hlsResumeWarmup=false;
879
867
  hlsLoadAt=-1;
880
868
  hlsLoadTs=0;
869
+ hlsScrubResumePlay=false;
881
870
  decodeRecoverCount=0;
882
871
  if(hls){
883
872
  try{
@@ -1043,9 +1032,12 @@
1043
1032
  hls=null;
1044
1033
  }
1045
1034
  var hlsConf={
1046
- // 10s 分片流在续播点附近需要略大缓冲,减少卡住转圈
1035
+ // 对齐常见在线 M3U8 播放器:更大前向/后向缓冲,拖动更易命中已缓存区间
1036
+ enableWorker:false,
1047
1037
  maxBufferLength:30,
1048
- maxMaxBufferLength:60
1038
+ maxMaxBufferLength:600,
1039
+ maxBufferSize:60*1000*1000,
1040
+ backBufferLength:90
1049
1041
  };
1050
1042
  var resumeAt=seekTime;
1051
1043
  if(!resumeAt){
@@ -2513,6 +2505,17 @@
2513
2505
  decodeRecoverCount=0;
2514
2506
  startPendingAutoplay();
2515
2507
  pSliderMouseDown=false;
2508
+ waited=true;
2509
+ if(C['buffer']){
2510
+ C['buffer'].hide();
2511
+ }
2512
+ // 用户拖动后恢复播放(标准 video + hls.js 行为)
2513
+ if(hlsScrubResumePlay){
2514
+ hlsScrubResumePlay=false;
2515
+ try{
2516
+ player.play();
2517
+ }catch(event){}
2518
+ }
2516
2519
  eventTarget('seek',{time:this.currentTime,state:'seeked'});
2517
2520
  eventTarget('seeked');
2518
2521
  },
@@ -7407,7 +7410,7 @@
7407
7410
  if(!isRetry && (!vars || vars['cdnFallback']!==false)){
7408
7411
  var cdn=(typeof window!=='undefined' && window.ckplayerPlusCdn) ? window.ckplayerPlusCdn : ckplayerPlusDefaultCdn;
7409
7412
  var m=String(file).match(/\/(hls\.js|flv\.js|mpegts\.js|language)\/([^/?#]+)(?:[?#].*)?$/i);
7410
- if(cdn && cdn.indexOf('1.1.5')===-1 && m){
7413
+ if(cdn && cdn.indexOf('1.1.6')===-1 && m){
7411
7414
  if(cdn.slice(-1)!=='/'){
7412
7415
  cdn+='/';
7413
7416
  }