Android FFMPEG Mac編譯教程
需要準(zhǔn)備的材料
JDK 1.8
Android SDK
公司項目新需求需要開發(fā)音視頻的編輯碳胳、合成、剪輯等。
然而對于視頻的各類操作货裹,用作為面向?qū)ο笳Z言的Java 或者 kotlin來實現(xiàn)顯然不是一個好的選擇。
Android所提供的Media、Videa鹤树、Audio庫只能對音視頻做相對簡單的操作,并不能滿足復(fù)雜場景的業(yè)務(wù)需求逊朽。
所以罕伯,F(xiàn)FMPEG是不二選擇。
先來看看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可以做到對視頻文件解碼捣炬、編碼、轉(zhuǎn)碼绽榛;
2湿酸、可以對多路音視頻復(fù)用、解復(fù)用灭美;
3推溃、對于音視頻流處理;
4届腐、音視頻的過濾器铁坎、播放蜂奸;
5、支持從遠(yuǎn)古時期到現(xiàn)在的幾乎所有格式硬萍;
6扩所、Linux、Mac OS朴乖、Windows全平臺支持祖屏;
7、高可移植性买羞。
OK袁勺,廢話不多說,關(guān)于FFMPEG的介紹就這些畜普,想要詳細(xì)了解的同學(xué)自己去官網(wǎng)學(xué)習(xí)期丰。
1、把從官網(wǎng)下載下來的ffmpeg-3.3.6.tar.bz文件解壓吃挑。
建議不要下載最新的版本钝荡,F(xiàn)FMPEG需要和NDK版本對應(yīng),新版本會引入很多新的問題
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
#根據(jù)自己的需求修改編譯平臺版本
export PLATFORM_VERSION=android-21
#定義編譯方法
function build
{
#echo 輸出命令
echo "start build ffmpeg for $ARCH"
#調(diào)用configure命令開始編譯,并傳入對應(yīng)的參數(shù)
./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架構(gòu)
PREFIX=$(pwd)/android_all/$CPU #輸出路徑:當(dāng)前目錄/android_all/CPU架構(gòu)/
TOOLCHAIN=$NDK_HOME/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64
CROSS_COMPILE=$TOOLCHAIN/bin/arm-linux-androideabi- #交叉編譯環(huán)境路徑
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圾浅、打開終端,把a(bǔ)ndroidBuilder.sh拖進(jìn)去憾朴,Enter狸捕。
編譯的過程當(dāng)中會申請很多的權(quán)限,一路允許就好众雷。
部分權(quán)限需要手動去 偏好設(shè)置->安全與隱私 手動授權(quán)灸拍。
編譯過程大概五到十分鐘。
編譯完成之后砾省,在ffmpeg目錄下會出現(xiàn)新的文件夾android_all.如圖:
armeabi-v7a目錄下的include和lib就是我們引入Android需要使用的頭文件和動態(tài)鏈接庫鸡岗。
到此FFMPEG編譯結(jié)束。
備注
如果在整個過程中出現(xiàn)錯誤编兄,排查順序:
如果FFMPEG源碼編譯失斝浴:
1、檢查自己的NDK版本號和FFMPEG源碼是否對應(yīng)狠鸳;
2揣苏、檢查androidBuilder.sh中是否正確替換了自己的sdk地址悯嗓。
3、檢查FFMPEG根目錄下的configure文件中的代碼更換位置是否正確卸察。
后續(xù)會寫FFPEG for Android使用教程脯厨。
祝各位同僚一切順利!