2014年2月

前段时间,实现了交叉编译ffmpeg用于rtmp音频直播,所以涉及到ffmpeg和aac的编解码,写一个摘要记录一下吧。
首先 下载好vo-aacenc-0.1.3.tgz, ffmpeg源代码。

wget http://jaist.dl.sourceforge.net/project/opencore-amr/vo-aacenc/vo-aacenc-0.1.3.tar.gz
git clone https://github.com/FFmpeg/FFmpeg

在shell下指定一个变量:
SDK=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/

  • libvo_aacenc的编译:
CC="gcc -arch armv7  -I$SDK/usr/include"  LDFLAGS=" -L$SDK/usr/lib/system  -L$SDK/usr/lib " ./configure --enable-shared=no --host=arm-apple-darwin6
  • 把编译好的静态.a和头文件单独提出来:
$tree ../build/
.
├── include
│   └── vo-aacenc
│       ├── cmnMemory.h
│       ├── voAAC.h
│       ├── voAMRWB.h
│       ├── voAudio.h
│       ├── voIndex.h
│       ├── voMem.h
│       └── voType.h
└── libvo-aacenc.a
  • ffmpeg编译参数:
./configure \
--arch=arm \
--enable-memalign-hack  --enable-small    --disable-debug --disable-ffplay --disable-ffprobe --disable-ffserver  --disable-doc  --enable-static --disable-shared  \
--enable-version3  --enable-nonfree  \
--disable-encoders --disable-decoders   --disable-bsfs --disable-parsers  --disable-demuxers --disable-muxers    --disable-indevs --disable-outdevs   --disable-filters \
--enable-demuxer=flv --enable-muxer=flv \
--enable-demuxer=wav --enable-muxer=wav  \
--enable-decoder=pcm_s16le --enable-encoder=pcm_s16le    \
--enable-decoder=aac  --enable-encoder=aac    \
 --enable-libvo-aacenc --enable-encoder=libvo_aacenc \
 --enable-demuxer=aac --enable-demuxer=hls  \
 --enable-muxer=adts --enable-bsf=aac_adtstoasc   \
 --enable-filter=aresample  --enable-filter=asetpts \
 --disable-yasm  --disable-asm --disable-inline-asm  \
 --extra-cflags=" -I$SDK/usr/include  -I../build/include  -arch armv7  "  \
 --extra-ldflags="-arch armv7   -L../build/ -L$SDK/usr/lib  -L$SDK/usr/lib/system   " \
 --enable-cross-compile --target-os=darwin
  • 静态库文件的合并:

xcrun -sdk iphoneos lipo -output libvo-aacenc.a -create -arch i386 i386/libvo-aacenc.a -arch armv7 armv7/libvo-aacenc.a -arch armv7s armv7s/libvo-aacenc.a