ffmpeg编译支持MediaCodec

2026-02-25 15:49:50

1、下载源码,在百度上搜索下载ffmpeg的源码(我下的是3.14的),ffmpeg的源码在不断的更新,每个版本更新都会标明作了什么修改,可以查更新日志,ffmpeg官网显示是已经支持mediacodec

ffmpeg编译支持MediaCodec

2、通过查阅ffmepg的官方文档,如下图所示,只支持mediacodec的解码使用

ffmpeg编译支持MediaCodec

ffmpeg编译支持MediaCodec

3、准备编译脚本

#!/bin/bash

SYSROOT=$NDK/platforms/android-9/arch-arm/

TOOLCHAIN=/root/android/androidcrosstool

function build_one

{

./configure \

    --prefix=/root/android/ffmpeg-3.1.4/android/armv7-a \

    --enable-shared \

    --disable-static \

    --disable-programs\

    --disable-ffmpeg \

    --disable-ffplay \

    --disable-ffprobe \

    --disable-ffserver \

    --disable-doc \

    --disable-htmlpages\

    --disable-manpages \

    --disable-podpages \

    --disable-txtpages \

    --enable-swresample \

    --disable-debug \

    --disable-symver \

--enable-jni \

--enable-mediacodec \

--enable-decoder=h264_mediacodec \

--enable-hwaccel=h264_mediacodec \

    --enable-memalign-hack \

    --enable-gpl \

    --enable-nonfree \

    --enable-version3 \

    --enable-asm \

--enable-cross-compile \

--enable-filter=scale \

    --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \

    --target-os=linux \

    --arch=arm \

    --cpu=armv7-a \

    --enable-neon\

    --sysroot=$SYSROOT \

    --extra-cflags=" -march=armv7-a  -mfpu=neon " \

    --extra-ldflags="-Wl, -lc -lm -ldl -llog " \

    $ADDITIONAL_CONFIGURE_FLAG

}

CPU=armv7-a  

PREFIX=$(pwd)/android/$CPU

build_one

主要的部份已经在下图用红色框标注了

ffmpeg编译支持MediaCodec

4、在配置之前,需要注意一点,因为android只能识别.so结尾的动态库,新版本的ffmpeg在编译生成后,它的文件名不是以.so结尾的,需要作一些修改让它以.so结尾

打开ffmpeg源码目录下的configure文件,找到下面这些宏定义

SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'

LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'

SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'

SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR)$(SLIBNAME)'

上面这些宏定义,主要意思是指定生成文件的格式的,直接改成按下面的写法改就可以了

SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'

LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'

SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'

SLIB_INSTALL_LINKS='$(SLIBNAME)'

具体参考下图

ffmpeg编译支持MediaCodec

5、打开终端,进入ffmpeg的源码目录,运行配置脚本,

配置通过后再执行 make -j8 编译

编译通过后再执行 make install 安装到指定的目录

ffmpeg编译支持MediaCodec

6、这里也写一下使用方法

首先要在程序初始化的时候调用 av_jni_set_java_vm(vm, NULL);

要注意包含头文件的时候别忘了像下面这样加上 extern "C",不然会提示找不到av_jni_set_java_vm的

然后是在初始化解码器这前,把那些软件解码器强行换成mediacodec支持的硬件解码器

这样子基本上跟平常使用ffmpeg是一样的了

另外要注意的是找5.0以上的android才行

如果你不知道,它支持那些mediacodec解码,你可以使用./configure --list-decoders 来查看,3.14版本的只支持h264的

ffmpeg编译支持MediaCodec

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢