x264和ac编译

来源:互联网 发布:淘宝店铺装修设计方案 编辑:程序博客网 时间:2024/05/17 18:44

最近在学ffmpeg时发现编译好的动态库并不能把yuv编码为h264,经过google和百度发现需要单独编译好x264和aac后在编译ffmpeg才可以使用音频和视频的编码

编译x264

下载libx264压缩文件
点击下载
编译x264
把下载好的压缩包解压缩,然后书写shell脚本放入解压后的x264文件夹
脚本如下

#!/bin/bashexport NDK=/usr/ndk/android-ndk-r10eexport SYSROOT=$NDK/platforms/android-9/arch-arm/export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64export PREFIX=../android-libx264function build_one{  ./configure \--prefix=$PREFIX \--enable-static \ --enable-shared \--enable-asm \--enable-pic \--enable-thread \--enable-strip \--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \--host=arm-linux-androideabi \--sysroot=$SYSROOT \--extra-cflags="-Os -fpic $ADDI_CFLAGS -march=armv7-a  -mfloat-abi=softfp -mfpu=neon" \--extra-ldflags="$ADDI_LDFLAGS" \$ADDITIONAL_CONFIGURE_FLAG  }PREFIX="/home/wh/x264-snapshot-20170407-2245/install/"ADDI_CFLAGS=""build_one

上方的NDK路径换成你对应的路径
然后把脚本文件放入解压后的根目录,然后进入解压后的根目录依次输入下面命令

./脚本名称.shmakemake install

PREFIX对应的目录就是编译好的库文件目录

编译fdk-aac

点击下载
解压缩
编写脚本

#!/bin/bashexport NDK=/usr/ndk/android-ndk-r10eexport SYSROOT=$NDK/platforms/android-9/arch-arm/export ANDROID_BIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/binCROSS_COMPILE=${ANDROID_BIN}/arm-linux-androideabi-ARM_INC=$SYSROOT/usr/include  ARM_LIB=$SYSROOT/usr/libLDFLAGS=" -nostdlib -Bdynamic -Wl,--whole-archive -Wl,--no-undefined -Wl,-z,noexecstack  -Wl,-z,nocopyreloc -Wl,-soname,/system/lib/libz.so -Wl,-rpath-link=$ARM_LIB,-dynamic-linker=/system/bin/linker -L$NDK_HOME/sources/cxx-stl/gnu-libstdc++/libs/armeabi -L$NDK_HOME/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86/arm-linux-androideabi/lib -L$ARM_LIB  -lc -lgcc -lm -ldl  "FLAGS="--host=arm-androideabi-linux --enable-static --disable-shared"export CXX="${CROSS_COMPILE}g++ --sysroot=${SYSROOT}"  export LDFLAGS="$LDFLAGS"export CC="${CROSS_COMPILE}gcc --sysroot=${SYSROOT}"./configure $FLAGS \--prefix='/home/wh/fdk-aac-0.1.4'

后面步骤与x264相同

编译ffmpeg

把x264和aac编译好的库文件合并,lib和lib中的合并,includes和includes的合并
这里写图片描述
include类似,lib和include包含了x264和aac。
编写ffmpeg脚本

#!/bin/bashexport NDK=/usr/ndk/android-ndk-r10eexport SYSROOT=$NDK/platforms/android-9/arch-arm/export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64export CPU=armexport PREFIX=$(pwd)/android/$CPUexport ADDI_CFLAGS="-marm"function build_one{./configure --target-os=linux --prefix=$PREFIX \--enable-cross-compile \--enable-runtime-cpudetect \--disable-asm \--arch=arm \--cc=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi-gcc \--cross-prefix=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi- \--disable-stripping \--nm=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi-nm \--sysroot=$PLATFORM \--enable-gpl --enable-shared --disable-static --enable-nonfree --enable-version3 --enable-small --disable-vda --disable-iconv \--disable-encoders --enable-libx264 --enable-libfaac --enable-encoder=libx264 --enable-encoder=libfaac \--disable-muxers --enable-muxer=mov --enable-muxer=ipod --enable-muxer=psp --enable-muxer=mp4 --enable-muxer=avi \--disable-decoders --enable-decoder=aac --enable-decoder=aac_latm --enable-decoder=h264 --enable-decoder=mpeg4 \--disable-demuxers --enable-demuxer=h264 --enable-demuxer=avi --enable-demuxer=mpc --enable-demuxer=mov \--disable-parsers --enable-parser=aac --enable-parser=ac3 --enable-parser=h264 \--disable-protocols --enable-protocol=file \--disable-bsfs --enable-bsf=aac_adtstoasc --enable-bsf=h264_mp4toannexb \--disable-indevs --enable-zlib \--disable-outdevs --disable-ffprobe --disable-ffplay --disable-ffmpeg --disable-ffserver --disable-debug \--extra-cflags="-I ../android-lib/include -fPIC -DANDROID -D__thumb__ -mthumb -Wfatal-errors -Wno-deprecated -mfloat-abi=softfp -marm -march=armv7-a" \--extra-ldflags="-L ../android-lib/lib"} build_onemakemake install

–extra-cflags和–extra-ldflags表示的就是我们刚才aac和x264合并的文件
直接运行脚本就会产生一个android文件夹里面包含我们的动态库,这个脚本不用在单独写make和make install因为已经包含到脚本文件中

可能还不太准确,马上会改,以此作为标记