FFmpeg4.0.2 編譯成Android動態(tài)庫

前言

近期需要用到FFmpeg的庫,來做視頻流的處理,今天嘗試實現(xiàn)了一下,手動編譯FFmpeg,然后引入到Android項目去使用。

配置ndk環(huán)境

  1. NDK下載:“wget https://dl.google.com/android/repository/android-ndk-r21b-linux-x86_64.zip” 直接在linux上進(jìn)行下載,或者也可以在windows端下載后,再利用xftp上傳到linux。
  2. unzip命令解壓
unzip android-ndk-r21b-linux-x86_64.zip
  1. 將ndk解壓的文件copy到/usr/ndk/目錄下(這個看個人想把ndk放在那里)
mv /home/jason/android-ndk-r21b  /usr/ndk
  1. 配置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
  1. 檢測NDK環(huán)境配置
    直接ndk-build,如下圖:表示成功


    linux中檢測ndk是否安裝成功.png

FFmpeg的編譯

FFmpeg的歷史版本的官方地址http://ffmpeg.org/releases/

  1. 下載FFmpeg: “wget https://www.ffmpeg.org/releases/ffmpeg-4.0.2.tar.gz” 或者windows下載后再利用xftp上傳到linux上。
  2. 解壓
tar -xzf  ffmpeg-4.0.2.tar.gz
  1. 修改解壓后的文件夾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
  1. 編寫編譯腳本
    創(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
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容