硬件解码后不恰当地使用OpenGL渲染会导致性能下降,甚至不如软解。本文来自PPTV移动端研发经理王斌在LiveVideoStackCon 2017大会上的分享,并由LiveVideoStack整理而成。分享中王斌详细解析了Windows、Linux、macOS、Android、iOS等多种平台下硬件解码的渲染方法及优化实践。
文 / 王斌
整理 / LiveVideoStack
大家好,我是来自PPTV的王斌。接下来我将围绕以下几个话题,为大家分享有关全平台硬件解码的渲染与优化的实践经验。
解码后的视频数据需经过纹理加载后才会进行下一步的OpenGL ES渲染操作,其关键在于如何将解码后的数据填充到纹理中。不同的平台对于此问题的解决方案也不尽相同,这也是我们今天讨论的重点。
1、常规方法渲染硬解数据
1.1 常规的OpenGL渲染
1)软解OpenGL渲染流程
常规的软解OpenGL渲染流程主要分为两部分:一是在渲染纹理前进行的准备纹理,二是渲染前更新纹理。准备纹理具体是指在第一次渲染第一帧前先创建一个设置好相应参数的纹理,而后再使用Texlmage2D将GPU上一定大小的显存空间分配给此纹理;进行渲染前首先需绑定此纹理,并借助TexSublmage2D技术将解码数据填充进之前分配好的纹理存储空间中,也就是所谓的“纹理上传”。
2)软解数据流
软解OpenGL渲染的数据流为:首先,通过调用TexSublmage将解码后放在主存上的数据拷贝到显存上用于更新纹理,随后的渲染过程也是基于显存上的数据进行。
1.2 硬解OpenGL渲染