PS:好久没写文章了,由于年中跳了槽,到新公司一直忙于项目的开发,如今才有时间抽空来继续我们的android音频开发
前几节我们讲的都是调用android原生API来进行音频的播放,编解码等操作,是在java层面,而且由于MediaCodec兼容性的限制,导致无法在API16以下使用,所以我们不得不放弃java层,转而寻求更为成熟的c/c++处理方案,再用jni去调用。所以,大名鼎鼎的ffmpeg闪亮登场了。
那么问题来了,怎么使用这个玩意儿了?接下来跟着我走
一、首先去官网下载源码http://ffmpeg.org/download.html,最新版本是3.3.3,下载完成后我们在linux下把源码编译成android能用的so文件,当然你也可以直接打开cmd命令去使用它,熟悉它的一些命令。
我这里用的是VirtualBox+Ubuntu的方式去编译,为了方便,我这里专门设置了共享文件夹方便windows和ubuntu传输文件。共享文件夹的设置大家请百度吧。
二、开始编译
首先要安装NDK,下载好NDK后解压在用户根目录,并配置好环境变量
输入gedit ~/.bashrc,加入以下代码
export NDK_HOME=/home/dy/android-ndk-r14b
注意换成你自己的路径,保存然后输入source ~/.bashrc编译一下即可
你可以测试一下有没有安装成功:$ cd $NDK_ROOT$ ./ndk-build NDK_PROJECT_PATH=$NDK_ROOT/samples/two-libs
在根目录下新建一个工程media,用于存放ffmpeg,和编译脚本,把你下载的ffmpeg源码放进来。
然后找到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)'
为什么要这么做呢,这是因为如果直接按照未修改的配置进行编译,结果编译出来的so文件类似libavcodec.so.55.39.101,版本号位于so之后,Android无法加载
接下来在ffmpeg目录下新建脚本文件buildff.sh,文件内容如下
#清除上次编译的东西
make clean
#配置NDK路径,注意换成你自己的路径
export NDK=/home/dy/android-ndk-r14b
#配置工具链,注意查看是否有该路径,各个ndk版本不同,路径会有不同
export PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt
#配置平台,同上注意路径
export PLATFORM=$NDK/platforms/android-9/arch-arm
#配置编译好了之后的文件输出目录,$(pwd)当前目录下
export PREFIX=$(pwd)/android/
build_one(){
./configure --target-os=linux --prefix=$PREFIX \
--enable-cross-compile \
--enable-runtime-cpudetect \
--disable-asm \
--arch=arm \
--cc=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi-gcc \
--cross-prefix=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi- \
--disable-stripping \
--nm=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi-nm \
--sysroot=$PLATFORM \
--enable-gpl --enable-shared --disable-static --enable-nonfree --enable-version3 --enable-small \
--enable-zlib --disable-ffprobe --disable-ffplay --disable-ffmpeg --disable-ffserver --disable-debug \
--extra-cflags="-fPIC -DANDROID -D__thumb__ -mthumb -Wfatal-errors -Wno-deprecated -mfloat-abi=softfp -marm -march=armv7-a"
}
build_one
#4线程编译
make -j4
make install
然后输入以下命令
chmod 777 ./buildff.sh
./build_android.sh
就开始编译了
编译完成后会在ffmpeg下生成android文件夹,里面就是include源文件和编译好的so文件,然后通过共享文件夹把android文件夹传给windows,供我们使用即可。
最后上个妹子图缓解一下视力,接下来就是在AS里面运用了