短视频,现在已经是无数内容社区型产品都需要的功能了,几乎每家社区App公司都希望在自己的产品里增加短视频功能。
但并不是每家公司都有能力招聘大量技术人才,从无到有地开发一套短视频解决方案。
前不久,字节跳动旗下To B业务「火山引擎」对外开放了视频点播服务。
也就是说,市面上各类带有播放需求的应用,都可以拥有抖音、西瓜视频同款播放器,把卡顿、黑屏等情况出现的概率降到最低,能够实现流畅、稳定的视频播放体验了。一些垂直社区App已经用上了抖音同款播放器,实现了丝滑的播放体验。
这些技术都是在抖音、西瓜视频、懂车帝、皮皮虾等多款内部产品上长期使用、多年迭代的成果。今天我们来看看,在火山引擎视频点播服务背后,那些你可能还不知道的字节跳动技术成果。
不卡不崩的TT Player
首先,来看看提供点播能力的播放器本身。
TT Player是一个用在安卓和iOS端的播放器SDK,它可以实现首帧秒开的效果——也就是说,在打开视频的时候不需要加载,只要等0.2秒左右,第一帧视频画面就已经显示在你的屏幕上了。
其实,字节跳动系产品的移动端播放器最早用的是安卓系统的ijk开源播放器和iOS上的苹果系统播放器,但效果并不如意。2016年,每天有100多名用户反馈出现了黑屏、无法播放的情况,视频打开后,手机就黑屏了,视频内容根本显示不出来。
于是,火山引擎智能视频云团队开始自研移动端播放器,完成了大量播放策略优化,比如预加载策略、播放控制策略、缓冲优化和面向网络的自适应等等,新的播放器TT Player面世了。
TT Player自研完成后陆续用到了今日头条、抖音上。此前,用户打开一个视频要0.8秒左右,经过多次测试优化,已经缩短至0.2秒。
团队的一位工程师解释,首帧打开时间每缩短0.05秒都对用户体验影响巨大,半秒多的速度提升就是非常明显的进步了。
现在,TT Player播放15秒以内的小视频,卡顿率已经降低到了0.58%,差不多每打开172个视频,才会遇到一次卡顿的情况。
崩溃率也降到百万分之一以下,也就是说平均每100万次播放里,最多只出现一次播放器崩溃的情况,假设一名用户每天刷1000个短视频,平均也要大约3年才能遇到一次播放器崩溃的情况,比此前使用的ijk开源播放器和苹果系统播放器低得多。
这是怎么做到的?
比如,为了保证用户看刷短视频的流畅体验,工程师们做了预加载,提前下载用户即将刷到的下一个短视频,还把下一个短视频的第一帧渲染出来,并且让这个视频的声音不播放。这样等用户刷到下一个短视频,它就可以直接播放出来。
火山引擎智能视频云团队工程师介绍,在一般业务场景里,如果视频首帧没有加载出来,系统就会直接使用封面图,采用了这种预加载的方式,就不需要下载封面图了,可以帮用户节省一张封面图的流量和带宽。
再比如,为了在