ckplayer-plus 1.0.0 → 1.0.1

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
@@ -139,7 +139,7 @@
139
139
  autoPlug:true//未指定 plug 时,根据视频地址后缀自动选择 hls.js / flv.js / mpegts.js
140
140
  };
141
141
  // 打包时替换为真实版本;用于 bundler 下 getPath 失效时的 CDN 回退
142
- var ckplayerPlusDefaultCdn='https://cdn.jsdelivr.net/npm/ckplayer-plus@1.0.0/dist/';
142
+ var ckplayerPlusDefaultCdn='https://cdn.jsdelivr.net/npm/ckplayer-plus@1.0.1/dist/';
143
143
  function ckplayerEmbed(videoObj){
144
144
  /*
145
145
  * rightMenu
@@ -764,12 +764,14 @@
764
764
  if(valType(vars['seek'])=='number' && vars['seek']>0){
765
765
  seekTime=vars['seek'];
766
766
  }
767
- if(valType(vars['seek'])=='string' && vars['seek']=='cookie' && cookieName){
767
+ else if(valType(vars['seek'])=='string' && vars['seek']=='cookie' && cookieName){
768
768
  var cke=player.cookie(cookieName);
769
769
  if(cke){
770
770
  seekTime=cke['time'];
771
771
  }
772
-
772
+ }
773
+ else if(valType(vars['seek'])=='string' && vars['seek']!=='' && !isNaN(parseFloat(vars['seek']))){
774
+ seekTime=parseFloat(vars['seek']);
773
775
  }
774
776
  }
775
777
  },
@@ -816,6 +818,9 @@
816
818
  hls = new Hls();
817
819
  hls.loadSource(url);
818
820
  hls.attachMedia(video);
821
+ hls.on(Hls.Events.MANIFEST_PARSED, function(){
822
+ applyPendingSeek();
823
+ });
819
824
  hls.on(Hls.Events.ERROR, function(event, data){
820
825
  var code=9;
821
826
  var message=language['error']['loadingFailed'];
@@ -1582,6 +1587,29 @@
1582
1587
  }
1583
1588
  }
1584
1589
  },
1590
+ /*
1591
+ * applyPendingSeek
1592
+ * 功能:在媒体就绪后应用挂起的 seekTime
1593
+ */
1594
+ applyPendingSeek=function(){
1595
+ if(!seekTime || !video){
1596
+ return;
1597
+ }
1598
+ if(!isUndefined(vars['live']) && ((valType(vars['live'])=='boolean' && vars['live']) || valType(vars['live'])=='number')){
1599
+ return;
1600
+ }
1601
+ var t=seekTime;
1602
+ var dur=duration || video.duration || 0;
1603
+ if(dur && isFinite(dur) && dur>0 && t>=dur){
1604
+ t=Math.max(0,dur-0.3);
1605
+ }
1606
+ seekTime=0;
1607
+ try{
1608
+ video.currentTime=t;
1609
+ }catch(event){
1610
+ seekTime=t;
1611
+ }
1612
+ },
1585
1613
  /*
1586
1614
  * loadedMetaData
1587
1615
  * 功能:获取元数据后执行的函数
@@ -1633,6 +1661,7 @@
1633
1661
  canPlay:function(){
1634
1662
  C['loading'].hide();
1635
1663
  eventTarget('canplay');
1664
+ applyPendingSeek();
1636
1665
  },
1637
1666
  loadedData:function(){
1638
1667
  eventTarget('loadeddata');
@@ -1662,6 +1691,7 @@
1662
1691
  if(CT.videoWidth || CT.videoHeight || duration){
1663
1692
  loadedMetaData();
1664
1693
  }
1694
+ applyPendingSeek();
1665
1695
  var len = 0;
1666
1696
  if(!isUndefined(this.buffered)){
1667
1697
  len=this.buffered.length;
@@ -1719,6 +1749,7 @@
1719
1749
  if(CT.videoWidth || CT.videoHeight || duration){
1720
1750
  loadedMetaData();
1721
1751
  }
1752
+ applyPendingSeek();
1722
1753
  }
1723
1754
  oldTime=playTime;
1724
1755
  playTime=this.currentTime;
@@ -1939,9 +1970,8 @@
1939
1970
  }
1940
1971
  }
1941
1972
  }
1942
- if(seekTime && (isUndefined(vars['live']) || (!isUndefined(vars['live']) && valType(vars['live'])=='boolean' && !vars['live'])) && seekTime<parseInt(duration*100)*0.01){//如果默认需要跳转,则进行seek
1943
- player.seek(seekTime);
1944
- seekTime=0;
1973
+ if(seekTime && (isUndefined(vars['live']) || (!isUndefined(vars['live']) && valType(vars['live'])=='boolean' && !vars['live']))){//如果默认需要跳转,则进行seek
1974
+ applyPendingSeek();
1945
1975
  }
1946
1976
  },
1947
1977
  pause:function(){
@@ -2797,52 +2827,78 @@
2797
2827
  /*
2798
2828
  * seek
2799
2829
  * 功能:监听跳转/执行跳转操作
2800
- * @fn为函数时则监听视频跳转动作,@fn为数字时执行跳转操作
2830
+ * @fn为函数时则监听视频跳转动作,@fn为数字(或数字字符串)时执行跳转操作
2801
2831
  */
2802
2832
  seek:function(fn){
2803
2833
  if(!isUndefined(fn)){
2804
2834
  if(valType(fn)=='function'){
2805
2835
  newEvent.addEventListener('seek',fn);
2806
2836
  }
2807
- if(valType(fn)=='number' && video){
2808
- switch(vars['timeScheduleAdjust']){
2809
- case 0://禁止拖动
2810
- message(language['timeScheduleAdjust']['prohibit']);
2811
- return;
2812
- break;
2813
- case 1://可以拖动
2814
- break;
2815
- case 2://只能前进(向右拖动
2816
- if(fn<oldTime){
2817
- message(language['timeScheduleAdjust']['prohibitBackOff']);
2818
- return;
2819
- }
2820
- break;
2821
- case 3://是只能后退
2822
- if(fn>oldTime){
2823
- message(language['timeScheduleAdjust']['prohibitForward']);
2824
- return;
2825
- }
2826
- break;
2827
- case 4://只能前进但能回到第一次拖动时的位置
2828
- if(fn<firstSeekTime){
2829
- waitingMessage=false;
2830
- video.currentTime=firstSeekTime;
2831
- message(language['timeScheduleAdjust']['prohibitLookBack']);
2832
- return;
2833
- }
2834
- break;
2835
- case 5://看过的地方可以随意拖动
2836
- if(fn>maxSeeTime){
2837
- waitingMessage=false;
2838
- video.currentTime=maxSeeTime;
2839
- message(language['timeScheduleAdjust']['prohibitForwardNotViewed']);
2840
- return;
2841
- }
2842
- break;
2837
+ else{
2838
+ var target=null;
2839
+ if(valType(fn)=='number' && !isNaN(fn)){
2840
+ target=fn;
2841
+ }
2842
+ else if(valType(fn)=='string' && fn!=='' && fn!=='cookie' && !isNaN(parseFloat(fn))){
2843
+ target=parseFloat(fn);
2844
+ }
2845
+ if(target!==null && video){
2846
+ switch(vars['timeScheduleAdjust']){
2847
+ case 0://禁止拖动
2848
+ message(language['timeScheduleAdjust']['prohibit']);
2849
+ return player;
2850
+ case 1://可以拖动
2851
+ break;
2852
+ case 2://只能前进(向右拖动
2853
+ if(target<oldTime){
2854
+ message(language['timeScheduleAdjust']['prohibitBackOff']);
2855
+ return player;
2856
+ }
2857
+ break;
2858
+ case 3://是只能后退
2859
+ if(target>oldTime){
2860
+ message(language['timeScheduleAdjust']['prohibitForward']);
2861
+ return player;
2862
+ }
2863
+ break;
2864
+ case 4://只能前进但能回到第一次拖动时的位置
2865
+ if(target<firstSeekTime){
2866
+ waitingMessage=false;
2867
+ try{video.currentTime=firstSeekTime;}catch(event){}
2868
+ message(language['timeScheduleAdjust']['prohibitLookBack']);
2869
+ return player;
2870
+ }
2871
+ break;
2872
+ case 5://看过的地方可以随意拖动
2873
+ if(target>maxSeeTime){
2874
+ waitingMessage=false;
2875
+ try{video.currentTime=maxSeeTime;}catch(event){}
2876
+ message(language['timeScheduleAdjust']['prohibitForwardNotViewed']);
2877
+ return player;
2878
+ }
2879
+ break;
2880
+ }
2881
+ pSliderMouseDown=false;
2882
+ // 媒体未就绪时先记录,待 canplay/时长就绪后再应用
2883
+ var ready=video.readyState>=2 || (duration && isFinite(duration) && duration>0);
2884
+ if(!ready){
2885
+ seekTime=target;
2886
+ try{video.currentTime=target;}catch(event){}
2887
+ return player;
2888
+ }
2889
+ if(duration && isFinite(duration) && duration>0 && target>duration){
2890
+ target=Math.max(0,duration-0.3);
2891
+ }
2892
+ if(target<0){
2893
+ target=0;
2894
+ }
2895
+ try{
2896
+ video.currentTime=target;
2897
+ seekTime=0;
2898
+ }catch(event){
2899
+ seekTime=target;
2900
+ }
2843
2901
  }
2844
- pSliderMouseDown=false;
2845
- video.currentTime=fn;
2846
2902
  }
2847
2903
  }
2848
2904
  return player;