在开发一款android平台下的视频播放器,底层解码选择用开源解码库Ffmpeg,需要编译生成静态库。
编译的环境:
ubuntu 12.04 64bit
android-ndk-r9d linux 64bit,下载地址:android ndk下载地址
ffmpeg 0.6.7,下载地址:Ffmpeg 0.6.7 源码下载地址
编译的详细流程如下:
1.下载好android ndk后,将压缩包解压在某一目录下,例如楼主解压在了/home/zk/ndk路径下了,所以楼主的android ndk根目录的绝对路径就是/home/zk/ndk/android-ndk-r9d.
2.同1,楼主在/home/zk/目录下又新建了一个Ffmpeg文件夹,并将下载好的ffmpeg-0.6.7.tar.gz解压到了此处,所以ffmpeg的根目录绝对路径就是/home/zk/Ffmpeg/ffmpeg-0.6.7.
3.在ffmpeg的根目录下新建一个config.sh文件,将如下内容复制到其中(如下内容是ndk的路径和一些ffmpeg编译配置选项,需要大家根据自己的ndk实际路径进行修改,而ffmpeg编译的配置选项大家可以从网上搜索,根据自己需求更改相应参数):
#!/bin/sh
export TMPDIR="/tmp/"
export NDKROOT="/home/zk/ndk/android-ndk-r9d"
PREBUILT=$NDKROOT/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64
./configure --target-os=linux \
--arch=arm \
--cpu=armv7-a \
--enable-cross-compile \
--cc=$PREBUILT/bin/arm-linux-androideabi-gcc \
--cross-prefix=$PREBUILT/bin/arm-linux-androideabi- \
--nm=$PREBUILT/bin/arm-linux-androideabi-nm \
--extra-cflags="-fPIC -DANDROID -mfpu=neon -mfloat-abi=softfp -I$NDKROOT/platforms/android-9/arch-arm/usr/include" \
--enable-asm \
--disable-yasm \
--enable-static \
--disable-shared \
--enable-small \
--enable-gpl \
--enable-version3 \
--enable-nonfree \
--enable-neon \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffserver \
--disable-ffprobe \
--prefix=/home/ffmpeg-android-bin \
--extra-ldflags="-Wl,-T,$PREBUILT/arm-linux-androideabi/lib/ldscripts/armelf_linux_eabi.x -Wl,-rpath-link=$NDKROOT/platforms/android-9/arch-arm/usr/lib -L$NDKROOT/platforms/android-9/arch-arm/usr/lib -nostdlib $PREBUILT/lib/gcc/arm-linux-androideabi/4.6/crtbegin.o $PREBUILT/lib/gcc/arm-linux-androideabi/4.6/crtend.o -lc -lm -ldl"
4.终端下进入ffmpeg根目录路径,即新建的config.sh文件所在的目录下,给config.sh文件添加可执行权限:
chmod +x config.sh
然后执行如下命令:
./config.sh执行完该命令后,会发现生成了config.h 和config.mak文件,这两个文件是之后执行make命令编译时,makefile中所需要的环境变量以及配置选项。
5.最后在终端执行make执行完后会在ffmpeg根目录下的libavcodec、libavdevice、libavformat、libavutil、libswscale文件夹下有相应的.a静态库文件生成~