ffmpeg编译支持MediaCodec

2025-05-11 15:50:13

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

ffmpeg编译支持MediaCodec

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

ffmpeg编译支持MediaCodec
ffmpeg编译支持MediaCodec

3、准备胆咣骜岱编译脚本#!/bin/bashSYSROOT=$NDK/platforms/android-9/arch-arm/TOOLCHAIN=/root/android/an颊俄岿髭droidcrosstoolfunction 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/$CPUbuild_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。
猜你喜欢