最近因为一个项目要求,需要开发实时视频编解码功能,准备采用 FFmpeg 以 x264 方式进行实时的视频编解码。Windows 以及 Linux 环境下的 FFmpeg 动态库、头文件等资源都非常容易获得,编译环境也容易构建,但 Mac OS X 下的开发编译环境就不那么容易了。因为 FFmpeg 默认没有提供 Mac OS X 下的已经编译好的动态链接库(甚至连静态库都没有提供),而网上找到的多是编译好的单独的 FFmpeg 可执行程序,满足不了开发过程中对 FFmpeg 动态库(或静态库)的编译连接要求,因此考虑自己动手从源代码编译安装 FFmpeg,以获得 Mac OS X 下的 FFmpeg 动态链接库(以及静态库)版本,并构建好开发编译环境。

首先要确保 Mac OS X 下已经具备编译开发环境,一般都是安装 XCode 以及对应的 Command line tools。

然后,从 FFmpeg 官方网站下载 FFmpeg 最新版本的源代码,可直接下载打包好的源代码压缩文件,也可以通过 git 获取完整源代码镜像,推荐用 git,命令如下:

git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg

这时不要急着马上开始进行编译配置!因为首先要明白一点,FFmpeg 是一个编解码框架,能够支持各种不同的编解码器,并采用统一的 api 去调用。但其默认只提供了针对各种媒体格式的解码器(基本上涵盖得比较全了),而编码器默认提供很少的几个开源的格式(或者已经无需专利保护的格式)。所以,如果你需要 FFmpeg 具备支持多种媒体格式的编码能力,你需要额外下载并安装那些编码器(主要是通过安装这些编码器获得它们的头文件、动态库及静态库用于 FFmpeg 编译),才能保证在 FFmpeg 编译时载入这些编码器的二进制代码,使 FFmpeg 具备这些编码功能。经过对比分析,就我这个项目需求而言,基本上编码器需要先额外下载并安装这几个:x264、fdk-aac、libvpx、libvorbis、LAME(mp3)就足够了。

接着,分别下载 x264、fdk-aac、libvpx、libvorbis、LAME 的源代码,然后分别编译安装。注意在执行各自的 configure 创建编译配置文件时,最好都强制带上 --enable-static 和 --enable-shared 参数以确保生成静态库和动态库。另外因为是在 Mac OS X 环境下编译,因此在各自编译完后,都要执行 sudo make install,安装到默认的 /usr/local 目录下相应位置(Mac OS X 下不推荐 /usr),因此不要在 configure 时指定 --prefix,就用默认的 /usr/local 目录前缀即可。

在安装完上述编码器后,就可以开始编译安装 FFmpeg 了。进入 FFmpeg 的源代码目录,执行以下命令:

./configure --prefix=/usr/local --enable-gpl --enable-nonfree --enable-libfdk-aac --enable-libmp3lame --enable-libvorbis --enable-libvpx --enable-libx264 --enable-static --enable-shared

make

sudo make install

即可完成编译安装,FFmpeg 的头文件将会复制到 /usr/local/include 下面相应位置,静态库及动态库会被复制到 /usr/local/lib 目录下,FFmpeg 的可执行程序(ffmpeg、ffprobe、ffserver)会被复制到 /usr/local/bin 目录下,这样 FFmpeg 的开发环境就构建好了。补充说明一点,因为默认情况下 Mac OS X 没有 SDL,所以 FFmpeg 编译时检测不到 SDL 支持,就不会编译 ffplay 这个可执行程序了。

在 Mac OS X 环境中从源代码编译安装 FFmpeg的更多相关文章

  1. Linux 环境中从源代码编译安装 ReText 问题与解决

    从源代码编译安装 ReText 问题与解决 1. 如何安装 Python Markups 1.1 从 https://launchpad.net/python-markups 下载 Python Ma ...

  2. 如何在linux中从源代码编译安装nodejs?

    $ sudo yum groupinstall 'Development Tools'安装开发环境$ wget https://nodejs.org/dist/v0.12.2/node-v0.12.2 ...

  3. anaconda环境中---py2.7下安装tf1.0 + py3.5下安装tf1.5

    anaconda环境中---py2.7下安装tf1.0 + py3.5下安装tf1.5 @wp20181030 环境:ubuntu18.04, anaconda2, ubuntu系统下事先安装了pyt ...

  4. linux源代码编译安装OpenCV

    为了尽可能保证OpenCV的特性,使用OpenCV源代码编译安装在linux上.先从安装其依赖项開始,以ubuntu 14.04.X为例解说在Linux上源代码编译安装OpenCV,其它linux版本 ...

  5. Python3源代码编译安装

    Python3源代码编译安装 安装必要工具 yum-utils ,它的功能是管理repository及扩展包的工具 (主要是针对repository) $ sudo yum install yum-u ...

  6. LNAMP服务器环境搭建(手动编译安装)

    LNAMP服务器环境搭建(手动编译安装) 一.准备材料 阿里云主机一台,操作系统CentOS 6.5 64位 lnamp.zip包(包含搭建环境所需要的所有软件) http://123.56.144. ...

  7. 源代码编译安装Python3.5.2

    由于没有找到Python3.5的rpm安装包,因此进行源代码编译安装 1.下载Python3.5.2 [root@seastar ~]# cd /usr/local/src [root@seastar ...

  8. Linux环境PostgreSQL源码编译安装

    Linux环境PostgreSQL源码编译安装 Linux版本: Red Hat 6.4 PostgreSQL版本: postgresql-9.3.2.tar.gz 数据存放目录: /var/post ...

  9. centos6.5环境Redis下载及编译安装

    centos6.5环境Redis下载及编译安装 1:官方站点: http://redis.io/download 下载最新版或者最新stable版 2:解压源码并进入目录 tar -zxvf redi ...

随机推荐

  1. 转 Keras 保存与加载网络模型

    https://blog.csdn.net/qq_28413479/article/details/77367665

  2. pandas中层次化索引与切片

    Pandas层次化索引 1. 创建多层索引 隐式索引: 常见的方式是给dataframe构造函数的index参数传递两个或是多个数组 Series也可以创建多层索引 Series多层索引 B =Ser ...

  3. js cookie 操作

    <html> <head> <meta charset="utf-8"> <title>Javascript cookie</ ...

  4. Python爬虫系列-Requests库详解

    Requests基于urllib,比urllib更加方便,可以节约我们大量的工作,完全满足HTTP测试需求. 实例引入 import requests response = requests.get( ...

  5. Vue表单输入绑定

    <h3>基础用法</h3> <p>你可以用<strong>v-model</strong>指令在表单input,textarea以及sele ...

  6. 使用el-checkbox实现全选,点击失效没有反应

    最近在公司接收到了一个需求,给收藏夹的书籍添加批量.全选删除实现思路:点击全选改变item的checked,改变item的checked,重新便利一下所有item的checked来改变全选的selec ...

  7. 解决 viewer.js 动态更新图片导致无法预览的问题

    1.viewer.js 使用 Demo http://fengyuanchen.github.io/viewerjs/ 2.viewer.js 下载地址 https://github.com/feng ...

  8. UVA - 1220 Party at Hali-Bula (树形DP)

    有 n 个员工,n-1个从属关系. 不能同时选择某个员工和他的直接上司,问最多可以选多少人,以及选法是否唯一. 树上的最大独立集问题.只不过多了一个判断唯一性. dp[u][0]表示不选这个点的状态, ...

  9. Linux学习-systemctl 针对 service 类型的配置文件

    systemctl 配置文件相关目录简介 现在我们知道服务的管理是透过 systemd,而 systemd 的配置文件大部分放置于 /usr/lib/systemd/system/ 目录内. 该目录的 ...

  10. static_cast 、const_cast、dynamic_cast、reinterpret_cast 关键字简单解释

    static_cast .const_cast.dynamic_cast.reinterpret_cast 关键字简单解释: Static_cast 静态类型转换 ①用于类层次结构中基类(父类)和派生 ...