本文来自投稿,不代表长河网立场,转载请注明出处: http://www.changhe99.com/a/j1wR4E06e4.html
ffmpeg编译支持MediaCodec,MediaCodec是adroid提供的一套编解码的接口,跟底层硬件是分离的,可以直接使用底层的硬件加速来编解码音视频,那么ffmeg怎么把这个mediaCodec集成进去了??
MediaCodec是android提供的一套编解码的接口,跟底层硬件是分离的,可以直接使用底层的硬件加速来编解码音视频,那么ffmpeg怎么把这个mediaCodec集成进去了??工具/原料ffmepglinux,ndk,mediacodec方法/步骤11、下载源码,在百度上搜索下载ffmpeg的源码(我下的是3.14的),ffmpeg的源码在不断的更新,每个版本更新都会标明作了什么修改,可以查更新日志,ffmpeg官网显示是已经支持mediacodec步骤阅读22、通过查阅ffmepg的官方文档,如下图所示,只支持mediacodec的解码使用步骤阅读步骤阅读33、准备编译脚本#!/bin/bashSYSROOT=$NDK/platforms/android-9/arch-arm/TOOLCHAIN=/root/android/androidcrosstoolfunctionbuild_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主要的部份已经在下图用红色框标注了步骤阅读44、在配置之前,需要注意一点,因为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)\'具体参考下图步骤阅读55、打开终端,进入ffmpeg的源码目录,运行配置脚本,配置通过后再执行make-j8编译编译通过后再执行makeinstall安装到指定的目录步骤阅读66、这里也写一下使用方法首先要在程序初始化的时候调用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的步骤阅读END注意事项仅供学习参考
赞
(0)