一文读懂直播卡顿优化那些事儿 如何解决直播卡顿( 四 )

2.5.2 视频流除了上述的渲染流程引起的卡顿 , 还有一些其他的因素 , 典型的就是视频流 。

  1. 渲染卡顿:主要是 TextureView 渲染 , textureview 跟随 window 共用一个 surface , 每一帧均需要一起协同渲染并相互影响 , UI 卡顿会造成视频流卡顿 , 视频流的卡顿有时候也会造成 UI 的卡顿;
  2. 解码:解码主要是将数据流解码为 surface 可消费的 buffer 数据 , 是除了网络外最重要的耗时点 。现在我们一般都会采用硬解 , 比软解的性能高很多 。但是帧的复杂度、编码算法的复杂度、分辨率等也会直接导致解码耗时被拉长;
  3. OpenGL 处理:有时会对解码完成的数据做二次处理 , 这个如果比较耗时会直接导致渲染卡顿;
  4. 网络:这个就不再赘述了 , 包括 DNS 节点优选、cdn 服务、GOP 配置等;
  5. 推流异常:这个属于数据源出了问题 , 这里暂时以用户侧的视角为主 , 暂不讨论 。
2.5.3 系统负载
  1. 内存:内存的吃紧会直接导致 GC 的增加甚至 ANR , 是造成卡顿的一个不可忽视的因素;
  2. CPU:CPU 对卡顿的影响主要在于线程调度慢、任务执行的慢和资源竞争 , 比如降频会直接导致应用卡顿;
  3. GPU:GPU 的影响见渲染流程 , 但是其实还会间接影响到功耗和发热;
  4. 功耗/发热:功耗和发热一般是不分家的 , 高功耗会引起高发热 , 进而会引起系统保护 , 比如降频、热缓解等 , 间接的导致卡顿 。
2.6 卡顿的分类我们此处再整体整理并归类 , 为了更完备一些 , 这里将推流也放了上来 。在一定程度上 , 我们遇到的所有卡顿问题 , 均能在这里找到理论依据 , 这也是指导我们优化卡顿问题的理论支撑 。
3. 如何评价卡顿3.1 线上指标指标
释义
计算方式
数据来源
FPS
帧率
取 vsync 到来的时间为起点 , doFrame 执行完成的事件为终点 , 作为每帧的渲染耗时 , 同时利用渲染耗时/刷新率可以得出每次渲染的丢帧数 。平均 FPS = 一段时间内渲染帧的个数 * 60 / (渲染帧个数 + 丢帧个数)
vsync
stall_video_ui_rate
总卡顿率
(UI 卡顿时长 + 流卡顿时长) / 采集时长
vsync
stall_ui_rate
UI 卡顿率
UI 卡顿时长 / 采集时长
vsync
stall_video_rate
流卡顿率
流卡顿时长 / 采集时长
vsync
stall_ui_slight_rate
轻微卡顿率
帧丢帧时长 / 采集时长
vsync
stall_ui_moderate_rate
中等卡顿率
帧丢帧时长 / 采集时长
vsync
stall_ui_serious_rate
严重卡顿率
帧丢帧时长 / 采集时长
vsync
3.2 线下指标
Diggo 是字节自研的一个开放的开发调试工具平台 , 是一个集「评价、分析、调试」为一体的 , 一站式工具平台 。内置性能测评、界面分析、卡顿分析、内存分析、崩溃分析、即时调试等基础分析能力 , 可为产品开发阶段提供强大助力 。
指标
释义
计算方式
数据来源
FPS
时机渲染帧率
数据获取时间周期内 , 实际渲染帧数/ 数据获取间隔时间


以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!

「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助: