TT Player自研完成后陆续用到了今日头条、抖音上。此前,用户打开一个视频要0.8秒左右,经过多次测试优化,已经缩短至0.2秒。
团队的一位工程师解释,首帧打开时间每缩短0.05秒都对用户体验影响巨大,半秒多的速度提升就是非常明显的进步了。
现在,TT Player播放15秒以内的小视频,卡顿率已经降低到了0.58%,差不多每打开172个视频,才会遇到一次卡顿的情况。
崩溃率也降到百万分之一以下,也就是说平均每100万次播放里,最多只出现一次播放器崩溃的情况,假设一名用户每天刷1000个短视频,平均也要大约3年才能遇到一次播放器崩溃的情况,比此前使用的ijk开源播放器和苹果系统播放器低得多。
这是怎么做到的?
比如,为了保证用户看刷短视频的流畅体验,工程师们做了预加载,提前下载用户即将刷到的下一个短视频,还把下一个短视频的第一帧渲染出来,并且让这个视频的声音不播放。这样等用户刷到下一个短视频,它就可以直接播放出来。
火山引擎智能视频云团队工程师介绍,在一般业务场景里,如果视频首帧没有加载出来,系统就会直接使用封面图,采用了这种预加载的方式,就不需要下载封面图了,可以帮用户节省一张封面图的流量和带宽。
再比如,为了在硬件解码器方面适配全世界不同手机的机型,工程师们联系了大量SoC厂商、手机厂商进行调优,能解决就适配,不能适配就转用软件解码器。目前TT Player的硬件解码器覆盖率在安卓机型达到了80%以上,iOS机型则是近乎100%覆盖。
而拿移动端用户切换清晰度来说,有些播放器会遇到清晰度切换时卡顿的问题,为此火山引擎智能视频云解决方案团队的工程师们想到了关键帧对齐的方法,也就是把上一个清晰度的最后一帧和新的清晰度第一帧完全对齐。
在实际的播放中,每个视频按照一定的时长被切成了几个视频片段,比如1分钟的视频可能被切成了6个10秒钟的视频片段,每个片段有360p、480p、720p、1080p等几种不同清晰度的版本。
关键帧对齐的方式就是,从720p切换到1080p的时候,把720p的最后一帧和1080p的第一帧完全对齐,保证一模一样,这样在播完前面720p的10秒钟片段之后,就可以流畅切换到之后1080p的10秒钟片段里,不会出现卡顿问题。
Web端的西瓜播放器
TT Player是移动端