Mac平台下的FFmpeg的安装编译

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.tbdlibiconv.tbdlibz.tbd

3、在工程的Build Settings选项中修改Header Search Paths添加头文件引用,修改Library Search Paths添加库文件的路径引用。

原文 Mac平台下的FFmpeg的安装编译 - 掘金

★文末名片可以免费领取音视频开发学习资料,内容包括(FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)以及音视频学习路线图等等。

见下方!↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

猜你喜欢

转载自blog.csdn.net/yinshipin007/article/details/134807533
今日推荐