• 首页
  • 文件
  • 下载
  • 状态
  • 常见问题
  • 邮件列表
  • 应用程式
  • 外部链结
  • 版权
  • 志愿者
  • 联繫

FFmpeg函式库编译

FFmpeg的官方网站:http://www.ffmpeg.org

编译任何平台的FFmpeg事实上都是一项相当大的挑战,因为相关连的函式库数量相当多,而组合状态也相当多,相依函式库变动率也十分高。这裡说明的只是一般的设定及建议,如果您想要自行编译FFmpeg,可能要多花一点时间来尝试适合自己的组态。

FFmpeg on Windows

预先编译好的FFmpeg on Windows的函式库在:http://ffmpeg.zeranoe.com/builds可以找到。 我们建议您使用这个版本。

下载完成后,我们建议您执行下列指令,用以保证产生的.lib档是可以链结的:

x64架构

LIB /machine:x64 /def:avcodec-56.def /OUT:avcodec.lib
LIB /machine:x64 /def:avdevice-56.def /OUT:avdevice.lib
LIB /machine:x64 /def:avfilter-5.def /OUT:avfilter.lib
LIB /machine:x64 /def:avformat-56.def /OUT:avformat.lib
LIB /machine:x64 /def:avutil-54.def /OUT:avutil.lib
LIB /machine:x64 /def:postproc-53.def /OUT:postproc.lib
LIB /machine:x64 /def:swresample-1.def /OUT:swresample.lib
LIB /machine:x64 /def:swscale-3.def /OUT:swscale.lib


重建完成以后,include内的档桉请複製到
CiosAudio/Platforms/Windows/FFmpeg/include

*.lib请複製到
CiosAudio/Platforms/Windows/FFmpeg/lib/x64

x86架构

LIB /machine:x86 /def:avcodec-56.def /OUT:avcodec.lib
LIB /machine:x86 /def:avdevice-56.def /OUT:avdevice.lib
LIB /machine:x86 /def:avfilter-5.def /OUT:avfilter.lib
LIB /machine:x86 /def:avformat-56.def /OUT:avformat.lib
LIB /machine:x86 /def:avutil-54.def /OUT:avutil.lib
LIB /machine:x86 /def:postproc-53.def /OUT:postproc.lib
LIB /machine:x86 /def:swresample-1.def /OUT:swresample.lib
LIB /machine:x86 /def:swscale-3.def /OUT:swscale.lib


重建完成以后,include内的档桉请複製到
CiosAudio/Platforms/Windows/FFmpeg/include

*.lib请複製到
CiosAudio/Platforms/Windows/FFmpeg/lib/x86


FFmpeg on Mac OS X

Mac OS X平台上,我们建议您全部都编译成静态函式库。

编译的方式:

export ARENA=/usr/local
./configure \
--cc=clang \
--prefix=$ARENA \
--extra-cflags="-I$ARENA/include" \
--extra-ldflags="-L$ARENA/lib" \
--disable-shared \
--enable-static \
--enable-gpl \
--enable-nonfree \
--enable-version3 \
--disable-ssse3 \
--disable-programs \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-network \
--disable-sdl \
--disable-indev=qtkit \
--disable-indev=x11grab_xcb \
--enable-hardcoded-tables \
--enable-runtime-cpudetect \
--enable-pthreads \
--enable-postproc \
--enable-filters \
--enable-mdct \
--enable-rdft \
--enable-fft \
--enable-bzlib \
--enable-zlib \
--enable-libtwolame \
--enable-libmp3lame \
--enable-libgsm \
--enable-libwavpack \
--enable-libvorbis \
--enable-libfaac

make

sudo make install


由于每台编译的机器环境均不相同,编译成应用程式时,如果缺少了某个函式库,通常都出现许多错误讯息,您必须自行寻找缺少的项目,一般而言,询问其他人的帮助并不太大。

这个版本编译出来需要与以下的函式库链结:
  • CaCore
  • avcodec
  • avdevice
  • avfilter
  • avformat
  • avutil
  • swresample
  • swscale
  • postproc
  • iconv
  • z
  • bz2
  • pthread
  • twolame
  • mp3lame
  • gsm
  • wavpack
  • ogg
  • vorbis
  • vorbisenc
  • vorbisfile
  • faac

Framework需要以下列表:
  • CoreAudio
  • CoreServices
  • AudioUnit
  • AudioToolBox
  • CoreFoundation
  • CoreVideo
  • VideoDecodeAcceleration
  • Accelerate

Two LAME

Two LAME的官方网址位于:http://www.twolame.org
编译的方式:

./configure --disable-shared --enable-static --prefix=/usr/local

make

sudo make install


LAME

LAME的官方网址位于:http://lame.sourceforge.net
编译的方式:

./configure --disable-shared --enable-static --prefix=/usr/local

make

sudo make install


GSM

GSM的官方网址位于:http://libgsm.sourcearchive.com
编译的方式:

make

sudo cp -f inc/gsm.h /usr/local/include

sudo cp -f lib/libgsm.a /usr/local/lib


Wav Pack

Wav Pack的官方网址位于:http://www.wavpack.com
编译的方式:

./configure --disable-shared --enable-static --prefix=/usr/local

make

sudo make install


ogg

ogg的官方网址位于:http://xiph.org/ogg
编译的方式:

./configure --disable-shared --enable-static --prefix=/usr/local

make

sudo make install


vorbis

vorbis的官方网址位于:http://xiph.org/vorbis
编译的方式:

./configure --disable-shared --enable-static --prefix=/usr/local

make

sudo make install


FAAC

FAAC的官方网址位于:http://www.audiocoding.com/faac.html
编译的方式:

./configure --disable-shared --enable-static --prefix=/usr/local

make

sudo make install


FFmpeg on Linux

Debian


尚未测试。

Fedora


尚未测试。

Ubuntu

Ubuntu 14.10

sudo apt-get remove ffmpeg

sudo apt-get update

sudo apt-get install build-essential subversion git-core checkinstall yasm texi2html libfaac-dev libjack-jackd2-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libsdl1.2-dev libtheora-dev libvorbis-dev libvpx-dev libx11-dev libxfixes-dev libxvidcore-dev zlib1g-dev libx264-dev

cd

svn checkout svn://svn.ffmpeg.org/ffmpeg/trunk ffmpeg

cd ffmpeg

./configure --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxvid --enable-x11grab

make

sudo checkinstall --pkgname=ffmpeg --pkgversion "4:SVN-r`LANG=C svn info | grep Revision | awk '{ print $NF }'`" --backup=no --deldoc=yes --fstrans=no --default

hash x264 ffmpeg ffplay

Arch Linux


尚未测试。

FFmpeg on FreeBSD


尚未测试。

FFmpeg on Solaris

Solaris(11.2)平台上,我们建议您全部都编译成静态函式库。此外您必须先编译YASM,安装到Solaris系统当中。

编译的方式:

YASM

YASM的官方网址位于:http://yasm.tortall.net/
编译的方式:

./configure --prefix=/usr

make

sudo make install



Two LAME

Two LAME的编译方式与Mac OS X相同。

LAME

LAME的官方网址位于:http://lame.sourceforge.net
编译的方式:
Solaris编译之前,必须先修改掉libmp3lame/i386/Makefile.in当中的一个错误语法:

ECHO ?= echo

修改成

ECHO = echo


然后依照以下方式编译:

./configure --disable-shared --enable-static --prefix=/usr/local

make

sudo make install


GSM

GSM的编译方式与Mac OS X相同。

Wav Pack

Wav Pack的编译方式与Mac OS X相同。

ogg

ogg的编译方式与Mac OS X相同。

vorbis

vorbis的编译方式与Mac OS X相同。

FAAC

FAAC的编译方式与Mac OS X相同。


编译的方式:

export ARENA=/usr/local
./configure \
--cc=clang \
--prefix=$ARENA \
--extra-cflags="-I$ARENA/include" \
--extra-ldflags="-L$ARENA/lib" \
--disable-shared \
--enable-static \
--enable-gpl \
--enable-nonfree \
--enable-version3 \
--disable-programs \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-network \
--disable-sdl \
--disable-indev=qtkit \
--disable-indev=x11grab_xcb \
--enable-hardcoded-tables \
--enable-runtime-cpudetect \
--enable-pthreads \
--enable-postproc \
--enable-filters \
--enable-mdct \
--enable-rdft \
--enable-fft \
--enable-bzlib \
--enable-zlib \
--enable-libtwolame \
--enable-libmp3lame \
--enable-libgsm \
--enable-libwavpack \
--enable-libvorbis \
--enable-libfaac

gmake

gmake install


由于每台编译的机器环境均不相同,编译成应用程式时,如果缺少了某个函式库,通常都出现许多错误讯息,您必须自行寻找缺少的项目,一般而言,询问其他人的帮助并不太大。


FFmpeg on iPhone OS


尚未测试。

FFmpeg on Android


在您编译Android平台之前,您必须先建立基本环境,请参考《Android平台编译》。

Two LAME

Two LAME的官方网址位于:http://www.twolame.org
编译的方式:

#!/bin/sh

export DEPOT=/CIOS/Qt/Android/Depot
export ARENA=/CIOS/Android/Arena
export SROOT=/CIOS/Qt/Android/Scripts/armv7
export BUILD=/home/Linkers/Android

cd $BUILD

export TWOLAMEVER=0.3.13

tar xvf $DEPOT/twolame-$TWOLAMEVER.tar.gz

cd twolame-$TWOLAMEVER

echo "Compile Two LAME $TWOLAMEVER"

export CC="$ANDROID_SYS_ROOT/bin/arm-linux-androideabi-gcc --sysroot=$ANDROID_SYS_ROOT/sysroot"
export CXX="$ANDROID_SYS_ROOT/bin/arm-linux-androideabi-g++ --sysroot=$ANDROID_SYS_ROOT/sysroot"
export AR="$ANDROID_SYS_ROOT/bin/arm-linux-androideabi-ar"
export RANLIB="$ANDROID_SYS_ROOT/bin/arm-linux-androideabi-ranlib"
export SYSROOT="$ANDROID_SYS_ROOT/sysroot"
export PATH="$ANDROID_SYS_ROOT/bin":$PATH

./configure \
--host=arm-linux \
--disable-shared \
--enable-static \
--with-sysroot=$SYSROOT \
--prefix=$ARENA

make
sudo make install


LAME

LAME的官方网址位于:http://lame.sourceforge.net
编译的方式:

#!/bin/sh

export DEPOT=/CIOS/Qt/Android/Depot
export ARENA=/CIOS/Android/Arena
export SROOT=/CIOS/Qt/Android/Scripts/armv7
export BUILD=/home/Linkers/Android

cd $BUILD

export LAMEVER=3.99.5

tar xvf $DEPOT/lame-$LAMEVER.tar.gz

cd lame-$LAMEVER

echo "Compile LAME $LAMEVER"

export CC="$ANDROID_SYS_ROOT/bin/arm-linux-androideabi-gcc --sysroot=$ANDROID_SYS_ROOT/sysroot"
export CXX="$ANDROID_SYS_ROOT/bin/arm-linux-androideabi-g++ --sysroot=$ANDROID_SYS_ROOT/sysroot"
export AR="$ANDROID_SYS_ROOT/bin/arm-linux-androideabi-ar"
export RANLIB="$ANDROID_SYS_ROOT/bin/arm-linux-androideabi-ranlib"
export SYSROOT="$ANDROID_SYS_ROOT/sysroot"
export PATH="$ANDROID_SYS_ROOT/bin":$PATH

./configure \
--host=arm-linux \
--disable-shared \
--enable-static \
--with-sysroot=$SYSROOT \
--prefix=$ARENA

make
sudo make install


GSM

GSM的官方网址位于:http://libgsm.sourcearchive.com
我们使用专为Android修改过Makefile的GSM版本,下载处《GSM 1.0.13 For Android》,原始版本的下载处《GSM 1.0.13》。
编译的方式:

#!/bin/sh

export DEPOT=/CIOS/Qt/Android/Depot
export ARENA=/CIOS/Android/Arena
export SROOT=/CIOS/Qt/Android/Scripts/armv7
export BUILD=/home/Linkers/Android

cd $BUILD

export GSMVER=1.0.13

tar xvf $DEPOT/libgsm_$GSMVER.android.tar.gz

cd gsm-1.0-pl13

echo "Compile GSM $GSMVER"

export CC="$ANDROID_SYS_ROOT/bin/arm-linux-androideabi-gcc --sysroot=$ANDROID_SYS_ROOT/sysroot"
export CXX="$ANDROID_SYS_ROOT/bin/arm-linux-androideabi-g++ --sysroot=$ANDROID_SYS_ROOT/sysroot"
export AR="$ANDROID_SYS_ROOT/bin/arm-linux-androideabi-ar"
export RANLIB="$ANDROID_SYS_ROOT/bin/arm-linux-androideabi-ranlib"
export SYSROOT="$ANDROID_SYS_ROOT/sysroot"
export PATH="$ANDROID_SYS_ROOT/bin":$PATH
export GSM_INSTALL_ROOT=$ARENA

make
sudo cp -f inc/gsm.h $ARENA/include
sudo cp -f lib/libgsm.a $ARENA/lib

echo "Done"


iconv


编译的方式:

#!/bin/sh

export DEPOT=/CIOS/Qt/Android/Depot
export ARENA=/CIOS/Android/Arena
export SROOT=/CIOS/Qt/Android/Scripts/armv7
export BUILD=/home/Linkers/Android

cd $BUILD

export ICONVVER=1.14

tar xvf $DEPOT/libiconv-$ICONVVER.tar.gz

cd libiconv-$ICONVVER

echo "Compile iconv $ICONVVER"

export CC="$ANDROID_SYS_ROOT/bin/arm-linux-androideabi-gcc --sysroot=$ANDROID_SYS_ROOT/sysroot"
export CXX="$ANDROID_SYS_ROOT/bin/arm-linux-androideabi-g++ --sysroot=$ANDROID_SYS_ROOT/sysroot"
export AR="$ANDROID_SYS_ROOT/bin/arm-linux-androideabi-ar"
export RANLIB="$ANDROID_SYS_ROOT/bin/arm-linux-androideabi-ranlib"
export SYSROOT="$ANDROID_SYS_ROOT/sysroot"
export PATH="$ANDROID_SYS_ROOT/bin":$PATH
export ACC=arm-linux

./configure \
--host=$ACC \
--disable-shared \
--enable-static \
--with-sysroot=$SYSROOT \
--prefix=$ARENA

make
sudo cp -f include/iconv.h $ARENA/include
sudo cp -f lib/.libs/libiconv.a $ARENA/lib
sudo make install


Wav Pack

Wav Pack的官方网址位于:http://www.wavpack.com
编译的方式:

#!/bin/sh

export DEPOT=/CIOS/Qt/Android/Depot
export ARENA=/CIOS/Android/Arena
export SROOT=/CIOS/Qt/Android/Scripts/armv7
export BUILD=/home/Linkers/Android

cd $BUILD

export WAVPACKVER=4.70.0

tar xvf $DEPOT/wavpack-$WAVPACKVER.tar.bz2

cd wavpack-$WAVPACKVER

echo "Compile Wav Pack $WAVPACKVER"

export CC="$ANDROID_SYS_ROOT/bin/arm-linux-androideabi-gcc --sysroot=$ANDROID_SYS_ROOT/sysroot"
export CXX="$ANDROID_SYS_ROOT/bin/arm-linux-androideabi-g++ --sysroot=$ANDROID_SYS_ROOT/sysroot"
export AR="$ANDROID_SYS_ROOT/bin/arm-linux-androideabi-ar"
export RANLIB="$ANDROID_SYS_ROOT/bin/arm-linux-androideabi-ranlib"
export SYSROOT="$ANDROID_SYS_ROOT/sysroot"
export PATH="$ANDROID_SYS_ROOT/bin":$PATH
export CFLAGS="-I$ARENA/include"
export LDFLAGS="-L$ARENA/lib"
export ACC=arm-linux

./configure \
--host=$ACC \
--disable-shared \
--enable-static \
--with-sysroot=$SYSROOT \
--prefix=$ARENA

make
sudo make install


ogg

ogg的官方网址位于:http://xiph.org/ogg
编译的方式:

#!/bin/sh

export DEPOT=/CIOS/Qt/Android/Depot
export ARENA=/CIOS/Android/Arena
export SROOT=/CIOS/Qt/Android/Scripts/armv7
export BUILD=/home/Linkers/Android

cd $BUILD

export OGGVER=1.3.1

tar xvf $DEPOT/libogg-$OGGVER.tar.gz

cd libogg-$OGGVER

echo "Compile OGG $TWOLAMEVER"

export CC="$ANDROID_SYS_ROOT/bin/arm-linux-androideabi-gcc --sysroot=$ANDROID_SYS_ROOT/sysroot"
export CXX="$ANDROID_SYS_ROOT/bin/arm-linux-androideabi-g++ --sysroot=$ANDROID_SYS_ROOT/sysroot"
export AR="$ANDROID_SYS_ROOT/bin/arm-linux-androideabi-ar"
export RANLIB="$ANDROID_SYS_ROOT/bin/arm-linux-androideabi-ranlib"
export SYSROOT="$ANDROID_SYS_ROOT/sysroot"
export PATH="$ANDROID_SYS_ROOT/bin":$PATH
export ACC=arm-linux

./configure \
--host=$ACC \
--disable-shared \
--enable-static \
--with-sysroot=$SYSROOT \
--prefix=$ARENA

make
sudo make install


vorbis

vorbis的官方网址位于:http://xiph.org/vorbis
编译的方式:

#!/bin/sh

export DEPOT=/CIOS/Qt/Android/Depot
export ARENA=/CIOS/Android/Arena
export SROOT=/CIOS/Qt/Android/Scripts/armv7
export BUILD=/home/Linkers/Android

cd $BUILD

export VORBISVER=1.3.4

tar xvf $DEPOT/libvorbis-$VORBISVER.tar.gz

cd libvorbis-$VORBISVER

echo "Compile Vorbis $VORBISVER"

export CC="$ANDROID_SYS_ROOT/bin/arm-linux-androideabi-gcc --sysroot=$ANDROID_SYS_ROOT/sysroot"
export CXX="$ANDROID_SYS_ROOT/bin/arm-linux-androideabi-g++ --sysroot=$ANDROID_SYS_ROOT/sysroot"
export AR="$ANDROID_SYS_ROOT/bin/arm-linux-androideabi-ar"
export RANLIB="$ANDROID_SYS_ROOT/bin/arm-linux-androideabi-ranlib"
export SYSROOT="$ANDROID_SYS_ROOT/sysroot"
export PATH="$ANDROID_SYS_ROOT/bin":$PATH
export CFLAGS="-I$ARENA/include"
export LDFLAGS="-L$ARENA/lib"
export ACC=arm-linux

./configure \
--host=$ACC \
--disable-shared \
--enable-static \
--with-sysroot=$SYSROOT \
--prefix=$ARENA

make
sudo make install


FAAC

FAAC的官方网址位于:http://www.audiocoding.com/faac.html
编译的方式:

#!/bin/sh

export DEPOT=/CIOS/Qt/Android/Depot
export ARENA=/CIOS/Android/Arena
export SROOT=/CIOS/Qt/Android/Scripts/armv7
export BUILD=/home/Linkers/Android

cd $BUILD

export FAACVER=1.28

tar xvf $DEPOT/faac-$FAACVER.tar.gz

cd faac-$FAACVER

echo "Compile FAAC $FAACVER"

export CC="$ANDROID_SYS_ROOT/bin/arm-linux-androideabi-gcc --sysroot=$ANDROID_SYS_ROOT/sysroot"
export CXX="$ANDROID_SYS_ROOT/bin/arm-linux-androideabi-g++ --sysroot=$ANDROID_SYS_ROOT/sysroot"
export AR="$ANDROID_SYS_ROOT/bin/arm-linux-androideabi-ar"
export RANLIB="$ANDROID_SYS_ROOT/bin/arm-linux-androideabi-ranlib"
export SYSROOT="$ANDROID_SYS_ROOT/sysroot"
export PATH="$ANDROID_SYS_ROOT/bin":$PATH
export ACC=arm-linux

./configure \
--host=$ACC \
--disable-shared \
--enable-static \
--with-sysroot=$SYSROOT \
--prefix=$ARENA

make
sudo make install



FFmpeg


编译的方式:

#!/bin/sh
# one step compilation for android armv7

export DEPOT=/CIOS/Qt/Android/Depot
export ARENA=/CIOS/Android/Arena
export SROOT=/CIOS/Qt/Android/Scripts/armv7
export BUILD=/home/Linkers/Android

cd $BUILD

export FFMPEGVER=2.5

tar xvf $DEPOT/ffmpeg-$FFMPEGVER.tar.bz2

cd ffmpeg-$FFMPEGVER

echo "Compile FFmpeg $FFMPEGVER"

export CC="$ANDROID_SYS_ROOT/bin/arm-linux-androideabi-gcc --sysroot=$ANDROID_SYS_ROOT/sysroot"
export CXX="$ANDROID_SYS_ROOT/bin/arm-linux-androideabi-g++ --sysroot=$ANDROID_SYS_ROOT/sysroot"
export AR="$ANDROID_SYS_ROOT/bin/arm-linux-androideabi-ar"
export LD="$ANDROID_SYS_ROOT/bin/arm-linux-androideabi-ld"
export NM="$ANDROID_SYS_ROOT/bin/arm-linux-androideabi-nm"
export RANLIB="$ANDROID_SYS_ROOT/bin/arm-linux-androideabi-ranlib"
export SYSROOT="$ANDROID_SYS_ROOT/sysroot"
export PATH="$ANDROID_SYS_ROOT/bin":$PATH

./configure \
--target-os=linux \
--prefix=$ARENA \
--sysinclude=$SYSROOT/usr/include \
--enable-cross-compile \
--extra-libs="-lgcc" \
--arch=arm \
--cc=arm-linux-androideabi-gcc \
--cross-prefix=arm-linux-androideabi- \
--nm=$NM \
--ranlib=$RANLIB \
--sysroot=$SYSROOT \
--extra-cflags=" -O3 -Wall -mthumb -pipe -fpic -DANDROID -DNDEBUG -DHAVE_SYS_UIO_H=1 -Dipv6mr_interface=ipv6mr_ifindex -Wa,--noexecstack -fasm -Wno-psabi -fno-short-enums -fstrict-aliasing -Werror=strict-aliasing -finline-limit=300 -ffast-math -fmodulo-sched -fmodulo-sched-allow-regmoves -mfloat-abi=softfp -mfpu=vfp -march=armv7 -I$ARENA/include" \
--disable-shared \
--enable-static \
--extra-ldflags="-Wl,-rpath-link=$SYSROOT/usr/lib -L$SYSROOT/usr/lib -L$ARENA/lib -nostdlib -lc -lm -ldl -llog" \
--disable-everything \
--disable-symver \
--disable-doc \
--disable-ffplay \
--disable-ffmpeg \
--disable-ffprobe \
--disable-ffserver \
--disable-network \
--disable-iconv \
--enable-nonfree \
--enable-protocol=file \
--enable-libwavpack \
--enable-libtwolame \
--enable-libmp3lame \
--enable-libgsm \
--enable-libwavpack \
--enable-libfaac \
--enable-libvorbis \
--enable-zlib \
--enable-avformat \
--enable-avutil \
--enable-avcodec \
--enable-avfilter \
--enable-avdevice \
--enable-swresample \
--enable-swscale \
--enable-postproc \
--enable-demuxers \
--enable-muxers \
--enable-decoders \
--enable-encoders \
--enable-parsers \
--enable-asm

make
sudo make install