Dav*_*her 4 javascript html5 video.js
我正在使用video.js(http://www.videojs.com/)构建视频批准系统,并且需要在播放器中记录用户操作。我可以通过播放,暂停,结束等操作来轻松完成此操作,但是在尝试记录搜寻时遇到了问题。
我希望能够记录此次事件中任何寻道的开始和结束时间,因此我们知道用户是否实际上没有观看视频的一部分。播放器似乎提供了支持此功能的事件,但我正在努力从中获取正确的时机。
当用户跳过视频时,播放器将按顺序发出以下事件:暂停,搜索,搜寻,播放。
如果我使用currentTime()在任何这些事件中查询播放器对象,则结果始终是搜寻的结束时间,即使是在初始暂停事件上也是如此。这意味着我可以记录搜寻结束的位置,但不能记录开始的位置。
谁能帮助我在视频中找到搜寻的位置?
如果无法做到这一点,我会选择一种在播放过程中禁止搜索的方法。
编辑:根据要求添加代码。很简单:
var trackedPlayer = videojs('pvp-player');
trackedPlayer.on("play", function (e) {
console.log("Video playback started: " + trackedPlayer.currentTime());
});
trackedPlayer.on("pause", function (e) {
console.log("Video playback paused: " + trackedPlayer.currentTime());
});
trackedPlayer.on("seeking", function (e) {
console.log("Video seeking: " + trackedPlayer.currentTime());
});
trackedPlayer.on("seeked", function (e) {
console.log("Video seek ended: " + trackedPlayer.currentTime());
});
trackedPlayer.on("ended", function (e) {
console.log("Video playback ended.");
});
Run Code Online (Sandbox Code Playgroud)
如果我可以获取所有跟踪信息,我将用ajax调用替换console.log来存储数据。
您可以听timeupdateund取之前到达那里的倒数第二个值seeking作为来源:
var previousTime = 0;
var currentTime = 0;
trackedPlayer.on('timeupdate', function() {
previousTime = currentTime;
currentTime = trackedPlayer.currentTime();
});
trackedPlayer.on('seeking', function() {
console.log('seeking from', previousTime, 'to', currentTime, '; delta:', currentTime - previousTime);
});
Run Code Online (Sandbox Code Playgroud)
这似乎适用于HTML5技术。我尚未与其他技术人员进行过测试。
但是,有一个小故障:第一次寻求暂停的玩家只会产生很小的变化量(两个变量的先前值几乎相同)。但这无关紧要,因为增量只有几百毫秒(我收集到您只对“ from”值感兴趣)。
更新资料
seeked触发频率比触发频率低得多seeking。尝试以下方法。
var previousTime = 0;
var currentTime = 0;
var seekStart = null;
trackedPlayer.on('timeupdate', function() {
previousTime = currentTime;
currentTime = trackedPlayer.currentTime();
});
trackedPlayer.on('seeking', function() {
if(seekStart === null) {
seekStart = previousTime;
}
});
trackedPlayer.on('seeked', function() {
console.log('seeked from', seekStart, 'to', currentTime, '; delta:', currentTime - previousTime);
seekStart = null;
});
Run Code Online (Sandbox Code Playgroud)
还有许多库可以消除函数调用的反弹(在这种情况下,是对后端的调用)。
小智 -2
尝试使用此代码来了解视频的长度。
var duration = document.getElementById("duration");
var vid_duration = Math.round(document.getElementById("video").duration);
//alert(vid_duration);
duration.innerHTML = vid_duration;
//duration.firstChild.nodeValue = vid_duration;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6239 次 |
| 最近记录: |