项目作者: Bingnan

项目描述 :
ffmpeg最新稳定版3.0.1和编译时用到的库
高级语言: Shell
项目地址: git://github.com/Bingnan/ffmpeg3.0.1.git
创建时间: 2016-04-19T08:45:22Z
项目社区:https://github.com/Bingnan/ffmpeg3.0.1

开源协议:

下载


FFMPEG编译指南

此指南基于我们服务器的CentOS操作系统,内容涵盖了官方的 Compile FFmpeg on CentOS ,在此基础上增加了对rtmp,rtsp等协议的支持,并且替换了直接下载不到的库的git地址(libvpx库,ffmpeg源码库)。

我已经把用到的各个库打包上传到了这里。

1.安装依赖

  1. # yum install autoconf automake cmake freetype-devel openssl-devel gcc gcc-c++ git libtool make mercurial nasm pkgconfig zlib-devel

带”#”符号表示需要sudo权限执行。

然后在你的HOME目录下创建一个新的文件夹,存放所有编译用到的文件:

  1. mkdir ~/ffmpeg_source

2.编译需要用到的库或工具

用到哪些库,编译ffmpeg时候就enable哪些库

2.1 Yasm

汇编器,编译x264,ffmpeg会用到

  1. cd ~/ffmpeg_sources
  2. git clone --depth 1 git://github.com/yasm/yasm.git
  3. cd yasm
  4. autoreconf -fiv
  5. ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin"
  6. make
  7. make install
  8. make distclean

然后把$HOME/bin加入系统PATH路径:

  1. PATH=$PATH:$HOME/bin/

2.2 libx264

H264编码库,开启需要在FFmpeg的configure中指定: —enable-gpl 和 —enable-libx264

  1. cd ~/ffmpeg_sources
  2. git clone --depth 1 git://git.videolan.org/x264
  3. cd x264
  4. PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --enable-static
  5. make
  6. make install
  7. make distclean

2.3 libx265

H265编码库,开启需要在FFmpeg的configure中指定: —enable-gpl 和 —enable-libx265

  1. cd ~/ffmpeg_sources
  2. hg clone https://bitbucket.org/multicoreware/x265
  3. cd ~/ffmpeg_sources/x265/build/linux
  4. cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DENABLE_SHARED:bool=off ../../source
  5. make
  6. make install

2.4 libfdk_aac

AAC编码库,开启需要在FFmpeg的configure中指定: —enable-libfdk-aac

  1. cd ~/ffmpeg_sources
  2. git clone --depth 1 git://git.code.sf.net/p/opencore-amr/fdk-aac
  3. cd fdk-aac
  4. autoreconf -fiv
  5. ./configure --prefix="$HOME/ffmpeg_build" --disable-shared
  6. make
  7. make install
  8. make distclean

2.5 libmp3lame

MP3编码库,开启需要在FFmpeg的configure中指定: —enable-libmp3lame

  1. cd ~/ffmpeg_sources
  2. curl -L -O http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
  3. tar xzvf lame-3.99.5.tar.gz
  4. cd lame-3.99.5
  5. ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --disable-shared --enable-nasm
  6. make
  7. make install
  8. make distclean

2.6 libopus

Opus音频编解码库,开启需要在FFmpeg的configure中指定: —enable-libopus

  1. cd ~/ffmpeg_sources
  2. git clone git://git.opus-codec.org/opus.git
  3. cd opus
  4. autoreconf -fiv
  5. ./configure --prefix="$HOME/ffmpeg_build" --disable-shared
  6. make
  7. make install
  8. make distclean

2.7 libogg

Ogg是一种容器格式,如果要enable下面的libvorbis就需要这个

  1. cd ~/ffmpeg_sources
  2. curl -O http://downloads.xiph.org/releases/ogg/libogg-1.3.2.tar.gz
  3. tar xzvf libogg-1.3.2.tar.gz
  4. cd libogg-1.3.2
  5. ./configure --prefix="$HOME/ffmpeg_build" --disable-shared
  6. make
  7. make install
  8. make distclean

2.8 libvorbis

Vorbis音频编码库,开启需要在FFmpeg的configure中指定: —enable-libvorbis

  1. cd ~/ffmpeg_sources
  2. curl -O http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.4.tar.gz
  3. tar xzvf libvorbis-1.3.4.tar.gz
  4. cd libvorbis-1.3.4
  5. LDFLAGS="-L$HOME/ffmeg_build/lib" CPPFLAGS="-I$HOME/ffmpeg_build/include" ./configure --prefix="$HOME/ffmpeg_build" --with-ogg="$HOME/ffmpeg_build" --disable-shared
  6. make
  7. make install
  8. make distclean

2.9 libvpx

VP8/VP9视频编码库,开启需要在FFmpeg的configure中指定: —enable-libvpx

  1. cd ~/ffmpeg_sources
  2. git clone --depth 1 https://github.com/webmproject/libvpx.git
  3. cd libvpx
  4. ./configure --prefix="$HOME/ffmpeg_build" --disable-examples --as=yasm
  5. make
  6. make install
  7. make clean

2.10 librtmp

rtmp协议库,ffmpeg中原生的rtmp库支持不太好,所以一般使用这个第三方rtmp库。 开启需要在FFmpeg的configure中指定: —enable-librtmp

这个librtmp库居然没有configure文件,无法像其他库一样指定只编译static的库和修改prefix路径,需要自己改Makefile

前面的所有库都没问题,就这个librtmp折腾了半天,一开始没有去改它的Makefile把SHARED置成no, 这样make会编译出静态和动态库,然后make install会把静态和动态库都拷贝到$(HOME)/ffmpeg_build/lib下,然后后面在编译ffmpeg的时候,即使configure时指定了—pkg-config-flags=”—static”这样的让链接器链接静态库的参数, 可是等链接器链接时却发现lib下有动态库,还是会优先链接动态库,这样编译出来的ffmpeg中librtmp是动态链接的,但是没有正确设置LD_LIBRARY_PATH参数的话就找不到这个库,从而导致无法运行。

  1. cd ~/ffmpeg_sources
  2. curl -O http://rtmpdump.mplayerhq.hu/download/rtmpdump-2.3.tgz
  3. tar xzvf rtmpdump-2.3.tgz
  4. cd rtmpdump-2.3/librtmp
  5. sed -i 's#prefix=/usr/local#prefix=$(HOME)/ffmpeg_build#' Makefile
  6. sed -i 's/SHARED=yes/SHARED=no/' Makefile
  7. make
  8. make install
  9. make clean

3.编译FFmpeg

我们目前用的是ffmpeg最新的稳定版本3.0.1 “Einstein”

  1. cd ~/ffmpeg_sources
  2. git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg
  3. cd ffmpeg
  4. PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg_build" --extra-cflags="-I$HOME/ffmpeg_build/include" --extra-ldflags="-L$HOME/ffmpeg_build/lib" --bindir="$HOME/bin" --pkg-config-flags="--static" --enable-gpl --enable-nonfree --enable-openssl --enable-protocol=rtmp --enable-librtmp --enable-demuxer=rtsp --enable-muxer=rtsp --enable-libfreetype --enable-libfdk-aac --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --disable-shared --enable-static --disable-debug
  5. make
  6. make install
  7. make distclean

编译好的ffmpeg在$HOME/bin下

4.升级库

先删除之前编译出来的程序

  1. rm -rf ~/ffmpeg_build ~/bin/{ffmpeg,ffprobe,ffserver,lame,vsyasm,x264,x265,yasm,ytasm}

然后进入各个库的git目录运行 git pull即可,不过一般情况下,我们优先使用各个库的某一个稳定版本,不一定会使用最新版本,所以一般情况下不需要频繁的升级库。