Mac中編譯FFmpeg教程(Android版)

來源:互聯網
上載者:User

標籤:編碼   oss   替換   lease   flags   targe   根據   nal   採樣率   

Mac中編譯FFmpeg教程(Android版)

本篇文章主要介紹在Mac環境中,編譯FFmpeg產生so庫。

FFmpeg簡介

FFmpeg既是一款音視頻編解碼工具,同時也是一組音視頻編解碼開發套件,作為編解碼開發套件,它為開發人員提供了豐富的音視頻處理的調用介面。
FFmpeg提供了多種媒體格式的封裝和解鎖裝,包括多種音視頻編碼、多種協議的流媒體、多種色彩格式轉換、多種採樣率轉換、多種碼率轉換等。FFmpeg架構提供了多種豐富的外掛程式模組,包含封裝與解鎖裝的外掛程式、編碼與解碼的外掛程式等。

開發環境

本次編譯的環境如下:

  • macOS High Sierra(10.13.5)
  • FFmpeg源碼(3.3.7)
  • ndk(android-ndk-r14b)

首先下載ndk,建議不要使用Android Studio內建的ndk-bundle,然後配置ndk的全域環境,在.bash_profile中添加一下配置:

export ANDROID_NDK_ROOT=/Users/jiangshuaijie/android-ndk-r14b/buildexport PATH=${PATH}:${ANDROID_NDK_ROOT}

然後在命令列中輸入ndk-build測試環境是否配置成功。

下載FFmpeg源碼

FFmpeg的源碼可以在 https://ffmpeg.org/download.html#releases 中下載,也可以使用git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg 複製到本地。建議下載3.3.x版本的庫,最新的庫編譯的問題比較多,各種路徑不正常等問題。

修改configure檔案

下載FFmpeg原始碼之後,首先需要對原始碼中的configure檔案進行修改。由於編譯出來的動態庫檔案名稱的版本號碼在.so之後(例如“libavcodec.so.5.100.1”),而android平台不能識別這樣檔案名稱,所以需要修改這種檔案名稱。在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)‘
編寫指令碼產生類庫

在ffmpeg中建立一個build_android.sh的指令碼,並賦予可執行檔許可權,指令碼內容如下:

#!/bin/bashmake clean# NDK的路徑,根據自己的安裝位置進行設定export TMPDIR=/Users/jiangshuaijie/ffmpeg-3.3.7/ffmpeg_installexport NDK=/Users/jiangshuaijie/android-ndk-r14bexport SYSROOT=$NDK/platforms/android-21/arch-arm/export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64export CPU=armexport PREFIX=$(pwd)/android/$CPUexport ADDI_CFLAGS="-marm"function build_one{./configure     --prefix=$PREFIX     --target-os=linux     --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi-     --arch=arm     --sysroot=$SYSROOT     --extra-cflags="-Os -fpic $ADDI_CFLAGS"     --extra-ldflags="$ADDI_LDFLAGS"     --cc=$TOOLCHAIN/bin/arm-linux-androideabi-gcc     --nm=$TOOLCHAIN/bin/arm-linux-androideabi-nm     --enable-shared     --enable-runtime-cpudetect     --enable-gpl     --enable-small     --enable-cross-compile     --disable-debug     --disable-static     --disable-doc     --disable-asm     --disable-ffmpeg     --disable-ffplay     --disable-ffprobe     --disable-ffserver     --enable-postproc     --enable-avdevice     --disable-symver     --disable-stripping $ADDITIONAL_CONFIGURE_FLAGsed -i ‘‘ ‘s/HAVE_LRINT 0/HAVE_LRINT 1/g‘ config.hsed -i ‘‘ ‘s/HAVE_LRINTF 0/HAVE_LRINTF 1/g‘ config.hsed -i ‘‘ ‘s/HAVE_ROUND 0/HAVE_ROUND 1/g‘ config.hsed -i ‘‘ ‘s/HAVE_ROUNDF 0/HAVE_ROUNDF 1/g‘ config.hsed -i ‘‘ ‘s/HAVE_TRUNC 0/HAVE_TRUNC 1/g‘ config.hsed -i ‘‘ ‘s/HAVE_TRUNCF 0/HAVE_TRUNCF 1/g‘ config.hsed -i ‘‘ ‘s/HAVE_CBRT 0/HAVE_CBRT 1/g‘ config.hsed -i ‘‘ ‘s/HAVE_RINT 0/HAVE_RINT 1/g‘ config.hmake clean# 這裡是定義用幾個CPU編譯,我用4個,一般在5分鐘之內編譯完成make -j4make install}build_one

其中:

  • TMPDIR為編譯產生的臨時檔案存放的目錄
  • SYSROOT為so檔案支援的最低Android版本的平台目錄
  • CPU為指定so檔案支援的平台
  • PREFIX為產生的so檔案存放目錄
  • TOOLCHAIN為編譯所使用的工具鏈目錄
  • cross-prefix為編譯所使用的工具鏈檔案
  • enable和disable指定了需要編譯的項
  • target-os為目標作業系統;
編譯FFmpeg

在ffmpeg目錄中,執行終端命令:

./build_android.sh

即可編譯,然後等待產生so檔案即可。

相關資料

雷霄驊的部落格

Mac中編譯FFmpeg教程(Android版)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.