hls.js
的使用非常简单,以下为其官方的demo:
该框架的配置多大几十项,一般情况下使用默认配置即能满足绝大部分场景。但是如果针对一些特殊场景需要更改配置,对一般开发者来说并非易事。所以,如果精准控制,还得搞懂每一项的具体是怎么执行的。
hls.js
库是基于eventemitter3
用于事件的监听和派发,这样处理逻辑松耦合,虽然当事件多起来后维护需要一定成本,但是基于hls.js在加载视频流到播放过程中,存在很多多个事件监听一个事件的场景,所以采用eventemitter
也是十分合适的,而且也方便业务方增加监听事件。
hls.js
库根据功能划分为多个controller
,如abr-controller
、buffer-controller
、stream-controller
等,每个controller
任务明确,通过事件监听派发的方式完成视频流的拉取、解析、播放等。
hls.js
从初始化到加载m3u8
,到选择不同码率加载对应ts文件,再解码ts转为mp4最终在浏览器播放,整个过程非常复杂,作者整理了一个流程图如下:
其中,几个关键环节对应的含义如下所示:
主流程中有两个关键的定时器,第一个为StreamController
启动用来轮询ts
文件列表是否更新结束;第二个为在ts
片加载过程中,用来轮询监听当前ts
下载速率以动态调节不同的码率,hls.js
初始默认码率为playlist
的中间码率,如当前码率列表为360p
、480p
、720p
,则初始默认取480p
。