Android FFMPEG Mac編譯教程

Android FFMPEG Mac編譯教程

需要準備的材料
JDK 1.8
Android SDK
公司項目新需求需要開發音視頻的編輯、合成、剪輯等。
然而對于視頻的各類操作,用作為面向對象語言的Java 或者 kotlin來實現顯然不是一個好的選擇。
Android所提供的Media、Videa、Audio庫只能對音視頻做相對簡單的操作,并不能滿足復雜場景的業務需求。
所以,FFMPEG是不二選擇。

先來看看FFMPEG是個啥

先看一段FFMPEG官方對FFMPEG的介紹:
FFmpeg is the leading multimedia framework, able to decode, encode, transcode, mux, demux, stream, filter and play pretty much anything that humans and machines have created. It supports the most obscure ancient formats up to the cutting edge. No matter if they were designed by some standards committee, the community or a corporation. It is also highly portable: FFmpeg compiles, runs, and passes our testing infrastructure FATE across Linux, Mac OS X, Microsoft Windows, the BSDs, Solaris, etc. under a wide variety of build environments, machine architectures, and configurations.

大概意思:
1、FFMPEG可以做到對視頻文件解碼、編碼、轉碼;
2、可以對多路音視頻復用、解復用;
3、對于音視頻流處理;
4、音視頻的過濾器、播放;
5、支持從遠古時期到現在的幾乎所有格式;
6、Linux、Mac OS、Windows全平臺支持;
7、高可移植性。

OK,廢話不多說,關于FFMPEG的介紹就這些,想要詳細了解的同學自己去官網學習。

FFMPEG各版本下載地址

1、把從官網下載下來的ffmpeg-3.3.6.tar.bz文件解壓。

建議不要下載最新的版本,FFMPEG需要和NDK版本對應,新版本會引入很多新的問題

FFMPEG文件.jpg

2、修改configure文件

Sublime打開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)'

注意別換錯位置,我就是這段代碼替換了錯誤的位置坑了好久

3、在ffmpeg根目錄下新建androidBuilder.sh腳本

寫入:

#!/bin/bash
# 修改為自己NDK包根目錄
export NDK_HOME=/Users/parker/Library/Android/sdk/ndk/android-ndk-r15c
#根據自己的需求修改編譯平臺版本
export PLATFORM_VERSION=android-21
#定義編譯方法
function build
{
    #echo 輸出命令
    echo "start build ffmpeg for $ARCH"
    #調用configure命令開始編譯,并傳入對應的參數
    ./configure --target-os=linux \
    --prefix=$PREFIX --arch=$ARCH \
    --disable-doc \
    --disable-static \
    --disable-yasm \
    --disable-asm \
    --disable-symver \
    --disable-ffmpeg \
    --disable-ffplay \
    --disable-ffprobe \
    --disable-ffserver \
    --cross-prefix=$CROSS_COMPILE \
    --enable-cross-compile \
    --enable-shared \
    --enable-gpl \
    --sysroot=$SYSROOT \
    --enable-small \
    --extra-cflags="-Os -fpic $ADDI_CFLAGS" \
    --extra-ldflags="$ADDI_LDFLAGS" \
    $ADDITIONAL_CONFIGURE_FLAG
    make clean
    make
    make install
    echo "build ffmpeg for $ARCH finished"
}

#編譯 arm-v7a
PLATFORM_VERSION=android-21
ARCH=arm
CPU=armeabi-v7a #CPU架構
PREFIX=$(pwd)/android_all/$CPU  #輸出路徑:當前目錄/android_all/CPU架構/
TOOLCHAIN=$NDK_HOME/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64
CROSS_COMPILE=$TOOLCHAIN/bin/arm-linux-androideabi- #交叉編譯環境路徑
ADDI_CFLAGS="-march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -mthumb -mfpu=neon"
ADDI_LDFLAGS="-march=armv7-a -Wl,--fix-cortex-a8"
SYSROOT=$NDK_HOME/platforms/$PLATFORM_VERSION/arch-$ARCH/
build

保存。

4、打開終端,把androidBuilder.sh拖進去,Enter。

編譯的過程當中會申請很多的權限,一路允許就好。
部分權限需要手動去 偏好設置->安全與隱私 手動授權。
編譯過程大概五到十分鐘。
編譯完成之后,在ffmpeg目錄下會出現新的文件夾android_all.如圖:

編譯完成之后的android_all文件夾.png

armeabi-v7a目錄下的include和lib就是我們引入Android需要使用的頭文件和動態鏈接庫。

到此FFMPEG編譯結束。

備注

如果在整個過程中出現錯誤,排查順序:
如果FFMPEG源碼編譯失敗:

1、檢查自己的NDK版本號和FFMPEG源碼是否對應;
2、檢查androidBuilder.sh中是否正確替換了自己的sdk地址。
3、檢查FFMPEG根目錄下的configure文件中的代碼更換位置是否正確。

后續會寫FFPEG for Android使用教程。

祝各位同僚一切順利!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。