html5用video标签流式加载的实现-创新互联
这篇文章主要介绍了html5用video标签流式加载的实现,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
站在用户的角度思考问题,与客户深入沟通,找到桓仁网站设计与桓仁网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都做网站、网站建设、企业官网、英文网站、手机端网站、网站推广、空间域名、网络空间、企业邮箱。业务覆盖桓仁地区。video标签
浏览器的video标签通常是接收一个src属性,然后浏览器就会根据这个src属性来自动加载视频。
这个过程是浏览器来加载video的。
这种方式有什么问题吗?
mp4文件不能流式加载
webm,flv,hls等格式兼容性问题
播放器ui太丑,一些常用的功能都没有
清晰度切换,等一些操作需要重载视频,比较慢而且还会黑屏
无法对视频加密
请求video流视频
我们可以通过设置responseType为arraybuffer来获取视频流,也可以通过range字段来获取视频流片段。比如
let xhr = new window.XMLHttpRequest(); xhr.responseType = 'arraybuffer' xhr.open('get', 'http://www.w3school.com.cn/i/movie.mp4') xhr.responseType = 'arraybuffer'; // xhr.setRequestHeader('Range', `bytes=0-390625`) xhr.onload = function () { if (xhr.status === 200 || xhr.status === 206) { console.log(xhr.response) } } xhr.send();
或者fetch的arrayBuffer方法返回视频流。
fetch(videoUrl).then(function(response) { return response.arrayBuffer(); })
获取到的数据是什么呢?二进制的视频流。
获取这个有什么用呢?
video去播“流”
MediaSource
MediaSource简称mse,是h6的一个api,它允许通过js生成媒体流,让浏览器播放。
使用
我们通过 URL.createObjectURL来创建一个blob格式的视频文件,来给video标签播。
具体用法就是new MediaSource,然后根据这个MediaSource生成blob文件,然后向MediaSource中添加mime和视频流。
我们的mine是什么呢?
video/webm是视频格式,codecs后面第一段是一些视频编解码的一些重要信息,诸如编码方式、分辨率、帧率、码率以及对解码器解码能力的要求。
第二段是关于音频部分的信息。
生成这样的一个video标签。我们现在绕过了浏览器直接去请求src这一步,ajax请求视频流,然后我们可以对视频流进行处理,直接操作视频流实现我们需要的各种功能。
但是对于mp4格式,是不支持流式加载的,所以只能通过我们自己操作流来实现流式播放。
播放器
公司同事研发了一款开源播放器,https://github.com/bytedance/xgplayer ,西瓜视频好几千万dau的产品实测。
播放器原理
它是利用了流式处理视频源,不仅仅是简单的请求流然后交给video标签播放,它是请求视频流然后用js解码然后进行一些需要的操作,交给video播放。
为什么要用js解码呢?
公司大部分视频是mp4,怎么让mp4支持流播放呢?我们把mp4的流拿过来,js解析出它的视频信息,然后js转换成支持视频流的fmp4格式的文件。
它的优势是
解决了chrome不支持hls格式的问题(还有各种不支持格式的问题),因为我们是直接操作二进制视频数据,所以不存在video标签不支持的情况。
解决了切换清晰度重新刷新视频的问题
对于mp4文件快进操作进行最小化的请求加载,让它支持流式加载。
支持直播和弹幕
我们直接操作的视频流,所以在对视频进行清晰度切换,或者快进的时候,我们后计算当前时间的流,然后用js加载视频的新的流,从而进行最快的加载和响应。
感谢你能够认真阅读完这篇文章,希望小编分享的“html5用video标签流式加载的实现”这篇文章对大家有帮助,同时也希望大家多多支持创新互联网站建设公司,,关注创新互联行业资讯频道,更多相关知识等着你来学习!
分享文章:html5用video标签流式加载的实现-创新互联
浏览地址:http://pwwzsj.com/article/dpppec.html