最近在开发过程中,遇到这样的需求:上传视频并在同一页面的多个模拟机型上展示并播放该视频。
这就导致了一个问题,我们这些视频虽然是同一个,但是由于加载视频的请求是在同一时间发出的,所以会导致加载多次视频,加载的数据翻倍。
所以需要思考如何减少视频的加载,保证后续其它的视频都能够走缓存。由于不知道上传的视频加载需要多长事件、所以延迟其它机型的视频加载显然不太现实,所以经过思考,不如换成封面来替代视频,后续点击播放的时候再赋值src。
将video标签放入canvas,然后利用drawImage生成封面图, 这个video标签必须要有首帧数据 。换句话说,页面上的video标签是存在且已经加载出第一帧的页面,我们的封面图其实就是第一帧的视频。
将获取到的视频url贴到一个video标签中,通过video标签的 loadeddata 事件,在加载了第一帧后立刻形成封面图,然后贴到所有video标签的poster属性上。
以ant-design 的upload组件为例,上传视频后能获取到file信息,然后根据URL.createObjectURL方法获取到本地视频播放地址,贴到video中然后利用canvas生成封面,然后贴到所有video标签的poster属性上。
URL.createObjectURL() 获取的url对视频文件的引用会一直存在内存中,只有在页面触发了unload时或者使用URL.revokeObjectURL()释放后才会从内存清除。所以要使用本地视频数据时,在生成封面图后一定要通过URL.revokeObjectURL()释放。
1.如果用通用js,用层来实现,但写的代码多。
2.如果你是用jquery就简单多了,别人都写好了,你引用即可。
3.引用jquery,video.js,bigvideo.js
4.在网页中添加function
$(function(){
varmyVideo=new$.BigVideo()
myVideo.init()
myVideo.show('你的视频网址')
})
5.不管什么做背景,都是很容易实现的。
我记得有个proload不过那么应该是个封面图片,如果可以的我们可以加一个load事件,当视频资源被加载的时候设置loading这个图片的display为block,加载完毕后display为no。其实一般播放组件不是自己做的话,采用默认的浏览器应该都会有加载的动画的。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)