本文用于記錄Linux環(huán)境下編譯最新FFmpeg(3.3.3)庫過程痹雅,方便后續(xù)參考仰担。
1.編譯環(huán)境
- Linux環(huán)境:Ubuntu14.04-64bit(使用的虛擬機(jī)是VMware9,本人的系統(tǒng)是Win7-64bit)
- SDK版本:24.4.1 Android SDK下載地址
- NDK版本:r13b练慕, 鏈接和SDK相同
- git版本管理工具
2. 編譯過程
1. 下載FFmpeg源碼
源碼下載方式有很多種惰匙,可以使用git下載,可以直接zip下載铃将,也可以直接去官網(wǎng)下載项鬼,我采用最簡單的git下載方式。由于我的電腦在linux環(huán)境下下載太慢劲阎,故我首先在win環(huán)境下下載绘盟,然后拷貝到ubuntu中,速度快很多。
??下載方法:
git clone https://github.com/FFmpeg/FFmpeg.git
2.配置Linux環(huán)境下的SDK和NDK路徑龄毡,相當(dāng)于win環(huán)境下的環(huán)境變量
對下載的SDK和NDK進(jìn)行解壓縮操作(要熟悉linux常用命令吠卷,這里不再詳述),我將這兩個(gè)文件放置到了/home/hha/android下面沦零,然后進(jìn)行下面操作配置路徑(配置路徑的作用是為了在編譯過程中祭隔,讓FFmpeg編譯腳本知道sdk和ndk在哪里)。
1.vim ~/.bash_profile
2.在打開的該文件中寫入:
export ANDROID_SDK=/home/hha/android/android-sdk-linux
export ANDROID_NDK=/home/hha/android/android-ndk-r13b
export PATH=$PATH:$ANDROID_NDK:$ANDROID_SDK/tools:$ANDROID_SDK/platforms
3.退出保存文件 (要熟悉vim的常用操作)
4.使配置生效 : source ~/.bash_profile
3.配置編譯環(huán)境
如果自己去寫配置腳本路操,難度有點(diǎn)大疾渴,我這里直接使用github上高手寫好的腳本,可以直接使用屯仗,對于的鏈接為高手寫的linux環(huán)境編譯FFmpeg腳本搞坝,該鏈接有寫具體如何修改,并執(zhí)行魁袜。為了詳細(xì)點(diǎn)桩撮,這里貼出我的腳本文件
#! /usr/bin/env bash
export TMPDIR=/home/hha/android/tmpdir
NDK=/home/hha/android/android-ndk-r13b
SYSROOT=$NDK/platforms/android-16/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
CPU=arm
PREFIX=/home/hha/android/ffmpeg_shared_compile/arm/
ADDI_CFLAGS="-marm"
function build_one
{
./configure \
--prefix=$PREFIX \
--enable-shared \
--disable-static \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-doc \
--disable-symver \
--enable-small \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--target-os=linux \
--arch=arm \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
}
build_one
4.執(zhí)行腳本,得到so庫和頭文件
拷貝上述文件到指定目錄下峰弹,執(zhí)行以下命令即可
./build_android_arm.sh
編譯完成后店量,會(huì)在 $PREFIX 目錄下生成 include和lib兩個(gè)文件夾(我的路徑是 /home/hha/android/ffmpeg_shared_compile/arm/),將lib文件夾中的 pkgconfig 目錄和so的鏈接文件刪除垮卓,只保留so文件垫桂,然后將include 和lib兩個(gè)目錄一起copy到你的apk jni下去編譯,即可進(jìn)行后續(xù)開發(fā)粟按。
5.各庫簡單分析
└── arm
├── include
│ ├── libavcodec
│ ├── libavfilter
│ ├── libavformat
│ ├── libavdevice
│ ├── libavutil
│ ├── libswresample
│ └── libswscale
└── lib
├── libavcodec-57.so
├── libavfilter-6.so
├── libavformat-57.so
├── libavdevice-57.so
├── libavutil-55.so
├── libswresample-2.so
├── libswscale-4.so
└── pkgconfig
- libavformat
??用于各種音視頻封裝格式的生成和解析,包括獲取解碼所需信息以生成解碼上下文結(jié)構(gòu)和讀取音視頻幀等功能霹粥,為 libavcodec 分析碼流提供獨(dú)立的音頻或視頻碼流源灭将; - libavcodec
??用于各種類型聲音/圖像編解碼;該庫是音視頻編解碼核心后控,實(shí)現(xiàn)了市面上可見的絕大部分解碼器的功能庙曙,libavcodec 庫被其他各大解碼器 ffdshow,Mplayer 等所包含或應(yīng)用浩淘; - libavdevice
??硬件采集捌朴、加速 、顯示 张抄,操作計(jì)算機(jī)中常用的音視頻捕獲或輸出設(shè)備砂蔽; - libavfilter
??filter(FileIO、FPS署惯、DrawText)音視頻濾波器的開發(fā)左驾,如寬高比 裁剪 格式化 非格式化 伸縮; - libavutil
??包含一些公共的工具函數(shù)的使用庫,包括算數(shù)運(yùn)算 字符操作诡右; - libswscale
??(原始視頻格式轉(zhuǎn)換)用于視頻場景比例縮放安岂、色彩映射轉(zhuǎn)換;圖像顏色空間或格式轉(zhuǎn)換帆吻,如 rgb565,rgb888 等與 yuv420 等之間轉(zhuǎn)換域那; - libswresample
??原始音頻格式轉(zhuǎn)碼。