短视频,现在已经是无数内容社区型产品都需要的功能了,几乎每家社区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开源播放器和苹果系统播放器低得多。
这是怎么做到的?
比如,为了保证用户看刷短视频的流畅体验,工程师们做了预加载,提前下载用户即将刷到的下一个短视频,还把下一个短视频的第一帧渲染出来,并且让这个视频的声音不播放。这样等用户刷到下一个短视频,它就可以直接播放出来。
火山引擎智能视频云团队工程师介绍,在一般业务场景里,如果视频首帧没有加载出来,系统就会直接使用封面图,采用了这种预加载的方式,就不需要下载封面图了,可以帮用户节省一张封面图的流量和带宽。
再比如,为了在硬件解码器方面适配全世界不同手机的机型,工程师们联系了大量SoC厂商、手机厂商进行调优,能解决就适配,不能适配就转用软件解码器。目前TT Player的硬件解码器覆盖率在安卓机型达到了80%以上,iOS机型则是近乎100%覆盖。
而拿移动端用户切换清晰度来说,有些播放器会遇到清晰度切换时卡顿的问题,为此火山引擎智能视频云解决方案团队的工程师们想到了关键帧对齐的方法,也就是把上一个清晰度的最后一帧和新的清晰度第一帧完全对齐。
在实际的播放中,每个视频按照一定的时长被切成了几个视频片段,比如1分钟的视频可能被切成了6个10秒钟的视频片段,每个片段有360p、480p、720p、1080p等几种不同清晰度的版本。
关键帧对齐的方式就是,从720p切换到1080p的时候,把720p的最后一帧和1080p的第一帧完全对齐,保证一模一样,这样在播完前面720p的10秒钟片段之后,就可以流畅切换到之后1080p的10秒钟片段里,不会出现卡顿问题。
Web端的西瓜播放器TT Player是移动端的播放器,而在Web端,火山引擎的点播能力靠西瓜播放器来实现。
这款播放器来自字节跳动的web多媒体团队,是团队工程师们从底层开始一步步研发的成果,技术范儿此前也做过详细报道。
除了单纯UI层面的创造,西瓜播放器拥有更多底层的功能,能够让mp4格式的视频实现流式播放,用户看视频的时候就可以实现清晰度无缝切换,还能节省视频流量。
另外,西瓜播放器也集成了对 flv、hls、dash 格式的点播和直播支持,在GitHub上已经获得了超过3600颗星。
智能高清低码:高清视频不怕卡顿除了播放器本身,另一个影响用户体验的要点就是网络传输。如今的视频清晰度都变高了,传输它的带宽成本就会提升,如果用户在网络状况不好的地铁、地下室、山区等场景看视频,就容易出现卡顿的情况,或者被迫只能看标清。
为此,火山引擎多媒体实验室还训练了智能高清低码相关的算法,也就是通过智能编码的方式,在提升视频质量的同时,把视频的码率降低,这样就可以用最低的码率传输最清晰的视频。
如何才能实现这样的功能呢?
首先,要去除噪声和失真的部分,压缩效率可以节约20%以上,对应的传输带宽需求也只需要不到原来的4/5,还能提升视频的质量。
其次,要对人眼在看视频时的兴趣点进行针对性的优化。比如我们在看讲座时,注意力放在了主讲人的面部;看美食视频时,注意力重点在食物上。这样,只要提高人眼关心部分的画质,弱化人眼不容易注意到的区域,就可以保证在码率降低10%的情况下用户体验一样优秀。
最后,要实现内容自适应编码,根据视频的领域、情感、对象特征,自适应地选择视频编码配置,从而在保持视频质量的情况下,节省带宽10%以上。
说到视频编码,就不得不提到到字节跳动自主研发的视频编码器BVC1。这款视频编码器在同样的清晰度下,带宽降低了30%。
BVC1也可以针对手机、PC、平板电脑等不同的设备进行定制化,利用现有的算力,最优化质量提升和带宽节约。
而在视频会议中屏幕共享的场景下,借助独创的视频上采样方案和超分辨率技术,也可以实现更清晰的文字显示。
当然,字节跳动先进视频团队也一直在迭代编码器技术,2020年,BVC1编码器就比前一年实现了20%的码率节约。