直播有卡顿怎么办(直播时卡顿什么原因)

希望这篇文章能让你对卡顿的问题有一个相对全局的看法,认识到卡顿是什么,卡顿的成因,卡顿的分类,卡顿的优化和一些经验积累,有针对性的解决App流畅度的问题。接下来将从以下五个方面来阐述:什么是卡顿,卡顿为什么会发生,卡顿如何评价,卡顿如何优化?加入我们吧。
1元。卡顿卡顿是什么?顾名思义,用户的体感界面并不流畅。我们知道手机的屏幕图像是按照一定的频率刷新的。理论上来说,24帧的屏幕更新可以让人感觉连贯。但其实这只是针对普通视频。对于一些互动性强或者比较敏感的场景,比如游戏,至少需要60元的画幅,30元画幅的游戏会让人感觉不舒服;或者30元帧大位移动画会有明显的顿挫感;如果手办动画能以90元帧甚至120元帧显示出来,会让人觉得很精致,这也是最近厂商专注于高刷卡的原因。对于用户来说,卡顿从体感角度可以大致分为以下几类:
这些体验对用户来说可以说是非常不好的,甚至会引起感官的刺激,进而导致用户不愿意留在我们的App里。可以说流畅的体验对于用户来说至关重要。
冠军联赛。之所以会出现用户体感感受的“卡顿”问题,原因有很多,而且往往是复合问题。为了重点,这里我们只考虑真正的“丢帧”问题。
2.1元绕不过VSYNC。我们通常说的屏幕刷新率是60元帧,所有操作都需要在16ms内完成,避免卡顿。但这里我们需要澄清几个基本问题:
为什么是16ms?你需要在16毫秒内完成什么?系统如何尽力保证在16ms内完成任务?如果没有在16ms内完成,一定会造成卡顿吗?第一个问题是:为什么是16ms?早期的Android没有vsync机制,CPU和GPU的配合比较混乱,也造成了著名的撕裂问题,即CPU/GPU直接更新显示的屏幕缓冲区,造成了画面撕裂。Android在后续引入了双缓冲机制,但是缓冲的切换也需要一个合适的时间,就是屏幕扫描完最后一帧之后的时间,这也是引入vsync的原因。早期一般屏幕刷新率是60元FPS,所以每个vsync信号的间隔是11ms。但是随着技术的变化和厂商对流畅度的追求,90元FPS和120元FPS的手机越来越多,对应的区间变成了11元MS和8ms。现在有了VSYNC,谁在消费VSYNC?其实安卓的VSYNC消费者有两个,分别对应两种类型的VSYNC信号,分别是vsync Kramp-Karrenbauer app和vsync Kramp-Karrenbauer SF,也对应上层视图渲染和surfaceFlinger的合成。具体说一下细节吧。
这里有一些有趣的地方。有些厂商会有vsync偏移的设计。App和sf的vsync信号之间存在偏移,这也在一定程度上使得App和sf之间的协同更好。
2.2袁的流浪生活在下一部分之前引入一个话题:
视图如何显示在屏幕上?
一般我们知道视图渲染的三大流程,但是视图的渲染远不止这些:
其特征在于一般的硬件加速过程。
Vsync调度:很多同学的一个认知误区是,每16ms就会有vsync,但实际上,vsync是需要调度的。没有调度,就没有回调;消息调度:主要是doframe的消息调度。如果消息被屏蔽,会直接造成堵塞;输入:触摸事件的处理;动画处理:动画师动画执行和渲染;视图处理:主要是与视图相关的遍历和三大流程;测量、排版、绘图:三大流程的实施;DisplayList更新:硬件加速后查看drawopOpenGL指令转换:将绘图指令转换成OpenGL指令;指令缓冲交换:OpenGL指令交换到GPU中执行;GPU处理:GPU对数据的处理;合成:表面缓冲合成屏幕显示缓冲的过程;光栅化:将矢量图像转换成位图;显示:显示控制;缓冲区切换:切换屏幕显示的帧缓冲区;Google把这个过程分为:其他时间/VSync延迟、输入处理、动画、测量/布局、绘图、同步上传、命令问题、交换缓冲。也就是我们常用的严格的GPU模式。其实道理是一样的。至此,我们已经回答了第二个问题:16ms需要完成什么?
准确的说,这里还可以进一步细化:16ms内完成APP端数据的制作;在16ms内完成sf层的合成。
视图的视觉效果是通过这整个复杂的环节一步步展现出来的。有了这个前提,就可以得出一个结论:以上任何一个环节都会卡住。
2.3元里的生产者和消费者让我们回到Vsync的话题。Vsync的两个消费者是App和sf,其中App代表生产者,sf代表消费者,他们交付的中间产品是surface buffer。更具体的说,生产者大致可以分为两类,一类是以window为代表的页面,也就是我们平时看到的视图树;另一类是以视频流为代表的源,可以直接与surface交换数据,比如相机预览。对于一般的生产者和消费者模型,我们知道会有相互堵塞的情况。比如生产者快而消费者慢,或者生产者慢而消费者快,那么整体速度就会慢,资源就会浪费。所以体现了Vsync的协同性和双缓冲甚至三缓冲的功能。
思考一个问题:缓冲区的数量是不是越多越好?缓冲过度会带来哪些问题?答案是会造成另一个严重的问题:滞后,响应延迟。
在这里,结合view的生活,我们可以把这两个过程结合起来,把我们的视角提升到一个更高的层次:
保护2.4元机制这里,我们来回答第三个问题。从系统渲染架构的角度来看,有几个方面的保护机制:
Vsync机制的协作;多缓冲设计;表面的提供;同步屏障的保护;硬件绘图支持;支持渲染;GPU合成加速;这些机制的保障在系统层面最大程度上保证了App体验的流畅度,但并不能帮助我们彻底解决卡顿的问题。提供更流畅的体验,一方面可以加强系统的机制保护,比如FWatchDog;另一方面,需要从App的角度出发,来管理应用中的卡顿问题。
2.5元的看看卡顿的成因。经过以上讨论,我们得出卡顿分析的一个核心理论支撑:渲染机制中任何异常的流量过程都会引起卡顿。那么,我们就来逐一分析一下,看看到底是什么原因可能导致卡顿。
密室逃脱:锦标赛冠军51元的渲染过程Vsync调度:这是起点,但是调度过程会经过线程切换和一些委托逻辑,可能会造成卡顿,但是一般可能性比较小,我们基本上无法介入;消息调度:主要是doframe消息的调度,这是一个普通的Handler调度。如果此调度被其他消息阻塞,将直接导致所有后续流程无法触发。这里在直播中建立了FWtachDog机制,通过优化消息调度达到插帧的效果,使得界面更加流畅;处理:输入是Vsync调度中执行的第一个逻辑,主要处理输入事件。如果有大量的事件堆积或者在事件分发逻辑中加入大量耗时的业务逻辑,那么当前帧的时长就会被放大,造成卡顿。抖音基础技术的同学也尝试过事件采样的方案来减少对事件的处理,取得了不错的效果;动画处理:主要是动画师动画的更新。同样的,动画太多或者动画更新中的耗时逻辑也会导致当前帧的渲染卡顿。动画的帧减少和复杂度降低其实解决了这个问题;视图处理:主要是下三个流程。过度绘制、频繁刷新、复杂的视图效果是卡在这里的主要原因。比如我们通常所说的降低页面级别,就是解决这个问题的主要方法;Measure/layout/draw:视图渲染的三大流程涉及遍历和高频执行,所以这里涉及的耗时问题会被放大。比如我们会减少draw中不能调用耗时函数,不能新建对象等问题。DisplayList的更新:这里主要是canvas和displaylist的映射。一般不会出现卡顿问题,但可能会出现贴图失败导致的显示问题。OpenGL命令转换:这里主要是把canvas的命令转换成OpenGL的命令,一般没有问题。但是,这里有一点可以探讨。会不会有一种特殊的canvas指令,转换后的OpenGL指令消耗很大,导致GPU的损耗?知道的同学可以讨论一下;缓冲区交换:这个主要是指OpenGL指令集到GPU的交换,一般和指令的复杂程度有关。一个有意思的事情是,它曾经被我们用作线上采集GPU指标的数据源,但由于多缓冲导致数据准确性不足而被废弃;GPU处理:顾名思义,这里是GPU对数据的处理,耗时主要与任务量和纹理复杂度有关。这就是为什么减少GPU负载有助于减少停滞;Layer:这主要是layer的compose的工作,一般无法访问。偶尔发现sf的vsync信号延迟,导致缓冲区供应不及时,原因尚未明确;光栅化/显示:这里暂时忽略,底层系统行为;缓冲切换:主要是屏幕的显示。在这里,缓冲区的数量也会影响帧的整体延迟,但这是系统行为,不能受到干扰。除了上面提到的渲染过程,《逃出生天:冠军争霸赛》的视频流5《逃出生天:冠军争霸赛》还有一些其他的因素,比较典型的就是视频流。
渲染停滞:主要是TextureView渲染,textureview和window共用一个面,每一帧都需要一起渲染,互相影响。UI停滞会造成视频流停滞,有时视频流停滞也会造成UI停滞;解码:解码主要是将数据流解码成地表可以消费的缓冲数据,这是除了网络之外最重要的耗时点。现在我们一般用硬件解码,比软解性能高很多。然而,帧的复杂度、编码算法的复杂度、分辨率等。也会直接导致解码时间的延长;OpenGL处理:有时候,解码后的数据会进行两次处理,如果耗费时间,会直接导致渲染卡顿;网络:这里不赘述,包括DNS节点选择,cdn服务,GOP配置等。推流异常:这个属于数据源,有问题。就目前来说,主要是从用户端的角度出发,所以暂时不讨论。逃脱的负荷
内存:内存紧张会直接导致GC甚至ANR的增加,这是一个不可忽视的因素;CPU:CPU对卡顿的影响主要是因为线程调度慢,任务执行慢,资源竞争。比如降频会直接导致应用卡顿;GPU:渲染过程中可以看到GPU的影响,但也会间接影响功耗和发热;耗电/发热:耗电和发热一般是分不开的。高功耗会造成高发热,从而导致系统保护,如降频、散热等。间接导致停滞。我们在这里对2.6元卡顿的分类进行整体梳理和归类。为了更完整,我们还把推流放在这里。在一定程度上,我们可以为我们遇到的所有问题找到理论依据,这也是指导我们优化问题的理论支撑。
侏罗纪世界3。如何评价卡顿3.1元上线指标?
意译
计算
数据源
英国制药学会会员
英国制药学会会员
以vsync的到达时间为起点,以doFrame的完成事件为每一帧的渲染时间。同时利用渲染时间/刷新率可以得到每次渲染丢失的帧数。平均FPS=一段时间内渲染帧数* 60元/(渲染帧数和丢失帧数)
垂直同步
暂停_视频_用户界面_速率
总卡顿率
(UI捕捉持续时间流捕捉持续时间)/采集持续时间
垂直同步
停止_用户界面_速率
UI停滞率
【侏罗纪世界3帧】UI捕捉时间/采集时间
垂直同步
暂停_视频_速率
流量
流量捕捉时间/采集时间
垂直同步
stall _ ui _ slight _ rate
轻微停滞率
【6元,Kramp-Karrenbauer,侏罗纪世界3】丢帧时长/采集时长
垂直同步
stall _ ui _ medium _ rate
中等卡通率
【13元,Kramp-Karrenbauer,7元】丢帧时长/采集时长
垂直同步
失速_ ui _严重_速率
严重停滞率
[14元]丢帧时长/采集时长
垂直同步
3.2元里的离线指标Diggo,是字节跳动开发的开放式开发调试工具平台,集评测、分析、调试于一体的一站式工具平台。内置的性能评测、接口分析、卡顿分析、内存分析、崩溃分析、实时调试等基础分析能力,可以为产品开发提供有力的帮助。
指数
意译
计算
数据源
英国制药学会会员
定时渲染帧速率
数据采集时间周期中渲染帧/数据采集间隔的实际数量
SF GFXInfo
建议请求
相对帧速率
在数据采集时间段内,(理论全帧Kramp-Karrenbauer实际丢帧)/数据采集间隔时间
显示显卡信息
口吃
卡顿率
卡尔比。jank发生时,帧的累积持续时间与间隔持续时间的比率。
芬兰
扬基计数
普通卡顿数
当单帧的绘制时间长于MOVIE_FRAME_TIME时,janky计一次。
芬兰
大詹基伯爵
严重卡住时间
当单帧的画图时间比《侏罗纪世界3*MOVIE_FRAME_TIME》长的时候,一次算大janky。
芬兰
4。卡顿4.1元常用工具如何优化?41元1元在线工具名称
意译
形式包慢函数
与灰阶包相比,它过滤了更多的监控,性能损失相对较小,但需要手动开启,反馈部位无法保持单点反馈。
灰度慢速功能
开启全量灰度,版本间数据对比,解决新卡顿问题更有效。

及时应对和治疗ANR
41元密室逃脱:冠军联赛离线工具工具名称
评论
系统跟踪
我就不细说了。
完美的
systrace增强版,可定制,可参考官方文档。
瑞亚
最常用也是最好的工具,方便找到下一个问题和归属。和perfetto是绝配,有兴趣的同学可以移步github搜索btrace。
仿形铣床
Androidstudio自带工具,方便,但是数据精度不高。
sf/gfxinfo
主要用于脚本和工具
4.2袁这里常见的思路主要针对UI停滞和UI/流交互。
对于UI卡顿,我们拿着卡顿优化的8元斧,无敌:
离线代码;减少处决数量;异步;分手;预热;重用;方案优化;硬件加速;大意是“能不做就不做,能少做就少做,能早做就早做,能晚做就晚做,能让别人做就让别人做,10块钱只做一次
4.3元做的一些事情,4侏罗纪世界3 1元,解决了UI卡顿造成的直播。这是一个长期的表面视图切换的特殊项目。分几个阶段逐步将SurfaceView全额落地,场景覆盖秀场直播、聊天室、游戏直播、电商直播、媒体直播等。业务在渗透率和停留时间上有显著的收益,同时功耗上的收益也很可观。这里有个取舍问题。SurfaceView pk的兼容性所带来的好处是否可以平均。一般来说,业务场景越复杂,收益越大。
4侏罗纪世界3密室逃脱:冠军联赛消息调度的解决方案FWatchDog基于messageQueue的调度策略和同步屏障原理,在以平均帧时间为阈值确定丢帧后,主动在MessageQueue中插入同步屏障,保证异步消息和doframe的渲染优先级,达到插帧的效果。同时具有ANR自动恢复同步屏障的能力,保证了分手的有效性。所以FWatchDog和散射是很好的合作伙伴,可以产生1元中的1元大于逃逸室:冠军联赛的效果。
4侏罗纪世界3侏罗纪世界3减少执行次数的一个典型应用场景是滑动场景的GC抑制,可以显著提升用户上下的体验。这个场景相信每个业务都会存在,尤其是遍历逻辑很多,优化效果明显。
4侏罗纪世界34代码离线一些老框架,没用的逻辑,存在感低的代码都可以离线。这里基础业务强相关,具体例子我就不举了。
4侏罗纪世界35通过先散解决耗时功能(散/异步),直播做大量任务拆分散。一是可以减轻当前渲染帧的耗时压力,二是可以结合FWatchDog实现帧插入的效果。其实还可以控制任务执行的优先级,包括插队等。总之,合理的消息队列调度是必要的。异步的使用也相对较多。一个埋日志的框架,一些inflate的加载都可以用异步来解决卡顿问题。
4侏罗纪世界3 6元的预热直播提供了一个预热框架,允许直播内部的一次性成本逻辑在主机端执行。同时提供完整的队列优先级管理、同步异步管理和任务生命周期管理,减少直播内部首载卡顿问题。
4侏罗纪世界3 7元的硬件加速,提高了硬件的运行性能,如CPU频率、GPU频率、线程绑核、网络相关调优等,从底层提升App的运行体验。
5。加入我们的直播客户端技术团队,是一个集体验优化、平台搭建、跨端、端到端智能、稳定于一体的综合性团队。团队氛围很好,技术成长很快,有足够的自由度发挥自己的长处保护亿级DAU产品。也面临着更加多样化的挑战,每一行代码都会让亿万用户的体验变得更好!我们真诚地邀请你加入我们。对这些方向感兴趣的同学可以过来聊聊,推送链接:“链接”

其他教程

ae工程师主要做什么?(ae软件好不好学)

2022-8-15 3:41:59

其他教程

steam真黄油(steam无补丁黄油)

2022-8-15 3:44:14

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索