FFmpeg為開源音視頻編解碼庫,市面上的播放器很多都是基于FFmpeg開發的,可以說學會了FFmpeg,音視頻開發的所有功能都可以實現。
FFmpeg使用c語言編寫,makefile工具編譯,因此選擇在linux平臺下編譯。而我們需要生成arm平臺下的so庫,需要使用到ndk
1.ndk下載和安裝
https://developer.android.google.cn/ndk/downloads/
在安卓開發官網可以下載到,可以直接在linux中下載,也可以在windows平臺下載后傳到linux下,我這邊使用的是14b版的ndk
2.首先下載FFmpeg
在linux中使用命令:
wget http://ffmpeg.org/releases/ffmpeg-2.6.9.tar.gz
3.下載之后,使用解壓命令:
tar -xvf ffmpeg-2.6.9.tar.gz
4.configure是一個shell腳本,編譯就是執行這個腳本,而它還需要很多參數,我們可以自己建一個腳本來調用configure腳本
vi build_android.sh
#!/bin/bash
#先執行clean操作
make clean
#指定ndk目錄
export NDK=/lib/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
另外我們還需要修改下configure中的代碼,在2775行
修改為
#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腳本
chmod 777 build_android.sh
./build_android.sh