腾讯是如何大幅降低带宽和网络流量的

2018-06-22 12:26:19 浏览数 (1)

1、前言

每年年初腾讯公司都要制定 SNG(社交网络事业群)成本优化年度目标,过去三年已经用技术手段为公司节省了超过 10 亿的现金流。产品的架构和容量也越来越健康,继续成本优化变得十分艰难。 但我们在迷茫中仍然定下了再优化 3 亿元的目标。很幸运,2017 年我们实现了这个目标,并再次获得公司级奖励,这是非常不容易的。因为“成本与质量”是个平衡木,而 2017 年 SNG 产品面临着激烈的内外竞争,要降低产品质量是根本不可能的。所以本次文章跟大家分享如何在保障质量(指的是图片质量、音视频质量)前提下所做的带宽和网络流量压缩,进而达到运营成本的优化。

2、移动端高流量时代来临

“在非WiFi环境下玩手机,你会在意“流量”吗?” 我在身边的同事和朋友圈儿做了同样的调查,得到的答案差不多,大家对手机流量不怎么在意,不喜欢转菊花和卡顿。我自己用的是腾讯大王卡,腾讯系的免流量,其他流量全国1元 800 M / 日,我身边有个开发妹子用的阿里宝卡,1 元 / G 全国日租流量,我领导用的全球通套餐,他自己也不记得多少钱一个月,反正流量用不完,他说他不缺流量缺的是时间,但我总发现他会偷偷看小视频,一看就停不下来。

总之,就像本文将在分享的一样:用技术手段为用户提供低成本高质量的产品体验才是未来移动端产品的思路。

3、以QQ 相册图片压缩为例

我们来看看QQ 相册图片压缩的例子。QQ 相册业务发展较为平稳,总图片数有上万亿张,每日新增上传图片几百万张,每日下载图片几百亿张,外网带宽日峰值上百G,成本压力一直存在。 我们进行了各种维度的技化的实践,包括使用新的图片格式、最新的技术以及一些技巧等。

3.1使用WebP格式进行图片压缩

用户上传的图片一般有三种主流格式:JPEG、PNG 和 GIF 动图,15 年 QQ 相册用Google 的 WebP 格式用户上传的原图进行后台压缩,在保障同等质量下的 WebP 图片比原图体积小 30%。

3.2使用分辨率自适应

用户终端机型分辨率存在大小不一,但一些产品是以最大分辨率下发的,但中低端机型并不需要高分辨率的图片,优化为按需返回适当分辨率图,可节约 20% 的流量。15 年做的这 2 个优化都是在保障图片清晰度不变的前提下,为用户和企业节约了流量和存储空间。

3.3GIF 动图压缩

16 年底相册推出新功能,用户在发表说说时可以选择自己的照片合成 GIF 动图,新功能导致流量增长非常迅猛,对应的外网带宽成本上增 70%。流量分析发现仅有 5% 下载次数的 GIF 格式图片占用了 20% 带宽,剩下大部分是经过 WebP 格式压缩过图片。 GIF 动图相当于一组图片的集合,可以把它看做一个小视频,但 GIF 格式是一种位图文件格式,是利用颜色表索引来表示每个像素颜色,然后标记重复出现的数据,编码过程对图片颜色数据没有损失,是一种无损压缩方式,相比视频压缩算法压缩率比较低,用户自己编辑的 GIF 大小普遍在 2-4M,是普通图片几十倍,占用户和企业的下载流量和存储都很大,当时用的开源 WebP 不支持 GIF 动图压缩所以考虑其他图片压缩格式。

4、新技术选型 TPG 图片压缩

腾讯 SNG 音视频实验室基于(AVS2 国家标准内核)开发了 TPG 图片压缩格式。采用了视频编码模式,利用帧间参考,大幅减少冗余值,提升压缩率。特别是在动图上具有高压缩率和低编解码耗时的明显优势,经在 QQ 相册验证 TPG 可在同等质量下可将 GIF 大小降低 90%,将 WebP 再降低 21%,比 JPEG 节约 43% 左右。并做了编解码性能的优化,耗时等都优于 WebP。为此 17 年全面推广相册 TPG 格式化。

右图是压缩了11 倍的 TPG 动图,人眼主观观察质量很难看出区别:

5、相册接入 TPG 图片压缩-前后台解决的困难

全客户端统一后台配置: 相册图片展示场景复杂,接入方案要适用于移动、PC、H5内核等所有客户端版本,根据用户客户端能力优先返还 TPG > WebP > JPG,右图是后台搭建的全客户端统一后台配置。

灰度发布: 作为首个大体量全面接入 TPG 的业务,为了保障平滑过渡,首先对新上传的图片保障异步压缩后存储在源站,被访问后会存储在中间源和 OC 点,大概一个月等 TPG 热数据占 70% 后,对旧的图片需要人工触发或者基于访问触发实时压缩。

6、廉价转码资源

TPG 是利用 AVS2 编码标准 通过非常复杂的计算来提高图片压缩比,实际无论是图片、音频还是视频压缩比的提升都是增加计算复杂度,等于是用计算资源来换带宽和存储,所以带宽优化需要大量廉价转码资源,如果专门采购转码服务器,需要大量的现金流。所以我们用 FPGA 转码卡与离线平台软硬结合来提供廉价计算资源。

FPGA卡: FPGA 作为一种高性能、低功耗的可编程芯片,可以根据客户定制来做针对性的算法设计。所以在处理海量数据的时候,FPGA 相比于 CPU 和 GPU,优势在于 FPGA计算效率更高,以相册TPG转码为例,FPGA 卡性能是普通图片处理服务器的10倍,编码延时减少 80%,大幅减少用户等待,采用结合 FPGA 转码卡与 Docker 离线软硬结合,能有效降低转码成本,现已节约了几千台服务器。

成果: 项目在上半年完成,现在 TPG 请求量占 80% 以上,节约了 40% 的带宽,存储量减少,节约几千万/年,质量上反而由于文件变小,解码效率提升,用户等待时长减少了 22%。

7、全类型多场景的图片压缩解决方案

TPG 编码压缩虽然在压缩率上更优,但需要客户端和 PC 具备解码 SDK 才能正常使用,现在推广阶段,现网仍存在很多原图(JPEG、PNG、GIF)请求量。

经过三年的积累腾讯搭建了一套全类型多场景的图片压缩解决方案,根据用户客户端情况返还最优的图片格式,降低业务接入门槛,如下右图。

8、点播类小视频的流量优化思路

8.1冗余下载

原来 QQ 空间的小视频播放没做任何限速,一旦开始播放就会以用户最快的速度进行下载,一个小视频文件长度大约 80s,在正常网速下不到 20s 就可以下载完成,但往往用户并没有完整看完每个视频,数据显示空间用户的平均播放时长是只有 23s,下载但没有播放的视频浪费了用户和企业的流量。

8.2QQ 空间小视频限制下载速度

对空间的小视频控制下载速度,先尝试限制下载永远只比播放多 40s,卡顿率在1.2%,然后将 40s 改为 20s,卡顿率上升到 2.1%,持续验证,最后调整在 20s。如果用户网速太差,发生二次缓冲则不限速。

8.3QQ 长视频实施边下边播

针对 QQ 的长视频启用边下边播策略,用户点击视频后先全速缓冲 20s 然后再以文件码率进行下载,看一秒下一秒,关闭播放就停止下载。不需要等下载完才能播放,用户平均等待时间从 12.6s下降到了 1.77s 左右,极大地提升了用户体验。现在边下边播已经成了腾讯视频业务的标配,措施完成后,冗余下载比从 65% 下降到 35% 左右。

8.4空间小视频历史优化策略

关闭自动播放: 过去 2 年空间小视频播放量一直在上涨,造成外网带宽流量也一直上涨,17 年以前已经做的优化手段有“高峰期关闭自动播放“(用户点击才播放,但现在来看只要在WiFi 环境下自动播放用户体验更顺畅,所以也切回去了)。

降码率: 搞笑的很多都是小猫小狗,场景比较简单,当时我们认为这类视频流畅比清晰度更重要。所以可以适当的降低清晰度(码率),于是系统根据热度,对每小时 TOP2000的热点视频后台压缩出低码率进行播放,节约了大量的带宽。

8.5空间小视频H.265技术选型

码率太低,质量变差: 码率是数据传输时单位时间传送的数据位数,同一种编码格式下码率越高越清晰,当时空间热点视频码率压缩到 300kps,不到现在普通手机拍摄的 1/3。码率降到肉眼可识别的程度后用户体验就会变差。但业务持续上涨,需要既节约带宽又保障质量,所以考虑使用新一代视频编码标准 H.265 来提升压缩率。

16年当时公司没有业务尝试,除了专利风险外,由于H.265计算复杂度远高于H.264,编解码都需要硬件在性能上支持。

8.6硬解码与软解码

解码有硬解和软件两种,硬解码是使用播放设备(手机和电脑)的硬件解码,比如通过专用的DSP内核解码芯片的功率更低,解码效率更高,现在支持硬解码的手机比例大概在 70%。安卓客户端复杂,不确定是否支持解码。 不具备专用硬件就只能通过软件利用 CPU 解码,软解由于要妥协解码设备的通用性,所以算法上对效率和质量有折扣,相比硬解更耗时,容易造成手机发热和耗电。

硬解比软解能减少用户终端 CPU 占用、降低系统开销、减少耗电和发热,所以现在要做软硬结合。经过一整年的运营,整体H.265播放占比从 8% 提升到现在的 30%,压缩比最高 40%。卡顿率没有下降,反而提升,用户体验更流畅。

9、实时音视频聊天的流量优化思路

QQ 会议视频混音: 视频里还有一种场景是实时音视频通话类,比如 QQ 会议视频,以往会都是有几个人同时说话,接收方就接收几路音频,然后在客户端进行混音操作。混音是把多种来源的声音整合至一个立体音轨或单音音轨中。

质量跟踪: 优化过程中也通过质量评分系统,对用户质量进行监控。质量随着混音灰度逐步微升。

10、实时音视频直播的流量优化

下图是企鹅电竞正在直播的一场吃鸡,可以看到房间在线人数非常高,清晰度有高清、超清和蓝光,带宽成本一直很高。

今年春节期间 NOW 直播的答题业务非常火,每天晚上 8 点会在指定房间出题,观众答对可以瓜分每天 100 万的奖金,最高峰值有 90 万观众同时在线,假设平均码率1M,峰值会有 900G 的带宽,成本非常高。

SNG直播业务很多,根据每个产品不同特点,分别做了不同的优化。 空间直播是熟人社交,房间人数普遍很少,低于 10 人,小房间走 OC 回源率非常高,浪费 CDN 分发资源,所以使用IP直连方式。 NOW 直播的房间稍大(一般数十人到数百人不等),但音频走的DC带宽,OC带宽单价是 DC 带宽的 1/2 还低,所以就推进 DC 转 OC。

和点播不同,大主播的设备和网络比较好,一般采用主播上行推2路流,一路H.264 (考虑低端手机硬解能力),一路 H.265。小房间考虑到主播上行带宽限制和转码计算成本,就只出一路 H.264. NOW 直播答题房间主播同时推 H.264 和 H.265 两路流可以节约总体 30% 带宽,可优化力度很大。

11、精细化码率优化

带宽优化案例还有很多,结合产品特色各有千秋,就不一一列举了,下面我们看一下现在视频优化的方向。 动态码率: 码率控制有三种:恒定码率(CBR)、平均码率(ABR)、动态码率(VBR),一般使用的平均码率。但平均码率有很多弊端。

根据场景不同: 但同一个视频里也会出现不同的场景,比如打斗需要的码率要比风景高,可利用深度学习对场景进行分类,在转码时给与不同的编码参数。 根据ROI特征提取,对人眼感兴趣区域重点编码: 人眼一般对人物特别是人脸区域的注意力要大于其他区域,比如看下图是斗鱼一姐冯提莫的直播画面,可以对人脸重点编码、对人身体和衣服次重点增强、对其他区域适当减弱的策略来转码。 自适应分辨率: 动态码率是在用户网络条件允许的情况下,找编码码率的最优解,而如果用户网速限制,但又想为用户提升清晰度的话,可以用自适应分辨率的方式。在相同播放窗口下(显示分辨率相同),相同码率下不同编码分辨率的质量PSNR是不同的,所以在固定码率和显示窗口下,有最佳编码分辨率。比如用户选择高清,用户带宽限制码率在1.2M,在这个基础上可以找到适合用户网速的最佳编码分辨率进行编码。

12、总结一下

结合这些实际案例,带宽优化归纳为一小两少三不变。文件压缩的更小,下载次数少,冗余下载少,质量不变。 常用的管理和技术手段有很多如下饼图:

在优化过程可以运用五部曲:

业务运维还有一个非常痛苦的场景就是做预算,利用精细化成本管理思路为产品做带宽预测和优化模型,因为数据会变化,所以可以采集数据,系统自动统计带宽的预算和合理性分析。

0 人点赞