原作者:Hadar Weiss(原文链接)
翻译:刘通
Adobe Flash播放器正在走渡渡鸟的老路,正在逐渐灭亡,但是Flash的灭亡过程并没有引起人们的顾虑。Flash播放器多年来都存在很大的问题,它的最终灭亡会让大多数的技术同行拍手称快。Flash播放器本身存在的漏洞比奶酪块上的洞都要多,而这些漏洞一直是大家所诟病的地方。在今夏早些时候,在一个星期内Flash播放器被迫更新了36个安全补丁!史蒂夫乔布斯,出了名的讨厌Flash,在2010年的时候就曾经对Flash进行过严苛的批评,并且拒绝在iPhone上兼容Flash。在2011年的时候,Adobe宣布结束Flash播放器的移动端服务。
Google发出最新有关Flash的声明可能就是打死Flash播放器的最后一棒。上星期,Chrome团队声明他们会在Chrome浏览器加载的时候阻拦Flash相关应用,包括Flash播放器。Chrome团队承诺,这些变化会让网页更加的简单,加载速度更快,以及更小的电池寿命消耗。对于网站领域来说,Chrome团队的决定也许是一件非常好的事情,但是在视频流的领域,这个决定引起了一些忧虑。尽管很多用户在过去的几年中已经逐渐抛弃了Flash播放器,Flash还是有着非常非常大的使用量。尽管一些平台,包括Chrome,已经将HTML5播放器设定为默认播放器,但是在之前这些浏览器还能加载Flash并且可以向后兼容Flash播放器。所以,Flash播放器的灭亡对于你们的视频流一维着什么呢?
当然,完全不需要紧张。尽管很多观众还是使用Flash插件在浏览器中运行HLS流,但是他们完全不用这么做!事实上我们去年曾经写过一篇文章说过你可以不用Flash来更好的传递HLS流!
所有的主流手机浏览器都原生支持HLS协议,但不幸的是,所有的台式机浏览器都没有HLS的原生支持。在以前,这可能是一个值得重视的问题,但是在今天这点小问题可以很简单的得到解决。两个开源库,hls.js和video.js,可以高效的将你的HLS流转成一个字节流,称作Fragmented MP4。感谢MSE(Media Source Extensions)API,Fragmented MP4就可以在浏览器中播放了。现在你的观众们就可以在任何设备上播放你的HLS视频流了,而不用任何讨厌的Flash播放器插件。
像专业人士一样播放HLS
通过MSE播放HLS的这件事听起来真的十分有前途(而且真的是特别棒),但并不是那么的直截了当。要想这么做,你就必须要:
1. 在你的播放器中添加hls.js或者video.js库。如果你已经搭建了一个定制的Flash播放器,就很麻烦了。可以把它视为换用一个新播放器的好借口。现在有很多非常好的,先进的播放器可以使用,你不用搭建定制的播放器。想想以后你因为不用维护自己的播放器而省下来的大笔的时间吧!
2. 确保你所安装的库能够播放你的数据流。我们已经在外面发现了很多HLS流其实并不是稳定的流,也发现了很多互不相同的问题,包括:视频影像重叠,元数据丢失,未对齐的内部框架,很多数据流承载了不同大小但是没有#EXT-X-DISCONTINUITY的框架,EXTINF和段URL之间的内容,解码问题等等。尽管Flash播放器可以自动解决这些问题,hls.js目前还不能,所以确保你的视频流得到正确的配置是非常重要的。
3. 注意是否向前兼容Flash。当MSE不能使用的时候,你可能还想要使用Flash播放器来播放HLS流。MSE在这些浏览器上是可工作的(注意:iOS Safari浏览器原生支持HLS,不需要MSE)
使用HLS.js和Video.js来实现高清回放
Video.js有它自己的JavaScript库,但是我们通常更喜欢使用hls.js,因为它更加的稳定,它能够忍受多错误的数据流,它的ABR算法,最重要的是它有可讨论的社区。hls.js最大的短板是它在老浏览器中不能向前兼容Flash。在Peer5,我们已经为了包含hls.js的video.js播放器做了一个开源的插件,你可以在这查看。
示例代码:
它被设计成支持hls.js和video.js事件,并且分析基本视频标签来检测原生hls是被支持。你可以在这里下载到最新版本的捆绑插件。
退回去
那么,如果HLS不能原生播放以及不支持MSE的话该怎么办?假如你的观众们所用的是老旧的播放器或者你的数据流是不被支持的格式,那么你有两个选择:
1. 发给你观众一个提示错误的信息并且给他们解释一下情况。对于hls.js来说这是默认做法。对于很多视频提供商,他们的观众通常都使用现代化的播放器,这可能会很管用。
2. 加载Flash播放器,以及尝试用Flash来播放视频流。老旧的浏览器,像IE8—10,占用了将近20%的互联网数据传输,所以很多视频广播者会希望能够退回去兼容Flash播放器。
不幸的是,hls.js并不包括Flash播放器回退系统,所以在Peer5我们决定退回到video.js5的html5 contrib-hls回放技术。我们的插件捆绑了hls.js和contrib-hls,以及包括了可以处理任何情况的逻辑。这里是我们的demo页。
总结
Flash播放器已经快要不行了,但是不用担心你的HLS流。不管是原生的还是通过MSE,如果你在播放器中添加了Peer5的开源代码,所有的新版本浏览器都会支持你的视频流。作为赠送,你的视频流也可以往回兼老旧浏览器的Flash播放器。现在你所有的HLS流都已经无缝地为你处理好了,根本不需要用到Flash。