斗鱼直播伴侣直播帧数有点低 怎么调(斗鱼直播伴侣帧率跟什么有关)
本文主要介绍如何调整宇都 的合伙人 s直播有点低(宇都 相关的合作伙伴),下面一起看看如何调整宇都 的合伙人 s直播有点低(宇都 相关的合作伙伴)相关资讯。
希望这篇文章能让你对卡顿这个问题有一个相对整体的看法,认识到什么是卡顿,卡顿产生的原因,卡顿的分类,卡顿的优化以及一些经验积累,从而有针对性的解决app流畅问题。接下来将从以下五个方面进行阐述:
卡顿是什么?
卡顿为什么会发生?
如何评价卡顿
如何优化卡顿
加入我们
1.卡顿卡顿是什么?顾名思义,用户 s体感接口不流畅。我们知道手机的屏幕图像是以一定的频率刷新的。理论上24帧的屏幕更新可以让人感觉连贯。但其实这只是针对普通视频。对于一些互动性强或者比较敏感的场景,比如游戏,至少需要60帧,30帧的游戏会让人感觉不舒服;位移或者30帧的大尺度动画会有明显的顿挫感;如果手办动画能达到90帧甚至120帧,会让人觉得很细腻,这也是最近厂商重点关注高刷卡的原因。
对于用户来说,从体感的角度来看,卡顿大致可以分为以下几类:
这些体验对用户来说可以说是非常不好的,甚至会造成感官上的烦躁,进而导致用户不愿意在我们的app停留。可以说流畅的体验对用户来说是非常重要的。
2.用户 s体感卡顿问题发生,往往是复合问题。为了重点,我们暂时只考虑真正的丢帧卡在这里。
2.1 vsync,可以 不可避免,我们通常说的屏幕刷新率是60帧,所有操作都需要在16ms内完成,避免卡顿。但这里有几个基本问题需要澄清:
为什么是16ms?你需要在16毫秒内完成什么?系统如何尽力保证在16ms内完成任务?如果没有在16ms内完成,一定会造成卡顿吗?让 让我们在这里回答第一个问题:为什么是16ms?早期的android没有vsync机制,cpu和gpu的配合也比较混乱,这也造成了著名的撕裂问题,即cpu/gpu直接更新正在显示的屏幕缓冲区,导致画面撕裂。后续的android引入了双缓冲机制,但是缓冲的切换也需要一个更合适的时间,就是屏幕扫描完最后一帧之后的时间,这也是引入vsync的原因。
以前一般的屏幕刷新率是60fps,所以每个vsync信号的间隔是16 ms,但是随着技术的变化和厂商对流畅度的追求,越来越多的90fps和120fps的手机问世,相应的间隔变成了11ms和。8毫秒.
现在有了vsync,谁在消费vsync?实际上,android中的vsync有两个消费者,对应两种类型的vsync信号,即vsyncapp和vsyncsf,也对应上层视图绘制和surfaceflinger的合成。具体我们接下来会详细说。
这里有一些有趣的地方。有些厂商会有vsync偏移的设计,app和sf的vsync信号之间存在偏移,这也在一定程度上使得app和sf的协更好。
2.2查看和查看。;■流浪生活在谈下一部分之前,引入一个话题:
屏幕上究竟是如何显示视图的?
我们一般比较了解视图渲染的三个过程,但是视图的渲染远不止这些:
在这里,它的特点是一个通用的硬件加速过程。
vsync调度:很多同学的一个认知误区是,每16ms就会有vsync,但其实vsync是需要调度的,没有调度就不会有回调;消息调度:主要是doframe的消息调度。如果消息被屏蔽,会直接造成堵塞;输入处理:触摸事件的处理;动画处理:动画师动画执行和渲染;视图处理:主要是视图相关的遍历和三大流程;实现三大流程:测量、布局和绘图:视图;显示列表更新:查看硬件加速后的drawopopengl指令转换:将绘图指令转换成opengl指令;指令缓冲交换:opengl指令交换到gpu执行;gpu处理:gpu对数据的处理过程;层合成:表面缓冲合成屏幕显示缓冲的过程;栅格化:矢量图转换成位图;显示:显示控制;缓冲区切换:切换屏幕显示的帧缓冲区;google将这个过程分为:其他时间/vsync延迟、输入处理、动画、测量/布局、绘图、同步和上传、命令问题、交换缓冲区。也就是我们常用的gpu严格模式,其实道理是一样的。至此,我们已经回答了第二个问题:16ms需要完成什么?
准确来说,这里还可以进一步细化:app端数据的制作在16ms内完成;在16 ms内完成sf层的合成
视图的视觉效果是通过这整个复杂的环节一步步展现出来的。有了这个前提,就可以断定以上任何一个环节都会卡死。
2.3生产者和消费者让 让我们回到垂直同步的话题。消费vsync的两方是app和sf,其中app代表生产者,sf代表消费者,他们交付的中间产品是surface buffer。
更具体的说,生产者大致可以分为两类,一类是以window为代表的页面,也就是我们平时看到的视图树;另一类是以视频流为代表的可以直接与surface交换数据的源,比如摄像头预览。
对于一般的生产者和消费者模型,我们知道会有相互阻断的问题。比如生产者快而消费者慢,或者生产者慢而消费者快,那么整体速度就会慢,资源就会浪费。所以体现了vsync的协和双缓冲甚至三缓冲的作用。
思考一个问题:缓冲区越多越好吗?什么?;过多缓冲的问题是什么?答案是会造成另一个严重的问题:滞后,响应延迟。
在这里结合生活观,我们可以把这两个过程结合起来,使我们的视角更高:
2.4机制保护在这里,让 让我们来回答第三个问题。从系统的渲染架构来看,机制保护主要包括几个方面:
vsync机制的协作;多缓冲设计;表面的提供;同步屏障的保护;硬件绘图支持;支持渲染线程;gpu合成加速;这些机制的保护在系统层面最大程度上保证了app体验的流畅性,但是它可以 不能帮助我们彻底解决停滞的问题。为了提供更流畅的体验,一方面可以加强系统的机制保护,比如fwatchdog;另一方面,需要从app的角度出发,管理应用中的卡顿问题。
2.5看看堵塞的原因经过上面的讨论,我们得到了堵塞分析的一个核心理论支持:渲染机制中任何异常的流量过程都会引起堵塞。
那么,让我们 让我们逐一分析一下,看看是什么原因造成了堵塞。
2.5.1渲染进程的vsync调度:这是起点,但是调度进程会经过线程切换和一些委托逻辑,可能会造成卡壳,但是一般可能性比较小,我们几乎无法介入;消息调度:主要是多帧消息的调度,属于普通的handler调度。如果此调度被其他消息阻塞,将直接导致所有后续流程无法触发。这里直播建立了一个fwtachdog机制,可以通过优化消息调度达到插帧的效果,这样,界面更流畅;输入处理:输入是vsync调度中执行的第一个逻辑,主要处理输入事件。如果有大量的事件堆积或者在事件分发逻辑中加入大量耗时的业务逻辑,那么当前帧的时长会被放大,导致卡顿。tik tok基础技术专业学生也尝试了事件抽样方案,减少了对事件的处理,取得了良好的效果;动画处理:主要是动画师的动画更新。同样,动画太多,或者动画更新存在耗时的逻辑,也会导致当前帧的渲染卡顿。这个问题其实是通过降低动画的帧数和复杂度来解决的;视图处理:主要是下三个流程。过度绘制、频繁刷新和复杂的视图效果是这里卡顿的主要原因。比如我们通常所说的降低页面级别,主要就是解决这个问题;measure/layout/draw:视图渲染的三大流程涉及遍历和高频执行,所以这里涉及的耗时问题会被放大,比如we can 不要在draw,can t新对象,等等;displaylist的更新:这里主要是canvas和displaylist的映射。一般不会出现卡顿问题,但可能会出现映射失败导致的显示问题;opengl指令转换:这里主要是把canvas的命令转换成opengl的命令,一般没有问题。但是,这里有一点可以探讨。会不会有一种特殊的canvas指令,转换后的opengl指令消耗很大,导致gpu的损耗?有知识的同学可以讨论一下;缓冲区交换:这个主要是指opengl指令集到gpu的交换,一般和指令的复杂程度有关。一个有意思的事情是,它曾经作为在线采集gpu指标的数据源,但由于多重缓冲因素导致数据准确性不足而被放弃;gpu处理:顾名思义,这是gpu对数据的处理,耗时主要与工作量和纹理复杂度有关。这就是为什么我们可以减少gpu负载来帮助减少堵塞;图层合成:这主要是图层合成的工作,一般是不可访问的。偶尔会发现sf s vsync信号延迟,导致缓冲不能及时供给,原因暂时不清楚;光栅化/显示:这里暂时忽略底层系统的行为;缓冲区切换:主要是屏幕的显示,这里缓冲区的多少也会影响帧的整体延迟,但这是系统行为,不能干涉。2.5.2视频流不仅仅是上述渲染过程造成的。卡顿,还有一些其他因素,典型的就是视频流。
渲染卡顿:主要是textureview渲染,textureview和window共用一个面,每一帧都需要一起渲染,互相影响。ui卡顿会造成视频流卡顿,视频流卡顿有时会造成ui卡顿;解码:解码主要是将数据流解码成surface可消耗的缓冲数据,这是除了网络之外最重要的耗时点。现在我们一般都是用硬件解码,比软的解决方案好很多。但是帧的复杂度,编码算法的复杂度和分辨率也会直接导致解码时间的拉长。opengl处理:有时候解码后的数据会被处理两次,耗时的话会直接导致渲染卡顿;网络:我赢了 这个就不赘述了,包括dns节点优化,cdn服务,gop配置等。推流异常:这属于数据源的问题,所以我们将重点放在用户 暂时不讨论这个问题。系统负载
内存:内存不足会直接导致gc甚至anr的增加,这是一个不可忽视的因素;cpu:cpu对卡顿的影响主要在于帧率以vsync的到达时间为起点,doframe s完成作为终点,这是每一帧的渲染时间。同时,利用渲染时间/刷新率可以得到每次渲染丢失的帧数。平均fps =一段时间内渲染帧数* 60/(渲染帧数,丢失帧数)
垂直同步
暂停_视频_用户界面_速率
总滞留率
(ui捕捉持续时间、流捕捉持续时间)/采集持续时间
垂直同步
停止_用户界面_速率
用户界面停滞率
[3帧] ui停滞持续时间/采集持续时间
垂直同步
暂停_视频_速率
流量计费率
流动堵塞持续时间/采集持续时间
垂直同步
stall _ ui _ slight _ rate
轻微卡住率
[36]帧丢失时长/采集时长
垂直同步
stall _ ui _ medium _ rate
中等滞留率
[713]帧丢失时长/采集时长
垂直同步
失速_ ui _严重_速率
严重卡住率
[14]帧丢失时间/采集时间
垂直同步
3.2离线指示器diggo是bytes开发的开放式开发调试工具平台,是集 评估、分析和调试。内置性能评测、界面分析、卡顿分析、内存分析、崩溃分析、实时调试等基础分析能力,可为产品开发阶段提供有力帮助。
指数
意译
计算
数据源
每秒传输帧数
机会渲染帧速率
数据采集时间段中的实际渲染帧/数据采集间隔。
sf gfxinfo
rfps
相对帧速率
在数据采集时间段内,(理论全帧实际丢帧)/数据采集间隔
gfxinfo
口吃
卡顿率
卡顿比。jank发生时,帧的累计持续时间与间隔持续时间的比率。
芬兰
扬基计数
普通滞留时间
当单帧的绘制时间长于movie_frame_time时,janky计一次。
芬兰
大詹基伯爵
严重卡住时间
单帧画图时间超过3*movie_frame_time时,算大janky一次。
芬兰
4.如何优化卡顿4.1.1在线工具名称中常用的工具?
意译
形式包慢函数
与灰度包相比,过滤更多监控,性能损失更小,但需要手动打开,单点反馈不能预留反馈位。
灰色包慢速功能
灰度上开启全量,对于版本间的数据对比和解决新卡顿问题更有效。
anr
anr的及时反应和处理
4.1.2离线工具的工具名称
评论
系统跟踪
我赢了。;暂时不要谈细节
佩尔费托
systrace的增强版,可定制,可以参考官方文档。
瑞亚
最常用最好的工具就是方便找到下一个问题和归属。和perfetto是绝配。有兴趣的同学可以去github搜一下btrace。
仿形铣床
androidstudio自带工具,方便,但是数据精度不高。
sf / gfxinfo
主要用于脚本和工具。
4.2这里常见的思路主要是针对ui和ui/流交互的停滞。
对于ui卡顿,我们是无敌的卡顿 优化的8板axe:
离线代码;减少处决数量;异步;分手;预热;多路复用;方案优化;硬件加速;总的想法是 唐 能不做就不做,能少做就少做,能早做就早做,能晚做就晚做,能让别人做就让别人做,能做10次就只做一次。如果它 实在不行,那就考虑自己做。
以下是一些常见的优化思路。注意,这一定不是全部。如果有其他好的优化思路,可以一起交流。
4.3已经做的一些事情4.3.1解决ui堵塞直播造成的流量堵塞是surfaceview切换的一个长期专项,分多个阶段逐步落地直播。场景涵盖秀场直播、聊天室、游戏直播、电商直播、媒体直播等。,并且在业务渗透率和停留时间方面有比较。显著的好处,同时功耗的好处也相当可观。
这里有一个取舍问题,surfaceview的兼容性问题pk带来的收益能否拉平。一般来说,业务场景越复杂,收益越大。
4.3.2消息调度fwatchdog的解决方案基于messagequeue的调度策略和同步屏障原理,以平均帧时间为阈值判断丢帧后主动将同步屏障插入messagequeue,以保证渲染异步消息和多帧的优先执行,达到渲染插入帧的效果,同时具备anr自动恢复同步屏障的能力,保证分手的有效性。
所以fwatchdog和daisan是很好的搭档,可以产生1 1大于2的效果。
4.3.3减少执行次数一个典型的应用场景是滑动场景的gc抑制,它可以显著提高用户 大起大落的经历。这个场景相信每个业务都会存在,尤其是遍历逻辑很多,优化效果明显。
4.3.4代码离线一些旧的框架,没用的逻辑,存在感低的代码都可以离线。在这里,基本业务是强相关的,所以我赢了 我不能给出具体的例子。
4.3.5解决耗时函数(散点/异步),第一步是散点。直播做了大量的任务拆分分散,可以减轻当前渲染帧的耗时压力,第二步可以结合fwatchdog实现插帧的效果。其实还可以控制任务执行的优先级,包括插队等。总之,合理调度messagequeue是很有必要的。
异步的使用也相对较多。一个掩埋点日志的框架,以及一些inflate的加载,都可以使用异步来解决卡顿问题。
4.3.6预热直播提供预热框架,允许直播内部的一次性开销逻辑在主机端执行,并提供完整的队列优先级管理、同步异步管理和任务生命周期管理,减少直播内部首次加载的卡顿问题。
4.3.7硬件加速提高硬件的运行性能,如cpu频率、gpu频率、线程绑定到大核以及网络相关调优,从底层提升app的运行体验。
5.加入我们吧。直播客户端技术团队是一个集体验优化、平台搭建、跨端、端智能、稳定于一体的综合性团队。团队氛围不错,技术成长很快,有足够的自由度发挥自己的特长,也面临着更多样的挑战。每一行代码都会让亿万用户体验更好!邀请你加入我们。对这些方向感兴趣的同学可以过来聊聊。内部链接是 链接 。
了解更多如何调整宇都 的合伙人 s直播有点低(宇都 相关的合作伙伴)相关内容请关注本站点。