使用video.js api持续时间调用返回0,而视频更长

时间:2013-05-01 02:18:24

标签: javascript video.js

好吧所以我正在尝试利用video.js项目,因为它看起来非常棒! 无论如何,我正在编写我的第一个与api交互的脚本,可以在下面找到。它基本上只是将当前的播放时间输出到div current_time,视频标签的ID是my_stream无论如何这里是我的所有javascript ...我的问题是playLength=0和当前时间永远不会在视频播放时更新并保持在0(即从不超过0)我不知道我在这里做错了什么......我所遵循的api规则也可以在video.js api docs找到

function current_time(){
 _V_("my_stream").ready(function(){

 var myPlayer = this;

 // EXAMPLE:

 var playLength = myPlayer.duration();

 do
   {
    var position = myPlayer.currentTime();
    var myTextArea = document.getElementById('time_count');
    myTextArea.innerHTML = position;
   }
   while(position < playLength);


  });

 }

window.onload = current_time

任何一个用api实现任何东西的人或者只是看到我做过的一些愚蠢的事情都会非常感谢,谢谢!

2 个答案:

答案 0 :(得分:4)

您在播放开始前将持续时间指定为playLength。如果在分配时为零,则它将保持为零。检查API doc 中的注释“注意:视频必须先开始加载才能知道持续时间,如果是Flash,则在视频开始播放之前可能无法识别。”

看起来你只关心播放视频时的工作时间。仅使用timeupdate事件会好得多。

var myPlayer;
var myTextArea = document.getElementById('time_count');

videojs('my_stream').ready(function(){
  myPlayer = this;
  myPlayer.addEvent('timeupdate', onProgress);
});

function onProgress() {
  myTextArea.innerHTML = myPlayer.currentTime();
}

这应该在DOM加载后执行(使用window.onload或jQuery的$(document).ready()),或者在视频和#time_count元素之后进入正文中的脚本标记。

答案 1 :(得分:0)

我有点通过修改我编写的代码来解决这个问题,所以它现在就像这样工作

function current_time(){
_V_("my_stream").ready(function(){
  var myPlayer = this;
  var playLength = myPlayer.duration();
  var position = myPlayer.currentTime();
  var myTextArea = document.getElementById('time_count');
  myTextArea.innerHTML = position + "/" + playLength;
  t=setTimeout(function() {current_time()},2000);
});
}

...虽然持续不断地调查持续时间似乎很愚蠢,但我实际上并不需要在开发过程中继续使用这个值,但是一旦视频正在播放,它们现在都能正常填充,所以它有点像解决方案。除了我自己的答案,我不会立即看看是否有人可以更好地解决这个问题,或者如果你能解释为什么video.js改变了id标签以及如何正确处理它我会给你一个投票并接受你的答案,如果这一切对我有意义的话。