ckplayer-plus 1.1.6 → 1.1.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/ckplayer.js +199 -128
- package/dist/ckplayer.min.js +2 -2
- package/dist/index.cjs +176 -115
- package/dist/index.js +176 -115
- package/dist/react.cjs +176 -115
- package/dist/react.js +176 -115
- package/dist/vue.cjs +176 -115
- package/dist/vue.js +176 -115
- package/package.json +1 -1
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.
|
|
144
|
+
var ckplayerPlusDefaultCdn='https://cdn.jsdelivr.net/npm/ckplayer-plus@1.1.8/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.
|
|
452
|
+
if(!allowCdn || !cdn || cdn.indexOf('1.1.8')>-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
|
-
*
|
|
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
|
-
|
|
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,45 +1090,39 @@
|
|
|
1043
1090
|
if(!resumeAt){
|
|
1044
1091
|
resumeAt=parseResumeSeekFromVars();
|
|
1045
1092
|
}
|
|
1046
|
-
//
|
|
1047
|
-
//
|
|
1093
|
+
// 断点续播:关闭 autoStartLoad,清单解析后从目标前一片 startLoad,缓冲就绪再定位。
|
|
1094
|
+
// 与拖动路径分离(拖动只改 currentTime,不手动 startLoad)。
|
|
1048
1095
|
if(resumeAt && resumeAt>0 && (isUndefined(vars['live']) || !vars['live'])){
|
|
1096
|
+
hlsConf.autoStartLoad=false;
|
|
1049
1097
|
maxSeeTime=Math.max(maxSeeTime,resumeAt);
|
|
1050
1098
|
if(firstSeekTime<0){
|
|
1051
1099
|
firstSeekTime=resumeAt;
|
|
1052
1100
|
}
|
|
1053
1101
|
seekTime=resumeAt;
|
|
1054
1102
|
hlsResumeTarget=resumeAt;
|
|
1055
|
-
|
|
1056
|
-
|
|
1103
|
+
hlsResumeSettling=true;
|
|
1104
|
+
hlsResumeWarmup=false;
|
|
1105
|
+
autoplayPending=false;
|
|
1057
1106
|
}
|
|
1058
1107
|
hls = new Hls(hlsConf);
|
|
1059
1108
|
hls.loadSource(url);
|
|
1060
1109
|
hls.attachMedia(video);
|
|
1061
1110
|
hls.on(Hls.Events.MANIFEST_PARSED, function(){
|
|
1062
|
-
if(
|
|
1063
|
-
var loadAt=hlsPriorLoadTime(seekTime);
|
|
1064
|
-
hlsLoadAt=loadAt;
|
|
1065
|
-
hlsLoadTs=Date.now();
|
|
1111
|
+
if(seekTime>0 && hlsResumeSettling){
|
|
1066
1112
|
hlsStartPositionUsed=true;
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1113
|
+
hlsSeekTo(seekTime,true);
|
|
1114
|
+
if(C['buffer']){
|
|
1115
|
+
C['buffer'].show();
|
|
1116
|
+
}
|
|
1071
1117
|
setTimeout(function(){
|
|
1072
|
-
if(!
|
|
1073
|
-
var target=seekTime;
|
|
1074
|
-
if(hlsCanSafelySeekTo(target)){
|
|
1075
|
-
finishResumeSeek(target);
|
|
1118
|
+
if(!hlsResumeSettling){
|
|
1076
1119
|
return;
|
|
1077
1120
|
}
|
|
1078
|
-
var
|
|
1079
|
-
if(
|
|
1080
|
-
finishResumeSeek(
|
|
1081
|
-
return;
|
|
1121
|
+
var t=seekTime>0?seekTime:hlsResumeTarget;
|
|
1122
|
+
if(t>0 && !tryCompleteResumeSeek(t) && hlsResumeSettling){
|
|
1123
|
+
finishResumeSeek(t);
|
|
1082
1124
|
}
|
|
1083
|
-
|
|
1084
|
-
},5000);
|
|
1125
|
+
},8000);
|
|
1085
1126
|
return;
|
|
1086
1127
|
}
|
|
1087
1128
|
if(!hlsStartPositionUsed){
|
|
@@ -1089,10 +1130,9 @@
|
|
|
1089
1130
|
}
|
|
1090
1131
|
});
|
|
1091
1132
|
hls.on(Hls.Events.FRAG_BUFFERED, function(event, data){
|
|
1092
|
-
if(
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
}
|
|
1133
|
+
if(hlsResumeSettling && (seekTime>0 || hlsResumeTarget>0)){
|
|
1134
|
+
var resumeT=seekTime>0?seekTime:hlsResumeTarget;
|
|
1135
|
+
tryCompleteResumeSeek(resumeT);
|
|
1096
1136
|
return;
|
|
1097
1137
|
}
|
|
1098
1138
|
if(hlsResumeTarget<=0 || !data || !data.frag){
|
|
@@ -1101,12 +1141,7 @@
|
|
|
1101
1141
|
var fragStart=data.frag.start;
|
|
1102
1142
|
var fragEnd=fragStart+data.frag.duration;
|
|
1103
1143
|
if(hlsResumeTarget>=fragStart-0.5 && hlsResumeTarget<=fragEnd+0.5){
|
|
1104
|
-
|
|
1105
|
-
waited=true;
|
|
1106
|
-
if(C['buffer']){
|
|
1107
|
-
C['buffer'].hide();
|
|
1108
|
-
}
|
|
1109
|
-
}
|
|
1144
|
+
hidePlaybackBuffer();
|
|
1110
1145
|
}
|
|
1111
1146
|
});
|
|
1112
1147
|
hls.on(Hls.Events.ERROR, function(event, data){
|
|
@@ -1126,12 +1161,29 @@
|
|
|
1126
1161
|
}
|
|
1127
1162
|
}
|
|
1128
1163
|
}
|
|
1129
|
-
//
|
|
1130
|
-
if(fatal &&
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1164
|
+
// 对齐 ZWPlayer / ezwebtools:网络错误重拉,媒体错误恢复解码
|
|
1165
|
+
if(fatal && hls){
|
|
1166
|
+
if(data.type===Hls.ErrorTypes.NETWORK_ERROR && typeof hls.startLoad==='function'){
|
|
1167
|
+
try{
|
|
1168
|
+
if(data.details==='keyLoadError'){
|
|
1169
|
+
setTimeout(function(){
|
|
1170
|
+
if(hls && typeof hls.startLoad==='function'){
|
|
1171
|
+
hls.startLoad();
|
|
1172
|
+
}
|
|
1173
|
+
},2000);
|
|
1174
|
+
}
|
|
1175
|
+
else{
|
|
1176
|
+
hls.startLoad();
|
|
1177
|
+
}
|
|
1178
|
+
fatal=false;
|
|
1179
|
+
}catch(errNet){}
|
|
1180
|
+
}
|
|
1181
|
+
else if(data.type===Hls.ErrorTypes.MEDIA_ERROR && typeof hls.recoverMediaError==='function'){
|
|
1182
|
+
try{
|
|
1183
|
+
hls.recoverMediaError();
|
|
1184
|
+
fatal=false;
|
|
1185
|
+
}catch(errRecover){}
|
|
1186
|
+
}
|
|
1135
1187
|
}
|
|
1136
1188
|
CT.error={code:code,message:message};
|
|
1137
1189
|
eventTarget('error',CT.error);//注册监听error
|
|
@@ -2042,13 +2094,27 @@
|
|
|
2042
2094
|
}catch(event){}
|
|
2043
2095
|
return false;
|
|
2044
2096
|
},
|
|
2097
|
+
/*
|
|
2098
|
+
* tryCompleteResumeSeek
|
|
2099
|
+
* 功能:续播预热完成后,缓冲已覆盖前片→目标时再定位
|
|
2100
|
+
*/
|
|
2101
|
+
tryCompleteResumeSeek=function(t){
|
|
2102
|
+
if(!hlsResumeSettling || isNaN(t) || t<=0 || !video){
|
|
2103
|
+
return false;
|
|
2104
|
+
}
|
|
2105
|
+
if(hlsCanSafelySeekTo(t)){
|
|
2106
|
+
finishResumeSeek(t);
|
|
2107
|
+
return true;
|
|
2108
|
+
}
|
|
2109
|
+
return false;
|
|
2110
|
+
},
|
|
2045
2111
|
/*
|
|
2046
2112
|
* finishResumeSeek
|
|
2047
2113
|
* 功能:完成续播定位。只 seek、不自动 play(由用户点击中央按钮/播放键)
|
|
2048
|
-
* 避免 seek 后立刻 play 打断 HLS 分片请求(Network 出现 canceled .ts)并导致永久转圈
|
|
2049
2114
|
*/
|
|
2050
2115
|
finishResumeSeek=function(t){
|
|
2051
2116
|
hlsResumeWarmup=false;
|
|
2117
|
+
hlsResumeSettling=false;
|
|
2052
2118
|
// 续播场景取消挂起的自动播放,统一改为点击播放
|
|
2053
2119
|
autoplayPending=false;
|
|
2054
2120
|
applySeekToMedia(t);
|
|
@@ -2058,10 +2124,7 @@
|
|
|
2058
2124
|
video.pause();
|
|
2059
2125
|
}catch(event){}
|
|
2060
2126
|
paused=true;
|
|
2061
|
-
|
|
2062
|
-
C['buffer'].hide();
|
|
2063
|
-
}
|
|
2064
|
-
waited=true;
|
|
2127
|
+
hidePlaybackBuffer();
|
|
2065
2128
|
if(!vars['controls'] && C['centerPlay']){
|
|
2066
2129
|
C['centerPlay'].show();
|
|
2067
2130
|
}
|
|
@@ -2114,9 +2177,8 @@
|
|
|
2114
2177
|
},
|
|
2115
2178
|
/*
|
|
2116
2179
|
* applyPendingSeek
|
|
2117
|
-
*
|
|
2118
|
-
*
|
|
2119
|
-
* seekTime 仅在 finishResumeSeek / applySeekToMedia 成功后清零
|
|
2180
|
+
* 功能:在媒体就绪后应用挂起的 seekTime
|
|
2181
|
+
* HLS 续播:startLoad 预热 + 缓冲就绪后 finishResumeSeek(与拖动 currentTime 路径分离)
|
|
2120
2182
|
*/
|
|
2121
2183
|
applyPendingSeek=function(force){
|
|
2122
2184
|
if(!seekTime || !video || seekApplyLock){
|
|
@@ -2133,6 +2195,7 @@
|
|
|
2133
2195
|
if(t<=0){
|
|
2134
2196
|
seekTime=0;
|
|
2135
2197
|
clearSeekRetry();
|
|
2198
|
+
hlsResumeSettling=false;
|
|
2136
2199
|
return;
|
|
2137
2200
|
}
|
|
2138
2201
|
if(t>0){
|
|
@@ -2141,47 +2204,38 @@
|
|
|
2141
2204
|
firstSeekTime=t;
|
|
2142
2205
|
}
|
|
2143
2206
|
}
|
|
2144
|
-
|
|
2145
|
-
|
|
2146
|
-
|
|
2147
|
-
|
|
2207
|
+
if(hls){
|
|
2208
|
+
hlsResumeSettling=true;
|
|
2209
|
+
hlsResumeTarget=t;
|
|
2210
|
+
autoplayPending=false;
|
|
2211
|
+
if(hlsResumeWarmup){
|
|
2148
2212
|
return;
|
|
2149
2213
|
}
|
|
2150
|
-
|
|
2151
|
-
|
|
2152
|
-
|
|
2153
|
-
|
|
2154
|
-
|
|
2155
|
-
|
|
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){}
|
|
2214
|
+
if(tryCompleteResumeSeek(t)){
|
|
2215
|
+
return;
|
|
2216
|
+
}
|
|
2217
|
+
if(hlsSeekTo(t,force)){
|
|
2218
|
+
if(C['buffer']){
|
|
2219
|
+
C['buffer'].show();
|
|
2167
2220
|
}
|
|
2221
|
+
return;
|
|
2222
|
+
}
|
|
2223
|
+
if(!force && (!isUndefined(video.readyState) && video.readyState<1) && !(dur && isFinite(dur) && dur>0)){
|
|
2168
2224
|
seekRetryCount++;
|
|
2169
|
-
if(seekRetryCount<=
|
|
2225
|
+
if(seekRetryCount<=40){
|
|
2170
2226
|
if(seekRetryTimer){
|
|
2171
2227
|
clearTimeout(seekRetryTimer);
|
|
2172
2228
|
}
|
|
2173
2229
|
seekRetryTimer=setTimeout(function(){
|
|
2174
2230
|
applyPendingSeek(false);
|
|
2175
|
-
},
|
|
2231
|
+
},120);
|
|
2176
2232
|
return;
|
|
2177
2233
|
}
|
|
2178
|
-
// 重试耗尽:落到目标片起点,避免永久转圈
|
|
2179
|
-
finishResumeSeek(hlsFragStartTime(t) || loadAt || t);
|
|
2180
|
-
return;
|
|
2181
2234
|
}
|
|
2235
|
+
finishResumeSeek(t);
|
|
2236
|
+
return;
|
|
2182
2237
|
}
|
|
2183
2238
|
// 对普通 MP4,metadata 后设置 currentTime 会由浏览器自动请求目标 Range。
|
|
2184
|
-
// 等待目标已缓冲会形成循环等待:目标分片只有 seek 后才会下载。
|
|
2185
2239
|
if(!force && (!isUndefined(video.readyState) && video.readyState<1)){
|
|
2186
2240
|
seekRetryCount++;
|
|
2187
2241
|
if(seekRetryCount<=50){
|
|
@@ -2302,6 +2356,7 @@
|
|
|
2302
2356
|
},
|
|
2303
2357
|
canPlay:function(){
|
|
2304
2358
|
C['loading'].hide();
|
|
2359
|
+
hidePlaybackBuffer();
|
|
2305
2360
|
eventTarget('canplay');
|
|
2306
2361
|
applyPendingSeek();
|
|
2307
2362
|
startPendingAutoplay();
|
|
@@ -2503,12 +2558,11 @@
|
|
|
2503
2558
|
seeked:function(){
|
|
2504
2559
|
seekApplyLock=false;
|
|
2505
2560
|
decodeRecoverCount=0;
|
|
2561
|
+
hlsScrubbing=false;
|
|
2562
|
+
hlsResumeSettling=false;
|
|
2506
2563
|
startPendingAutoplay();
|
|
2507
2564
|
pSliderMouseDown=false;
|
|
2508
|
-
|
|
2509
|
-
if(C['buffer']){
|
|
2510
|
-
C['buffer'].hide();
|
|
2511
|
-
}
|
|
2565
|
+
hidePlaybackBuffer();
|
|
2512
2566
|
// 用户拖动后恢复播放(标准 video + hls.js 行为)
|
|
2513
2567
|
if(hlsScrubResumePlay){
|
|
2514
2568
|
hlsScrubResumePlay=false;
|
|
@@ -2520,55 +2574,58 @@
|
|
|
2520
2574
|
eventTarget('seeked');
|
|
2521
2575
|
},
|
|
2522
2576
|
seeking:function(){
|
|
2523
|
-
//
|
|
2524
|
-
if(paused && !seekApplyLock && !hlsResumeWarmup && !seekTime && !autoplayPending){
|
|
2577
|
+
// 续播/拖动定位中禁止抢先 play:会取消进行中的 .ts 并导致永久 loading
|
|
2578
|
+
if(paused && !seekApplyLock && !hlsResumeWarmup && !hlsResumeSettling && !hlsScrubbing && !seekTime && !autoplayPending){
|
|
2525
2579
|
player.play();
|
|
2526
2580
|
}
|
|
2527
2581
|
var seekingTime=this.currentTime;
|
|
2528
2582
|
if(firstSeekTime==-1){
|
|
2529
2583
|
firstSeekTime=seekingTime;//记录第一次拖动的时间
|
|
2530
2584
|
}
|
|
2531
|
-
|
|
2532
|
-
|
|
2533
|
-
|
|
2534
|
-
|
|
2535
|
-
|
|
2536
|
-
|
|
2537
|
-
|
|
2538
|
-
|
|
2539
|
-
|
|
2540
|
-
|
|
2541
|
-
|
|
2542
|
-
|
|
2543
|
-
|
|
2544
|
-
|
|
2545
|
-
|
|
2546
|
-
|
|
2547
|
-
|
|
2548
|
-
|
|
2549
|
-
|
|
2550
|
-
|
|
2551
|
-
|
|
2552
|
-
|
|
2553
|
-
|
|
2554
|
-
|
|
2555
|
-
|
|
2556
|
-
|
|
2557
|
-
|
|
2558
|
-
|
|
2559
|
-
|
|
2560
|
-
|
|
2561
|
-
|
|
2562
|
-
|
|
2563
|
-
|
|
2564
|
-
|
|
2565
|
-
|
|
2566
|
-
|
|
2567
|
-
|
|
2568
|
-
|
|
2569
|
-
|
|
2570
|
-
|
|
2571
|
-
|
|
2585
|
+
// scrub/续播定位期间:跳过二次 player.seek(timeScheduleAdjust 由进度条侧执法)
|
|
2586
|
+
if(!(hlsScrubbing || hlsScrubResumePlay || hlsResumeSettling || hlsResumeWarmup)){
|
|
2587
|
+
switch(vars['timeScheduleAdjust']){
|
|
2588
|
+
case 0://禁止拖动
|
|
2589
|
+
if(oldTime!=seekingTime){
|
|
2590
|
+
waitingMessage=false;
|
|
2591
|
+
player.seek(oldTime);
|
|
2592
|
+
message(language['timeScheduleAdjust']['prohibit']);
|
|
2593
|
+
return;
|
|
2594
|
+
}
|
|
2595
|
+
break;
|
|
2596
|
+
case 2://只能前进(向右拖动
|
|
2597
|
+
if(seekingTime<oldTime){
|
|
2598
|
+
waitingMessage=false;
|
|
2599
|
+
player.seek(oldTime);
|
|
2600
|
+
message(language['timeScheduleAdjust']['prohibitBackOff']);
|
|
2601
|
+
return;
|
|
2602
|
+
}
|
|
2603
|
+
break;
|
|
2604
|
+
case 3://是只能后退
|
|
2605
|
+
if(seekingTime>oldTime){
|
|
2606
|
+
waitingMessage=false;
|
|
2607
|
+
player.seek(oldTime);
|
|
2608
|
+
message(language['timeScheduleAdjust']['prohibitForward']);
|
|
2609
|
+
return;
|
|
2610
|
+
}
|
|
2611
|
+
break;
|
|
2612
|
+
case 4://只能前进但能回到第一次拖动时的位置
|
|
2613
|
+
if(seekingTime<firstSeekTime){
|
|
2614
|
+
waitingMessage=false;
|
|
2615
|
+
player.seek(firstSeekTime);
|
|
2616
|
+
message(language['timeScheduleAdjust']['prohibitLookBack']);
|
|
2617
|
+
return;
|
|
2618
|
+
}
|
|
2619
|
+
break;
|
|
2620
|
+
case 5://看过的地方可以随意拖动
|
|
2621
|
+
if(seekingTime>maxSeeTime){
|
|
2622
|
+
waitingMessage=false;
|
|
2623
|
+
player.seek(maxSeeTime);
|
|
2624
|
+
message(language['timeScheduleAdjust']['prohibitForwardNotViewed']);
|
|
2625
|
+
return;
|
|
2626
|
+
}
|
|
2627
|
+
break;
|
|
2628
|
+
}
|
|
2572
2629
|
}
|
|
2573
2630
|
eventTarget('seek',{time:seekingTime,state:'seeking'});
|
|
2574
2631
|
eventTarget('seeking');
|
|
@@ -2581,10 +2638,16 @@
|
|
|
2581
2638
|
waiting:function(){
|
|
2582
2639
|
waited=false;
|
|
2583
2640
|
eventTarget('buffer','start');//注册监听视频缓冲
|
|
2584
|
-
|
|
2641
|
+
if(!(hlsScrubbing || hlsScrubResumePlay || hlsResumeSettling)){
|
|
2642
|
+
C['centerPlay'].hide();
|
|
2643
|
+
}
|
|
2585
2644
|
if(!vars['controls']){
|
|
2586
2645
|
C['buffer'].show();
|
|
2587
2646
|
}
|
|
2647
|
+
// scrub/续播定位中的短暂 waiting 不刷文案,避免钉死「缓冲中」体验
|
|
2648
|
+
if(hlsScrubbing || hlsScrubResumePlay || hlsResumeSettling){
|
|
2649
|
+
return;
|
|
2650
|
+
}
|
|
2588
2651
|
if(!waitingMessage){
|
|
2589
2652
|
waitingMessage=true;
|
|
2590
2653
|
}
|
|
@@ -2599,6 +2662,7 @@
|
|
|
2599
2662
|
C['bar']['playAndPause']['pause'].show();
|
|
2600
2663
|
C['bar']['playAndPause']['refresh'].hide();
|
|
2601
2664
|
C['centerPlay'].hide();
|
|
2665
|
+
hidePlaybackBuffer();
|
|
2602
2666
|
if(playType=='button'){
|
|
2603
2667
|
C['bar']['pbox'].removeClass('ck-bar-progress-out');
|
|
2604
2668
|
}
|
|
@@ -5696,6 +5760,7 @@
|
|
|
5696
5760
|
e = e || window.event;
|
|
5697
5761
|
var eleOffset = slider.offset(),bgOffset=bg.offset(),client = getClient(e);
|
|
5698
5762
|
pSliderMouseDown=true;
|
|
5763
|
+
hlsScrubbing=true;
|
|
5699
5764
|
posRecord = client['x'];
|
|
5700
5765
|
//供比较
|
|
5701
5766
|
var left = eleOffset['left']-bgOffset['left'];
|
|
@@ -5797,6 +5862,12 @@
|
|
|
5797
5862
|
eventTarget('playback',{time:playbackTime,date:date('Y-m-d H:i:s',playbackTime)});
|
|
5798
5863
|
eventTarget('seek',{time:playbackTime,state:'seeking',date:date('Y-m-d H:i:s',playbackTime)});
|
|
5799
5864
|
}
|
|
5865
|
+
// seek 完成后由 seeked 清 hlsScrubbing;此处延迟兜底
|
|
5866
|
+
setTimeout(function(){
|
|
5867
|
+
if(!pSliderMouseDown){
|
|
5868
|
+
hlsScrubbing=false;
|
|
5869
|
+
}
|
|
5870
|
+
},800);
|
|
5800
5871
|
C['bar']['pbox'].removeClass('ck-bar-progress-slider-move');
|
|
5801
5872
|
if(isMouseLeave){
|
|
5802
5873
|
tip();
|
|
@@ -7410,7 +7481,7 @@
|
|
|
7410
7481
|
if(!isRetry && (!vars || vars['cdnFallback']!==false)){
|
|
7411
7482
|
var cdn=(typeof window!=='undefined' && window.ckplayerPlusCdn) ? window.ckplayerPlusCdn : ckplayerPlusDefaultCdn;
|
|
7412
7483
|
var m=String(file).match(/\/(hls\.js|flv\.js|mpegts\.js|language)\/([^/?#]+)(?:[?#].*)?$/i);
|
|
7413
|
-
if(cdn && cdn.indexOf('1.1.
|
|
7484
|
+
if(cdn && cdn.indexOf('1.1.8')===-1 && m){
|
|
7414
7485
|
if(cdn.slice(-1)!=='/'){
|
|
7415
7486
|
cdn+='/';
|
|
7416
7487
|
}
|