交叉編譯-Mac環境使用NDK編譯FFmpeg

概述

FFmpeg是一套很是強大的音視頻處理工具,在音視頻領域絕對是一個元老級的存在,圍繞FFmpeh能夠進行音視頻編解碼,裁剪,拼接等操做。 今天的主題就是使用NDK進行教交叉編譯,生成so文件在Android上使用html

個人編譯環境:
  • FFmpeg v3.0.11 (以前測試最新版3.3.4編譯失敗)
  • macOS
  • NDK android-ndk-r14b
  • Android Studio 3.1

下載FFmpeg源碼

FFmpeg官網下載:www.ffmpeg.org/download.ht…python

也能夠Git下載 git clone git.ffmpeg.org/ffmpeg.git ffmpeglinux

配置腳本

默認編譯出來的so庫版本號是在.so以後,Android識別不了,因此要修改configure文件android

使用sublime打開configure,大概在3305行git

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)'
複製代碼

把上面幾行直接改爲ide

SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)$(LIBMAJOR)$(SLIBSUF)' 
LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'  
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'  
SLIB_INSTALL_LINKS='$(SLIBNAME)'
複製代碼

配置build_android.sh

這個文件須要本身在FFmpeg根目錄下手動建立,直接在sublime新建一個.sh文件。此腳本網上不少,大部分能夠直接拿過來使用,可是要注意修改NDK目錄。下面我提供一個修改以後的腳本以供參考工具

# ndk環境 
export NDK=/Users/CH/Learn/android-ndk-r14b
export SYSROOT=$NDK/platforms/android-14/arch-arm
export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64
CPU=armv7-a

# 要保存動態庫的目錄,這裏保存在源碼根目錄下的android/armv7-a
export PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS="-marm"
function build_android
{
./configure 
	--target-os=linux 
	--prefix=$PREFIX \
    --enable-cross-compile \
    --enable-shared \
    --disable-static \
    --disable-doc \
    --disable-ffmpeg \
    --disable-ffplay \
    --disable-ffprobe \
    --disable-ffserver \
    --enable-avdevice \
    --disable-doc \
    --disable-symver \
    --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
    --arch=arm \
    --sysroot=$SYSROOT \
    --extra-cflags="-Os -fpic $ADDI_CFLAGS" \
    --extra-ldflags="$ADDI_LDFLAGS" \
    $ADDITIONAL_CONFIGURE_FLAG
make clean
# 不肯定本身上面的目錄或者環境有沒有錯誤時
# 能夠先註釋一下下面兩個命令
# make
# make install
}
build_android
複製代碼

執行腳本

進入到腳本根目錄,若是你是第一次執行可能會提示權限不足,以下:測試

Permission deniedui

授予權限便可:google

chmod 777 build_android.sh
複製代碼

而後從新執行

./build_android.sh
複製代碼

此處若是腳本文件環境配置正常會提示一個WARNING,不用管它繼續執行

make
複製代碼

大概15分鐘以後執行結束根目錄下你配置的輸出目錄下看到.so文件和頭文件兩個文件夾,以下圖:

提示

儘可能先執行./build_android 確認配置無問題在執行 make 和 makeinstall 由於編譯一次大概十幾分鍾。因此說必定先確認環境,目錄無問題在執行 make

問題

1 .在執行./build_android.sh 時報錯以下

nasm/yasm not found or too old. Use --disable-x86asm for a crippled build

那就說明你沒有安裝彙編工具yasm

直接在終端執行

brew install yasm
複製代碼

便可安裝

2.在輸出目錄時報錯大概以下

No such file or directory make: Error 127

這說明你的輸出目錄找不到,儘可能不要把輸出目錄建在系統下。還有一點最好手動把輸出目錄設置爲可讀寫(雖然可能已是可讀寫了~)

3.新版本FFpmeg編譯失敗

目前在我編譯過程當中最新版本3.4.2是不行的,我目前使用的是3.0.11

4.最好不要使用androidstudio下載的ndk

到官網手動 下載ndk(我使用的是android-ndk-r14b)

developer.android.google.cn/ndk/downloa…

總結

編譯過程當中必定要耐心再耐心~特別像我這種不會C不會Linux的,簡直是在看天書各類google,下一篇會講述把so包集成到Android中。

相關文章
相關標籤/搜索