博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在 Mac OS X 环境中从源代码编译安装 FFmpeg
阅读量:4988 次
发布时间:2019-06-12

本文共 1759 字,大约阅读时间需要 5 分钟。

最近因为一个项目要求,需要开发实时视频编解码功能,准备采用 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 这个可执行程序了。

转载于:https://www.cnblogs.com/cyberniuniu/p/5036125.html

你可能感兴趣的文章
Skulpt在线模拟运行Python工具
查看>>
287.软件测试概述
查看>>
297.白盒测试
查看>>
新闻客户端的突破与创新
查看>>
网络通信引擎ICE的使用
查看>>
js滚动事件实现滚动触底加载
查看>>
javascript事件小结(事件处理程序方式)--javascript高级程序设计笔记
查看>>
WPF Visibility属性用法
查看>>
zoj 2334 Monkey King 左偏树+并查集
查看>>
删除博客园复制 python 代码时遗留的空格
查看>>
根据元素取两个list<T>不同
查看>>
Delphi 中的 XMLDocument 类详解(4) - 获取根目录下的元素数
查看>>
教你透彻了解红黑树
查看>>
dbf导入sqlserver
查看>>
管洪伟 130702010039 实验报告
查看>>
构建之法阅读笔记05
查看>>
纸上谈兵01 排序算法简介及其C实现
查看>>
哈夫曼树
查看>>
什么是提醒?
查看>>
AngularJS5.0 (第一篇)
查看>>