MAC平台上的FFmpeg的安装方式有三种,分别是通过ffmpeg静态库下载安装、通过Homebrew安装和下载源码编译安装,大家可以选择自己喜欢的方式来实现MAC平台的FFmpeg安装。
1、ffmpeg静态库下载安装
打开FFmpeg官网,如下图所示。
解压下载完成的压缩文件,可以看到一个可执行文件,在终端执行它即可。
当然也是可以配置一个环境链接指向该可执行文件,这样便可以在任何地方执行该文件。
这种方式虽然简单快捷,但是很不利于我们对于ffmpeg的学习研究。
2、通过Homebrew方式安装
2.1、安装Homebrew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
复制代码
根据提示输入密码,就可以一步一步安装成功,如果电脑上之前没有安装xCode
,在命令行输入 xcode-select --install
安装 CLT for Xcode
即可,之后我们需要再次重新执行上述命令进行安装。
以上是官方的安装方式,为避免翻墙受限的不必要问题,我们也可以通过设置镜像的方式来安装。
export HOMEBREW_BREW_GIT_REMOTE="https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git"
export HOMEBREW_CORE_GIT_REMOTE="https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/$homebrew-core.git"
git clone --depth=1 https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/install.git brew-install /bin/bash brew-install/install.sh
rm -rf brew-install
复制代码
如果你之前有安装过Homebrew,也没有关系,同样可以设置镜像配置,具体的参见这个网站。
2.2、安装FFmpeg
如果有通过Homebrew安装过ffmpeg,请预先执行brew uninstall ffmpeg
指令卸载FFmpeg。
执行如下指令
brew install ffmpeg
复制代码
或者
brew install ffmpeg --HEAD
复制代码
两个指令都可以安装ffmpeg,两个都会检测ffmpeg的依赖包并自动安装上,安装需要一定的时间,请耐心等候。这里存在一个问题,就是homebrew
从2.0版本开始,便不再提供针对ffmpeg的options的关联安装,如需要将options和ffmpeg关联起来的话,需要采用第三方的options仓库。所以如果你的homebrew版本是2.0后的话,上面两个指令是关联不了诸如x264
,fdk-aac
等音视频编解码器的。所以我们可以依靠三方仓库homebrew-ffmpeg来实现options和ffmpeg的关联安装。
(1)执行如下指令:
brew tap homebrew-ffmpeg/ffmpeg
brew install homebrew-ffmpeg/ffmpeg/ffmpeg
复制代码
(2)执行如下命令,看此仓库支持哪些options。
brew options homebrew-ffmpeg/ffmpeg/ffmpeg
复制代码
(3)根据第2步获取的options,替换如下指令中option,然后执行。
brew install homebrew-ffmpeg/ffmpeg/ffmpeg --with-<option1> --with-<option2> ...
复制代码
也可以执行如下指令安装所有的options。
brew install homebrew-ffmpeg/ffmpeg/ffmpeg $(brew options homebrew-ffmpeg/ffmpeg/ffmpeg --compact)
复制代码
通过Homebrew的方式安装FFmpeg同样是一种非常简洁方式,但同样也不是一种值得推荐的方式,因为我们无法查看和调试源码来学习研究FFmpeg。
3、源码编译安装
3.1、下载源码
从官网下载源码,可以直接下载源码包,也可以通过git
指令来克隆代码仓库。
git clone git://source.ffmpeg.org/ffmpeg.git
#或者码云的链接
git clone https://gitee.com/mirrors/ffmpeg.git
cd ffmpeg
# 查看版本
git branch -a
# 选择版本
git checkout remotes/origin/release/xxx
复制代码
3.2、编译源码
在下载的源码目录下执行如下指令
./configure --prefix=/usr/local/ffmpeg \
--enable-gpl \
--enable-version3 \
--enable-nonfree \
--enable-postproc \
--enable-libass \
--enable-libcelt \
--enable-libfdk-aac \
--enable-libfreetype \
--enable-libmp3lame \
--enable-libopencore-amrnb \
--enable-libopencore-amrwb \
--enable-libopenjpeg \
--enable-openssl \
--enable-libopus \
--enable-libspeex \
--enable-libtheora \
--enable-libvorbis \
--enable-libvpx \
--enable-libx264 \
--enable-libxvid \
--disable-static \
--enable-shared
复制代码
该指令是为了配置编译,其中--prefix=/usr/local/ffmpeg
表示的是编译后的库文件存放地方,大家可以设置自己喜欢的路径。
执行编译安装命令
make &&sudo make install
复制代码
这个编译过程可能会出现类似于libfdk_aac not found
或者x264 not found
的错误,那是没有安装相关的依赖,这里我们可以通过homebrew来安装这些依赖。
brew install fdk-aac
brew install x264
复制代码
当然,如果你的电脑环境配置不全的话,编译过程可能遇到的需要安装的错误会比较多,也没关系,出现什么样的依赖需要安装的,执行对应的指令便可以了。
3.3、配置环境变量
上面的配置编译指令中,我们将编译后的库文件存放在了/usr/local/ffmpeg
,执行指令open /usr/local/ffmpeg
进入到该路径下,可以看到编译后的相关头文件和库文件,如下图所示。
执行如下指令
touch .bash_profile
open .bash_profile
复制代码
在打开的bash_profile
文件中,添加如下语句。
export FFMPEG_HOME=/usr/local/ffmpeg
export PATH=$FFMPEG_HOME/bin:$PATH
复制代码
到此为止,在Mac端上的FFmpeg安装便完成了。
这种安装的方式虽然较为复杂,但是我们可以修改调试源码,很方便我们学习研究FFmpeg源码。
4、iOS平台库编译
上面的几种安装方式,只是让我们在Mac OS
平台实现了FFmpeg的开发能力,但是作为一个iOS开发人员的话,我们还需要编译出iOS平台下的库文件,以提供移动平台开发使用。
4.1、编译FFmpeg
从下面地址下载编译的脚本。
https://github.com/kewlbear/FFmpeg-iOS-build-script
复制代码
需要修改的内容有
FF_VERSION
指定ffmpeg的版本号。CONFIGURE_FLAGS
修改ffmpeg的编译配置,去掉不必要的编译内容,减小包体的大小。ARCHS
指定编译的cpu架构,对iOS开发而言,有真机和模拟器。X264
编译好的libx264
的路径,如果需要将libx264编译进去。FDK_AAC
编译好的libfdk-aac
的路径,如果需要将libfdk-aac编译进去。
在终端执行命令 ./build-ffmpeg.sh
,编译完成后会有如下的文件结构。
4.2、编译libfdk-aac
从官网下载稳定版本的FDK-AAC
https://sourceforge.net/p/opencore-amr/fdk-aac/ci/v2.0.2/tree/
复制代码
在同级目录下创建build_aac.sh
脚本文件,文件内容如下:
CONFIGURE_FLAGS="--enable-static --with-pic=yes --disable-shared"
#指定编译平台
ARCHS="arm64 armv7"
# 源码位置
SOURCE="fdk-aac-2.0.2"
FAT="fdk-aac-ios"
SCRATCH="scratch"
# must be an absolute path
THIN=`pwd`/"thin"
COMPILE="y"
LIPO="y"
if [ "$*" ]
then
if [ "$*" = "lipo" ]
then
COMPILE=
else
ARCHS="$*"
if [ $# -eq 1 ]
then
# skip lipo
LIPO=
fi
fi
fi
if [ "$COMPILE" ]
then
CWD=`pwd`
for ARCH in $ARCHS
do
echo "building $ARCH..."
mkdir -p "$SCRATCH/$ARCH"
cd "$SCRATCH/$ARCH"
CFLAGS="-arch $ARCH"
if [ "$ARCH" = "i386" -o "$ARCH" = "x86_64" ]
then
PLATFORM="iPhoneSimulator"
CPU=
if [ "$ARCH" = "x86_64" ]
then
CFLAGS="$CFLAGS -mios-simulator-version-min=7.0"
HOST="--host=x86_64-apple-darwin"
else
CFLAGS="$CFLAGS -mios-simulator-version-min=7.0"
HOST="--host=i386-apple-darwin"
fi
else
PLATFORM="iPhoneOS"
if [ $ARCH = arm64 ]
then
HOST="--host=aarch64-apple-darwin"
else
HOST="--host=arm-apple-darwin"
fi
CFLAGS="$CFLAGS -fembed-bitcode"
fi
XCRUN_SDK=`echo $PLATFORM | tr '[:upper:]' '[:lower:]'`
CC="xcrun -sdk $XCRUN_SDK clang -Wno-error=unused-command-line-argument-hard-error-in-future"
AS="$CWD/$SOURCE/extras/gas-preprocessor.pl $CC"
CXXFLAGS="$CFLAGS"
LDFLAGS="$CFLAGS"
$CWD/$SOURCE/configure \
$CONFIGURE_FLAGS \
$HOST \
$CPU \
CC="$CC" \
CXX="$CC" \
CPP="$CC -E" \
AS="$AS" \
CFLAGS="$CFLAGS" \
LDFLAGS="$LDFLAGS" \
CPPFLAGS="$CFLAGS" \
--prefix="$THIN/$ARCH" || exit 1
make -j8 install || exit 1
cd $CWD
done
fi
#合并各个架构平台的库文件
if [ "$LIPO" ]
then
echo "building fat binaries..."
mkdir -p $FAT/lib
set - $ARCHS
CWD=`pwd`
cd $THIN/$1/lib
for LIB in *.a
do
cd $CWD
lipo -create `find $THIN -name $LIB` -output $FAT/lib/$LIB
done
cd $CWD
cp -rf $THIN/$1/include $FAT
fi
复制代码
在终端执行该脚本,编译完成后的库文件在文件夹fdk-aac-ios
中。
在这里,新创建的脚本文件,可能会存在权限问题,执行
chmod -R 777 build_aac.sh
命令即可。
4.3、编译libx264
下载x264
的源码
访问 http://www.videolan.org/developers/x264.html
或者
git clone git://git.videolan.org/x264.git
复制代码
在同级目录下创建build_x264.sh
脚本文件,文件内容如下:
CONFIGURE_FLAGS="--enable-static --enable-pic --disable-cli --disable-shared"
# 指定架构平台
ARCHS="arm64 armv7"
#源码位置
SOURCE="x264-master"
FAT="x264-iOS"
SCRATCH="scratch-x264"
THIN=`pwd`/"thin-x264"
COMPILE="y"
LIPO="y"
if [ "$*" ]
then
if [ "$*" = "lipo" ]
then
COMPILE=
else
ARCHS="$*"
if [ $# -eq 1 ]
then
LIPO=
fi
fi
fi
if [ "$COMPILE" ]
then
CWD=`pwd`
for ARCH in $ARCHS
do
echo "building $ARCH..."
mkdir -p "$SCRATCH/$ARCH"
cd "$SCRATCH/$ARCH"
CFLAGS="-arch $ARCH"
ASFLAGS=
if [ "$ARCH" = "i386" -o "$ARCH" = "x86_64" ]
then
PLATFORM="iPhoneSimulator"
CPU=
if [ "$ARCH" = "x86_64" ]
then
CFLAGS="$CFLAGS -mios-simulator-version-min=9.0"
HOST=
else
CFLAGS="$CFLAGS -mios-simulator-version-min=9.0"
HOST="--host=i386-apple-darwin"
fi
else
PLATFORM="iPhoneOS"
if [ $ARCH = "arm64" ]
then
HOST="--host=aarch64-apple-darwin"
XARCH="-arch aarch64"
else
HOST="--host=arm-apple-darwin"
XARCH="-arch arm"
fi
CFLAGS="$CFLAGS -fembed-bitcode -mios-version-min=9.0"
ASFLAGS="$CFLAGS"
fi
XCRUN_SDK=`echo $PLATFORM | tr '[:upper:]' '[:lower:]'`
CC="xcrun -sdk $XCRUN_SDK clang"
if [ $PLATFORM = "iPhoneOS" ]
then
export AS="$CWD/$SOURCE/tools/gas-preprocessor.pl $XARCH -- $CC"
else
export -n AS
fi
CXXFLAGS="$CFLAGS"
LDFLAGS="$CFLAGS"
CC=$CC $CWD/$SOURCE/configure \
$CONFIGURE_FLAGS \
$HOST \
--extra-cflags="$CFLAGS" \
--extra-asflags="$ASFLAGS" \
--extra-ldflags="$LDFLAGS" \
--prefix="$THIN/$ARCH" || exit 1
make -j8 install || exit 1
cd $CWD
done
fi
if [ "$LIPO" ]
then
echo "building fat binaries..."
mkdir -p $FAT/lib
set - $ARCHS
CWD=`pwd`
cd $THIN/$1/lib
for LIB in *.a
do
cd $CWD
lipo -create `find $THIN -name $LIB` -output $FAT/lib/$LIB
done
cd $CWD
cp -rf $THIN/$1/include $FAT
fi
复制代码
在终端执行该脚本,编译完成后的库文件在文件夹x264-iOS
中。
4.4、使用
- 1、创建工程,导入编译好的库文件
- 2、添加依赖
libbz2.tbd
、libiconv.tbd
、libz.tbd
- 3、在工程的
Build Settings
选项中修改Header Search Paths
添加头文件引用,修改Library Search Paths
添加库文件的路径引用。