Ubuntu 12.04下編譯FFMPEG、x264
1、編譯之前首先得安裝NDK,配置NDK的教程網上有很多
2、下載x264庫,命令行中執行
git clone http://git.videolan.org/git/x264.git
3、編譯x264庫,以下是我的執行腳本(build_x264.sh),我這個是直接在解壓出來的x264文件夾中定義的,如果定義在別的位置,腳本之前應該加入cd…,首先進入你的x264目錄
##這裏要寫你自己的NDK路徑
export NDK=/usr/local/bin/android-ndk-r9
##確認以下路徑是否存在根據自己的環境進行配置
export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64
export PLATFORM=$NDK/platforms/android-9/arch-arm
export PREFIX=/usr/local/264lib/lib
./configure \
--prefix=$PREFIX \
--enable-static \
--enable-shared \
--enable-pic \
--disable-asm \
--disable-cli \
--host=arm-linux \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--sysroot=$PLATFORM
make -j8
make install
4、執行chmod 777 /你的腳本,開放權限,然後直接./你的腳本就可以了。
5、FFMPEG源碼下載,這個有一點耗時
git clone https://git.ffmpeg.org/ffmpeg.git
6、編譯FFMPEG加入x264的鏈接
export NDK=/usr/local/bin/android-ndk-r9
export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64
export PLATFORM=$NDK/platforms/android-8/arch-arm
export SYSROOT=$TOOLCHAIN/sysroot/
//生成的libffepg.so文件的目錄
export PREFIX=/usr/local/ffmpegwithx264/liboutput
//這個是引用的x264的目錄,把剛剛x264生成的目錄寫在這裏
EXTRA_CFLAGS="-I/usr/local/264lib/lib/include"
EXTRA_LDFLAGS="-L/usr/local/264lib/lib/lib"
./configure \
--target-os=linux \
--prefix=$PREFIX \
--enable-cross-compile \
--enable-runtime-cpudetect \
--disable-asm \
--disable-doc \
--arch=arm \
--cc=$TOOLCHAIN/bin/arm-linux-androideabi-gcc \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--disable-stripping \
--nm=$TOOLCHAIN/bin/arm-linux-androideabi-nm \
--sysroot=$PLATFORM \
--enable-gpl \
--enable-static \
--disable-shared \
--enable-version3 \
--enable-small \
--disable-vda \
--disable-iconv \
--disable-encoders \
--enable-libx264 \
--enable-encoder=libx264 \
--enable-muxers \
--enable-zlib \
--disable-outdevs \
--disable-ffprobe \
--disable-ffplay \
--disable-ffmpeg \
--disable-ffserver \
--disable-debug \
--extra-cflags=$EXTRA_CFLAGS \
--extra-ldflags=$EXTRA_LDFLAGS
make clean
make -j8
make install
$TOOLCHAIN/bin/arm-linux-androideabi-ld -rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -L$PREFIX/lib -soname libffmpeg.so -shared -nostdlib -Bsymbolic --whole-archive --no-undefined -o $PREFIX/libffmpeg.so \
//這個路徑要改一下在x264的生成目錄裏面
/usr/local/264lib/lib/lib/libx264.a \
libavcodec/libavcodec.a \
libavfilter/libavfilter.a \
libswresample/libswresample.a \
libavformat/libavformat.a \
libavutil/libavutil.a \
libswscale/libswscale.a \
libpostproc/libpostproc.a \
libavdevice/libavdevice.a \
-lc -lm -lz -ldl -llog --dynamic-linker=/system/bin/linker
//這個路徑要改一下在x264的生成目錄裏面
$TOOLCHAIN/lib/gcc/arm-linux-androideabi/4.8/libgcc.a
5、編譯完成,中間如果遇到問題,首先看自己的路徑是否正確。
6、錯誤:我在編譯的時候遇到的問題:
這個是由於我的引用沒有寫對,注意這裏寫的不是路徑,前面的-I,-J不能少
EXTRA_CFLAGS=”-I/usr/local/264lib/lib/include”
EXTRA_LDFLAGS=”-L/usr/local/264lib/lib/lib”