概念
简单聊一下我了解到的一些因素。
- 用户网络速度
与用户网络接入速度有关,接入网络类型wifi、3/4/5g,古老点还有拨号上网。播放网络视频主要关心网络的下行速度,可以找测速网站测试一下当前网络速度。在实际开发过程中,可以通过设定网络速度测试值,进行视频播放源选择策略(可以利用chrome的开发模式进行网络限速简单测试播放情况)。 我个人简单测试结果如下:
| 视频源格式 | 视频源分辨率 | 网速最低要求 |
|---|---|---|
| mp4 | 480p | >664kbps流畅播放 |
| mp4 | 720p | >1028kbps流畅播放 |
| mp4 | 1080p | >1928kbps流畅播放 >1542kbps开头会卡顿一下 |
从用户侧来计算,可以采用2种方式:一种是通过监听播放器点buffer缓冲情况,计算2次回调缓存的数据差和时间差,做一个简单计算获得;另外一种可以启动网络下载任务,从通过CDN下载COS测试文件,计算文件大小和时间,做一个简单计算获得。具体实践还需要考虑到用户网络流量,网络波动性情况等。
-
视频文件大小
可以参考第一篇、视频的基础概念的内容,视频文件大小主要受视频文件编码方式,像素格式,帧率,码率,分辨率这几个因素影响。选择合适的分辨率,适当的编码方式,合适的帧率码率可以有效显著降低视频文件大小。如果在普通手机设备上播放视频,选择720p分辨率,就已经足够了。如果选用4k、8k就大可不必;同样咱们也没有必要追求120fps或者60fps,说不准手机设备本身性能没办法达到的同时用户感官体验也会呈边际递减效应。 -
视频播放参数
一般情况下视频播放会首先获取视频本身的格式参数,包括分辨率,帧率,码率,编解码器信息等等,然后才对缓冲视频帧包进行解码解帧显示画面。为了获取良好的播放体验,都会有一个缓存到足够多帧数量的时候才开始播放,这样会一边播放,一边缓冲,能够获得一个顺畅的观看体验。这个缓冲足够多帧数量是可以配置的,一般情况差不多是1s左右,为了获得秒开体验,也可以设置250ms;也就是缓冲到足够播放250ms帧数量数据的时候就开始播放视频。我们简单计算一下30fps,那么250ms就是1/4,大概缓冲8帧左右数据就会开始播放。 -
视频分发网络
视频网络分发一般借助CDN骨干网加速用户接入,视频源一般存储在云端COS/OSS上,这个过程会包含DNS解析,网络链接,数据收发过程,DNS解析可以通过IP直连省略到,网络链接过程需要选用适当协议,鉴权方案,在云端存储寻找视频内容,如果涉及多级回源302转发的话,也需要解决优化。数据收发过程也需要选择合适的鉴权,加密方案,对视频安全进行防护。在视频分发过程,我们也可以注意选择合适的视频文件格式,譬如可以选择m3u8/mp4,或者其他的。 -
用户设备兼容
主要考察设备性能,设备针对该编码方式是否支持硬解,android还是ios,原生还是小程序,小程序是抖音、快手、微信、百度等等,是否支持文件格式,是否支持编码方式,我们也测试遇到过ios微信小程序不支持m3u8的hevc。这些需要前置测试,配置制定策略,在实践中根据策略进行选择正确的视频源。也需要制定降级策略,譬如遇到问题,需要backoff到那个播放策略。在保障云端存储空间占有小,格式策略集合小,保障用户流程播放体验等因素取得平衡。
总结
除开上面提到的因素之外,还有其他影响视频的播放速度的因素。在遇到问题的时候找到合适的方法解决就可以。需要时刻保持关注在解决方案是否匹配最初设计目标和初衷就可以。保持框架按照设定规划方向演进,以最优投入产出比解决遇到问题。