1. 程式人生 > 其它 >mac環境下編譯FFmpeg

mac環境下編譯FFmpeg

技術標籤:Android

簡介

學習FFmpeg避免不了要學習。ffmpeg和ffmprobe兩個核心的可執行程式,而應用在移動端必不可少的需要編譯成Android可以使用的so庫。本文主要介紹在mac上的FFmpeg的編譯
分為兩部分

  1. 編譯為mac環境
  2. 編譯為Android so庫

1 FFmpeg編譯為mac環境

如果沒有安裝yasm的話,會報

FFmpeg yasm/nasm not found or too old. Use --disable-yasm for a crippledbuild

1.1.1 下載YASM

YASM下載

1.1.2 進入yasm目錄

//第一步
cd ~/yasm-1.3.0


//第二步 配置
./configure


//第三步 編譯
make
//第四步 安裝 sudo make install

至此 YASM安裝完畢

安裝SDL

下載安裝

1.2.1 進入sdl目錄

//第一步
 cd ~/SDL2-2.0.8

//第二步
./configure

//第三步 編譯
make -j 16

//第四步
sudo make install

1.3. 安裝FFmpeg

去官方找個想要的版本

1.3.1 安裝過程


//第一步 進入下載目錄
$ cd ~/ffmpeg

//第二步 配置
//這裡很關鍵,需要根據不同的配置來進行生產不同的ffmpeg

./configure --prefix=/usr/local/ffmpeg --enable-debug=3 --enable-shared --disable-static


第三步 編譯
make
-j 4 第四步 安裝 sudo make install

1.3.2 配置環境變數

//第一步
vi ~/.bash_profile
//第二步
export PATH="$PATH:/usr/local/ffmpeg/bin"
//第三步
source ~/.bash_profile

命令列 ffmpeg 成功

2. 編譯成android 庫

2.1 官網下載ffmpeg

我下載的4.1版本

2.2 下載NDK

不能使用Android studio 的NDK 。我用的17r

2.3 新增指令碼

在ffmpeg解壓後的根目錄下 新建一個android_build.sh 檔案

修改ndk和輸出目錄就好

#!/bin/bash

ADDI_CFLAGS="-marm"
API=19
PLATFORM=arm-linux-androideabi
CPU=x86_64 # 'armeabi-v7a' 'x86_64'
NDK=/Users/yinzelin/ndk/android-ndk-r17c # 修改成自己本地的ndk路徑。
SYSROOT=$NDK/platforms/android-$API/arch-arm/
ISYSROOT=$NDK/sysroot
ASM=$ISYSROOT/usr/include/$PLATFORM
TOOLCHAIN=$NDK/toolchains/$PLATFORM-4.9/prebuilt/darwin-x86_64
OUTPUT=/Users/yinzelin/ffmpeg/ProgramFiles #自己指定一個輸出目錄,用來放生成的檔案的。
function build
{
echo "開始編譯ffmpeg"

./configure \
--prefix=$OUTPUT \
--enable-shared \
--disable-static \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-avdevice \
--disable-doc \
--disable-symver \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--target-os=android \
--arch=armeabi-v7a \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-I$ASM -isysroot $ISYSROOT -Os -fpic -marm" \
--extra-ldflags="-marm" \
$ADDITIONAL_CONFIGURE_FLAG
  make clean
  # 這裡是定義用幾個CPU編譯,我用4個,一般在5分鐘之內編譯完成
  make -j4
  make install

echo "編譯結束!"
}

build

2.4 修改配置 為android

開啟ffmpeg根目錄 修改.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)'

2.5 執行指令碼

./build_android.sh

在輸出目錄結果

結果