最近开发一个多视窗的多媒体播放器,需要多个窗口同时播放不同的视频文件,所以考虑软解码,然后就研究了一下ffmpeg,经过一番努力终于编译出来了,在此记录下来,作为备忘,也供新手参考。
1,下载ffmpeg,不同版本有些接口不同,不兼容,所以我下载的是ffmpeg-2.2.10,下载地址http://www.ffmpeg.org/download.html,点More Releases或直接下拉到FFmpeg 2.2.10 "Muybridge",点Download下载,下载完成后得到文件ffmpeg-2.2.10.tar.bz2。
2,解压文件,执行tar -xf ffmpeg-2.2.10.tar.bz2,解压为ffmpeg-2.2.10。
3,android ndk环境搭建,android ndk下载地址http://developer.android.com/tools/sdk/ndk/index.html#Installing(可能翻墙才能下载,或者百度搜索到其他地方下载,很多地方都可以下载),目前最新的为android-ndk-r10d,下载页如下:
Downloads
Platform | Package | Size (Bytes) | MD5 Checksum |
---|---|---|---|
Windows 32-bit | android-ndk-r10d-windows-x86.exe | 455427281 | c0930abfae0c990c4d191cc4ebd46b68 |
Windows 64-bit | android-ndk-r10d-windows-x86_64.exe | 472613732 | 9a33f96da58a7e0b70e47d27b4a880b4 |
Mac OS X 32-bit | android-ndk-r10d-darwin-x86.bin | 441545213 | 0aeb3dc062dc457a4cd01e72eadb2379 |
Mac OS X 64-bit | android-ndk-r10d-darwin-x86_64.bin | 442691567 | cb101e1e62d56ea75b215f6bc6c27fae |
Linux 32-bit (x86) | android-ndk-r10d-linux-x86.bin | 449997190 | 70ed6d8c34e7e620c145b791e8eeef89 |
Linux 64-bit (x86) | android-ndk-r10d-linux-x86_64.bin | 459151600 | 263b83071e6bca15f678985 48d8d236e |
Linux 64-bit (x86) | android-ndk-r10d-linux-x86_64.bin | 459151600 | 263b83071e6bca15f67898548d8d236e |
安装:
# chmod a+x android-ndk-r10d-linux-x86_64.bin
# ./android-ndk-r10d-linux-x86_64.bin
执行完生成android-ndk-r10d
4,把ffmpeg-2.2.10放在android-ndk-r10d/sources下。
5,创建一个编译脚本文件build.sh(这个是参考一个老外的)
#!/bin/bash
NDK=$HOME/android-ndk-r10d
SYSROOT=$NDK/platforms/android-18/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64
function build
{
./configure \
--prefix=$PREFIX \
--enable-pthreads \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-avdevice \
--disable-symver \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--target-os=linux \
--arch=arm \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make -j4
make install
}
CPU=arm
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS="-marm"
build
6,编译,在android-ndk-r10d/sources/ffmpeg-2.2.10下执行./build.sh
7,编译完生成目录android/arm,下面有include和lib
编译过程会输出到文件config.log中,可以在config.log中看编译过程和结果
编译过程可能会打印很多下面的这个信息,可以不管它
check_cpp_condition stddef.h defined __ARM_ARCH_4__ || defined __TARGET_ARCH_4
check_cpp
BEGIN /tmp/ffconf.f1bnMXuB.c
1 #include <stddef.h>
2 #if !(defined __ARM_ARCH_4__ || defined __TARGET_ARCH_4)
3 #error "unsatisfied condition: defined __ARM_ARCH_4__ || defined __TARGET_ARCH_4"
4 #endif
END /tmp/ffconf.f1bnMXuB.c