前言
近期需要用到FFmpeg的庫,來做視頻流的處理,今天嘗試實現(xiàn)了一下,手動編譯FFmpeg,然后引入到Android項目去使用。
配置ndk環(huán)境
- NDK下載:“wget https://dl.google.com/android/repository/android-ndk-r21b-linux-x86_64.zip” 直接在linux上進(jìn)行下載,或者也可以在windows端下載后,再利用xftp上傳到linux。
- unzip命令解壓
unzip android-ndk-r21b-linux-x86_64.zip
- 將ndk解壓的文件copy到/usr/ndk/目錄下(這個看個人想把ndk放在那里)
mv /home/jason/android-ndk-r21b /usr/ndk
- 配置ndk的環(huán)境變量
vim編輯打開bashrc文件
vim ~/.bashrc
加入ndk的環(huán)境配置
export NDKROOT=/usr/ndk/android-ndk-r21b
export PATH=$NDKROOT:$PATH
如下圖

ndk的環(huán)境變量配置.png
退出按ESC,然后再按Shift+;
最后輸入wq 保存退出
使ndk環(huán)境變量生效
source ~/.bashrc
-
檢測NDK環(huán)境配置
直接ndk-build,如下圖:表示成功
linux中檢測ndk是否安裝成功.png
FFmpeg的編譯
FFmpeg的歷史版本的官方地址http://ffmpeg.org/releases/
- 下載FFmpeg: “wget https://www.ffmpeg.org/releases/ffmpeg-4.0.2.tar.gz” 或者windows下載后再利用xftp上傳到linux上。
- 解壓
tar -xzf ffmpeg-4.0.2.tar.gz
- 修改解壓后的文件夾ffmpeg-4.0.2中的configure,如果不修改,打出來的動態(tài)庫就不是android工程識別的(.so)結(jié)尾的庫文件,導(dǎo)入到工程無法使用
替換前的源碼:
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)'
源碼的位置:FFmpeg4.0.2是在3566行

源碼的位置.png
- 編寫編譯腳本
創(chuàng)建腳本文件,并且授予可執(zhí)行權(quán)限
touch build_android.sh
chmod 777 build_android.sh
編寫編譯腳本
#!/bin/bash
# 清空上次的編譯
make clean
#你自己的NDK路徑。
export NDK=/usr/ndk/android-ndk-r21b
# 設(shè)置你的android平臺編譯器的版本 這里采用Android4.0
export SYSROOT=$NDK/platforms/android-16/arch-arm/
#編譯使用的toolchain
export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
export CPU=arm
# 這個是輸出的路徑
export PREFIX=$(pwd)/android/$CPU
export ADDI_CFLAGS="-marm"
./configure --target-os=linux \
--prefix=$PREFIX --arch=arm \
--disable-doc \
--enable-shared \
--disable-static \
--disable-x86asm \
--disable-symver \
--enable-gpl \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-doc \
--disable-symver \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
保存退出,開始編譯:大概要一二十分鐘
./build_android.sh
最終結(jié)果:可以看到多個android目錄,里面有arm目錄,arm目錄下有生產(chǎn)的頭文件和庫文件

image.png
