NDK FFmpeg 編譯
閱讀本文大概需要 1.16 分鐘。
互聯網時代限制個人發展的不再是掌握知識和信息的多少,而是個人的認知水平。
本篇介紹一下 Linux 環境下 FFmpeg 的編譯。
前期推送的 NDK 開發系列文章:
1.FFmpeg 是什麼?
FFmpeg 全稱(First Forward MPEG),是一款領先的開源多媒體框架,採用 LGPL 或 GPL 許可證,除了具有音視頻編解碼功能外,還有視頻格式轉換、視頻抓圖、視頻水印、推流等功能。 FFmpeg 在 Linux 平台下開發,但它同樣也可以在其它操作系統環境中編譯運行,包括 Windows 、Mac OS X 等。
FFmpeg的官方網站是:http://ffmpeg.org/
Windows 平台下,編譯好的可用版本一般有三個: Static ,Shared ,Dev 。
Static 裡面有 3 個應用程序:ffmpeg.exe ,ffplay.exe ,ffprobe.exe ,動態鏈接庫都被編譯在 exe 文件中,每個 exe 的體積都很大,可直接運行,如播放一段視頻,命令行下執行:ffmpeg video.mp4。
Shared 裡面除了 3 個應用程序:ffmpeg.exe ,ffplay.exe ,ffprobe.exe 之外,還有一些動態鏈接庫,如 avcodec-54.dll 之類的,Shared 裡面的 exe 體積較小。
Dev 版本主要用於開發的,裡面包含了一些庫文件 xxx.lib 和文件 xxx.h 。
Linux 平台下,本文選擇的版本是 2.6.9,地址:http://ffmpeg.org/olddownload.html
2.編譯 FFmpeg
搭建 Linux 開發環境,安裝 Ubuntu 虛擬機或者租一個低配的阿里雲主機,文件傳輸工具推薦 FileZilla 或 XFTP 。
首先下載 Linux 環境下的 NDK (注意科學上網),如
android-ndk-r11c-linux-x86_64.bin。
執行如下命令進行解壓縮:
./android-ndk-r11c-linux-x86_64.bin
配置環境變數,首先編輯 .bashrc 文件。
vim ~/.bashrc
在文件結尾添加兩行代碼:
exportNDKROOT=( NDK 解壓的根目錄)如 、/usr/workspace/ndk/android-ndk-r11c
exportPATH=$NDKROOT:$PATH
更新環境變數:
source ~/.bashrc
下載 FFmpeg ,地址:
http://ffmpeg.org/olddownload.html
解壓:
uzip ffmpeg-2.6.9.zip
然後編寫用於編譯的 Shell 腳本,在 ffmpeg-2.6.9 根目錄下執行:vim build_android.sh
#!/bin/bash
make clean
exportNDK=/home/wuhuannan/Android/Sdk/ndk-bundle
exportSYSROOT=$NDK/platforms/android-14/arch-arm/
exportTOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
exportCPU=arm
exportPREFIX=$(pwd)/android/$CPU
exportADDI_CFLAGS="-marm"
./configure --target-os=linux
--prefix=$PREFIX--arch=arm
--disable-doc
--enable-shared
--disable-static
--disable-yasm
--disable-symver
--enable-gpl
--disable-ffmpeg
--disable-ffplay
--disable-ffprobe
--disable-ffserver
--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
然後修改根目錄下的 configure 文件。
#找到並注釋以下代碼
#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)"
修改文件許可權:
chmod +x build_android.sh configure
執行一下腳本開始編譯:
./build_android.sh
約幾分鐘後,編譯生成的動態庫文件如下:
後續我們將在 Android 環境下的音視頻編解碼中使用這些動態庫。
android-ndk-r10e-linux-x86_64.bin
回復ffmpeg獲取:
ffmpeg-2.6.9.zip
-- END --
迷茫的時候,選擇最難走的那條路
Copyright 2018 AndroidGeeks
本文由「135編輯器」提供技術支持
AndroidGeeks


TAG:AndroidGeeks |