在 Mac OS X 环境中从源代码编译安装 FFmpeg
最近因为一个项目要求,需要开发实时视频编解码功能,准备采用 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的更多相关文章
- Linux 环境中从源代码编译安装 ReText 问题与解决
从源代码编译安装 ReText 问题与解决 1. 如何安装 Python Markups 1.1 从 https://launchpad.net/python-markups 下载 Python Ma ...
- 如何在linux中从源代码编译安装nodejs?
$ sudo yum groupinstall 'Development Tools'安装开发环境$ wget https://nodejs.org/dist/v0.12.2/node-v0.12.2 ...
- anaconda环境中---py2.7下安装tf1.0 + py3.5下安装tf1.5
anaconda环境中---py2.7下安装tf1.0 + py3.5下安装tf1.5 @wp20181030 环境:ubuntu18.04, anaconda2, ubuntu系统下事先安装了pyt ...
- linux源代码编译安装OpenCV
为了尽可能保证OpenCV的特性,使用OpenCV源代码编译安装在linux上.先从安装其依赖项開始,以ubuntu 14.04.X为例解说在Linux上源代码编译安装OpenCV,其它linux版本 ...
- Python3源代码编译安装
Python3源代码编译安装 安装必要工具 yum-utils ,它的功能是管理repository及扩展包的工具 (主要是针对repository) $ sudo yum install yum-u ...
- LNAMP服务器环境搭建(手动编译安装)
LNAMP服务器环境搭建(手动编译安装) 一.准备材料 阿里云主机一台,操作系统CentOS 6.5 64位 lnamp.zip包(包含搭建环境所需要的所有软件) http://123.56.144. ...
- 源代码编译安装Python3.5.2
由于没有找到Python3.5的rpm安装包,因此进行源代码编译安装 1.下载Python3.5.2 [root@seastar ~]# cd /usr/local/src [root@seastar ...
- Linux环境PostgreSQL源码编译安装
Linux环境PostgreSQL源码编译安装 Linux版本: Red Hat 6.4 PostgreSQL版本: postgresql-9.3.2.tar.gz 数据存放目录: /var/post ...
- centos6.5环境Redis下载及编译安装
centos6.5环境Redis下载及编译安装 1:官方站点: http://redis.io/download 下载最新版或者最新stable版 2:解压源码并进入目录 tar -zxvf redi ...
随机推荐
- 【模板】有旋Treap
如题,这是一个模板... #include <algorithm> #include <iostream> #include <cstring> #include ...
- http 基础与通讯原理
目录 http 基础与通讯原理 Internet 与中国 1990年10月 注册CN顶级域名 1993年3月2日 接入第一根专线 1994年4月20日 实现与互联网的全功能连接 1994年5月21日 ...
- ThinkPHP5 高级查询之构建分组条件
ThinkPHP5 高级查询之构建分组条件 一.在tp5中通过where方法如何构建分组条件, 例如:where user_id=$this->user_id and (status in (4 ...
- Python中类的声明,使用,属性,实例属性,计算属性及继承,重写
Python中的类的定义以及使用: 类的定义: 定义类 在Python中,类的定义使用class关键字来实现 语法如下: class className: "类的注释" 类的实体 ...
- python有三元运算符吗
所属网站分类: python基础 > 语法,变量,运算符 作者:goodbody 链接: http://www.pythonheidong.com/blog/article/12/ 来源:pyt ...
- 这一千个Python库,总有你想要的!
环境管理 管理 Python 版本和环境的工具 p – 非常简单的交互式 python 版本管理工具. pyenv – 简单的 Python 版本管理工具. Vex – 可以在虚拟环境中执行命令. v ...
- 2018 Multi-University Training Contest 1 Distinct Values(set)
题意: t组数据,每组数据给定n,m, 表示有m个约束,每个约束包含 x,y ,代表区间 [x, y] 里的数字不能相同. 让你用所有的正整数构成一个长度为 n 的区间,使得这个区间元素顺序的字典序最 ...
- Prolog&Epilog
这篇博客会简单介绍一下Prolog&Epilog 然后再简单介绍下我对于程序在计算机中到底如何运行的一些理解(因为自己之前也从来没有接触过这些方面的知识,所以如果有讲的不对的地方希望大家能够帮 ...
- BZOJ 5442: [Ceoi2018]Global warming
[l,r]+x不如[l,n]+x [l,r]-x不如(r,n)+x 所以等价于只有[l,n]+x 枚举断点树状数组合并 难度在于想到这个贪心 #include<cstdio> #inclu ...
- loj2001 「SDOI2017」树点涂色
there #include <iostream> #include <cstdio> using namespace std; int n, m, dfn[100005], ...