NDK編譯ffmpeg

由於android中的音視頻的解碼有限,就學習了android NDK基礎,決定使用ffmpeg來完成一些簡單的來解碼,但是ffmpeg沒有android版本的 .so文件,就必須自行來編譯ffmpeg了,網上有些博客,寫得還是很不錯的,爲了自己以後方便查找,特此記錄

ffmpeg在Linux操作系統下編譯要方便的多(對linux不是很熟悉,就選擇了windows來編譯),在window下需要我們做一些額外的工作,我們使用MinGw工具來編譯
我是基於以下環境編譯ffmpeg的

    1. 編譯ffmpeg基於window7環境
    2. ffmpeg版本爲3.3
    3. 編譯使用MinGW來編譯 

1.ffmpeg最新下載鏈接
2.安裝MinGw的exe文件和源碼開源在SourceForge,MinGW下載鏈接
3.安裝完成後,下載msys-base和mingw-32-gcc-ada兩個庫文件即可。這裏我們主要是使用gcc來完成編譯工作
4.將MinGW的安裝目錄下的bin目錄配置到系統Path環境變量
5.因爲ffmpeg編譯出來的so文件後綴不能直接在Android環境下使用,所以需要我們找到ffmpeg文件夾下的configure文件並打開,搜索SLIBNAME_WITH_MAJOR定位到該行,將原來的

 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)' 

也就是修改編譯出來的so文件後綴爲.so形式
6.在ffmpeg目錄下創建一個build_android.sh文件,拷貝如下代碼

#!/bin/bash
export TMPDIR=D:/tmpdir
NDK=D:/Android/android-sdk-windows/ndk-bundle
SYSROOT=$NDK/platforms/android-24/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64
CPU=arm
PREFIX=D:/install
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

上面需要我們注意的地方有以下幾點:(上面所有的路徑都用反斜槓,以免報錯)
(1)TMPDIR :該字段指向一個文件夾目錄,該文件夾路徑可任意指定。作用是在編譯ffmpeg期間,會生成一些臨時文件用於存放在該目錄,編譯完成後,臨時文件會自動清除。
(2)NDK:即你本地電腦NDK目錄
(3)SYSROOT:根據你目前的NDK中platforms文件夾下的版本來設置。
(4)PREFIX:ffmpeg編譯完成的so文件存放路徑,可隨意指定。
其它保持不變即可。
7.執行gcc命令編譯
打開MinGW目錄下的msys文件夾,找到msys.bat,打開:
這裏寫圖片描述
cd切換到ffmpeg根目錄,執行./build_android.sh開始編譯,這時等待它編譯完成。經過一段時間後,當ffmpeg編譯完成,打開第6步中我們配置的PREFIX所指向的目錄。可以發現多了兩個文件夾:
這裏寫圖片描述

其中,include就是編譯出來的頭文件,lib中就是so文件了:

這裏寫圖片描述
這裏寫圖片描述
看到有這些文件,說明ffmpeg編譯成功了

發佈了30 篇原創文章 · 獲贊 9 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章