android编译ffmpeg+x264

下载最新版的x264
ftp://ftp.videolan.org/pub/videolan/x264/snapshots/
1.解压到指定的目录
2.切换当前目录为该目录
3.创建一个shell脚本build_x264.sh,内容如下:

复制代码
export NDK=/home/robin/桌面/android-ndk-r8c
export PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt
export PLATFORM=$NDK/platforms/android-8/arch-arm 
export PREFIX=/home/robin/android-x264
./configure --prefix=$PREFIX 
--enable-static 
--enable-pic 
--disable-asm 
--disable-cli 
--host=arm-linux 
--cross-prefix=$PREBUILT/linux-x86/bin/arm-linux-androideabi- 
--sysroot=$PLATFORM
复制代码

执行如下命令编译和安装
make
sudo make install
sudo ldconfig
编译ffmpeg:
下载最新版的ffmpeg
http://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2
1.解压到指定的目录
2.切换当前目录为该目录
3.创建一个shell脚本build_ffmpeg.sh,内容如下:

复制代码
#!/bin/sh
export PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt
export PLATFORM=$NDK/platforms/android-8/arch-arm
export PREFIX=/home/robin/android-x264

build_one(){
./configure --target-os=linux --prefix=$PREFIX 
--enable-cross-compile 
--enable-runtime-cpudetect 
--disable-asm 
--arch=arm 
--cc=$PREBUILT/linux-x86/bin/arm-linux-androideabi-gcc 
--cross-prefix=$PREBUILT/linux-x86/bin/arm-linux-androideabi- 
--disable-stripping 
--nm=$PREBUILT/linux-x86/bin/arm-linux-androideabi-nm 
--sysroot=$PLATFORM 
--enable-nonfree 
--enable-version3 
--disable-everything 
--enable-gpl 
--disable-doc 
--enable-avresample 
--enable-demuxer=rtsp 
--enable-muxer=rtsp 
--disable-ffplay 
--disable-ffserver 
--enable-ffmpeg 
--disable-ffprobe 
--enable-libx264 
--enable-encoder=libx264 
--enable-decoder=h264 
--enable-protocol=rtp 
--enable-hwaccels 
--enable-zlib 
--disable-devices 
--disable-avdevice 
--extra-cflags="-I/home/robin/android-x264/include -fPIC -DANDROID -D__thumb__ -mthumb -Wfatal-errors -Wno-deprecated -mfloat-abi=softfp -mfpu=vfpv3-d16 -marm -march=armv7-a" 
--extra-ldflags="-L/home/robin/android-x264/lib"

make -j4 install


$PREBUILT/linux-x86/bin/arm-linux-androideabi-ar d libavcodec/libavcodec.a inverse.o

$PREBUILT/linux-x86/bin/arm-linux-androideabi-ld -rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -L$PREFIX/lib  -soname libffmpeg.so -shared -nostdlib  -z,noexecstack -Bsymbolic --whole-archive --no-undefined -o $PREFIX/libffmpeg.so libavcodec/libavcodec.a libavfilter/libavfilter.a libavresample/libavresample.a libavformat/libavformat.a libavutil/libavutil.a libswscale/libswscale.a -lc -lm -lz -ldl -llog -lx264 --warn-once --dynamic-linker=/system/bin/linker $PREBUILT/linux-x86/lib/gcc/arm-linux-androideabi/4.4.3/libgcc.a
}

build_one
复制代码

执行build_ffmpeg.sh编译完成,编译输出在$PREFIX指定的目录

原文:http://hi.baidu.com/duizhe_memory/item/482e6fd6ccfee7fa93a974be

但是那个libffmpeg.so没法编译成功,于是深入研究了一下,里面有个build_android_r8.sh正是编译所需的shell脚本,问题在于这个脚本是作者在苹果操作系统下用ndk交叉编译工具编译的,而我在ubuntu下,所以要改里面的东西,其实就是相应的改一下ndk下的想对应的路径,另外还要注意,libffmpeg.so是用ld链接所需的几个ffmpeg静态库得到的,ld所用的选项在苹果下和ubuntu下不同,用arm-linux-androideabi-ld --help可以看到支持的选项,所以有两个地方要改一下。

把-z,noexecstack改成-z noexecstack,另外要去掉--warn-once选项,这个在ubuntu下没有。

我的最后改成这样的:

NDK=/home/daniel/android-ndk-r9d
PLATFORM=$NDK/platforms/android-8/arch-arm
PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64

$PREBUILT/bin/arm-linux-androideabi-ld -rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -soname libffmpeg.so -shared -nostdlib -z noexecstack -Bsymbolic --whole-archive --no-undefined -o $PREFIX/libffmpeg.so libavcodec/libavcodec.a libavformat/libavformat.a libavutil/libavutil.a libswscale/libswscale.a libswresample/libswresample.a $BZLIB_LDPATH/libbz2.a -lc -lm -lz -ldl -llog --dynamic-linker=/system/bin/linker $PREBUILT/lib/gcc/arm-linux-androideabi/4.6/libgcc.a

http://blog.csdn.net/qiuchangyong/article/details/23833223

原文地址:https://www.cnblogs.com/canphp/p/4447751.html