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
|