图1.3 mp4 视频新播放流程
- 来请求 mp4 视频数据,这样可以结合视频 Range 服务,做到精确加载。
- 编写解析器将加载回来的部分 mp4 视频数据进行解复用
- 将解复用的视频数据转成 fmp4 格式并传递给 MediaSource
- 使用 video 进行解码完成播放
然后在做清晰度切换的时候流程如下:
图1.4 mp4视频清晰度切换原理示意图
- 播放视频A,过程同上
- 在某个时刻,用户切换到播放视频B,首先解析B的索引文件(moov),反向计算mp4的range区间
- 加载B的视频区间数据
- 解复用
- 把数据转换成fmp4格式并传递给MediaSource
- 删除A的部分Buffer
- 在下一个关键帧自动完成画质的切换
图1.5 mp4视频清晰度切换流程示意图
这个过程看上去比较繁琐,但是所有的操作都是在浏览器端完成,也就是说都是JS来实现的。这样之前说的所有成本问题都不存在,还能做到youtube相同体验的无缝切换。如果大家也想使用这个功能不需要自己再去实现一遍上述流程,可以使用如下代码:
如果对这段代码有什么疑惑,或者想深入了解下它背后是如何实现的,可以参考 Github:https://github.com/bytedance/xgplayer 或 阅读原文:
节省视频流量使用 video 的同学基本上都是这样用的,如下:
- 利用src属性