mac環境下編譯FFmpeg
阿新 • • 發佈:2020-12-13
技術標籤:Android
簡介
學習FFmpeg避免不了要學習。ffmpeg和ffmprobe兩個核心的可執行程式,而應用在移動端必不可少的需要編譯成Android可以使用的so庫。本文主要介紹在mac上的FFmpeg的編譯
分為兩部分
- 編譯為mac環境
- 編譯為Android so庫
1 FFmpeg編譯為mac環境
如果沒有安裝yasm的話,會報
FFmpeg yasm/nasm not found or too old. Use --disable-yasm for a crippledbuild
1.1.1 下載YASM
1.1.2 進入yasm目錄
//第一步
cd ~/yasm-1.3.0
//第二步 配置
./configure
//第三步 編譯
make
//第四步 安裝
sudo make install
至此 YASM安裝完畢
安裝SDL
1.2.1 進入sdl目錄
//第一步
cd ~/SDL2-2.0.8
//第二步
./configure
//第三步 編譯
make -j 16
//第四步
sudo make install
1.3. 安裝FFmpeg
去官方找個想要的版本
1.3.1 安裝過程
//第一步 進入下載目錄
$ cd ~/ffmpeg
//第二步 配置
//這裡很關鍵,需要根據不同的配置來進行生產不同的ffmpeg
./configure --prefix=/usr/local/ffmpeg --enable-debug=3 --enable-shared --disable-static
第三步 編譯
make -j 4
第四步 安裝
sudo make install
1.3.2 配置環境變數
//第一步
vi ~/.bash_profile
//第二步
export PATH="$PATH:/usr/local/ffmpeg/bin"
//第三步
source ~/.bash_profile
命令列 ffmpeg 成功
2. 編譯成android 庫
2.1 官網下載ffmpeg
我下載的4.1版本
2.2 下載NDK
不能使用Android studio 的NDK 。我用的17r
2.3 新增指令碼
在ffmpeg解壓後的根目錄下 新建一個android_build.sh 檔案
修改ndk和輸出目錄就好
#!/bin/bash
ADDI_CFLAGS="-marm"
API=19
PLATFORM=arm-linux-androideabi
CPU=x86_64 # 'armeabi-v7a' 'x86_64'
NDK=/Users/yinzelin/ndk/android-ndk-r17c # 修改成自己本地的ndk路徑。
SYSROOT=$NDK/platforms/android-$API/arch-arm/
ISYSROOT=$NDK/sysroot
ASM=$ISYSROOT/usr/include/$PLATFORM
TOOLCHAIN=$NDK/toolchains/$PLATFORM-4.9/prebuilt/darwin-x86_64
OUTPUT=/Users/yinzelin/ffmpeg/ProgramFiles #自己指定一個輸出目錄,用來放生成的檔案的。
function build
{
echo "開始編譯ffmpeg"
./configure \
--prefix=$OUTPUT \
--enable-shared \
--disable-static \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-avdevice \
--disable-doc \
--disable-symver \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--target-os=android \
--arch=armeabi-v7a \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-I$ASM -isysroot $ISYSROOT -Os -fpic -marm" \
--extra-ldflags="-marm" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
# 這裡是定義用幾個CPU編譯,我用4個,一般在5分鐘之內編譯完成
make -j4
make install
echo "編譯結束!"
}
build
2.4 修改配置 為android
開啟ffmpeg根目錄 修改.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)'
2.5 執行指令碼
./build_android.sh
在輸出目錄結果