我正在为 android 开发 H264 H/W 加速视频解码器。到目前为止,我已经使用了一些库MediaCodec
、Stagefright
、OpenMax IL
和. 经过一番研究,我发现-OpenMax AL
FFmpeg
我找到了使用 FFmpeg 的 stagefright 的一个很好的资源,但是我不能使用 FFmpeg 作为它的许可证,它对分布式软件有很大的限制。(或者可以从这种方法中丢弃 FFmpeg?)
我不能使用 MediaCodec 作为它的 Java API,我必须通过 C++ 层的 JNI 调用它,这相对较慢而且我不允许。
我不能使用 OpenMax AL,因为它只支持通过缓冲区队列解码 MPEG-2 传输流。这排除了传递原始 h264 NALU 或其他媒体格式的可能性。
现在只剩下 - stagefright 和 OpenMax IL。我知道stagefright使用OpenMax(OMX)接口。那么我应该选择 stagefright 还是 OpenMax IL?哪个更有希望?
此外,我了解到 Android H/W 加速解码器是特定于供应商的,每个供应商都有自己的 OMX 接口 API。这是真的吗?如果是这样,我是否需要在 OpenMax IL 的情况下编写硬件供应商特定的实现?怯场呢?- 它是与硬件无关的还是依赖于硬件的?如果无法使用 stagefright 或 OpenMax IL 实现 H/W indenpent,我至少需要支持高通的 Snapdragon、三星的 Exynos 和 Tegra-4。
请注意,我需要解码 H264 附件 B 流并期望解码后的解码数据,我将发送到我的视频渲染管道。所以基本上,我只需要解码器模块。
我真的很困惑。请帮助我确定正确的方向。提前致谢!
编辑
我的软件是用于商业目的,源代码也是私有的。而且我也被限制为客户端使用 ffmpeg。:)