背景
MediaCodec作为Android low-level multimedia support infrastructure的一部分,可以在Android设备上实现视频编解码的硬件加速,在ffmpeg中已存在使用MediaCodec的decoder,这里参考decoder代码实现一版简单的MeiaCodec encoder。
思路
阅读MediaCodec decoder的代码可以发现,ffmpeg通过jni的方式调用Android MediaCodec相关的java接口,提供封装好的方法可直调用MediaCodec初始化/操作buffer等,我们要做的工作:
- 接收AVFrame并将其转换为MediaCodec可处理的帧数据
- 向MediaCodec提供数据
- 接收MediaCodec的处理结果,并转换为AVPacket
实现
- 向ffmpeg中添加CODEC,参考ffmpeg文档
- 编写mediacodecenc.h/mediacodecenc.c处理代码,已上传