Ubuntu編譯Android使用的FFmpeg


本文介紹在Ubuntu平台編譯FFmpeg庫,用於Android使用。前提需要配置好NDK的環境。可以參考之前的文章Android NDK環境搭建

下載FFmpeg

在官網下載FFmpeg源碼,https://ffmpeg.org/download.html

本文基於FFmpeg2.8進行編譯。

將下載的文件解壓,得到ffmpeg目錄。

修改configure文件

由於FFmpeg默認生成的庫文件格式為libavcodec.so.xx.xx.x。其中的xx就是主副版本號,這種格式在Ubuntu下使用是沒有問題的,但是在Android下開發使用,並不把其作為有效的庫文件。所以需要修改其他生成的文件名的格式。

通過修改configure文件要實現,打開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)'  

編譯生成類庫

基本的編譯過程是configure, make, make install。其中configure的配置文件根據需要進行配置,如果是第一次使用,可以按如下進行配置。如果你不是第一次使用,相信你對於配置的參數應該已經知道自己需要哪些功能。

在與ffmpeg相同級別建立,編譯腳本文件build.sh

#!/bin/bash

NDK=/home/mn/bin/android-ndk-r15b
SYSROOT=$NDK/platforms/android-16/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
PREFIX=../output
ADDI_CFLAGS="-marm"


# --disable-symver - disable symbolic versioning
function build_one
{
    ./configure \
        --prefix=$PREFIX \         --enable-shared \         --enable-small \         --disable-static \         --disable-doc \         --disable-ffmpeg \         --disable-ffplay \         --disable-ffprobe \         --disable-ffserver \         --disable-symver \         --target-os=linux \         --arch=arm \         --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 -j4
    make install
}

cd ffmpeg
build_one

在腳本的開始處定義了一些變量,其他NDK需要根據自己的環境進行配置,配置為NDK的根目錄。

PREFIX為編譯的輸出的目錄。其他參數不需要修改。

執行如下命令進行編譯:

$ chmod u+x build.sh
$ ./build.sh

等待編譯結束。在output/lib/的目錄下生成如下文件:

libavcodec-57.so
libavcodec.so
libavdevice-57.so
libavdevice.so
libavfilter-6.so
libavfilter.so
libavformat-57.so
libavformat.so
libavutil-55.so
libavutil.so
libswresample-2.so
libswresample.so
libswscale-4.so
libswscale.so
pkgconfig

錯誤處理

如果在編譯的過程中出現了錯誤,查看ffmpeg/config.log對配置的日志,及make的錯誤輸出。歡迎留言相互交流。

By 楓竹夢


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM