一、 FFmpeg下载地址
http://ffmpeg.org/releases/ 选择的是ffmpeg-2.6.9.tar.gz(据说比较稳定)。
解压 tar xzvf ffmpeg-2.6.9.tar.gz
(Linux需有jdk与 ndk环境)ndk:https://dl.google.com/android/repository/android-ndk-r14b-linux-x86_64.zip
二、修改configure文件
采坑记录:为什么修改呢? 哎!编译了20多分钟,编译出来的全是libavdevice.so.56这种不是以.so结尾的,辛辛苦苦导进去发现android不支持。
将configure文件的2779行(不同版本可能不一样,大约在这里):
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)'
三、编辑shell脚本 用于启动configure
为什么编写脚本的?当然直接调用configure也行,但是你会发现命令参数多到发指。而且shell脚本可以帮我们选择我们需要的功能,不多说。
#!/bin/bash
make clean
export NDK=/home/ndk/android-ndk-r14b
export SYSROOT=$NDK/platforms/android-9/arch-arm/
export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
export CPU=arm
export PREFIX=$(pwd)/android/$CPU
export ADDI_CFLAGS="-marm"
./configure --target-os=linux \
--prefix=$PREFIX --arch=arm \
--disable-doc \ --enable-shared \
--disable-static \ --disable-yasm \
--disable-symver \ --enable-gpl \
--disable-ffmpeg \ --disable-ffplay \
--disable-ffprobe \ --disable-ffserver \
--disable-doc \
--disable-symver \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \ $ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
注意:(一个很菜的坑:在windows中编辑好拷入Linux不管用,恍然想到是文件不兼容,菜哭!所有最好在Linux中编辑)
export NDK=/home/ndk/android-ndk-r14b 为ndk路径。
export SYSROOT=$NDK/platforms/android-9/arch-arm/ 要根据ndk目录中platforms支持版本配置。
export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64 同理ndk目录中toolchains。
四、执行脚本生成动态库
将脚本放入ffmpeg目录中,然后运行脚本。编译过程略长。
文件会编译到android/arm目录下。
五、Android Studio中配置
(AS需添加 c/c++ support)详情去了解 AS的ndk开发。过几天写个关于MakeFIle或者Cmake的学习。
1.导入
将编译好的include以及 需要的.so导入android studio libs目录下(so文件只导版本号高的就行)。如图:
2. gradle配置:
android—defaultConfig中添加
sourceSets{
main{
jniLibs.srcDirs=['libs']
}
}
externalNativeBuild {
cmake {
cppFlags "-frtti -fexceptions"
abiFilters 'armeabi’
}
}
3.CMakeLists.txt配置
很简单就是连接动态库,编辑器还用不熟,看图吧:
按照add_library 与set_target_properties吧so全部引入
也不要忘了最上面的
include_directories(libs/include)
set(DIR ../../../../libs)
最后还有
OK!配置完成。不出意外的话FFmpeg中的方法可以调用了
可以通过 jni 语法调用测试下。
记录下来篇幅不多,都是各种坑踩出来的。第一次写学习记录,吐槽下编辑器(以至于后面直接用图替代),下次学学用Markdown编辑。
下次记录下 FFmpeg的使用。
网友评论