2012-07-11 83 views
4

我想在jwplayer開始播放之前獲取視頻的持續時間。我嘗試在onReady事件回調中調用getDuration(),但它返回-1。當我在onPlay事件回調中調用getDuration()時,我得到正確的值。有任何想法嗎?jwplayer - 如何在播放前獲取視頻時長?

這裏是我的代碼:

<video src="movie.mp4" id="video" width="800" height="600"></video> 
<script type="text/javascript"> 
jwplayer ('video').setup ({ 
    flashplayer: '/js/mediaplayer-5.10/player.swf', 
    width: 600, 
    height: 400, 
    events: { 
     onReady: function() { 
      var duration = this.getDuration(); 
      alert ('ready, duration: ' + duration); 
     }, 
     onPlay: function (state) { 
      alert ('play, duration: ' + this.getDuration()); 
     } 
    } 
}); 
</script> 

回答

1

JW播放器將只顯示時間,當播放視頻時

$.each(all_video_ids, function(video_idx, video_id){ 
     console.log(video_id); 
     var temp_video = jwplayer(video_id); 

     var metaData = temp_video.getMeta(); 
     console.log(metaData); 
     console.log(temp_video); 
     console.log(temp_video.getDuration()); 

     if(temp_video.getState() == "PLAYING"){ 
      temp_video.pause(); 
     } 
    }); 
+0

它會在更多條件下返回適當的持續時間,而不僅僅是播放。請參閱https://gist.github.com/s2t2/45460c06581798ba6e94進行診斷。 – s2t2 2015-05-23 21:48:26

3

它真實。我沒有得到任何解決方案,所以我使用了兩個事件。 OnBuffer和OnPlay如下所示。它在第一個事件中提供-1,在第二個事件中提供實際長度。這可能會有所幫助。那麼我正在尋找任何其他解決方案,如果退出。

  var duration; 
      jwplayer().onBuffer(function() { 
      duration = this.getDuration();    
      alert(duration); 
      }  
    ); 

    jwplayer().onPlay(function() { 
      if(duration==-1) 
      duration=this.getDuration(); 
      alert(duration); 
      }  
    ); 
+0

我很快就會重新討論這個問題,但我想知道是否需要在服務器上設置流式處理。我猜測,如果你設置流式傳輸,你可能會從getDuration()方法中得到正確的值。 – Redtopia 2013-01-03 17:59:23

4

這大約是我是如何處理這個問題:

var duration = 0; 
jwplayer().onReady(function() { 
    if (duration == 0) { 
    // we don't have a duration yet, so start playing 
    jwplayer().play(); 
    } 
}); 

jwPlayer().onTime(function() { 
    if (duration == 0) { 
    // we don't have a duration, so it's playing so we can discover it... 
    duration = jwplayer().getDuration(); 
    jwplayer().stop(); 
    // do something with duration here 
    } else { 
    ... 
    } 
} 
+0

大家都要遵循這個方法。這是唯一的解決方案。非常感謝斯科特。 – 2013-08-17 18:03:10

0

在這個問題上你們就擡起頭來最近我分析了其他視頻播放器以及和除了你管的所有視頻播放器都在顯示視頻最初期限爲00:00:00 最有可能的YouTube是節省DB的持續時間和顯示它

否則@Scott Evernden想法更有意義

http://mediaelementjs.com/,http://www.videojs.com/和其他大多數其他網站除了youtube有持續時間00:00:00 jwplayer也像其他播放器提供播放事件後的視頻時間。

0

由於getDuration似乎不起作用,除非視頻正在播放(即使暫停時也不播放)。我這樣做:

onPlay: function(){ 
    var obj = this; //save a reference to 'this' jw object for reference in the setInterval callback. 
    if (!obj.playBegan){ //we only want this to trigger once when play begins (not on seek or ffd) 
     obj.playBegan = true; 
     obj.durationProcessor = setInterval(function(){ 
      if (obj.getDuration() !== -1){ //sometimes the movie duration isn't immediately available. 
       clearTimeout(obj.durationProcessor); 
       console.log(obj.getDuration()); 
      } 
     }, 250); //look for a duration every .25 seconds 

    } 
}, 
0

你可以得到持續時間時,球員已經準備好了,並獲取正確的控制器一樣值:

var duration = $('.jw-group.jw-controlbar-right-group.jw-reset')[0]; 
    var spanText = $(duration).children('.jw-text.jw-reset.jw-text-duration') 
    youTubeVideoDuration = ($(spanText)[0]); 

,如果你想將它轉換它將從球員 獲取時間進入相對時間,即在幾秒鐘內,然後你可以使用功能

function toseconds(hms) { 
var a = hms.split(':'); // split it at the colons 
if (a.length == 3) 
    return ((+a[0]) * 60 * 60 + (+a[1]) * 60 + (+a[2])); // if video is in hrs 
else 
    return ((+a[0]) * 60 + (+a[1])); // video is in minutes 
} 
相關問題