mac 下面编译安装ffmpeg,用来推流,编解码 转自: http://www.linuxidc.com/Linux/2015-12/126093.htmhtml
最近由于一个项目要求,须要开发实时视频编解码功能,准备采用 FFmpeg 以 x264 方式进行实时的视频编解码。Windows 以及 Linux 环境下的 FFmpeg 动态库、头文件等资源都很是容易得到,编译环境也容易构建,但 Mac OS X 下的开发编译环境就不那么容易了。由于 FFmpeg 默认没有提供 Mac OS X 下的已经编译好的动态连接库(甚至连静态库都没有提供),而网上找到的可能是编译好的单独的 FFmpeg 可执行程序,知足不了开发过程当中对 FFmpeg 动态库(或静态库)的编译链接要求,所以考虑本身动手从源代码编译安装 FFmpeg,以得到 Mac OS X 下的 FFmpeg 动态连接库(以及静态库)版本,并构建好开发编译环境。linux
首先要确保 Mac OS X 下已经具有编译开发环境,通常都是安装 XCode 以及对应的 Command line tools。git
而后,从 FFmpeg 官方网站下载 FFmpeg 最新版本的源代码,可直接下载打包好的源代码压缩文件,也能够经过 git 获取完整源代码镜像,推荐用 git,命令以下:github
git clone git://source.ffmpeg.org/ffmpeg.git ffmpegapi
这时不要急着立刻开始进行编译配置!由于首先要明白一点,FFmpeg 是一个编解码框架,可以支持各类不一样的编解码器,并采用统一的 api 去调用。但其默认只提供了针对各类媒体格式的解码器(基本上涵盖得比较全了),而编码器默认提供不多的几个开源的格式(或者已经无需专利保护的格式)。因此,若是你须要 FFmpeg 具有支持多种媒体格式的编码能力,你须要额外下载并安装那些编码器(主要是经过安装这些编码器得到它们的头文件、动态库及静态库用于 FFmpeg 编译),才能保证在 FFmpeg 编译时载入这些编码器的二进制代码,使 FFmpeg 具有这些编码功能。通过对比分析,就我这个项目需求而言,基本上编码器须要先额外下载并安装这几个:x26四、fdk-aac、libvpx、libvorbis、LAME(mp3)就足够了。ruby
接着,分别下载 x26四、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 的源代码目录,执行如下命令:curl
./configure --prefix=/usr/local --enable-gpl --enable-nonfree --enable-libfdk-aac --enable-libmp3lame --enable-libvorbis --enable-libvpx --enable-libx264 --enable-static --enable-sharedide
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 这个可执行程序了。
Linux下编译FFmpeg之下载源文件并编译 http://www.linuxidc.com/Linux/2012-02/54565.htm
Linux 编译升级 FFmpeg 步骤 http://www.linuxidc.com/Linux/2013-08/88190.htm
CentOS 5.6 上安装 FFMPEG http://www.linuxidc.com/Linux/2011-09/42793.htm
在Ubuntu下安装FFmpeg http://www.linuxidc.com/Linux/2012-12/75408.htm
Ubuntu 12.04下编译ffmpeg http://www.linuxidc.com/Linux/2013-02/78857.htm
Ubuntu 14.04下PPA安装FFmpeg 2.2.2 http://www.linuxidc.com/Linux/2014-05/101322.htm
经过brew安装ffmpeg须要的相关文件:
网上一搜,其实ffmpeg官网给出了很是详细的在Mac上编译ffmpeg的步骤:
http://ffmpeg.org/trac/ffmpeg/wiki/MacOSXCompilationGuide
首先,必须安装XCode,XCode提供了Mac平台开发环境必须的gcc编译器,要注意的是XCode 4.5安装后并无命令行的gcc可用,还须要打开XCode,在某个设置里添加Command Line Tools,XCode就会自动下载并安装好gcc,同时还有git也被安装了。 2) 安装homebrew
而后安装homebrew,这是一个Mac平台的包管理工具,相似Debian/Ubuntu的apt,提供了许多Mac没有的Unix/Linux工具,例如wget。安装homebrew很简单:
ruby -e "$(curl -fsSkL raw.github.com/mxcl/homebrew/go)"
ffmpeg须要的依赖包几乎均可以经过brew install安装:
brew install automake celt faac fdk-aac lame libass libtool libvorbis libvpx libvo-aacenc opencore-amr openjpeg opus sdl schroedinger shtool speex texi2html theora wget x264 xvid yasm
官网的命令行多了一个git,这个XCode自带,不必再装了。 4) 安装libaacplus
这个包无法经过homebrew安装,因此只能本身下载安装,官网有一个详细的命令行步骤:
wget http://217.20.164.161/~tipok/aacplus/libaacplus-2.0.2.tar.gz tar xzf libaacplus-2.0.2.tar.gz cd libaacplus-2.0.2
sed -i '.bck' -e 's/libtool/glibtool/' autogen.sh ./autogen.sh make && make install cd ..
直接按照官网的命令行编译,报ERROR: libopenjpeg not found,其实openjpeg是安装了的,只是没找到相应的头文件,网上google,一个国外网友给出了简单解决方案:
首先,肯定openjpeg的安装目录在/usr/local/Cellar/openjpeg/1.5.1,而后,把相应的路径加入到gcc的搜索路径中:
export CFLAGS="-I/usr/local/Cellar/openjpeg/1.5.1/include/openjpeg-1.5"
而后开始编译:
git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg cd ffmpeg ./configure --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --enable-libaacplus --enable-libass --enable-libcelt --enable-libfaac --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-openssl --enable-libopus --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvo-aacenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxvid --prefix=/usr/local make && make install
运行ffmpeg,输出以下:
ffmpeg version N-48064-gcfa5300 Copyright (c) 2000-2012 the FFmpeg developers built on Dec 21 2012 10:24:39 with llvm-gcc 4.2.1 (LLVM build 2336.11.00) configuration: --enable-gpl --enable-version3 --enable-nonfree --enable-postpr oc --enable-libaacplus --enable-libass --enable-libcelt --enable-libfaac --enabl e-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-openssl --enable-libop us --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvo -aacenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxvid -- prefix=/usr/local libavutil 52. 12.100 / 52. 12.100 libavcodec 54. 81.100 / 54. 81.100 libavformat 54. 49.102 / 54. 49.102 libavdevice 54. 3.102 / 54. 3.102 libavfilter 3. 29.100 / 3. 29.100 libswscale 2. 1.103 / 2. 1.103 libswresample 0. 17.102 / 0. 17.102 libpostproc 52. 2.100 / 52. 2.100 Hyper fast Audio and Video encoder usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfi le}...
Use -h to get full help or, even better, run 'man ffmpeg'
如今,能够找一个flv文件测试,把它转换成mp4:
ffmpeg -i psy-style.flv -vcodec copy -acodec copy psy-style.mp4
因为用了copy模式,ffmpeg不会从新转码,原有画质不变,只是把文件封装从flv变为mp4,瞬间就可完成。
下面这个哥们在max下面编译ffmpeg遇到的问题: Mac OS X下编译并搭建ffmpeg开发环境及常见错误处理 http://blog.csdn.net/willib/article/details/52530328