Jelly Bean 之前 Android 中 H.264 的硬件加速视频解码
-
21-12-2019 - |
题
我正在从事一个视频会议项目。我们使用软件编解码器对视频帧进行编码和解码,这对于较低分辨率(高达 320p)来说效果很好。我们计划支持我们的应用程序更高分辨率,最高可达 720p。我开始知道硬件加速可以很好地完成这项工作。
由于硬件编解码器 api 媒体编解码器从 Jelly Bean 开始可用,我已使用它进行编码和解码,并且工作正常。但我的应用程序从 2.3 开始支持。因此,我需要对 30fps 的 720p 的 H.264 帧进行硬件加速视频解码。
在研究中,我想到了通过修改怯场框架来使用 OMX 编解码器的想法。我读到 H.264 的硬件解码器从 2.1 开始提供,编码器从 3.0 开始提供。我已经阅读了该网站上提供的许多文章和问题,并确认我可以继续。
我读过有关怯场建筑的文章 这里-架构 和 这里-怯场是如何运作的
我读到了 OMX 编解码器 这里-使用-android-hardware-decoder-with-omxcodec-in-ndk.
我在实施方面遇到了开始的麻烦和一些困惑。我想了解一些有关它的信息。
- 为了在我的代码中使用 OMX 编解码器,我应该使用整个 android 源代码树构建我的项目,还是可以通过添加 AOSP 源代码中的一些文件(如果是,则全部)。
- 为了实现这一目标,我应该从头开始遵循哪些步骤。
有人可以给我这方面的指导吗
谢谢...
解决方案
描述集成的最好例子 OMXCodec
本机层是命令行实用程序 stagefright
可以观察到 这里 在 GingerBread
本身。这个例子展示了如何 OMXCodec
被建造.
需要注意的几点:
输入到
OMXCodec
应建模为MediaSource
因此,您应该确保您的应用程序能够满足此要求。创建一个示例MediaSource
基础来源可以在record
实用程序文件为DummySource
.解码器的输入,即
MediaSource
应通过以下方式提供数据read
方法,因此,您的应用程序应该为每个read
称呼。解码器可以用以下命令创建
NativeWindow
用于输出缓冲区分配。在这种情况下,如果您希望从 CPU 访问缓冲区,您可能应该参考 这个查询 更多细节。