1. 程式人生 > >mac 平臺下編譯android版本 ffmpeg+h264

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