rj2345软件下载,为您提供安全的软件下载!

当前位置:首页 > 新闻资讯 > 软件资讯

播放内核如何“瘦身减负”,看此文章就够了

我要评论
分享到:
狩猎机器人 v1.0
类别:休闲娱乐大小:下载:1次
立即下载

扫描二维码,手机下载APP

优酷回放内核是一个基于流水线结构的SDK.. 优酷开发的基于优酷丰硕机动的业务逻辑,是一个高度可靠、可伸缩、跨平台的优秀回放SDK。 禁止了系统之间的差别

 然而,跨团队协作和永劫间迭代也使当前的回放内核有点“痴肥”。 除了影响用户体验外,这些问题,如内存太多,线程太多,在必定水平上限制了一些办事的实现,如短视频的多实例方案。 因此,迫切必要对内核的各个模块进行“轻量级”转换。 目标是:

 1)少的线程

 2)小内存

 3)低功耗

转型前的绘图

 使用优酷Play内核实现基于流水线的框架如下:

包含接口层,处置惩罚命令和消息陈说引擎的过滤层,透明消息,主体工作的模块层,数据下载模块以及衬着和后处置惩罚模块..

 经过梳理和测试,确认我们的回放内核使用的线程比一些开源的回放内核(如ijkplayer)多得多,内存使用和视频功耗等数据处于劣势.. 这便是为什么我们需要改动我们的回放内核。

 详细的改造进程

 我们转型的方向包罗线程,内存和功耗三个方面.. 但愿用最少的线程来实现整个播放进程,用最小的内存让播放依然流畅,占用最少的cpu资源让播放更加持久..

所采纳的策略是“加”. 按照回放进程,保留必要的线程,删除冗余线程,重用可重用线程.. 然后查看每个残剩线程,测试内存使用环境和cpu占用率是否达到预期,是否逐个查抄非常..

 螺纹精简

内核在优化之前使用了近30个线程,比其他开源播放器多得多。 有些是必弗成少的,有些是其他线程可重用的,有些是逻辑冗余,可以直接删除。 在梳理要分开哪些线程时,我们考虑播放进程需要的线程“最小召集”,此中应该包罗以下线程模块:

 引擎:用于接收接口命令和陈说内核消息;

 来源:用于数据读取和驱动管道数据反向流;

 解码器:音频和视频各一个用于音频和视频数据解码;

 花费者:一个用于同步和衬着的音频和视频;

 Hal缓冲器:用于解复用和缓存状态监视;

 用于节制下载模块并与切片分辨率模块交互;

 衬着:用于衬着打点。

 如您所见,在播放进程中必需使用九个线程。 除了预加载打点、回放质量节制和必要时与字幕相关的线程外,其他线程可以被删除。

 精简程序如下:

 1)删除过剩的过滤器

 过滤器只用于创立模块,然后是消息传输,显得有点冗余,所以可以直接删除。 将创立模块的逻辑移动到引擎预备进程中,打开引擎和模块之间的消息通道,上面的命令和下面陈说的消息不再过滤。

2)删除消息通报和时钟打点

 预优化消息上报通道比力混乱,有的直接上报引擎,有的上报消息发送器进行中转,然后上报引擎.Messenger逻辑比力冗余,所以这个线程被删除,所有消息都通过引擎上报..

 时钟打点器用作同步光阴,这不需要线程,线程作为计时器存在。 目前内核只使用一两个点的按时器,通过其他线程逻辑复用,去除对按时器的依靠,这个线程也可以去掉..

 3)删除接口命令线程和消息陈说线程

接口层添加一个线程,以便在接口超不时将发送的命令通报给内核,使其具有force stop机制。 通过多轮优化,内核触发force stop的次数要少得多,所以线程显得过剩,即使卡死,也有anr本来的死机,这个线程可以被移除..

 消息上报线程是为内核层多实例上报消息添加的,其实是通过代码复用的,这个线程没有必要,可以去掉..

 4)删除解复用线程和二次缓存线程

 内核数据采集一直是最繁琐的逻辑场所,优化前有五个线程实现这部门功能.. 优化后可保留3个,解复用线程和二级缓存线程可删除..

 5)移除预加载打点器和字幕解码模块

 预装打点器是否

 多速度算法冗余计算5)低落

 回忆创造,音频用户线程CPU消耗比音频解码器凌驾预期多得多,不相符预期,查抄创造当无法打开双速情况时,也会走双速相关操作逻辑,导致CPU异常消耗,修复前后对如下图所示:

 6)核心层实现弹幕逻辑

首先,应用层是通过视图实现的。 在数据量大的情况下,功耗受到很大的影响,甚至涌现屏幕模糊的情况。 考虑将屏幕的实现移动到内核层,内核层吸收屏幕数据实现衬着.经由验证,优化后的后屏功耗低落三分之二..

 优化后,回放运行时的平均CPU占用率低于7%(Android中端测试),1080p/90分钟的视频功耗降低到12%,比优化前高30%。 预装管理器不管有没有

 此时,播放内核比之前的优化已经年夜年夜“瘦身”. 内核的代码逻辑加倍清楚,数据传输加倍简洁高效,让介入内核开发的同学加倍存眷自己的业务自己.. 内存使用率年夜年夜下降,仅从内存角度出发,优化前两个实例的内核,此刻可以创建6个,年夜年夜拓宽上层业务逻辑的界线.. 功耗也变得更低,年夜年夜提高了用户的播放体验..

必要垂青的是,我们的业务是繁杂多变的,有许多团队介入开发,经过一段时间的版本迭代,必然会使内核变得越来越臃肿.. 所以我们必要监控每个正式版本的内存,功耗等多个纬度,发现问题当即改削,这样这些问题就不会堆集.. 内核还必要在小范围上按期从头配置,以删除不合理的代码并统一公共逻辑措置单位,以便高质量的内核能够担任..
 
展开更多

上一篇: AirPods怎么看电量,如何看电量多少

下一篇: 苹果发威了,iPad Pro双摄+激光雷达 国行6299起