这是关于 FFmpeg 和 MediaCodec 爱恨情仇系列的第三篇文章了。
之前写了 FFmpeg 调用 MediaCodec 进行硬解码的内容。
FFmpeg 调用 Android MediaCodec 进行硬解码
另外也给出了 FFmpeg 的编译脚本,轻松搞定编译问题。
老生常谈-FFmpeg 的编译问题轻松搞定
众所周知,MediaCodec 的解码能力不仅可以解码出 YUV 数据,还能直接解码到 Surface 上。
在短视频领域中,MediaCodec 解码到 Surface 上的能力反而更加常用,这样就能将画面转到 OES 纹理上,从而进行后续各种渲染操作。
之前介绍的 FFmpeg 调用 MediaCodec 进行硬解码只是解码出了 Buffer 数据,没有把解码到 Surface 上的能力用起来。
再看了更多资料之后,发现 FFmpeg 调用 MediaCodec 已经可以解码到 Surface 上。
具体参考的是这篇邮件内容:
[FFmpeg-devel] [PATCH] lavc/mediacodec: add hwaccel support
在这里面详细介绍了这种能力,挑重点截图一下: