ubuntu下編譯ffmpeg的過程

後續一段時間準備音視頻相關知識的學習,所以先編譯ffmpeg做練習用.

以最新版本的android api 29, ndk21, ffmpeg4.2,編譯ffmpeg庫文件.

1,環境配置,

1)安裝yasm,如果沒有安裝會報nasm not found的錯誤.

下載 http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz

解壓後,進入目錄:cd yasm-1.3.0

執行配置 ./configure

編譯 :make

安裝 make install (這一步使用root權限)

2,ndk的配置,

1)下載 https://developer.android.google.cn/ndk/downloads/ 選擇 linux版本的ndk

2)解壓後,配置ndk環境

vim ~/.bashrc
# 在文件末尾添加
export NDKROOT=/home/**/ndk/android-ndk-r21
exprot PATH=$NDKROOT:$PATH
# 保存退出,更新一下環境變量
source ~/.bashrc

或者配置 ~/.profile文件,功能是類似的.

.bashrc和.profile這兩種配置環境參數的區別,大概時profile是以login方式進入bash環境運行的,意思是要用戶登錄才行;

bashrc是交互式non-login方式進入bash運行,用戶可以不登錄,只要以用戶身份運行就會讀取這個文件.

配好環境,執行./ndk-build 不提示命令找不到就OK了.

3, 下載ffmpeg源碼包,因爲ubuntu從github clone太慢,還是從官網下載較好

http://www.ffmpeg.org/download.html

下載後解壓就OK了

4,編譯共享庫

創建.sh腳本文件:build_bash.sh

#!/bin/bash
#這裏NDK路徑路徑改成自己的,
#交叉編譯的工具鏈指向NDK目錄下的位置,改成自己的
NDK=/home/linjw/Android/Sdk/ndk/21.0.6113669
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64
API=29

function build_android
{
echo "Compiling FFmpeg for $CPU"
#configure的目錄根據ffmpeg解壓路徑選擇.
./ffmpeg-4.2.2/configure \
--prefix=$PREFIX \
--disable-neon \
--disable-hwaccels \
--disable-gpl \
--disable-postproc \
--enable-shared \
--enable-jni \
--disable-mediacodec \
--disable-decoder=h264_mediacodec \
--disable-static \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-avdevice \
--disable-doc \
--disable-symver \
--cross-prefix=$CROSS_PREFIX \
--target-os=android \
--arch=$ARCH \
--cpu=$CPU \
--cc=$CC
--cxx=$CXX--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $OPTIMIZE_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
echo "The Compilation of FFmpeg for $CPU is completed"
}

#x86_64
ARCH=x86_64
CPU=x86-64
CC=$TOOLCHAIN/bin/x86_64-linux-android$API-clang
CXX=$TOOLCHAIN/bin/x86_64-linux-android$API-clang++
SYSROOT=$NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot
CROSS_PREFIX=$TOOLCHAIN/bin/x86_64-linux-android-
PREFIX=$(pwd)/android/$CPU
OPTIMIZE_CFLAGS="-march=$CPU -msse4.2 -mpopcnt -m64 -mtune=intel"
build_android

#armv8-a
ARCH=arm64
CPU=armv8-a
CC=$TOOLCHAIN/bin/aarch64-linux-android$API-clang
CXX=$TOOLCHAIN/bin/aarch64-linux-android$API-clang++
SYSROOT=$NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot
CROSS_PREFIX=$TOOLCHAIN/bin/aarch64-linux-android-
PREFIX=$(pwd)/android/$CPU
OPTIMIZE_CFLAGS="-march=$CPU"
build_android
#armv7-a
ARCH=arm
CPU=armv7-a
CC=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang
CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang++
SYSROOT=$NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot
CROSS_PREFIX=$TOOLCHAIN/bin/arm-linux-androideabi-
PREFIX=$(pwd)/android/$CPU
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU "
build_android

環境配置好,腳本寫好,整個編譯過程還是很順利的,這裏只針對cpu架構armv7-a,armv8-a,x86-64編譯共享庫.

編譯完成後,會在你執行bash腳本的目錄下生成android文件下,裏面就是完成編譯的共享庫,及頭文件.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章