从蓝光到4K,腾讯视频高码率下载背后的技术
欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~
由 腾讯技术工程官方号 发布在云+社区
蓝光和4k视频正逐渐普及,4K视频峰值码率超10Mbit/s。架构平台部TVideo平台从资源,链路、缓存、接入进行调优,有效解决4k高码率视频的二次缓冲问题,播放体验全面领先竞品。
背景
随着音视频编解码、超分辨率、VR/AR等技术的发展,iPhone8、4K电视、VR眼镜等终端设备的更新换代,高码率高分辨率片源(4K视频、360°全景视频等)的层出不穷,多媒体用户观看体验正在逐步升级,整个行业生态链正在快速向高品质内容切换。
就分辨率而言,上面提到的4K视频指分辨率达4096*2160的片源,对比其它分辨率还有2K(2560*1440)、1080P(1920*1080,目前腾讯视频蓝光的分辨率)等。腾讯视频在2017年下半年为进一步提升用户体验推出“杜比特权”,引进4K片源(见图1)。
分辨率的提升必然伴随着码率的提升。相比蓝光视频的3Mbit/s码率,杜比特权4K视频峰值超过10Mbit/s,这对后台下载(Tvideo平台)带来巨大挑战,为提供至少10Mbit/s下载速度,需要在网络延时、缓存IO、回源速率等方面进行优化升级。
1.Tvideo平台介绍
腾讯视频Tvideo平台运营着公司内部各项重要音视频业务,除腾讯视频外,还为空间视频、QQ音乐等提供支撑。拥有16T+自建带宽,亿级别的视频库。
i
Tvideo采取多层缓存,冷热分类架构。音视频文件上传到Tvideo后台源站,源站存储模块为每个文件加入特征信息,防止恶意用户盗链,分析文件热度,按不同优先级将文件推送到中间源;中间源缓存按业务进行软件隔离,保障每个业务有独立存储空间;城域点负载边缘加速,通过调度、链路加速等措施保障数据快速传输到用户终端。
2.高码率视频后台优化揭秘
当前高码率视频面临着网络延时,缓存IO不均,接入/回源耗时带来的卡顿等一系列问题,如杜比视界4K节目,码率峰值高达10Mbit/s,一部电影高达10GB存储,如何保障后台服务质量,提升用户观看体验?
针对上述问题,Tvideo平台在链路、缓存、接入等做了多项优化,解决缓存负载、链路卡顿、播放高延时等问题。
2.1 链路加速
客户端播放媒体过程中,没有出现任何卡顿称之为无缓冲,反之称之为二次缓冲,无缓存占比越高,说明后台服务越好,链路加速重点解决用户播放音视频卡顿的问题。
引起卡顿的因素很多,如后台网卡降速,传输网络波动、跨省&运营商访问速度跟不上、小片请求造成IO碎片等。Tvideo通过如下策略,解决链路带来的卡顿:
- 极速分发:多线程10MB/s速度下发,异步落盘
- 数据合并:HLS多分片合并直出,伪流处理
- 回源加速:根据客户端场景,后端自动加速
- 慢速修正:支持跨网矫正,慢速链接协议栈加速
- 按码率回源:根据现网回源速度,自动选择最佳回源路径
对于文件在边缘节点不命中场景,分为热点不命中和普通文件不命中,链路加速策略分别使用极速分发和回源加速,实现边缘节点“100%命中”。
极速分发指的是将文件从源站快速分发到边缘节点,解决源站、中间源等繁忙链路拥堵的情况,极速分发通过P2P组网、分级削峰、智能识别码率等方式,实现秒级内将一个切片视频推送到全网,在腾讯视频热剧抢先看、热点突发、会员保障等场景,发挥着重要的作用。由于分发网络节点间热点互通,将全网TOP(k)高码率热点文件分发到边缘节点,实现热点视频边缘命中,减少链路延时。
对于普通普通不命中场景,采取回源加速策略,每次回源记录回源速度,高码率视频使用回源速度大于码率3倍以上的回源IP,无法满情况下,采取多回源IP并发分片回源。
杜比视界4K视频采取fmp4分片,由于fmp4切片文件过小,每次回源请求小分片造成链路速度达不到预期,Tvido采取进行多分片合并回源下载策略,减少链路延时。
上图测试音频小文件多个分片合并的回源速度,可以看到,在TCP没有建立起来的情况下,将多个小分片合并回源速度效果明显。
当然后台链路加速还包括对客户端访问区分优先级,当客户端进行紧急下载,后端使用多连接加速;对于慢速请求,则选择协议栈加速等,通过上述优化,最大限度缩减耗时,保障链路下载速度。
2.2 缓存优化
缓存是Tvideo的核心模块,包括缓存按业务管理策略,热点文件&分片界定算法,冷文件淘汰、全局负载均衡等算法。
image.png
上图所示为Tvideo平台城域点机房集群架构,其中中心索引模块维护集群中所有文件的索引信息,下载HTTP模块负责业务请求的接入,数据存储模块负责冷热数据管理。
冷热数据存储模块和内存缓存统称为缓存,热点分级是缓存模块的分级是缓存模块的核心,对于普通视频热点统计策略相对简单:下载HTTP模块在接入阶段通过边缘计算,快速处理70%左右的热点请求;而相对冷的请求,通过中心索引模块计算,通过以上热点统计分级计算,实现热点快速统计。
而对于高码率视频,除了使用上述常规方法,另外对缓存进行了特定的分级,包括根据机房维度分级,根据访问模型分级,根据码率进行IO分级和热点扩散分级。
2.2.1 根据机房维度进行缓存分级策略
Tvideo平台每个机房质量存在一定差异,这样可以把资源分为优质资源和普通资源,通过现网访问流水分析得到不同机房质量情况后,将整个平台的缓存资源池按码率进行划分,对于普通机房,缓存更多的低码率视频,优质机房用于缓存高码率视频。通过机房调度完成优质机房服务高码率请求,避免高码率视频请求命中低质量机房的情况。
优质资源在文件淘汰过程中,保障高码率文件每次淘汰数量小于标准淘汰值(如高码率每次淘汰5%,普通视频每次淘汰10%),保障机房更多的空间存储高码率视频;而对于普通机房,一般只覆盖低码率业务,只有在资源不够的时候才会用上,可以空出更多存储供普通视频等业务使用。通过上述物理介质的分级,保障业务质量。
2.2.2 根据客户端访问模型进行缓存分级
根据客户端访问模型,可以将客户端下载过程分为快速阶段、渐进式阶段、P2P阶段。由于客户端每个阶段要求的下载速度不一样,后端缓存需要能够区分不同阶段,从而进行特殊处理。
用户观看一部影片,从客户端播放逻辑看,在刚开始播放时,客户端进入快速下载阶段。该阶段客户端播放器缓冲区没有数据,要求快速填满播放器缓冲区,以便减少网络抖动等因素带来的卡顿。当客户端缓冲区填满后,客户端进入渐进式P2P阶段,该阶段客户端停止向后台下载,采取P2P下载,如果P2P速度过慢,当缓存的内容过少时,再次向后台Tvideo下载,此过程叫渐进式下载。简单举个例子,客户端首次播放,快速下载180秒将缓冲区填满,播放器开始播放,同时进入P2P下载,由于P2P下载速度达不到高码率要求,当客户端缓冲区小于90秒后,客户端会向后台Tvideo平台继续下载,直到将缓冲区填满。
上述三个阶段对Tvideo后台速度要求不一样,后台根据边缘计算,探测到快速下载阶段的请求后,进行缓存内存加速,将部分数据预拉到内存。而渐进式下载过程中,后台根据文件VID进行预测,将文件预热到高速缓存介质上。在P2P补洞阶段,进行缓存负载均衡,保障机房内缓存负载相对平衡。
2.2.3 根据文件码率进行IO分级
当前Tvideo平台机房集群采取SATA和SSD存储混搭模型,解决回源较高问题,如SATA统一使用4T盘,保障边缘节点有足够的存储,能够挡住热点,根据访问热度,逐步向高速介质SSD上扩散。由于SATA单盘只能支持120Mbit/s,暂不考虑其它请求,若一个机房同时有大于12个用户访问同一个4K文件(10Mbit/s)时,SATA单盘将无法支撑所有用户的下载,需要快速将文件扩散到SSD上备份。
由于普通视频和高码率视频对机房集群内热点扩散的需求不同,特别是4k视频这类音视频分开存储,高码率视频对下载速度敏感业务,按码率和IO频率分级,向SSD和内存扩散,解决由于磁盘速度不够,带来的卡顿问题。
2.3 接入优化
接入优化主要解决跨省、跨运营商、资源不足等情况造成的卡顿,通过合理分配资源,解决由于资源不够,带来的卡顿。
客户端每次播放前,通过Tvideo调度平台接口获取具体下载地址,调度平台根据客户端的IP、码率等信息,选择一个合适的机房,通过负载均衡算法,选择机房的一个可以下载地址返回给客户端,客户端获取到下载地址后,向机房进行访问。简单的可以理解为,一个上海电信的用户请求播放,首先会访问Tvideo调度平台,然后Tvideo返回上海电信0001机房的一个下载地址给客户端,客户端向上海0001机房请求数据。
针对高峰期资源紧张、高码率视频卡顿率高,访问质量得不到保证的情况,进行调度分级策略:将VIP、高码率视频尽量本地覆盖,而低码率、音频、离线下载等业务,调度到二级资源或者区域资源,保障播放质量。如上表,当晚高峰,上海市区资源不够,将VIP高码率的调度到上海本地,而VIP低码率的调度到二级覆盖,而离线下载调度到区域覆盖如华东资源空闲的地方。
针对小运营商多出口问题,通过调度特征串,进行二次调度,解决跨网带来的卡顿。如上海移动用户通过Tvideo调度平台调度到了上海电信0001机房,客户端访问上海电信0001机房的下载服务器,下载服务器发现客户端IP不是电信的,返回302,让用户跳转到移动IP,进行访问。
总结
从资源,链路、缓存、接入进行调优,并通过码率分级、IO分级、业务分级等多角度优化,有效解决蓝光、4k高码率视频的二次缓冲问题。下图是自建和外包的无缓冲率的对比,通过上述优化,高码率无缓冲率提升1.5%。
相关阅读
此文已由作者授权云加社区发布,转载请注明原文出处
从蓝光到4K,腾讯视频高码率下载背后的技术的更多相关文章
- 爱奇艺|B站|优酷|腾讯视频高清无水印视频下载方法(软件工具教程)
导读:经常在大型视频网站平台上看到一些很价值和视频,希望能高清无水印下载到本地学习观看,今天小程序定制开发代码哥DaiMaGe6给大家分享一招免费下载全网高清无水印视频的方法. 高清无水印视频下载工具 ...
- 西瓜视频蓝光1080P下载方法
西瓜视频的蓝光画质只能在APP上看,如何获取1080P画质的地址呢? 1.先安装 WinPcap 2.然后安装夜神安卓模拟器NOX 3.NOX模拟器里安装西瓜视频的最新APP,旧版本APP只提供超清模 ...
- Atitit.iso格式蓝光 BDMV 结构说明
Atitit.iso格式蓝光 BDMV 结构说明 1. Iso是个复合文件1 2. Iso内部格式如下1 2.1. Bdmv文件夹格式 BDMV(Blu-ray Disk Movie.BD-MV),为 ...
- pptv破解版程序,能够免费观看所有蓝光和会员影片!
pptv破解版程序,能够免费观看所有蓝光和会员影片!PPTV网络电视3.4.1.0012绿色版(去广告本地vip版)由Black Hawk精简破解,去掉播放时缓冲.暂停广告.去掉迷你推荐和推荐弹窗.禁 ...
- Win10《芒果TV》更新v3.5.0夏至版:会员尊享蓝光画质,关联本地视频播放
在Win10秋季创意者更新前夕,Win10版<芒果TV>全平台同步更新夏至版v3.5.0,新增会员蓝光画质,关联本地视频播放,进一步提升使用体验. Win10版<芒果TV>V3 ...
- wordpress插入腾讯视频的方法
wordpress插入腾讯视频的方法 最近网站需要插入腾讯视频,但是腾讯视频目前没有分享代码,只有分享到微信,qq,微博等具体选项.百度这个问题,貌似没有很好地解决办法,好像有两个插件可以使用,安装试 ...
- 腾讯视频嵌入手机端网站demo - 就像微信文章中一样一样的
页面中的调用如下: <iframe id="video_iframe" class="video_iframe" src="TenVideoPl ...
- Android 高仿 频道管理----网易、今日头条、腾讯视频 (可以拖动的GridView)附源码DEMO
距离上次发布(android高仿系列)今日头条 --新闻阅读器 (二) 相关的内容已经半个月了,最近利用空闲时间,把今日头条客户端完善了下.完善的功能一个一个全部实现后,就放整个源码.开发的进度就是按 ...
- 腾讯视频QLV格式转换mp4的方法
腾讯视频QLV格式转换mp4的方法不知道大家知不知道用?喜欢用腾讯视频的朋友应该都知道腾讯视频单独搞出了个QLV格式文件,只能用腾讯独有的腾讯视频软件才能播放,就算用格式工厂转换也不行,那么腾讯视频的 ...
随机推荐
- 一个简单的双向链表(C++实现)
直接上代码,亲测有用. #ifndef __DLINK_H__ #define __DLINK_H__ /* [phead] -> [index0] -> [index1] -> [ ...
- CentOS下nginx php mysql 环境搭建
CentOS下搭建PHP运行环境. 首先是在虚拟机上装好一个命令行的CentOS,如果只是弄服务器的话,不要装图形界面,会比较卡. 一.安装编译工具及库文件 yum -y install make z ...
- Shell编程之文本处理
cut 截取自定列 可以按照某个字符进行分割,然后取出其中的指定列: [root@iz8vbbqbnh4ug2q9so5jflz logs]# --.txt /Dec/::: +] - /Dec/:: ...
- intellij idea 在什么地方打开终端Terminal
File→Plugins→Terminal 勾选它,点击Apply,点击Restart即可如果是要启动terminal则必须先做完上面动作,才可以点击Tools→Open Terminal... 来达 ...
- IOC容器在web容器中初始化——(一)两种配置方式
参考文章http://blog.csdn.net/liuganggao/article/details/44083817,http://blog.csdn.net/u013185616/article ...
- JavaWeb之ssm框架整合,用户角色权限管理
SSM框架整合 Spring SpringMVC MyBatis 导包: 1, spring 2, MyBatis 3, mybatis-spring 4, fastjson 5, aspectwea ...
- iOS Swift3.0 OC 数据储存--归档
一.Swift 3.0 1.model class userModel: NSObject,NSCoding { var account: String = "" var regm ...
- lograted日志切割脚本
root@op-testsetup-web3.idc1.yiducloud.cn:/etc/logrotate.d# cat etcd /home/work/docker/logs/etcd/prev ...
- iOS App稳定性指标及监测
一个App的稳定性,主要决定于整体的系统架构设计,同时也不可忽略编程的细节,正所谓"千里之堤,溃于蚁穴",一旦考虑不周,看似无关紧要的代码片段可能会带来整体软件系统的崩溃.尤其因为 ...
- Java 读者写者问题
实验存档.V 允许好几个人同时读,但是不允许在有人读的时候写,以及同一时间只能有一个人在写. 读者.java: package operating.entity.readerwriter; impor ...