在 Android ICS 及更高版本中,正在使用新的 OpenMax IL API 版本,使旧的二进制 blob 变得无用/未使用。这会导致运行 ICS 的旧设备运行良好,并且视频播放中断(例如 YouTube HQ 和 IMBD),因为与 ffmpeg 在同一设备上可以执行的操作相比,Android 的后备软件解码器很糟糕(我测试了 MXPlayer+arm6vfp ffmpeg 和 720p 电影播放效果很好)。
我正在尝试深入研究 Android 源代码,以了解我可以在何处添加/替换代码以及添加/替换代码以允许使用 ffmpeg 库的强大功能。问题是我不确切知道 YouTube 应用程序中使用了什么代码来解码视频,或者它是如何决定的。
据我所知,我有两个选择:
找出当前正在使用的软件解码器,并尝试将其外部接口(interface)包装在 ffmpeg 周围,有效地替换当前使用的缓慢的软件解码器。最终结果将是单个 .so 我可以推送到设备。
弄清楚如何诱使 Android 考虑基于 ffmpeg 的 OMX 库(我已经为 Android 成功构建了一个:limoa)并将其添加到考虑库列表的某处(或者更好:替换不可用的硬件编解码器)。
作为扩展,我还想通过它使摄像机视频编码工作,因此非常需要一个真正的集成解决方案。问题是:如何、在哪里、什么?搜索 Android 源代码树会在许多不同的地方提供大量“H264”和相关内容。我需要最低和最简单的可能,所以我可以简单地包装假设的 decode(buffer)
函数调用以使用 ffmpeg (libavcodec)。
最佳答案
在我看来this presentation ("Integrating a Hardware Video Codec into Android Stagefright using OpenMAX IL")这正是你想做的。祝你的项目好运!
关于android - 用基于 ffmpeg 的编码器替换标准的 Android H264 软件编码器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11432729/