ckplayer-plus 1.1.6 → 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/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.6/dist/';
144
+ var ckplayerPlusDefaultCdn='https://cdn.jsdelivr.net/npm/ckplayer-plus@1.1.7/dist/';
145
145
  function ckplayerEmbed(videoObj){
146
146
  /*
147
147
  * rightMenu
@@ -182,6 +182,8 @@
182
182
  var hlsLoadAt=-1;//最近一次 hls.startLoad 目标
183
183
  var hlsLoadTs=0;//最近一次 hls.startLoad 时间戳
184
184
  var hlsScrubResumePlay=false;//用户拖动后是否需要在 seeked 时恢复播放
185
+ var hlsScrubbing=false;//进度条拖动中(seeking 钩子跳过二次 seek)
186
+ var hlsResumeSettling=false;//断点续播定位中(弱化 waiting、跳过二次 seek)
185
187
  var oldTime=0,playTime=0,firstSeekTime=-1,maxSeeTime=0;//oldTime=记录上次播放时间,playTime=当前播放时间,firstSeekTime=记录第一次拖动的时间,maxSeeTime=看过的最大时间
186
188
  var isChangeDef=true;//是否需要重置清晰度
187
189
  var playType='';//播放类别,默认='',是通过api接口播放,='button'则判定是通过点击按钮播放
@@ -447,7 +449,7 @@
447
449
  }
448
450
  var allowCdn=!vars || vars['cdnFallback']!==false;
449
451
  var cdn=(typeof window!=='undefined' && window.ckplayerPlusCdn) ? window.ckplayerPlusCdn : ckplayerPlusDefaultCdn;
450
- if(!allowCdn || !cdn || cdn.indexOf('1.1.6')>-1){
452
+ if(!allowCdn || !cdn || cdn.indexOf('1.1.7')>-1){
451
453
  // 避免占位版本或显式关闭 CDN 时请求坏地址;交给相对路径或业务 pluginPath
452
454
  return folder+'/'+file;
453
455
  }
@@ -822,8 +824,7 @@
822
824
  /*
823
825
  * hlsInteractiveSeek
824
826
  * 功能:用户拖动/点击进度条时的 HLS 跳转
825
- * 对齐 EZ/标准 hls.js 做法:只改 video.currentTime,由 hls.js 内部响应 seeking 拉片。
826
- * 禁止再手动 startLoad,否则会与内部加载竞态、取消 .ts 并永久转圈。
827
+ * 对齐三站/标准 hls.js:只改 video.currentTime,由 hls.js 内部响应 seeking 拉片。
827
828
  */
828
829
  hlsInteractiveSeek=function(target){
829
830
  if(!hls || !video){
@@ -836,24 +837,68 @@
836
837
  if(dur && isFinite(dur) && dur>0 && target>=dur){
837
838
  target=Math.max(0,dur-0.3);
838
839
  }
839
- hlsScrubResumePlay=!paused;
840
+ var wasPlaying=!paused;
841
+ hlsScrubbing=true;
842
+ hlsScrubResumePlay=wasPlaying;
840
843
  clearSeekRetry();
841
844
  hlsResumeWarmup=false;
845
+ hlsResumeSettling=false;
842
846
  hlsResumeTarget=-1;
843
847
  seekTime=0;
844
848
  seekApplyLock=true;
849
+ // 已在缓冲区内:秒切并尽快恢复播放
850
+ if(timeInBuffered(target)){
851
+ try{
852
+ video.currentTime=target;
853
+ }catch(event){
854
+ seekApplyLock=false;
855
+ hlsScrubbing=false;
856
+ return false;
857
+ }
858
+ setTimeout(function(){
859
+ seekApplyLock=false;
860
+ hlsScrubbing=false;
861
+ if(C['buffer']){
862
+ C['buffer'].hide();
863
+ }
864
+ waited=true;
865
+ if(wasPlaying){
866
+ hlsScrubResumePlay=false;
867
+ try{
868
+ player.play();
869
+ }catch(errPlay){}
870
+ }
871
+ else{
872
+ hlsScrubResumePlay=false;
873
+ }
874
+ },80);
875
+ return true;
876
+ }
845
877
  try{
846
878
  video.currentTime=target;
847
879
  }catch(event){
848
880
  seekApplyLock=false;
881
+ hlsScrubbing=false;
849
882
  return false;
850
883
  }
851
- // 短暂锁避免 seeking 钩子里抢先 play 打断分片;seeked 后再恢复
852
884
  setTimeout(function(){
853
885
  seekApplyLock=false;
854
886
  },120);
855
887
  return true;
856
888
  },
889
+ /*
890
+ * hidePlaybackBuffer
891
+ * 功能:统一关闭 loading/转圈(seeked/canplay/续播完成共用)
892
+ */
893
+ hidePlaybackBuffer=function(){
894
+ waited=true;
895
+ if(C['buffer']){
896
+ C['buffer'].hide();
897
+ }
898
+ if(C['loading']){
899
+ C['loading'].hide();
900
+ }
901
+ },
857
902
  /*
858
903
  * destroyStreamPlayers
859
904
  * 功能:切换地址前销毁 hls/flv/mpegts 实例
@@ -867,6 +912,8 @@
867
912
  hlsLoadAt=-1;
868
913
  hlsLoadTs=0;
869
914
  hlsScrubResumePlay=false;
915
+ hlsScrubbing=false;
916
+ hlsResumeSettling=false;
870
917
  decodeRecoverCount=0;
871
918
  if(hls){
872
919
  try{
@@ -1043,8 +1090,8 @@
1043
1090
  if(!resumeAt){
1044
1091
  resumeAt=parseResumeSeekFromVars();
1045
1092
  }
1046
- // HLS 续播:autoStartLoad=false,避免默认从 0 拉片后再 startLoad 导致 .ts canceled
1047
- // 清单解析后只 startLoad 一次(对齐目标前一片),缓冲覆盖后再 currentTime。
1093
+ // 断点续播对齐 ZWPlayer:保持默认 autoStartLoad,媒体就绪后 currentTime=seek
1094
+ // 不再 autoStartLoad:false + 手动 startLoad 预热(易自相 cancel)。
1048
1095
  if(resumeAt && resumeAt>0 && (isUndefined(vars['live']) || !vars['live'])){
1049
1096
  maxSeeTime=Math.max(maxSeeTime,resumeAt);
1050
1097
  if(firstSeekTime<0){
@@ -1052,36 +1099,40 @@
1052
1099
  }
1053
1100
  seekTime=resumeAt;
1054
1101
  hlsResumeTarget=resumeAt;
1055
- hlsResumeWarmup=true;
1056
- hlsConf.autoStartLoad=false;
1102
+ hlsResumeSettling=true;
1103
+ hlsResumeWarmup=false;
1057
1104
  }
1058
1105
  hls = new Hls(hlsConf);
1059
1106
  hls.loadSource(url);
1060
1107
  hls.attachMedia(video);
1061
1108
  hls.on(Hls.Events.MANIFEST_PARSED, function(){
1062
- if(hlsResumeWarmup && seekTime>0){
1063
- var loadAt=hlsPriorLoadTime(seekTime);
1064
- hlsLoadAt=loadAt;
1065
- hlsLoadTs=Date.now();
1109
+ if(seekTime>0 && hlsResumeSettling){
1066
1110
  hlsStartPositionUsed=true;
1067
- try{
1068
- hls.startLoad(loadAt);
1069
- }catch(event){}
1070
- // 超时兜底:仍未定位则落到可解码的对齐点,避免一直转圈
1071
- setTimeout(function(){
1072
- if(!hlsResumeWarmup || !seekTime){return;}
1073
- var target=seekTime;
1074
- if(hlsCanSafelySeekTo(target)){
1075
- finishResumeSeek(target);
1111
+ var tryResume=function(){
1112
+ if(!seekTime || !hlsResumeSettling){return;}
1113
+ var t=seekTime;
1114
+ if(video && (video.readyState>=1 || (duration && isFinite(duration) && duration>0))){
1115
+ finishResumeSeek(t);
1076
1116
  return;
1077
1117
  }
1078
- var snap=hlsFragStartTime(target);
1079
- if(timeInBuffered(snap) || hlsCanSafelySeekTo(snap)){
1080
- finishResumeSeek(snap);
1081
- return;
1118
+ seekRetryCount++;
1119
+ if(seekRetryCount<=25){
1120
+ if(seekRetryTimer){
1121
+ clearTimeout(seekRetryTimer);
1122
+ }
1123
+ seekRetryTimer=setTimeout(tryResume,120);
1124
+ }
1125
+ else{
1126
+ finishResumeSeek(t);
1082
1127
  }
1083
- finishResumeSeek(Math.max(0,loadAt));
1084
- },5000);
1128
+ };
1129
+ tryResume();
1130
+ // 超时兜底:避免永久转圈
1131
+ setTimeout(function(){
1132
+ if(hlsResumeSettling && seekTime>0){
1133
+ finishResumeSeek(seekTime);
1134
+ }
1135
+ },4000);
1085
1136
  return;
1086
1137
  }
1087
1138
  if(!hlsStartPositionUsed){
@@ -1089,10 +1140,7 @@
1089
1140
  }
1090
1141
  });
1091
1142
  hls.on(Hls.Events.FRAG_BUFFERED, function(event, data){
1092
- if(hlsResumeWarmup && seekTime>0){
1093
- if(hlsCanSafelySeekTo(seekTime)){
1094
- finishResumeSeek(seekTime);
1095
- }
1143
+ if(hlsResumeSettling && seekTime>0){
1096
1144
  return;
1097
1145
  }
1098
1146
  if(hlsResumeTarget<=0 || !data || !data.frag){
@@ -1101,12 +1149,7 @@
1101
1149
  var fragStart=data.frag.start;
1102
1150
  var fragEnd=fragStart+data.frag.duration;
1103
1151
  if(hlsResumeTarget>=fragStart-0.5 && hlsResumeTarget<=fragEnd+0.5){
1104
- if(!waited){
1105
- waited=true;
1106
- if(C['buffer']){
1107
- C['buffer'].hide();
1108
- }
1109
- }
1152
+ hidePlaybackBuffer();
1110
1153
  }
1111
1154
  });
1112
1155
  hls.on(Hls.Events.ERROR, function(event, data){
@@ -1126,12 +1169,29 @@
1126
1169
  }
1127
1170
  }
1128
1171
  }
1129
- // 媒体解码类错误先尝试恢复,避免续播直接黑屏
1130
- if(fatal && data.type===Hls.ErrorTypes.MEDIA_ERROR && hls && typeof hls.recoverMediaError==='function'){
1131
- try{
1132
- hls.recoverMediaError();
1133
- fatal=false;
1134
- }catch(errRecover){}
1172
+ // 对齐 ZWPlayer / ezwebtools:网络错误重拉,媒体错误恢复解码
1173
+ if(fatal && hls){
1174
+ if(data.type===Hls.ErrorTypes.NETWORK_ERROR && typeof hls.startLoad==='function'){
1175
+ try{
1176
+ if(data.details==='keyLoadError'){
1177
+ setTimeout(function(){
1178
+ if(hls && typeof hls.startLoad==='function'){
1179
+ hls.startLoad();
1180
+ }
1181
+ },2000);
1182
+ }
1183
+ else{
1184
+ hls.startLoad();
1185
+ }
1186
+ fatal=false;
1187
+ }catch(errNet){}
1188
+ }
1189
+ else if(data.type===Hls.ErrorTypes.MEDIA_ERROR && typeof hls.recoverMediaError==='function'){
1190
+ try{
1191
+ hls.recoverMediaError();
1192
+ fatal=false;
1193
+ }catch(errRecover){}
1194
+ }
1135
1195
  }
1136
1196
  CT.error={code:code,message:message};
1137
1197
  eventTarget('error',CT.error);//注册监听error
@@ -2045,10 +2105,11 @@
2045
2105
  /*
2046
2106
  * finishResumeSeek
2047
2107
  * 功能:完成续播定位。只 seek、不自动 play(由用户点击中央按钮/播放键)
2048
- * 避免 seek 后立刻 play 打断 HLS 分片请求(Network 出现 canceled .ts)并导致永久转圈
2108
+ * ZW 模型:直接 currentTime,不依赖前片预热完成态
2049
2109
  */
2050
2110
  finishResumeSeek=function(t){
2051
2111
  hlsResumeWarmup=false;
2112
+ hlsResumeSettling=false;
2052
2113
  // 续播场景取消挂起的自动播放,统一改为点击播放
2053
2114
  autoplayPending=false;
2054
2115
  applySeekToMedia(t);
@@ -2058,10 +2119,7 @@
2058
2119
  video.pause();
2059
2120
  }catch(event){}
2060
2121
  paused=true;
2061
- if(C['buffer']){
2062
- C['buffer'].hide();
2063
- }
2064
- waited=true;
2122
+ hidePlaybackBuffer();
2065
2123
  if(!vars['controls'] && C['centerPlay']){
2066
2124
  C['centerPlay'].show();
2067
2125
  }
@@ -2114,9 +2172,8 @@
2114
2172
  },
2115
2173
  /*
2116
2174
  * applyPendingSeek
2117
- * 功能:在媒体就绪且目标时间可解码后再应用挂起的 seekTime
2118
- * 避免断点续播过早 seek 触发 PIPELINE_ERROR_DECODE(非关键帧)
2119
- * seekTime 仅在 finishResumeSeek / applySeekToMedia 成功后清零
2175
+ * 功能:在媒体就绪后应用挂起的 seekTime
2176
+ * HLS 对齐 ZWPlayer:就绪后直接 currentTime(finishResumeSeek),不再主路径 startLoad 预热
2120
2177
  */
2121
2178
  applyPendingSeek=function(force){
2122
2179
  if(!seekTime || !video || seekApplyLock){
@@ -2133,6 +2190,7 @@
2133
2190
  if(t<=0){
2134
2191
  seekTime=0;
2135
2192
  clearSeekRetry();
2193
+ hlsResumeSettling=false;
2136
2194
  return;
2137
2195
  }
2138
2196
  if(t>0){
@@ -2141,47 +2199,25 @@
2141
2199
  firstSeekTime=t;
2142
2200
  }
2143
2201
  }
2144
- // HLS:缓冲已可安全定位 finish,禁止再 startLoad / 勿提前清 seekTime
2145
- if(hls && typeof hls.startLoad==='function'){
2146
- if(hlsCanSafelySeekTo(t)){
2147
- finishResumeSeek(t);
2148
- return;
2149
- }
2150
- // 预热中或需加载:只按对齐点 startLoad(去重),保留 seekTime 等 FRAG_BUFFERED
2151
- if(t>1){
2152
- hlsResumeWarmup=true;
2153
- hlsResumeTarget=t;
2154
- var loadAt=hlsPriorLoadTime(t);
2155
- var shouldLoad=!!force;
2156
- if(!shouldLoad){
2157
- if(!(hlsLoadAt>=0 && Math.abs(hlsLoadAt-loadAt)<1.5 && (Date.now()-hlsLoadTs)<4000)){
2158
- shouldLoad=true;
2159
- }
2160
- }
2161
- if(shouldLoad){
2162
- hlsLoadAt=loadAt;
2163
- hlsLoadTs=Date.now();
2164
- try{
2165
- hls.startLoad(loadAt);
2166
- }catch(event){}
2167
- }
2202
+ // HLS:媒体元数据就绪即可定位(由 hls.js 响应 seeking 拉片)
2203
+ if(hls){
2204
+ hlsResumeSettling=true;
2205
+ if(!force && (!isUndefined(video.readyState) && video.readyState<1) && !(dur && isFinite(dur) && dur>0)){
2168
2206
  seekRetryCount++;
2169
- if(seekRetryCount<=50){
2207
+ if(seekRetryCount<=40){
2170
2208
  if(seekRetryTimer){
2171
2209
  clearTimeout(seekRetryTimer);
2172
2210
  }
2173
2211
  seekRetryTimer=setTimeout(function(){
2174
2212
  applyPendingSeek(false);
2175
- },200);
2213
+ },120);
2176
2214
  return;
2177
2215
  }
2178
- // 重试耗尽:落到目标片起点,避免永久转圈
2179
- finishResumeSeek(hlsFragStartTime(t) || loadAt || t);
2180
- return;
2181
2216
  }
2217
+ finishResumeSeek(t);
2218
+ return;
2182
2219
  }
2183
2220
  // 对普通 MP4,metadata 后设置 currentTime 会由浏览器自动请求目标 Range。
2184
- // 等待目标已缓冲会形成循环等待:目标分片只有 seek 后才会下载。
2185
2221
  if(!force && (!isUndefined(video.readyState) && video.readyState<1)){
2186
2222
  seekRetryCount++;
2187
2223
  if(seekRetryCount<=50){
@@ -2302,6 +2338,7 @@
2302
2338
  },
2303
2339
  canPlay:function(){
2304
2340
  C['loading'].hide();
2341
+ hidePlaybackBuffer();
2305
2342
  eventTarget('canplay');
2306
2343
  applyPendingSeek();
2307
2344
  startPendingAutoplay();
@@ -2503,12 +2540,11 @@
2503
2540
  seeked:function(){
2504
2541
  seekApplyLock=false;
2505
2542
  decodeRecoverCount=0;
2543
+ hlsScrubbing=false;
2544
+ hlsResumeSettling=false;
2506
2545
  startPendingAutoplay();
2507
2546
  pSliderMouseDown=false;
2508
- waited=true;
2509
- if(C['buffer']){
2510
- C['buffer'].hide();
2511
- }
2547
+ hidePlaybackBuffer();
2512
2548
  // 用户拖动后恢复播放(标准 video + hls.js 行为)
2513
2549
  if(hlsScrubResumePlay){
2514
2550
  hlsScrubResumePlay=false;
@@ -2520,55 +2556,58 @@
2520
2556
  eventTarget('seeked');
2521
2557
  },
2522
2558
  seeking:function(){
2523
- // 续播/初始化定位中禁止抢先 play:会取消进行中的 .ts 并导致永久 loading
2524
- if(paused && !seekApplyLock && !hlsResumeWarmup && !seekTime && !autoplayPending){
2559
+ // 续播/拖动定位中禁止抢先 play:会取消进行中的 .ts 并导致永久 loading
2560
+ if(paused && !seekApplyLock && !hlsResumeWarmup && !hlsResumeSettling && !hlsScrubbing && !seekTime && !autoplayPending){
2525
2561
  player.play();
2526
2562
  }
2527
2563
  var seekingTime=this.currentTime;
2528
2564
  if(firstSeekTime==-1){
2529
2565
  firstSeekTime=seekingTime;//记录第一次拖动的时间
2530
2566
  }
2531
- switch(vars['timeScheduleAdjust']){
2532
- case 0://禁止拖动
2533
- if(oldTime!=seekingTime){
2534
- waitingMessage=false;
2535
- player.seek(oldTime);
2536
- message(language['timeScheduleAdjust']['prohibit']);
2537
- return;
2538
- }
2539
- break;
2540
- case 2://只能前进(向右拖动
2541
- if(seekingTime<oldTime){
2542
- waitingMessage=false;
2543
- player.seek(oldTime);
2544
- message(language['timeScheduleAdjust']['prohibitBackOff']);
2545
- return;
2546
- }
2547
- break;
2548
- case 3://是只能后退
2549
- if(seekingTime>oldTime){
2550
- waitingMessage=false;
2551
- player.seek(oldTime);
2552
- message(language['timeScheduleAdjust']['prohibitForward']);
2553
- return;
2554
- }
2555
- break;
2556
- case 4://只能前进但能回到第一次拖动时的位置
2557
- if(seekingTime<firstSeekTime){
2558
- waitingMessage=false;
2559
- player.seek(firstSeekTime);
2560
- message(language['timeScheduleAdjust']['prohibitLookBack']);
2561
- return;
2562
- }
2563
- break;
2564
- case 5://看过的地方可以随意拖动
2565
- if(seekingTime>maxSeeTime){
2566
- waitingMessage=false;
2567
- player.seek(maxSeeTime);
2568
- message(language['timeScheduleAdjust']['prohibitForwardNotViewed']);
2569
- return;
2570
- }
2571
- break;
2567
+ // scrub/续播定位期间:跳过二次 player.seek(timeScheduleAdjust 由进度条侧执法)
2568
+ if(!(hlsScrubbing || hlsScrubResumePlay || hlsResumeSettling || hlsResumeWarmup)){
2569
+ switch(vars['timeScheduleAdjust']){
2570
+ case 0://禁止拖动
2571
+ if(oldTime!=seekingTime){
2572
+ waitingMessage=false;
2573
+ player.seek(oldTime);
2574
+ message(language['timeScheduleAdjust']['prohibit']);
2575
+ return;
2576
+ }
2577
+ break;
2578
+ case 2://只能前进(向右拖动
2579
+ if(seekingTime<oldTime){
2580
+ waitingMessage=false;
2581
+ player.seek(oldTime);
2582
+ message(language['timeScheduleAdjust']['prohibitBackOff']);
2583
+ return;
2584
+ }
2585
+ break;
2586
+ case 3://是只能后退
2587
+ if(seekingTime>oldTime){
2588
+ waitingMessage=false;
2589
+ player.seek(oldTime);
2590
+ message(language['timeScheduleAdjust']['prohibitForward']);
2591
+ return;
2592
+ }
2593
+ break;
2594
+ case 4://只能前进但能回到第一次拖动时的位置
2595
+ if(seekingTime<firstSeekTime){
2596
+ waitingMessage=false;
2597
+ player.seek(firstSeekTime);
2598
+ message(language['timeScheduleAdjust']['prohibitLookBack']);
2599
+ return;
2600
+ }
2601
+ break;
2602
+ case 5://看过的地方可以随意拖动
2603
+ if(seekingTime>maxSeeTime){
2604
+ waitingMessage=false;
2605
+ player.seek(maxSeeTime);
2606
+ message(language['timeScheduleAdjust']['prohibitForwardNotViewed']);
2607
+ return;
2608
+ }
2609
+ break;
2610
+ }
2572
2611
  }
2573
2612
  eventTarget('seek',{time:seekingTime,state:'seeking'});
2574
2613
  eventTarget('seeking');
@@ -2581,10 +2620,16 @@
2581
2620
  waiting:function(){
2582
2621
  waited=false;
2583
2622
  eventTarget('buffer','start');//注册监听视频缓冲
2584
- C['centerPlay'].hide();
2623
+ if(!(hlsScrubbing || hlsScrubResumePlay || hlsResumeSettling)){
2624
+ C['centerPlay'].hide();
2625
+ }
2585
2626
  if(!vars['controls']){
2586
2627
  C['buffer'].show();
2587
2628
  }
2629
+ // scrub/续播定位中的短暂 waiting 不刷文案,避免钉死「缓冲中」体验
2630
+ if(hlsScrubbing || hlsScrubResumePlay || hlsResumeSettling){
2631
+ return;
2632
+ }
2588
2633
  if(!waitingMessage){
2589
2634
  waitingMessage=true;
2590
2635
  }
@@ -2599,6 +2644,7 @@
2599
2644
  C['bar']['playAndPause']['pause'].show();
2600
2645
  C['bar']['playAndPause']['refresh'].hide();
2601
2646
  C['centerPlay'].hide();
2647
+ hidePlaybackBuffer();
2602
2648
  if(playType=='button'){
2603
2649
  C['bar']['pbox'].removeClass('ck-bar-progress-out');
2604
2650
  }
@@ -5696,6 +5742,7 @@
5696
5742
  e = e || window.event;
5697
5743
  var eleOffset = slider.offset(),bgOffset=bg.offset(),client = getClient(e);
5698
5744
  pSliderMouseDown=true;
5745
+ hlsScrubbing=true;
5699
5746
  posRecord = client['x'];
5700
5747
  //供比较
5701
5748
  var left = eleOffset['left']-bgOffset['left'];
@@ -5797,6 +5844,12 @@
5797
5844
  eventTarget('playback',{time:playbackTime,date:date('Y-m-d H:i:s',playbackTime)});
5798
5845
  eventTarget('seek',{time:playbackTime,state:'seeking',date:date('Y-m-d H:i:s',playbackTime)});
5799
5846
  }
5847
+ // seek 完成后由 seeked 清 hlsScrubbing;此处延迟兜底
5848
+ setTimeout(function(){
5849
+ if(!pSliderMouseDown){
5850
+ hlsScrubbing=false;
5851
+ }
5852
+ },800);
5800
5853
  C['bar']['pbox'].removeClass('ck-bar-progress-slider-move');
5801
5854
  if(isMouseLeave){
5802
5855
  tip();
@@ -7410,7 +7463,7 @@
7410
7463
  if(!isRetry && (!vars || vars['cdnFallback']!==false)){
7411
7464
  var cdn=(typeof window!=='undefined' && window.ckplayerPlusCdn) ? window.ckplayerPlusCdn : ckplayerPlusDefaultCdn;
7412
7465
  var m=String(file).match(/\/(hls\.js|flv\.js|mpegts\.js|language)\/([^/?#]+)(?:[?#].*)?$/i);
7413
- if(cdn && cdn.indexOf('1.1.6')===-1 && m){
7466
+ if(cdn && cdn.indexOf('1.1.7')===-1 && m){
7414
7467
  if(cdn.slice(-1)!=='/'){
7415
7468
  cdn+='/';
7416
7469
  }