mac 平臺下編譯android版本 ffmpeg+h264
網上很多例子,但是試了很多都沒有都沒有弄好,最後經過長時間的試錯,終於弄好了,放到android 裡沒有問題。
系統環境:os 10.11.5
ndk r12
1,首先下載ffmpeg 2.5.11 https://ffmpeg.org/解壓
2,下載x264 http://download.videolan.org/pub/videolan/x264/snapshots/最新的版本 解壓
3,x264編譯 修改一下configure檔案:
找到libx264.so.$API修改為libx264.so[如不修改,生成的動態庫為libx264.so.148,android無法識別]
在x264主目錄中新建shell指令碼build_android.sh
#!/bin/bash
NDK=/Users/weifengxu/android/tool/android-sdk-macosx/ndk-bundle
#NDK= 換成自己的ndk主目錄
SYSROOT=$NDK/platforms/android-15/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64
function build_one
{
bash ./configure \
--prefix=$PREFIX \
--cross-prefix=$TOOLCHAIN /bin/arm-linux-androideabi- \
--sysroot="$SYSROOT" \
--host=arm-linux \
--enable-pic \
--enable-shared \
--enable-static \
--disable-cli
make
make install
}
CPU=arm
PREFIX=/usr/local
build_one
編譯的成功與失敗關鍵就在shell指令碼上,一點失誤就編譯不成功
編譯開始:在終端輸切換到x264主目錄後入如下命令:
(1)獲取超級使用者許可權
sudo -s
(2)輸入密碼即可
(3)sudo chmod +x build_android.sh
(4)./build_android.sh
執行幾分鐘後編譯完成
切換到 /usr/local目錄下會看到include 和lib兩個資料夾,開啟lib會看到libx264.so檔案,開啟include看到x264.h和x264_config.h,
編譯成功!
可能出現問題:/usr/local/lib無libx264.so,而其他檔案都存在,沒關係,copy x264主檔案目錄下的libx264.so到/usr/local/lib即可
4,編譯ffmpeg
ffmpeg依賴x264,而前面已經吧x264編譯好了。
(1)修改configure:
把一下內容
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR)$(SLIBNAME)'
改為
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
SLIB_INSTALL_LINKS='$(SLIBNAME)'
這樣生成的.so檔案末尾不會攜帶版本資訊[.so.123]
(2)在ffmpeg主目錄中建立shell指令碼:build_android.sh
內容如下:
#!/bin/bash
NDK=/Users/weifengxu/android/tool/android-sdk-macosx/ndk-bundle
#NDK= 改成自己的NDK路徑
export PATH=$PATH:$NDK
SYSROOT=$NDK/platforms/android-15/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64
function build_one
{
bash ./configure \
--prefix=$PREFIX \
--enable-shared \
--disable-static \
--disable-doc \
--disable-ffserver \
--enable-cross-compile \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--target-os=linux \
--arch=arm \
--enable-gpl \
--enable-libx264 \
--enable-decoder=h264 \
--enable-encoder=libx264 \
--extra-libs=-lgcc \
--sysroot=$SYSROOT \
--enable-asm \
--enable-neon \
--extra-cflags=-I/usr/local/include \
--extra-ldflags=-L/usr/local/lib \
$ADDITIONAL_CONFIGURE_FLAG
make
make install
}
CPU=arm
PREFIX=/usr/local
ADDI_CFLAGS="-marm -mfpu=neon"
build_one
終端切換到ffmepeg根目錄下執行如下命令
獲取超級使用者許可權
sudo -s
輸入密碼即可
sudo chmod +x build_android.sh
./build_android.sh
執行10分鐘左右後編譯完成
切換到 /usr/local目錄下
編譯成功!
/usr/local/include 和/usr/local/lib檔案內容就是捆綁了 h264的ffmpeg