我正在使用VideoJS实现视频播放器。该视频播放器的两个关键功能是: a)如果用户离开页面,则在他们回来或刷新时恢复视频 b)包括HLS(h.264 / mp4)支持,以根据连接提供更好的视频质量。
用于保存和检索用户时间戳的API已经到位,并且使用excellent HLS plugin,视频播放器在所有浏览器中的效果几乎都符合预期。以下代码用于初始化播放器并跳转到保存的时间:
videojs.options.flash.swf = '../video-js/video-js.swf';
var player = videojs(videoId);
supportHLS = videojs.Hls.isSupported();
player.ready(function() {
[[event listeners for media controls]]
this.on('seeked', function() { console.log('seeked');});
this.on('seeking',function() { console.log('seeking');});
var PLAYER_LOADED = 'loadedmetadata';
if(!supportHLS) { PLAYER_LOADED = 'canplay';}
this.one(PLAYER_LOADED, function() {
this.one('canplay', function() {
this.play();
});
this.currentTime(savedPosition);
lastViewed = savedPosition;
});
});
(迂回逻辑的原因:Chrome在新数据(搜索之后)加载之前播放视频时出现问题,这导致缓冲区中的数据出现了一些问题。此外,如果你使用Safari 7.1会破坏在“装载的元数据事件”
期间尝试过此操作然而,还有一个问题,特别是Safari。刷新页面时,加载微调器并不会消失。检查日志和听众似乎表明正在寻找'并且'寻找'事件几乎同时发生,但顺序不同;每当“寻求”时,问题总会出现。首先发射,并且永远不会发生在寻找'是第一个。此外,播放视频后的任何搜索都会删除微调器,因此必须由初始搜索引起。
有趣的是,Safari本身支持HLS流式传输,但始终导致此播放器实现的大多数问题。这是最后一个解决的Safari漏洞,虽然它很小但它仍会对用户体验产生负面影响。
是什么导致Safari解雇了“寻找”的人。并且'寻找'像这样的事件乱序?我可以做些什么来解决它,或者是否有一个更清洁的解决方案来解决我想要完成的事情?