好的,所以我有两个 video.js 播放器(canv1 和 canv2),每个播放器都播放相同视频的副本。我想在canv1的某个时间码暂停canv2,然后在canv1的稍后时间码,将canv2与canv1同步并播放。
目标是canv2可以暂停自己然后赶上canv1。问题是,我的同步功能遇到了问题。有某种滞后,所以当我同步时,我会丢失 7 到 10 帧视频。
这就是这个概念。此代码使用 Video.JS API。https://github.com/zencoder/video-js/blob/master/docs/api.md
var conchShell = canv1; // Lord of the Flies, Bitch!
// Accepts player objects as arguments - canv1, canv2
function pause(){
for (var i = 0, j = arguments.length; i < j; i++){
arguments[i].pause();
console.log( arguments[i] + '1 is paused' ); /* TODO: REMOVE CONSOLE LOGS BEFORE DEPLOYMENT */
}
}
function play(){
for (var i = 0, j = arguments.length; i < j; i++){
arguments[i].play();
console.log( arguments[i] + '1 is playing' );
}
}
function syncToConchShell() {
for (var i = 0, j = arguments.length; i < j; i++){
arguments[i].currentTime(conchShell.currentTime());
console.log( arguments[i] + 'was synchronized with' + conchShell );
}
}
conchShell 是拥有主时间线的玩家,其他玩家与之同步。所以问题是,当我运行同步功能时,conchShell 视频仍然比我尝试同步的视频提前 5 到 10 帧结束。我认为这是由于运行同步功能所需的时间。即,视频在几分之一秒内完全同步,但在 canv2 赶上之前,conchShell 已经领先了几帧。
所以问题是:有没有一种简单的方法可以计算出一个函数运行了多少时间?因为如果有的话,我可以把那个时间附加到canv2上的时间码上,我们就很好了。
更新:
好的,我尝试了其他一些方法。我现在正在使用异步库并且取得了更多的成功。我唯一的问题是它在 async.js 的第 505 行抛出“对象不是函数”错误。据我所知,这通常是因缺少分号而引发的错误。
无论如何,这是我现在所拥有的现场版本。如果您愿意,请查看代码