ffmpeg+x264+fdk-aac+lame編譯

  • 背景
    http://www.reibang.com/p/0f789641b2af
    上篇這個說道window下混編android的ffmpeg包,但是想接入x264,fdk-acc,lame還是需要注意很多細節(jié)的丸卷,x264是視頻的編碼包涕滋,fdk-acc是acc編碼包扭勉,lame是mp3的編碼包。步驟肯定是先編譯每個模塊成功后,才做整體的編譯,不然直接整體編譯静袖,都不好調(diào)試
    那下面就分別和總體說明編譯的腳本

  • 環(huán)境
    環(huán)境是在window下的bash環(huán)境,參照上方的鏈接俊扭,在window中搭建linux的子系統(tǒng)队橙,然后訪問window的硬盤空間可以/mnt/+硬盤,比如說D盤:/mnt/d/

  • x264編譯
    編譯的腳本:

#!/bin/bash
NDK=/mnt/d/IdeSDK/ndk/android-ndk-r14b-linux
SYSROOT=$NDK/platforms/android-14/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64

CPU=armv7-a
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS=""
ADDI_LDFLAGS=""
function build_x264
{
./configure \
    --prefix=$PREFIX \
    --disable-asm \
    --enable-static \
    --enable-shared \
    --enable-pic \
    --enable-strip \
    --host=arm-linux-androideabi \
    --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
    --sysroot=$SYSROOT
    --extra-cflags="-Os -fpic $ADDI_CFLAGS $OPTIMIZE_CFLAGS" \
    --extra-ldflags="$ADDI_LDFLAGS" \
    $ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
}
build_x264

要注意的是,下面兩句要加上萨惑,因為我要用子模塊的靜態(tài)庫編譯去編譯一個總的ffmepg.so動態(tài)庫

    --extra-cflags="-Os -fpic $ADDI_CFLAGS $OPTIMIZE_CFLAGS" \
    --extra-ldflags="$ADDI_LDFLAGS" \
  • fdk-acc 編譯
#!/bin/bash
NDK=/mnt/d/IdeSDK/ndk/android-ndk-r14b-linux
SYSROOT=$NDK/platforms/android-14/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
CPU=armv7-a
PREFIX=$(pwd)/android/$CPU
PLATFORM=$NDK/platforms/android-14/arch-arm
CROSS_COMPILE=$TOOLCHAIN/bin/arm-linux-androideabi-
CFLAGS=""
FLAGS="--enable-static  --host=$HOST --target=android --disable-asm "

export CXX="${CROSS_COMPILE}g++ --sysroot=${SYSROOT}"
export LDFLAGS=" -L$SYSROOT/usr/lib  $CFLAGS "
export CXXFLAGS=$CFLAGS
export CFLAGS=$CFLAGS
export CC="${CROSS_COMPILE}gcc --sysroot=${SYSROOT}"
export AR="${CROSS_COMPILE}ar"
export LD="${CROSS_COMPILE}ld"
export AS="${CROSS_COMPILE}gcc"
function build_acc
{
./configure \
    --prefix=$PREFIX \
    --disable-asm \
    --enable-static \
    --enable-shared \
    --target=android \
    --enable-pic \
    --enable-strip \
    --host=arm-linux-androideabi \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
}
build_acc

編譯acc的時候捐康,花了好多時間,因為它跟x264的編譯方式不是一門路庸蔼,不用在configure 中配置交叉混編的參數(shù)解总,而是通過設(shè)置環(huán)境變量的參數(shù)來做的,即設(shè)置一系列的環(huán)境變量

export LDFLAGS=" -L$SYSROOT/usr/lib  $CFLAGS "
export CXXFLAGS=$CFLAGS
export CFLAGS=$CFLAGS
...
  • lame編譯
#!/bin/bash
NDK=/mnt/d/IdeSDK/ndk/android-ndk-r14b-linux
SYSROOT=$NDK/platforms/android-14/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
HOME=$(dirname "$PWD")
CPU=armv7-a
PREFIX=$(pwd)/android/$CPU

CROSS_PREFIX=$TOOLCHAIN/bin/arm-linux-androideabi-
export CC="${CROSS_PREFIX}gcc --sysroot=${SYSROOT}"
export LD="${CROSS_PREFIX}ld"
export RANLIB="${CROSS_PREFIX}ranlib"
export STRIP="${CROSS_PREFIX}strip"
export READELF="${CROSS_PREFIX}readelf"
export OBJDUMP="${CROSS_PREFIX}objdump"
export ADDR2LINE="${CROSS_PREFIX}addr2line"
export AR="${CROSS_PREFIX}ar"
export AS="${CROSS_PREFIX}as"
export CXX="${CROSS_PREFIX}g++"
export OBJCOPY="${CROSS_PREFIX}objcopy"
export ELFEDIT="${CROSS_PREFIX}elfedit"
export CPP="${CROSS_PREFIX}cpp --sysroot=${SYSROOT}"
export DWP="${CROSS_PREFIX}dwp"
export GCONV="${CROSS_PREFIX}gconv"
export GDP="${CROSS_PREFIX}gdb"
export GPROF="${CROSS_PREFIX}gprof"
export NM="${CROSS_PREFIX}nm"
export SIZE="${CROSS_PREFIX}size"
export STRINGS="${CROSS_PREFIX}strings"
function build_lame
{
./configure \
    --with-pic \
    --prefix=$PREFIX \
    --bindir="$HOME/bin" \
    --enable-nasm \
    --enable-static \
    --enable-shared \
    --host=arm-linux \
    --with-sysroot=$SYSROOT
    $ADDITIONAL_CONFIGURE_FLAG
   #make clean
   #make
   #make install
}
build_lame

這句代碼記得加上朱嘴,--bindir="$HOME/bin" \,另外lame跟acc編譯方案類似,采用export配置環(huán)境變量的方式去編譯腳本

  • ffmpeg編譯腳本
    最后是總的ffmpeg的編譯腳本萍嬉,需要注意的是乌昔,設(shè)置上面x264,acc,lame的頭文件和外部包地址:
    --extra-cflags="-I$FDK_INCLUDE -I$X264_INCLUDE -I$LAME_INCLUDE" \
    --extra-ldflags="-L$FDK_LIB -L$X264_LIB -L$LAME_LIB" \

這樣才能識別到子模塊編譯的包,打開--enable-gpl \狀態(tài)
總體腳本如下

#!/bin/bash
# 設(shè)置臨時文件夾壤追,需要提前手動創(chuàng)建
#export TMPDIR="/home/yangle/ffmpeg/ffmpeg-4.0/ffmpegtemp"
# 設(shè)置NDK路徑 D:\IdeSDK\ndk\android-ndk-r14b-linux
NDK=/mnt/d/IdeSDK/ndk/android-ndk-r14b-linux
# 設(shè)置編譯針對的平臺磕道,可以根據(jù)自己的需求進行設(shè)置
# 當(dāng)前設(shè)置為最低支持android-14版本,arm架構(gòu)
SYSROOT=$NDK/platforms/android-14/arch-arm/
# 設(shè)置編譯工具鏈行冰,4.9為版本號
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64

# 設(shè)置編譯后的文件輸出目錄
CPU=armv7-a
PREFIX=$(pwd)/android/$CPU
#lix264和libfdk_acc庫地址(ffmpeg目錄)
LIBS_DIR=$(dirname "$PWD")
#默認路徑-L/usr/local/lib
X264_INCLUDE=$LIBS_DIR/x264/android/$CPU/include
X264_LIB=$LIBS_DIR/x264/android/$CPU/lib
FDK_INCLUDE=$LIBS_DIR/fdk-aac-016/android/$CPU/include
FDK_LIB=$LIBS_DIR/fdk-aac-016/android/$CPU/lib
#libmp3lame
LAME_INCLUDE=$LIBS_DIR/lame-3.99.5/android/$CPU/include
LAME_LIB=$LIBS_DIR/lame-3.99.5/android/$CPU/lib
function build_one
{
./configure \
    --arch=arm \
    --enable-small \
    --enable-cross-compile \
    --disable-protocols \
    --enable-protocol=file \
    --enable-protocol=concat \
    --disable-filters \
    --enable-filter=aresample \
    --enable-filter=asetpts \
    --enable-filter=setpts \
    --enable-filter=ass \
    --enable-filter=scale \
    --enable-filter=concat \
    --enable-filter=atempo \
    --enable-filter=movie \
    --enable-filter=overlay \
    --enable-filter=rotate \
    --enable-filter=transpose \
    --enable-filter=hflip \
    --enable-filter=amix \
    --enable-filter=fade \
    --enable-filter=afade \
    --enable-filter=areverse \
    --enable-filter=volume \
    --enable-filter=aevalsrc \
    --enable-filter=adelay \
    --disable-encoders \
    --enable-encoder=libx264 \
    --enable-encoder=libfdk_aac \
    --enable-encoder=aac \
    --enable-encoder=libmp3lame \
    --enable-encoder=mjpeg \
    --enable-encoder=mpeg4 \
    --enable-encoder=rawvideo \
    --enable-encoder=png \
    --enable-encoder=gif \
    --disable-decoders \
    --enable-decoder=rawvideo \
    --enable-decoder=mjpeg \
    --enable-decoder=mpeg4 \
    --enable-decoder=h264 \
    --enable-decoder=aac \
    --enable-decoder=mp3 \
    --enable-decoder=aac_latm \
    --enable-decoder=gif \
    --enable-decoder=png \
    --enable-decoder=pcm_f16le \
    --enable-decoder=pcm_f24le \
    --enable-decoder=pcm_f32be \
    --enable-decoder=pcm_f32le \
    --enable-decoder=pcm_f64be \
    --enable-decoder=pcm_f64le \
    --enable-decoder=libfdk_aac \
    --disable-muxers \
    --enable-muxer=mov \
    --enable-muxer=mp4 \
    --enable-muxer=mp3 \
    --enable-muxer=h264 \
    --enable-muxer=mpjpeg \
    --enable-muxer=rawvideo \
    --enable-muxer=wav \
    --enable-muxer=mpegts \
    --enable-muxer=dts \
    --enable-muxer=gif \
    --enable-muxer=flv \
    --disable-demuxers \
    --enable-demuxer=mov \
    --enable-demuxer=h264 \
    --enable-demuxer=aac \
    --enable-demuxer=mp3 \
    --enable-demuxer=rawvideo \
    --enable-demuxer=avi \
    --enable-demuxer=wav \
    --enable-demuxer=flv \
    --enable-demuxer=gif \
    --enable-demuxer=ogg \
    --enable-demuxer=dts \
    --enable-demuxer=m4v \
    --enable-demuxer=concat \
    --enable-demuxer=mpegts \
    --enable-demuxer=mjpeg \
    --disable-parsers \
    --enable-parser=aac \
    --enable-parser=h264 \
    --enable-parser=mpeg4video \
    --enable-parser=mjpeg \
    --enable-parser=ac3 \
    --enable-parser=png \
    --enable-parser=mpegaudio \
    --enable-zlib \
    --disable-shared \
    --enable-static \
    --enable-version3 \
    --enable-pthreads \
    --disable-network \
    --enable-nonfree \
    --disable-vda \
    --disable-iconv \
    --disable-outdevs \
    --enable-asm \
    --enable-neon \
    --enable-runtime-cpudetect \
    --enable-gpl \
    --enable-libx264 \
    --enable-libfdk-aac \
    --enable-libmp3lame \
    --enable-nonfree \
    --extra-cflags="-I$FDK_INCLUDE -I$X264_INCLUDE -I$LAME_INCLUDE" \
    --extra-ldflags="-L$FDK_LIB -L$X264_LIB -L$LAME_LIB" \
    --enable-jni \
    --enable-mediacodec \
    --disable-debug \
    --enable-ffmpeg \
    --disable-ffplay \
    --disable-ffprobe \
    --disable-ffserver \
    --disable-postproc \
    --enable-avdevice \
    --disable-stripping \
    --disable-doc \
    --disable-symver \
    --prefix=$PREFIX \
    --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
    --target-os=android \
    --cpu=$CPU \
    --sysroot=$SYSROOT \
    --bindir="$LIBS_DIR/bin" \
    --extra-cflags="-DANDROID -fPIC -ffunction-sections -funwind-tables -fstack-protector -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -fomit-frame-pointer -fstrict-aliasing -funswitch-loops -finline-limit=300 -O3 -Wall -pipe -ffast-math -fstrict-aliasing -Werror=strict-aliasing -Wno-psabi -Wa,--noexecstack -DANDROID " \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
}
build_one

$TOOLCHAIN/bin/arm-linux-androideabi-ld \
-rpath-link=$SYSROOT/usr/lib \
-L$SYSROOT/usr/lib \
-L$PREFIX/lib \
-soname libffmpeg.so -shared -nostdlib -Bsymbolic --whole-archive --no-undefined -o \
$PREFIX/libffmpeg.so \
libavcodec/libavcodec.a \
libavfilter/libavfilter.a \
libswresample/libswresample.a \
libavformat/libavformat.a \
$X264_LIB/libx264.a \
$FDK_LIB/libfdk-aac.a \
$LAME_LIB/libmp3lame.a \
libavutil/libavutil.a \
libswscale/libswscale.a \
libavdevice/libavdevice.a \
libpostproc/libpostproc.a \
-lc -lm -lz -ldl -llog --dynamic-linker=/system/bin/linker \
$TOOLCHAIN/lib/gcc/arm-linux-androideabi/4.9.x/libgcc.a \
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末溺蕉,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子悼做,更是在濱河造成了極大的恐慌疯特,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肛走,死亡現(xiàn)場離奇詭異漓雅,居然都是意外死亡,警方通過查閱死者的電腦和手機朽色,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門邻吞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人葫男,你說我怎么就攤上這事抱冷。” “怎么了梢褐?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵旺遮,是天一觀的道長。 經(jīng)常有香客問我利职,道長趣效,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任猪贪,我火速辦了婚禮跷敬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘热押。我一直安慰自己西傀,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布桶癣。 她就那樣靜靜地躺著拥褂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪牙寞。 梳的紋絲不亂的頭發(fā)上饺鹃,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天莫秆,我揣著相機與錄音,去河邊找鬼悔详。 笑死镊屎,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的茄螃。 我是一名探鬼主播缝驳,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼归苍!你這毒婦竟也來了用狱?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤拼弃,失蹤者是張志新(化名)和其女友劉穎夏伊,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肴敛,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡署海,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了医男。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片砸狞。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖镀梭,靈堂內(nèi)的尸體忽然破棺而出刀森,到底是詐尸還是另有隱情,我是刑警寧澤报账,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布研底,位于F島的核電站,受9級特大地震影響透罢,放射性物質(zhì)發(fā)生泄漏榜晦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一羽圃、第九天 我趴在偏房一處隱蔽的房頂上張望乾胶。 院中可真熱鬧,春花似錦朽寞、人聲如沸识窿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽喻频。三九已至,卻和暖如春肘迎,著一層夾襖步出監(jiān)牢的瞬間甥温,已是汗流浹背锻煌。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留姻蚓,地道東北人炼幔。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像史简,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子肛著,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,435評論 2 359