承接上一篇《MediaCodec 与硬编解码》,上一篇讲「编解码这一环」,这一篇讲「渲染这一环」。渲染是 Android 上最频繁的 GPU 工作,也是卡顿、掉帧、花屏三类问题的常见来源;而它与音视频的衔接点正是 343 篇里提到的 MediaCodec 输入 Surface。
结论先行:渲染问题的定位原则是「先看是 GPU 侧还是 CPU 侧」。 一帧的耗时由「CPU 侧准备 + GPU 侧执行」两段构成,Systrace 里 GPU 段的完成时间与帧间隔的关系,能直接判断瓶颈在哪一侧。 只看总帧时间而不做拆分,是渲染排查最常见的低效做法。
一、EGL 环境:从 Context 到可渲染的 Surface
1.1 EGL 四步初始化
class EglCore {
private var display = EGL14.EGL_NO_DISPLAY
private var context = EGL14.EGL_NO_CONTEXT
private var surface = EGL14.EGL_NO_SURFACE
fun init(windowSurface: Any, configAttrs: IntArray): Boolean {
display = EGL14.eglGetDisplay(EGL14.EGL_DEFAULT_DISPLAY)
if (display == EGL14.EGL_NO_D
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/zwqhlzd/article/details/169736122




