爱奇艺知识播放体验优化的探索和实践
前 言
德鲁克说:未来社会最大的改变一定是会发生在知识领域。
知识付费商业形式在2014年甚至更早之前就已经开始有了,只是当时还没有内容创业的概念,没有被完全重视。到了2016年,移动互联网的成熟、短视频和直播行业爆发式增长,促使知识付费也进入了人们热烈讨论的话题中。爱奇艺知识布局最早要追溯到2012年上线的爱奇艺教育频道,并于2019年爱奇艺知识独立APP上线。
爱奇艺知识是以音视频播放为主要分发手段,注重用户体验和内容质量。而播放体验是用户产品体验的核心。相比于爱奇艺APP,爱奇艺知识有更复杂的播放交互场景:视频、音频、音频控制台、音视频浮窗等多种音视频平滑切换的场景较多,如何保证起播流畅性是一个相对复杂的技术难题。
爱奇艺知识技术团队经过不断探索和实践,在《爱奇艺知识音视频通用播放架构实践》文章介绍的播放架构基础上,总结针对性的优化方案,最终实现了多播放场景的平滑切换的极致用户体验,和秒播率37%左右的提升。本文主要针对爱奇艺知识播放体验优化方案的实现进行分享。
01
播放场景扩展
1.1 音视频播放页与音视频条间切换
为达到极致用户体验,不阻断播放,爱奇艺知识研发了音视频浮窗(简称音视频条),在播放页退出的时候仍然可以出现在当前页面下方。这个机制适用于长视频、短视频和音频播放场景;并且实现了音视频条在APP内部页面的全局露出,使用户随时随地可以对当前播放内容进行控制,同时音视频条支持任意位置的拖拽,进而保证对页面内容的无遮挡效果。不仅如此,基于此架构还可以非常低的成本对音视频浮窗的样式做随时变更,以适应不同的产品体验。
为了实现音视频播放页与音视频条之间的无缝切换,也为了实现音视频条独立起播的能力,我们使用了功能控制器,即针对需要使用播放器的业务场景封装播放控制器,在这个控制器里面会存储播放器所需的必要数据,如选集数据等,同时这个控制器里面也会处理共性的播放器delegate事件,如统计等,这样也就可以更好的实现不同场景间切换的无间断播放,目前使用的播放器控制器有两种类型,即长视频播放器控制与短视频播放器控制器。
使用方式如下图所示:
1.2 音视频前后台自动切换
为了给用户更连贯的视听体验,我们添加音视频前后台自动切换的功能,即在用户开启允许视频后台继续播放的前提下,在APP进入后台模式后我们会主动将视频转为听音模式,使得播放内容不间断,用户可以继续听视频内容,同时还可以避免不必要流量的浪费。在APP切换到前台后会自动转换为视频模式,用户依旧可以继续观看视频内容,整个切换的流程不会中断,视听的体验是连贯的。
1.3 控制台的对接
由于爱奇艺知识有大量的音频课程,并且视频课程也是绝大部门都是支持听音模式的功能,为了形成更好的音频播放功能闭环,我们在全新音频播放器的基础上,对接(iOS)/添加(Android)的控制台模块,这样可以使得在手机不解锁的前提下,实现对播放内容控制,满足用户更多场景的功能体验需求,实现音频播放功能的闭环。
02
起播流程优化
由于爱奇艺知识播放内容含有合作方的内容,部分合作方并没有把相应内容源文件上传至爱奇艺统一内容后台,因此也就需要使用对应合作方提供的SDK或者通过知识后台代理获取三方内容的播放地址进而实现播放。目前爱奇艺知识的内容不仅包含爱奇艺内容,还包含了多种合作方内容,每种播放源的播放使用相应的播放器来实现,目前播放器使用的主要架构图如下:
从上图可以看出知识播放器对下需要对接多种播放SDK,对上需要输出4种播放UI(音频UI、长视频UI、短视频UI、视频浮窗UI)和相应播控、满足多种播放场景功能需求,同时还会有多种音视频交叉和功能切换的复杂场景。
由于知识播放器需求的多样性,也就注定了架构和起播流程的复杂性,优化之前先搞清楚起播流程是什么样的,下图简述了起播的主要流程。
2.1 分 析
从起播流程图不难看出,整个流程大体可分为3个大的阶段,即:起播参数的获取、播放器的选择与创建、播放地址获取。
起播参数的获取:上图所示多个参数(第一排参数,后称起播参数),如果在上级页面能够获取到的话,即跳转播放页的时候就可以准备好,便可以直接在起播参数模型转换之后直接走起播流程了。即使上级页面没有传递起播参数,但本地若能有一个可以补全参数的模块的话依旧可以走快速起播流程,否则需要调用一次接口,待参数补全后才能走起播流程,本次接口请求耗时是可以优化的。故此阶段的参数获取前置对于优化来讲尤为重要。
播放器的选择与创建:获取到起播参数之后,会根据合作方标识选择需要使用的播放器,走相应的起播流程,同时如若可以减少播放器UI和相应SDK创建次数的话也是可以实现优化的效果。此阶段的也是可以优化的。
播放地址获取:得益于爱奇艺APP播放器体系的优势,爱奇艺内容播放地址获取已经形成了一套完善的接口调用机制,适用于所有业务线,不需要做针对性优化,合作方内容播放地址获取由知识后端团队代理。此阶段的接口请求次数已经减少到一次,响应速度是可以得到保证的,三方内容播放地址的获取依赖于三方接口的响应速度。由于播放地址获取的接口没有多少优化空间,但我们可以考虑把更多的网络资源让给这个地址获取阶段。
2.2 优化方向
2.2.1 第一阶段(起播参数的获取)优化
a. 起播参数前置
由第一阶段的分析可以看出,如果进入播放页之前,所有需要的起播参数都已经由外部入口提供了,就避免了补全参数所需的网络接口请求,可以有效提升起播速度。由于此项优化涉及的入口较多,知识各个数据接口都针对起播做了统一添加处理。b. 本地播放记录模块的添加
为了实现更高的秒播率、实现多种内容源播放记录的读取、同时也为了更好的存取音频播放场景的播放记录,爱奇艺知识开发了本地播放记录模块,每次在起播之前都会做本地播放记录模块的查询,可以根据视频ID查询到本地存储的播放记录数据(不区分内容提供方),如若命中即可获取到播放所需全量参数,走起播流程。知识播放记录模块还分别做了内存和外存的存储方式,内存的合理化使用可以提升读写的效率,降低读取所需耗时。上述两条方案的使用后秒播率得到了19%左右的提升,总体来说收益还是比较明显的
2.2.2 第二阶段(播放器的选择与创建)优化
a. 音视频播放器统一
爱奇艺知识统一播放器的开发可以针对自身的需求进行实现,使得功能上线的灵活性更强,同时也使得播放器功能开发更加具有针对性,实现了功能级别的“瘦身”,减少了不必要系统资源的消耗。知识内部各类型播放器是单例存在的形式,即单次生命周期内只需要创建一次,这样也可以大大减少创建创建的次数与相应耗时。知识播放器的自行开发同时也实现了多播放器UI与共性功能的复用,即无论使用哪种播放器进行播放给用户呈现的观影体验是无差别的,不同类型播放器的切换间亦是如此,进而实现了观看窗口的统一与切换的无感。b. 播放器UI创建优化上述两条方案的使用后秒播率得到了7%左右的提升
2.2.3 第三阶段(播放地址获取)优化
a. 预加载(起播第三阶段)连播预加载的实质就是提前加载即将用到或者即将可能用到的网络资源,减少当次起播获取播放资源的网络开销,进而实现更高的秒播率,给用户更流畅的观看体验。播放器支持预加载下一集的连播,在当前视频播放到最后20秒时播放器会通过相应delegate api去业务层取需要预加载的播放item,拿到item之后会预加载一段播放资源,进而提升连播的开播速度。在当前视频播放完成后会通过相应的delegate api 获取需要播放的item,确认预加载的视频是否与此次数据一致,确认一致后会直接使用已经加载的播放资源直接起播。此方案的实现使得秒播率有了4%左右的提升
b. 开播前系统资源分配
前面讲了播放地址获取需要较大的网络开销,因此在调用起播后,我们尽量把更多的系统网络资源让给播放器,方案是:进入播放页后,在收到相应回调或者达到最大等待阈值后,再进行业务接口的请求与页面的绘制,提升播放器开播速度。此方案的实现使得秒播率有了7%左右的提升
03
总 结
秒播率的提升,顾名思义就是提升一秒内开播的占比,优化的空间也都是毫秒级的,本文从起播流程的参数准备、播放器创建与选择、播放地址获取3个阶段详细分析了优化关键节点,并针对性的提出了优化方法,使得爱奇艺知识APP的播放秒开率大幅提升,实现了更加流畅的播放体验。
爱奇艺知识团队一直把服务用户,让更多有知识获取需求的人能更便捷、更好的获取到优质的内容和观看体验作为自我鞭策的基准,播放场景的拓展也为满足了用户多样的观看和收听体验,在未来爱奇艺知识团队还会持续完善和扩展播放场景,旨在提升使用的便捷性与多样性。在不断创新和优化使用体验,力争为用户提供更优质的视听体验。
也许你还想看