- 编译ffmpeg.
- 下载源码后可以自己手动编译 ,反正是通过各种命令 配置configure
- 通过一个很牛逼的脚本:git@github.com:kewlbear/FFmpeg-iOS-build-script.git 下载之后,检查ffmpeg的版本号,替换成最新的 然后运行脚本就行了 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
#!/bin/sh
# directories
SOURCE=
"ffmpeg-2.6.1"
FAT=
"FFmpeg-iOS"
SCRATCH=
"scratch"
# must be an absolute path
THIN=`pwd`/
"thin"
# absolute path to x264 library
#X264=`pwd`/fat-x264
#FDK_AAC=`pwd`/fdk-aac/fdk-aac-ios
CONFIGURE_FLAGS="--enable-cross-compile --disable-debug --disable-programs \
--disable-doc --enable-pic"
if
[
"$X264"
]
then
CONFIGURE_FLAGS=
"$CONFIGURE_FLAGS --enable-gpl --enable-libx264"
fi
if
[
"$FDK_AAC"
]
then
CONFIGURE_FLAGS=
"$CONFIGURE_FLAGS --enable-libfdk-aac"
fi
# avresample
#CONFIGURE_FLAGS="$CONFIGURE_FLAGS --enable-avresample"
ARCHS=
"arm64 armv7s armv7 x86_64 i386"
COMPILE=
"y"
LIPO=
"y"
DEPLOYMENT_TARGET=
"6.0"
if
[
"$*"
]
then
if
[
"$*"
=
"lipo"
]
then
# skip compile
COMPILE=
else
ARCHS=
"$*"
if
[ $# -eq 1 ]
then
# skip lipo
LIPO=
fi
fi
fi
if
[
"$COMPILE"
]
then
if
[ ! `which yasm` ]
then
echo
'Yasm not found'
if
[ ! `which brew` ]
then
echo
'Homebrew not found. Trying to install...'
ruby -e
"$(curl -fsSL )"
\
||
exit
1
fi
echo
'Trying to install Yasm...'
brew install yasm ||
exit
1
fi
if
[ ! `which gas-preprocessor.pl` ]
then
echo
'gas-preprocessor.pl not found. Trying to install...'
(curl -L https:
//github.com/libav/gas-preprocessor/raw/master/gas-preprocessor.pl \
-o /usr/local/bin/gas-preprocessor.pl \
&& chmod +x /usr/local/bin/gas-preprocessor.pl) \
||
exit
1
fi
if
[ ! -r $SOURCE ]
then
echo
'FFmpeg source not found. Trying to download...'
curl http:
//www.ffmpeg.org/releases/$SOURCE.tar.bz2 | tar xj \
||
exit
1
fi
CWD=`pwd`
for
ARCH in $ARCHS
do
echo
"building $ARCH..."
mkdir -p
"$SCRATCH/$ARCH"
cd
"$SCRATCH/$ARCH"
CFLAGS=
"-arch $ARCH"
if
[
"$ARCH"
=
"i386"
-o
"$ARCH"
=
"x86_64"
]
then
PLATFORM=
"iPhoneSimulator"
CFLAGS=
"$CFLAGS -mios-simulator-version-min=$DEPLOYMENT_TARGET"
else
PLATFORM=
"iPhoneOS"
CFLAGS=
"$CFLAGS -mios-version-min=$DEPLOYMENT_TARGET"
if
[
"$ARCH"
=
"arm64"
]
then
EXPORT=
"GASPP_FIX_XCODE5=1"
fi
fi
XCRUN_SDK=`echo $PLATFORM | tr
'[:upper:]'
'[:lower:]'
`
CC=
"xcrun -sdk $XCRUN_SDK clang"
CXXFLAGS=
"$CFLAGS"
LDFLAGS=
"$CFLAGS"
if
[
"$X264"
]
then
CFLAGS=
"$CFLAGS -I$X264/include"
LDFLAGS=
"$LDFLAGS -L$X264/lib"
fi
if
[
"$FDK_AAC"
]
then
CFLAGS=
"$CFLAGS -I$FDK_AAC/include"
LDFLAGS=
"$LDFLAGS -L$FDK_AAC/lib"
fi
TMPDIR=${TMPDIR/%\/} $CWD/$SOURCE/configure \
--target-os=darwin \
--arch=$ARCH \
--cc=
"$CC"
\
$CONFIGURE_FLAGS \
--extra-cflags=
"$CFLAGS"
\
--extra-cxxflags=
"$CXXFLAGS"
\
--extra-ldflags=
"$LDFLAGS"
\
--prefix=
"$THIN/$ARCH"
\
||
exit
1
make -j3 install $EXPORT ||
exit
1
cd $CWD
done
fi
if
[
"$LIPO"
]
then
echo
"building fat binaries..."
mkdir -p $FAT/lib
set - $ARCHS
CWD=`pwd`
cd $THIN/$1/lib
for
LIB in *.a
do
cd $CWD
echo lipo -create `find $THIN -name $LIB` -output $FAT/lib/$LIB 1>&2
lipo -create `find $THIN -name $LIB` -output $FAT/lib/$LIB ||
exit
1
done
cd $CWD
cp -rf $THIN/$1/include $FAT
fi
echo Done
- 导入项目,有静态包经验的就就不用看了,这个对于我这个半路出家的和尚还是处理了老半天才解决..a文件直接导入 .h文件要导入文件夹结构 配置header search 环境变量 使用的时候导入文件 结构:#import "文件夹/文件.h"
- 编译.
- 首次编译.
Undefined symbols for architecture armv7: "_deflateInit2_", referenced from: _encode_frame in libavcodec.a(pngenc.o) "_crc32", referenced from: _encode_frame in libavcodec.a(pngenc.o) "_deflateReset", referenced from: _encode_frame in libavcodec.a(lclenc.o) _encode_frame in libavcodec.a(zmbvenc.o) "_compress", referenced from: _encode_strip in libavcodec.a(tiffenc.o) "_deflateBound", referenced from: _flashsv_decode_frame in libavcodec.a(flashsv.o) _encode_frame in libavcodec.a(pngenc.o) _encode_frame in libavcodec.a(lclenc.o) "_inflateSync", referenced from: _flashsv_decode_frame in libavcodec.a(flashsv.o) "_inflateReset", referenced from: _flashsv_decode_frame in libavcodec.a(flashsv.o) _zlib_decomp in libavcodec.a(lcldec.o) _decode_frame in libavcodec.a(tscc.o) _zerocodec_decode_frame in libavcodec.a(zerocodec.o) _decode_frame in libavcodec.a(zmbv.o) "_iconv_open", referenced from: _avcodec_open2 in libavcodec.a(utils.o) _avcodec_decode_subtitle2 in libavcodec.a(utils.o) "_BZ2_bzDecompress", referenced from: _matroska_decode_buffer in libavformat.a(matroskadec.o) "_inflate", referenced from: _http_read_stream in libavformat.a(http.o) _matroska_decode_buffer in libavformat.a(matroskadec.o) _rtmp_open in libavformat.a(rtmpproto.o) _zlib_refill in libavformat.a(swfdec.o) _decode_frame_common in libavcodec.a(pngdec.o) _decode_text_chunk in libavcodec.a(pngdec.o) _flashsv_decode_frame in libavcodec.a(flashsv.o) ... "_inflateInit_", referenced from: _matroska_decode_buffer in libavformat.a(matroskadec.o) _rtmp_open in libavformat.a(rtmpproto.o) _swf_read_header in libavformat.a(swfdec.o) _decode_frame_apng in libavcodec.a(pngdec.o) _decode_frame_png in libavcodec.a(pngdec.o) _decode_text_chunk in libavcodec.a(pngdec.o) _flashsv_decode_init in libavcodec.a(flashsv.o) ... "_iconv", referenced from: _avcodec_decode_subtitle2 in libavcodec.a(utils.o) "_BZ2_bzDecompressEnd", referenced from: _matroska_decode_buffer in libavformat.a(matroskadec.o) "_inflateInit2_", referenced from: _http_read_header in libavformat.a(http.o) "_deflateEnd", referenced from: _flashsv_decode_frame in libavcodec.a(flashsv.o) _flashsv2_encode_frame in libavcodec.a(flashsv2enc.o) _flashsv_encode_init in libavcodec.a(flashsvenc.o) _flashsv_encode_end in libavcodec.a(flashsvenc.o) _encode_frame in libavcodec.a(pngenc.o) _encode_end in libavcodec.a(lclenc.o) _encode_init in libavcodec.a(zmbvenc.o) ... "_BZ2_bzDecompressInit", referenced from: _matroska_decode_buffer in libavformat.a(matroskadec.o) "_deflateInit_", referenced from: _flashsv_decode_frame in libavcodec.a(flashsv.o) _flashsv2_encode_frame in libavcodec.a(flashsv2enc.o) _encode_init in libavcodec.a(lclenc.o) _encode_init in libavcodec.a(zmbvenc.o) "_zlibCompileFlags", referenced from: _http_read_header in libavformat.a(http.o) "_compress2", referenced from: _flashsv2_encode_frame in libavcodec.a(flashsv2enc.o) _flashsv_encode_frame in libavcodec.a(flashsvenc.o) "_deflate", referenced from: _flashsv_decode_frame in libavcodec.a(flashsv.o) _flashsv2_encode_frame in libavcodec.a(flashsv2enc.o) _encode_frame in libavcodec.a(pngenc.o) _encode_frame in libavcodec.a(lclenc.o) _encode_frame in libavcodec.a(zmbvenc.o) "_inflateEnd", referenced from: _http_close in libavformat.a(http.o) _http_read_header in libavformat.a(http.o) _matroska_decode_buffer in libavformat.a(matroskadec.o) _rtmp_open in libavformat.a(rtmpproto.o) _swf_read_close in libavformat.a(swfdec.o) _decode_frame_apng in libavcodec.a(pngdec.o) _decode_frame_png in libavcodec.a(pngdec.o) ... "_uncompress", referenced from: _id3v2_read_internal in libavformat.a(id3v2.o) _mov_read_cmov in libavformat.a(mov.o) _swf_read_packet in libavformat.a(swfdec.o) _decode_frame in libavcodec.a(cscd.o) _decode_frame in libavcodec.a(dxa.o) _decode_block in libavcodec.a(exr.o) _g2m_decode_frame in libavcodec.a(g2meet.o) ... "_iconv_close", referenced from: _avcodec_open2 in libavcodec.a(utils.o) _avcodec_decode_subtitle2 in libavcodec.a(utils.o)ld: symbol(s) not found for architecture armv7clang: error: linker command failed with exit code 1 (use -v to see invocation)
导入 libz.1.2.5.dylib ,再次编译
Undefined symbols for architecture armv7: "_BZ2_bzDecompressInit", referenced from: _matroska_decode_buffer in libavformat.a(matroskadec.o) "_iconv", referenced from: _avcodec_decode_subtitle2 in libavcodec.a(utils.o) "_BZ2_bzDecompress", referenced from: _matroska_decode_buffer in libavformat.a(matroskadec.o) "_BZ2_bzDecompressEnd", referenced from: _matroska_decode_buffer in libavformat.a(matroskadec.o) "_iconv_open", referenced from: _avcodec_open2 in libavcodec.a(utils.o) _avcodec_decode_subtitle2 in libavcodec.a(utils.o) "_iconv_close", referenced from: _avcodec_open2 in libavcodec.a(utils.o) _avcodec_decode_subtitle2 in libavcodec.a(utils.o)ld: symbol(s) not found for architecture armv7clang: error: linker command failed with exit code 1 (use -v to see invocation)
导入 libbz2.1.0.dylib ,再次编译
Undefined symbols for architecture armv7: "_iconv", referenced from: _avcodec_decode_subtitle2 in libavcodec.a(utils.o) "_iconv_open", referenced from: _avcodec_open2 in libavcodec.a(utils.o) _avcodec_decode_subtitle2 in libavcodec.a(utils.o) "_iconv_close", referenced from: _avcodec_open2 in libavcodec.a(utils.o) _avcodec_decode_subtitle2 in libavcodec.a(utils.o)ld: symbol(s) not found for architecture armv7clang: error: linker command failed with exit code 1 (use -v to see invocation)
导入 libiconv.2.4.0.dylib 编译通过
- 首次编译.