FFmpeg 編譯步驟:
- 配置環境(NDK,FFmpeg安裝包)
- 配置FFmpeg的shell腳本
- 執行腳本生成so庫
本文使用的是目前最新的版本 ffmpeg-4.2.3。
- 修改 configure 腳本,新增 cross_prefix_clang 參數
打開根目錄下的 configure 文件,搜索 CMDLINE_SET ,可以找到以下代碼,然後新增一個命令行選項:cross_prefix_clang
- 修改編譯工具路徑設置
搜索 ar_default="${cross_prefix}${ar_default}" , 找到以下代碼
ar_default="${cross_prefix}${ar_default}"
cc_default="${cross_prefix}${cc_default}"
cxx_default="${cross_prefix}${cxx_default}"
nm_default="${cross_prefix}${nm_default}"
pkg_config_default="${cross_prefix}${pkg_config_default}"
將中間兩行修改爲
ar_default="${cross_prefix}${ar_default}"
#------------------------------------------------
cc_default="${cross_prefix_clang}${cc_default}"
cxx_default="${cross_prefix_clang}${cxx_default}"
#------------------------------------------------
nm_default="${cross_prefix}${nm_default}"
pkg_config_default="${cross_prefix}${pkg_config_default}"
- 新建編譯配置腳本
在根目錄下新建 shell 腳本,命名爲: build_android_clang.sh
#!/bin/bash
set -x
# 目標Android版本
API=21
CPU=armv7-a
#so庫輸出目錄
OUTPUT=/Users/jxgao/Desktop/FFmpeg/ffmpeg-4.2.3/android/$CPU
# NDK的路徑,根據自己的NDK位置進行設置
NDK=/Users/jxgao/Library/Android/sdk/ndk/21.0.6113669
# 編譯工具鏈路徑
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/darwin-x86_64
# 編譯環境
SYSROOT=$TOOLCHAIN/sysroot
function build
{
./configure \
--prefix=$OUTPUT \
--target-os=android \
--arch=arm \
--cpu=armv7-a \
--enable-asm \
--enable-neon \
--enable-cross-compile \
--enable-shared \
--disable-static \
--disable-doc \
--disable-programs \
--disable-symver \
--sysroot=$SYSROOT \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--cross-prefix-clang=$TOOLCHAIN/bin/armv7a-linux-androideabi$API- \
--extra-cflags="-fPIC"
make clean all
# 這裏是定義用幾個CPU編譯
make -j12
make install
}
build
然後執行build_android_clang.sh
FFmpeg是由組件構成的
libavformat:用於各種音視頻封裝格式的生成和解析,包括獲取解碼所需信息以生成解碼上下文結構
和讀取音視頻幀等功能;
libavcodec:用於各種類型聲音/圖像編解碼;
libavutil:包含一些公共的工具函數;
libswscale:用於視頻場景比例縮放、色彩映射轉換;
libpostproc:用於後期效果處理;
ffmpeg:該項目提供的一個工具,可用於格式轉換、解碼或電視卡即時編碼等;
ffsever:一個 HTTP 多媒體即時廣播串流服務器;
ffplay:是一個簡單的播放器,使用ffmpeg 庫解析和解碼,通過SDL顯示;