android - 用基于 ffmpeg 的编码器替换标准的 Android H264 软件编码器

标签 android c++ ffmpeg android-ndk openmax

在 Android ICS 及更高版本中,正在使用新的 OpenMax IL API 版本,使旧的二进制 blob 变得无用/未使用。这会导致运行 ICS 的旧设备运行良好,并且视频播放中断(例如 YouTube HQ 和 IMBD),因为与 ffmpeg 在同一设备上可以执行的操作相比,Android 的后备软件解码器很糟糕(我测试了 MXPlayer+arm6vfp ffmpeg 和 720p 电影播放效果很好)。

我正在尝试深入研究 Android 源代码,以了解我可以在何处添加/替换代码以及添加/替换代码以允许使用 ffmpeg 库的强大功能。问题是我不确切知道 YouTube 应用程序中使用了什么代码来解码视频,或者它是如何决定的。

据我所知,我有两个选择:

  1. 找出当前正在使用的软件解码器,并尝试将其外部接口(interface)包装在 ffmpeg 周围,有效地替换当前使用的缓慢的软件解码器。最终结果将是单个 .so 我可以推送到设备。

  2. 弄清楚如何诱使 Android 考虑基于 ffmpeg 的 OMX 库(我已经为 Android 成功构建了一个:limoa)并将其添加到考虑库列表的某处(或者更好:替换不可用的硬件编解码器)。

作为扩展,我还想通过它使摄像机视频编码工作,因此非常需要一个真正的集成解决方案。问题是:如何、在哪里、什么?搜索 Android 源代码树会在许多不同的地方提供大量“H264”和相关内容。我需要最低和最简单的可能,所以我可以简单地包装假设的 decode(buffer) 函数调用以使用 ffmpeg (libavcodec)。

最佳答案

关于android - 用基于 ffmpeg 的编码器替换标准的 Android H264 软件编码器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11432729/

相关文章:

C++ const 通过指针改变,或者是吗?

bash - 如何关闭 OS X bash 时间码中的冒号

Nginx 只允许我的域访问视频 url

android - 如何根据 Android Kotlin 中的宽度将圆角应用于 View

java - 如何让 ScrollView 自动滚动到底部?

c++ - 无法修复对 vtable 的 undefined reference

c++ - C++中的前向声明

android - FFMPEG .mov 到 .mp4 转换失败

Android:使用 EditText 输入更改 ImageView 背景

Android: Activity 在什么时候完全加载并呈现出来?