溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Mac中編譯FFmpeg教程(Android版)

發(fā)布時間:2020-06-07 00:05:43 來源:網(wǎng)絡(luò) 閱讀:398 作者:姜帥杰 欄目:移動開發(fā)

Mac中編譯FFmpeg教程(Android版)

本篇文章主要介紹在Mac環(huán)境中,編譯FFmpeg生成so庫。

FFmpeg簡介

FFmpeg既是一款音視頻編解碼工具,同時也是一組音視頻編解碼開發(fā)套件,作為編解碼開發(fā)套件,它為開發(fā)者提供了豐富的音視頻處理的調(diào)用接口。
FFmpeg提供了多種媒體格式的封裝和解封裝,包括多種音視頻編碼、多種協(xié)議的流媒體、多種色彩格式轉(zhuǎn)換、多種采樣率轉(zhuǎn)換、多種碼率轉(zhuǎn)換等。FFmpeg框架提供了多種豐富的插件模塊,包含封裝與解封裝的插件、編碼與解碼的插件等。

開發(fā)環(huán)境

本次編譯的環(huán)境如下:

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

首先下載ndk,建議不要使用Android Studio自帶的ndk-bundle,然后配置ndk的全局環(huán)境,在.bash_profile中添加一下配置:

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

然后在命令行中輸入ndk-build測試環(huán)境是否配置成功。

下載FFmpeg源碼

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

修改configure文件

下載FFmpeg源代碼之后,首先需要對源代碼中的configure文件進行修改。由于編譯出來的動態(tài)庫文件名的版本號在.so之后(例如“l(fā)ibavcodec.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中創(chuàng)建一個build_android.sh的腳本,并賦予可執(zhí)行的權(quán)限,腳本內(nèi)容如下:

#!/bin/bash

make clean
# NDK的路徑,根據(jù)自己的安裝位置進行設(shè)置
export TMPDIR=/Users/jiangshuaijie/ffmpeg-3.3.7/ffmpeg_install
export NDK=/Users/jiangshuaijie/android-ndk-r14b
export SYSROOT=$NDK/platforms/android-21/arch-arm/
export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64
export CPU=arm
export PREFIX=$(pwd)/android/$CPU
export 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_FLAG
sed -i '' 's/HAVE_LRINT 0/HAVE_LRINT 1/g' config.h
sed -i '' 's/HAVE_LRINTF 0/HAVE_LRINTF 1/g' config.h
sed -i '' 's/HAVE_ROUND 0/HAVE_ROUND 1/g' config.h
sed -i '' 's/HAVE_ROUNDF 0/HAVE_ROUNDF 1/g' config.h
sed -i '' 's/HAVE_TRUNC 0/HAVE_TRUNC 1/g' config.h
sed -i '' 's/HAVE_TRUNCF 0/HAVE_TRUNCF 1/g' config.h
sed -i '' 's/HAVE_CBRT 0/HAVE_CBRT 1/g' config.h
sed -i '' 's/HAVE_RINT 0/HAVE_RINT 1/g' config.h
make clean
# 這里是定義用幾個CPU編譯,我用4個,一般在5分鐘之內(nèi)編譯完成
make -j4
make install
}
build_one

其中:

  • TMPDIR為編譯生成的臨時文件存放的目錄
  • SYSROOT為so文件支持的最低Android版本的平臺目錄
  • CPU為指定so文件支持的平臺
  • PREFIX為生成的so文件存放目錄
  • TOOLCHAIN為編譯所使用的工具鏈目錄
  • cross-prefix為編譯所使用的工具鏈文件
  • enable和disable指定了需要編譯的項
  • target-os為目標(biāo)操作系統(tǒng);

編譯FFmpeg

在ffmpeg目錄中,執(zhí)行終端命令:

./build_android.sh

即可編譯,然后等待生成so文件即可。

Mac中編譯FFmpeg教程(Android版)

相關(guān)資料

雷霄驊的博客

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI