优酷安卓短视频秒播优化

标签: 优酷 安卓 短视 | 发表时间:2020-05-16 11:58 | 作者:阿里文娱技术团队
出处:https://www.infoq.cn

一、背景介绍,短视频关注秒播

近几年,短视频一直处于流量的风口,各大平台纷纷涉足。不同的业务形态对技术有不同的述求,传统长视频关注的是减少播放中的卡顿,降低用户 seek 的耗时;直播关注的是如何保证实时性;而短视频关注的是秒播。

为什么短视频关注的是秒播?一是因为短视频通常只有十几秒,一是短视频的消费带有很大的探索性和随机性。如果用户花几秒钟等待十几秒的视频,很有可能起播后还不是用户喜欢看的,这个代价对用户来说太大了,久而久之,就是用户流失的时候。

二、现状与目标

短视频播放相关的核心技术指标有两个:缓存命中率和秒播率。通常情况,缓存命中率越高,响应的秒播率也就越高。短视频秒播专项优化项目启动时,关于缓存命中率和秒播率,结合现状,目标为缓存命中率提升 40%,200 毫秒秒播率提升 150%,400 毫秒秒播率提升 25%。

三、困难和挑战

首先,我们是短视频分发消费场,属于上层业务,底层播放器链路和预加载模块对我们都是黑盒的,无法直接在底层从根本去优化;

其次,短视频分发消费场,用户诉求是随机的,当用户滑到不感兴趣的视频时,会立即滑走,以便快速探索下一个视频。这会造成用户停留时间很短(通常不到 1 秒),大大挤压了预加载下一个视频的时间,造成滑出来的视频大概率在线起播,如果恰逢网络不稳定,很容易造成起播慢;

再次,优酷的长视频和短视频共用一个播放器。长视频场景下,更关注的是起播之后的流畅度。故播放器为了保证起播之后的流畅度,有如下播放优先策略。

1)播放前,由于不确定本地缓存的视频流是否足够起播,所以开始播放时,为了防止预加载任务抢网络带宽,此时会暂停所有的预加载任务,以优先保证起播。起播之后,在当前播放视频缓存的视频流达到配置的水位,才恢复被暂停调的预加载任务;

2)配置的时间阈值(300 毫秒)内无法起播,则会等待缓存的视频流加载到指定水位(指定时长或者指定大小),才会开始起播。

播放器以上两点播放优先策略,放到在短视频场,就不适用了,甚至是矛盾的,这无形中大大增加了短视频秒播优化的难度。

四、行业做法

在开始优化之前,很有必要花些时间对行业做法深入调查一番。主要集中在两个方面,一个是货,即视频源;一个是预加载策略。

如下表所示,从数据上可以看出,优酷和快手两家的货大同小异,而抖音在视频编码上支持 H.265。

平台 时长(s) 分辨率 码率(mbps) 大小(mb)
优酷 18 720p 2.45 5.6
抖音 15 540p 1.11 1.8
快手 20 720p 2.07 5.0

五、优化策略

视频起播耗时,主要有两个方面,一个是播放器准备耗时,一个是从网络加载视频流耗时。所以优化原则简单粗暴,就是在播放前,想尽一切办法,准备好播放器和将视频流加载到本地。

  1. 下拉刷新优化

feed 视频列表请求成功后,扣留列表中最后一个视频到内存中,然后预加载其视频流;下拉刷新时,将上次扣留到内存中的视频放在下拉刷新列表的第一个位置,同时扣留下拉刷新列表的最后一个视频,如此往复,保证下拉刷新播放的视频是本地起播。

feed 场景下,向下滑动出来的视频都是算法推荐,没有传统列表的分页概念。所以 feed 场景下,用户通常是一直向下滑动以获取新的推荐内容,用户没有下拉刷新的心智,故此优化项在此业务场景下收益甚微。

  1. 按需预加载视频流

现有预加载模块,如果业务方不设置预加载 buffer 大小,则统一为 400k,通过线上开关控制。优化后,业务方动态计算预加载 buffer 大小,计算原则就是预加载 3 秒的视频流。如果在视频播放时,3 秒视频流全部加载到本地,则既能保证起播,又能保证起播后的顺畅。

此项优化,收效同样甚微,按需预加载,只在一定程度上避免造成预加载任务阻塞,并没有从根本上提高预加载效率。

  1. 闲时任务

在视频播放超过 5 秒或者重复播放时,认为当前播放的视频流已全部加载完成,此时网络是空闲的,利用此网络空闲的时间,串行预加载后面的视频。

小视频业务大盘数据统计用户平均每个视频的消费时长为 6 秒,加上 1/3 的播放为重复播放,所以此优化项对于缓存命中率有较大提升。

  1. 预加载时机提前

利用滑动切换视频时,在滑动松手到滑动停止这段时间(300 毫秒),在保证滑动帧率的前提下,开启子线程预加载后面的视频,利用这 300 毫秒,预加载后面的视频流,保证本地起播。相比原先预加载时机是在滑动停止,当前视频起播后才预加载后面的视频,假设视频起播时间为 500 毫秒,则相比优化前,预加载时机提前了至少 800 毫秒,这是非常可观的提升。最后测试下来,也是此优化项对于缓存命中率的提升是最为明显的。

至此,关于缓存命中率的优化已经收尾,上线后大盘数据也验证了优化的效果,缓存命中率提升了 38%。

  1. 双播放器

上述的四项优化,都是业务层在有限的时间和空间里抠细节,在预加载策略上做文章,经过一系列优化手段,缓存命中率达成目标。

虽然缓存命中率完成目标了,但是核心的技术指标秒播率并没有完成,距离目标还有一定差距。这时候我们只能硬着头皮,想平时不敢想,做平时不敢做的,开始实施双播放器方案,空间换时间。双播放器方案原理比较简单,就是在当前视频起播之后,预准备下一个视频的播放器,两个播放器循环使用。

下一个视频的播放器一旦准备好,加上视频流已加载到本地,则起播非常快,几乎是视频直出的效果。但由于播放器准备更耗时,用户滑到下一个视频时,并不能百分百保证此视频的播放器已准备好。双播放器方案上线后,效果显著,200 毫秒秒播率提升 178%,400200 毫秒秒播率提升 29%。

至此,缓存命中率和秒播率圆满完成任务。

注解

1)秒播:1 秒内完成播放,后来常用于泛指起播速度;

2)秒播率:指定时间内起播的次数占全部播放次数的比例,比如 200 毫秒秒播率指的就是 200 毫秒内起播的次数占全部播放次数的比例;

3)缓存命中率:开始播放时,本地有播放视频的视频流,哪怕本地缓存的视频流只有一个字节,也认为是缓存命中,缓存命中率指的就是缓存命中的播放次数占全部播放次数的比例;

4)编码格式:又称视频编码规范,视频压缩格式。通常原始视频非常大,不方便存储和传输,所以需要将原始视频进行压缩。视频编码格式很多,这里不累述,优酷场主要的视频编码格式有 H.264 和 H.265,H.264 和 H.265 的详细区别这里也不累述,总的来说就是,H.265 的压缩效率更高,传输码率更低,视频画质也更清晰。

作者 | 阿里文娱高级开发工程师 乐想

相关 [优酷 安卓 短视] 推荐:

优酷安卓短视频秒播优化

- - InfoQ推荐
一、背景介绍,短视频关注秒播. 近几年,短视频一直处于流量的风口,各大平台纷纷涉足. 不同的业务形态对技术有不同的述求,传统长视频关注的是减少播放中的卡顿,降低用户 seek 的耗时;直播关注的是如何保证实时性;而短视频关注的是秒播. 一是因为短视频通常只有十几秒,一是短视频的消费带有很大的探索性和随机性.

XBMC 优酷插件

- iworm - Wow! Ubuntu
才知道,原来优酷还有 XMBC 的 Linux 版插件,这下看 Youku 视频就更加方便了,以下是安装方法. 1 安装 XBMC :XBMC 是支持跨平台的开源家庭多媒体娱乐中心软件,想安装最新版 XBMC 请查看此文. 2 解决乱码 : XBMC 在我的英文界面下中文会显示乱码,这是由字体原因引起的,所以先要解决此问题.

优酷网架构分享

- beralee - 博客园-首页原创精华区
记得以前给大家介绍过视频网站龙头老大YouTube的技术架构,相信大家看了都会有不少的感触,互联网就是这么一个神奇的东西. 今天我突然想到,优酷网在国内也算是视频网站的老大了,不知道他的架构相对于YouTube是怎么样的,于是带着这个好奇心去网上找了优酷网架构的各方面资料,虽然谈得没有YouTube那么详细,但多少还是挖掘了一点,现在总结一下,希望对喜欢架构的朋友有所帮助.

安卓机器人的七十二变

- hidecloud - 和邪社
首先作为一个使用安卓系统的人而言安卓的系统还有待完善,和竞争对手ios而言,安卓的稳定性安全性要差不少. 不过多亏有Android才使得智能机的市场不是苹果一家独大,绿色的机器人和白色的苹果还将继续一场旷日持久的大战. 我们今天并不是要讨论这场智能手机和平板电脑的系统大战,而是来看看,安卓机器人玩Cosplay的套图.

从安卓看专利敲诈

- yifan - wettuy's blog
近年来,有关安卓侵犯专利的新闻屡屡出现,先是甲骨文状告安卓侵犯Java专利,再到微软利用安卓授权来牟利. 本与微软毫不相干的安卓,却成为微软牟利的工具,使用安卓系统的制造商必须为微软提供相应的专利费,才能得以生存. 为了自保,三星、LG、HTC等厂家只能屈服于微软的脚下,纷纷与微软签订了专利协议. 不过,微软这种做法似乎令摩托罗拉不爽,从去年9月至今,摩托罗拉仍未向微软达成协议.

变异版安卓机器人

- amadeuz - 玩意儿
Toy King Trophy 夏季为安卓迷推出的夏季特殊版本,在安卓机器人上进行涂鸦,两个英雄两个坏蛋,电影中的形象而已,很可爱的摆设. 本店也有安卓类的东东,安卓迷可以点此查看. 速速前往评论:变异版安卓机器人. 本文原始链接:http://www.cngadget.cn/androids-andrew-bell-at-sdcc.html.

用安卓的Google翻译来聊天

- 安得米 - 谷奥——探寻谷歌的奥秘
在移动技术及网络的帮助下人们能够更轻松地获取想要的信息及和其他人沟通,但是语言不通成了一个很大的障碍. Google就一直在努力解决这个问题,希望大家能更轻松地交流沟通. 今年年初,Google在安卓版的Google翻译上添加了一个叫对话模式的实验版功能,它能让你将对话在不同语言之间来回转换. 最初只有英语和西班牙语,但从今天起它将开始支持14种语言,包括巴西葡萄牙语,捷克语,荷兰语,法语,德语,意大利语,日语,朝鲜语,国语(普通话),波兰语,俄语和土耳其语.

安卓应用商店的思考

- - 互联网的那点事
混战、杂乱、参差不齐,这是对国内安卓第三方应用商店现状的惯用表述语. 在浮躁的纷争背后,缺少了太多对应用商店本身的思量. 应用商店本身应当回归理性,思考对用户的价值、对产业的价值、对公司的价值. 谨在此分享4部分思考:应用商店的产品方向、盈利模式、入口形态,以及可能的新机会. 从目前看,主要需求是:找到自己想要的内容.

安卓4.2“果冻豆”的新特性

- - 译言-电脑/网络/数码科技
安卓4.2“果冻豆”的新特性. 在安卓4.2“果冻豆”系统中,相机操作得到了简化,使用户能更好地把注意力集中在照片本身,尽量减少其他操作元素的干扰. 距离代号为“果冻豆”的安卓4.1系统的发布仅仅只有五个月的时间,谷歌又带着相同代号的安卓4.2系统来到了人们的视线. 虽说代号不变,而且整体的用户体验只是稍作变动,但还是有不少的新特性值得人们去注意.

安卓开机自启动demo

- - CSDN博客移动开发推荐文章
context.startActivity(intent);//启动意图. manifest.xml配置. RECEIVE_BOOT_COMPLETED系统启动完成广播. DISABLE_KEYGUARD允许程序禁用键盘锁. 作者:u010794950 发表于2014-5-21 14:28:17 原文链接.