【问题标题】:Hardware accelerated video decode for H.264 in android prior to Jelly Bean果冻豆之前的 android 中 H.264 的硬件加速视频解码
【发布时间】:2014-07-24 22:22:52
【问题描述】:

我正在处理一个视频会议项目。我们使用软件编解码器对视频帧进行编码和解码,这对于较低的分辨率(最高 320p)效果很好。我们已计划支持我们的应用程序以获得高达 720p 的更高分辨率。我开始知道硬件加速可以很好地完成这项工作。

由于硬件编解码器 api 媒体编解码器可从 Jelly Bean 开始,我已将其用于编码和解码,并且工作正常。但是从 2.3 开始支持我的应用程序。所以我需要对 30fps 的 720p 的 H.264 帧进行硬件加速视频解码。

在研究中发现了通过修改怯场框架来使用 OMX 编解码器的想法。我读过 H.264 的硬件解码器从 2.1 开始可用,而编码器从 3.0 开始就在那里。我浏览了本网站上给出的许多文章和问题,并确认我可以继续。

我读过关于怯场建筑here -architecturehere- stagefright how it works

我读到了 OMX 编解码器 here- use-android-hardware-decoder-with-omxcodec-in-ndk

我在开始时遇到了麻烦,并且对其实施有些困惑。我想了解一些有关它的信息。

  1. 对于在我的代码中使用 OMX 编解码器,我应该使用整个 android 源代码树来构建我的项目,还是可以通过从 AOSP 源代码中添加一些文件来实现(如果是,那么全部)。
  2. 我应该从头开始执行哪些步骤来实现它。

有人可以给我一个指导吗

谢谢...

【问题讨论】:

  • “我应该从头开始执行哪些步骤来实现它。” 确实很广泛。对于单个 StackOverflow 问题,您可能应该缩小范围。例如,确定一个您认为必要但不确定如何执行的特定步骤。然后问一个问题。
  • @Michael 好的,我会这样做。但是你能检查我的第一个问题吗..我应该拿android的完整源代码吗?
  • @androkid.. 您是否需要从 Java 层访问编解码器,或者访问由您的应用程序的 JNI 实现抽象的本机层中的编解码器是否足够?
  • @Ganesh 我期待您的答复。我想在 JNI 级别本身工作..
  • @Ganesh 我没有编辑 AOSP 源代码的经验。这就是为什么对如何开始实施有点困惑。如果你给我一些建议,我会努力的。我知道你是这方面的高手.....

标签: android android-ndk hardware-acceleration stagefright openmax


【解决方案1】:

描述OMXCodec 在本机层集成的最佳示例是命令行实用程序stagefright,可以在GingerBread 本身中观察到here。这个例子展示了OMXCodec is created.

需要注意的几点:

  1. OMXCodec 的输入应建模为MediaSource,因此,您应确保您的应用程序处理此要求。在record utility file as DummySource 中可以找到创建基于MediaSource 的源的示例。

  2. 解码器的输入,即MediaSource 应该通过read 方法提供数据,因此,您的应用程序应该为每个read 调用提供单独的帧。

  3. 可以使用NativeWindow 创建解码器,用于分配输出缓冲区。在这种情况下,如果您希望从 CPU 访问缓冲区,您可能应该参考this query 了解更多详细信息。

【讨论】:

  • 你能看看我的问题here
猜你喜欢
  • 2018-10-05
  • 1970-01-01
  • 2012-05-25
  • 2016-08-21
  • 2012-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多