4

好的,所以我正在尝试利用 video.js 项目,因为它看起来非常棒!无论如何,我正在编写我的第一个与 api 交互的脚本,可以在下面找到。它基本上只是应该将当前播放时间输出到divcurrent_time ,视频标签的 idmy_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 实现任何东西的人的任何帮助,或者只是看到我所做的一些愚蠢的事情,将不胜感激,谢谢!

4

2 回答 2

4

您将持续时间分配到playLength播放开始之前。如果在分配时它为零,则它将保持为零。查看API 文档中的 注释“注意:视频必须在知道持续时间之前已经开始加载,并且在 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()),或者在 video 和 #time_count 元素之后进入正文中的脚本标记。

于 2013-05-01T09:07:35.040 回答
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 标签以及如何正确处理它,我会给你一个答复如果这一切对我有意义,请投票并接受您的回答。

于 2013-05-01T20:53:57.813 回答