前言
ffmpeg 一套可以用來記錄冷溃、轉(zhuǎn)換數(shù)字音頻浴骂、視頻乓土,并能將其轉(zhuǎn)化為流的開源計算機程序,對于音視頻領域溯警,有著極為重要的地位趣苏。作為一名 Android developer,如要涉足音視頻領域梯轻,編譯使用 ffmpeg 是不可少的進階旅程食磕。下面帶你一步步實現(xiàn) ffmpeg 的編譯,在此之前喳挑,需要準備具有 Linux 環(huán)境的系統(tǒng)彬伦,如 Ubuntu、Mac伊诵,可以弄一個云服務器单绑,也可以裝個虛擬機,讀者自行斟酌曹宴。編譯使用到的 ndk 和 ffmpeg搂橙,ndk 使用的版本是 android-ndk-r16b,ffmpeg 使用的版本是 ffmpeg-3.3.9笛坦。在此建議讀者使用上述文中使用的版本份氧,其他版本會遇到其他問題唯袄,編譯流程也本文不同。
1. 配置環(huán)境變量
下載好了 ndk 和 ffmpeg linux 版本后蜗帜,將解壓后的 ffmpeg 放置于 /lib 目錄下恋拷,在 /lib 下新建目錄 ndk,將 ndk 解壓到 /lib/ndk 目錄下厅缺,然后配置 ndk 環(huán)境變量蔬顾。
配置 ndk 環(huán)境變量,需要在 /etc/profile 文件中進行配置
vegen@vegen-virtual-machine:/lib/ndk/android-ndk-r16b$ sudo vim /etc/profile
[sudo] vegen 的密碼:
開啟文件編輯模式湘捎,在最末端進行 ndk 路徑的配置
/etc/profile
# 最末端配置 ndk 路徑
export NDK_PATH=/lib/ndk/android-ndk-r16b
export PATH=$NDKPATH:$PATH
編輯后 按 Esc
鍵 輸入 :wq
保存
然后刷新系統(tǒng)環(huán)境诀豁,使用 echo $NDK_PATH
命令查看 ndk 路徑,若輸出結(jié)果如下窥妇,則配置成功
vegen@vegen-virtual-machine:/lib/ndk/android-ndk-r16b$ source /etc/profile
vegen@vegen-virtual-machine:/lib/ndk/android-ndk-r16b$ echo $NDK_PATH
/lib/ndk/android-ndk-r16b
2. 編寫 ffmpeg 配置腳本
vegen@vegen-virtual-machine:/lib/ffmpeg-3.3.9$ vim ffmpeg_build.sh
ffmpeg_build.sh
# 用于編譯 android 平臺的腳本
#!/bin/bash
. /etc/profile
# 定義幾個變量
ARCH=arm
CPU=armv7-a
PREFIX=$(pwd)/android/$ARCH/$CPU
ANDROID_TOOLCHAINS_PATH=$NDK_PATH/android-toolchains/android-19/arch-arm
CROSS_PREFIX=$ANDROID_TOOLCHAINS_PATH/bin/arm-linux-androideabi-
SYSROOT=$ANDROID_TOOLCHAINS_PATH/sysroot
build(){
# 執(zhí)行 .configure 文件
./configure --prefix=${PREFIX} \
--enable-gpl \
--disable-static \
--enable-shared \
--enable-small \
--disable-programs \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-doc \
--arch=$ARCH \
--cpu=$CPU \
--cross-prefix=${CROSS_PREFIX} \
--enable-cross-compile \
--sysroot=$SYSROOT \
--target-os=linux \
--extra-cflags="-fpic" \
# makefile 清除舷胜,就是執(zhí)行了 makefile 文件里面的 clean 命令
make clean
# 運行 Makefile
make
# 安裝到指定 prefix 目錄下
make install
# make clean
}
# 執(zhí)行 build 函數(shù)
build
ffmpeg 工程代碼量很多,有時候我們只需要一些不太復雜的音視頻處理活翩,這時就可以有針對性需求地選擇編譯烹骨。
3. 修改 ffmpeg 的 configure 文件
vegen@vegen-virtual-machine:/lib/ffmpeg-3.3.9$ vim configure
在 configure 輸入 /SLIBNAME_WITH_MAJOR= 進行搜索,按 n 查找到下面的代碼段
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='$(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)'
保存退出后材泄,需要安裝 gcc 和 yasm
vegen@vegen-virtual-machine:/lib/ffmpeg-3.3.9$ sudo apt install gcc
vegen@vegen-virtual-machine:/lib/ffmpeg-3.3.9$ sudo apt install yasm
待安裝完成之后沮焕,執(zhí)行 如下命令
vegen@vegen-virtual-machine:/lib/ffmpeg-3.3.9$ sudo ./configure
4. 執(zhí)行編譯腳本
vegen@vegen-virtual-machine:/lib/ffmpeg-3.3.9$ ./ffmpeg_build.sh
至此,編譯 ffmpeg 完成拉宗,若成功峦树,你將看到 android 目錄和如下 so 庫,然后我們將需要的 so 庫和 include 文件引入到我們的項目中就可以愉快地開發(fā)啦旦事。
5. 后話
編譯 ffmpeg 過程中魁巩,可能會遇到很多問題,讀者需要檢查代碼有沒有敲錯姐浮,相關的程序有沒有安裝谷遂,如 Linux 基礎欠缺的,需要讀者自行去學習单料。如有疑問,可在下方評論反饋点楼,后面將推出一些機遇 ffmpeg 的音視頻處理文章扫尖,敬請期待。