「抖音同款播放器」上市:有效解决卡顿、黑屏和模糊
![「抖音同款播放器」上市:有效解决卡顿、黑屏和模糊](https://static001.geekbang.org/infoq/c4/c47a82f8a9a6a5d637bad52a7757a37d.jpeg)
前不久,字节跳动旗下 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%的码率节约。
视频封面选择困难症?让 AI 来帮你挑
上面说的是视频播放和传输,但在视频创作阶段,火山引擎的技术团队也做了不少努力。
比如视频封面的创作。数据分析显示,一个优质的视频封面能够让视频点开率大幅度提升,为了帮助内容创作者轻松选出优质封面,视频平台在创作者上传视频时,会给创作者推荐视频的封面,或提供备选封面。
想要实现这个功能,系统会从视频中选出比较美观的几帧来提供给用户。为此,火山引擎团队的机器学习工程师们训练了一套美学质量评估算法,可以让人工智能按照大部分人类的审美,评价图片或者视频美不美。
比如这张相对专业的湖中岛风景照:
![](https://static001.geekbang.org/infoq/e4/e4693bc7325b3df49ad386daedd6db1f.png)
满分 100 分,在 AI 看来,AI 给出的评分是 86.54 分,算法也觉得画面美观。
再看这张非专业摄影师的随手拍:
![](https://static001.geekbang.org/infoq/1d/1d6079920025c52c13178d80c3d21452.png)
AI 给出的评分是 71.98 分,虽然还算美观,但整体水平比前面那张差了不少。
如果两帧出现在同一个视频中,系统就更可能会选前面评分高的一张作为封面推荐给创作者。
这是如何做到的呢?
其实,AI 评价美丑的标准来自经过人类打分的图像数据集。
按照类似的评价标准,先由人类为一部分图像进行打分。
比如下图第一行的照片,颜色搭配合理、构图磅礴大气,人们就可以打出 70、80 的高分;而第三行的照片图像不够完整、画面元素凌乱,就只有不到 40 分。
![](https://static001.geekbang.org/infoq/9c/9c7a326a907c03aab354271944a7b07c.png)
这样,把大量图片和对应的分数作为训练数据输入神经网络,成为 AI 的学习资料,它就可以自己从美术风格、画面构图、色彩应用等多个方面来评估一张照片或一段视频在人类眼中够不够美了。
视频质量好不好,VQScore 都知道
除了主观美丑之外,视频好不好的另一个评价指标则是视频的清晰度。
VQScore 是火山引擎团队的工程师们训练的一个评价视频清晰度的算法,它可以在不借助参考视频的情况下,独立地对视频清晰度进行评价打分。
和上面的美学质量评估算法一样,VQScore 也是根据人类对视频清晰度的主观评分数据来训练的深度学习算法。
![](https://static001.geekbang.org/infoq/21/21789898d9d1e620c5441155d9ac7ded.gif)
比如上面这样的视频,看起来相当模糊,有大量噪点,算法给的清晰度评分是 40.23 分。
![](https://static001.geekbang.org/infoq/b4/b46a4dcd83c4a8ad2484687bad7944b8.gif)
视频质量高一些的话,就可以拿到 75.17 分了。
除此之外,对于视频压缩失真、噪声大小、对比度是否过低等情况,VQScore 都可以给出按照人类视觉的判断,来自动分析视频质量。
视频糊了?靠算法实现画质增强
经过上面的算法判断,如果得出的结论是视频质量的确比较低,为了提升用户体验,可以借助超分辨率、视频插帧、降噪算法等多种技术,提升视频的质量。
比如针对几十年前的老电影,可以实现老片修复,解决老电影常有的噪声、划痕、颜色对比度和分辨率的问题。
比如经典电影《刘三姐》,下图右侧修复之后人物面部轮廓、衣着细节都更清晰了:
![](https://static001.geekbang.org/infoq/1a/1a92babd53e59c153e85d1925eae0206.png)
1994 年的港片《精武英雄》中的场景,同样也可以实现类似的效果。
![](https://static001.geekbang.org/infoq/fb/fb5b6e2da0056bf816de1944c3e71e67.png)
现在西瓜视频上,像《精武门》、《方世玉》等不少 90 年代老电影都是修复后的高清版本,用户在观看这些经典老片的时候就可以获得更清晰的观看体验。
另外,如果是用户自己拍摄的视频作品,清晰度比较低的话,算法同样可以增强他们的质量。
比如下面的视频,从视频素材到搭配的文字,右侧修复之后的画面看起来比左侧的原始画面清晰多了。
![](https://static001.geekbang.org/infoq/7f/7fe816c83b30444eaf109ae5a49b3971.png)
而在更广泛的用户测试中,也有 80%的人能看出,经过修复的版本清晰度有明显提高。
这项技术来自火山引擎多媒体实验室,目前团队已经为此付出了 1 年多的努力。
2020 年初,在深圳市人民政府主办的首届“全国人工智能大赛”AI+4K HDR 赛项中,这个实验室的工程师们组成的队伍拿下了比赛第三名的成绩,也是工业界所有参赛队伍中的成绩最高的。
可用性超 99.999%的融合 CDN
除了上面这些与视频创作者和观众直接接触的环节,视频内容本身在网络中的传输也要借助重要的一环——CDN。
CDN 是指内容分发网络(Content Delivery Network),在整个互联网上有不同节点上的许多个服务器互联,组成一张分布式的网络,是一项互联网基础设施。当用户想要看某个视频的时候,离他最近节点上的服务器就可以快速响应,降低用户观看视频的延迟。
火山引擎 CDN 借助强大的融合技术、大数据处理、智能预测等算法,实现了客户端对单一故障源的快速容灾和提前规避,从以往的不可播放到用户几乎无感知,可用性超过了 99.999%。对普通用户来说,App 们就会更少出现崩溃的状况。
此外,在内容的传输环节,火山引擎 CDN 也用到了机器学习模型来预测带宽,对网络带宽精打细算,大幅度降低了成本。
而在分发过程中,它利用大数据、智能分析等一些手段建立了全球网络拓扑性能分析链路,选择最优的分发链路。这样,用户看视频的时候就不容易因为网络问题而发生卡顿,质量性能提升达到 100%。
从算法到应用,现在我们可以期待这些技术在更广的平台上发挥作用、服务用户了。
评论