适用于iOS5的FFmpeg

有没有人能够使用iOS5 sdk编译ffmpeg库? 我发现脚本使用4.3 sdk,但没有iOS5的。 我假设用sdk和armv7构build的库仍然可以兼容iOS 5。

这是我试图使用的命令:

./configure \ --cc=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc \ --as='gas-preprocessor.pl /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc' \ --sysroot=/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk \ --extra-ldflags=-L/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/usr/lib/system \ --target-os=darwin \ --arch=arm \ --cpu=cortex-a8 \ --extra-cflags='-arch armv7' \ --extra-ldflags='-arch armv7' \ --prefix=compiled/armv7 \ --enable-pic \ --enable-cross-compile \ --disable-armv5te \ --disable-ffmpeg \ --disable-ffplay \ --disable-ffserver \ --disable-ffprobe \ --disable-doc 

我也尝试使用这样的脚本:

 #!/bin/tcsh -f if (! -d armv7) mkdir armv7 if (! -d lib) mkdir lib rm armv7/*.a make clean ./configure --disable-doc --disable-ffmpeg --disable-ffplay --disable-ffserver --enable-cross-compile --arch=arm --target-os=darwin --cc=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc --as='gas-preprocessor/gas-preprocessor.pl /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc' --sysroot=/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk --cpu=cortex-a8 --extra-cflags='-arch armv7' --extra-ldflags='-arch armv7' --enable-pic make mv libavcodec/libavcodec.a armv7/ mv libavdevice/libavdevice.a armv7/ mv libavformat/libavformat.a armv7/ mv libavutil/libavutil.a armv7/ mv libswscale/libswscale.a armv7/ rm lib/*.a cp armv7/*.a lib/ 

我也试着切换到gcc-4.2以及llvm-gcc-4.2。 但是,我在下面的评论中显示“未知选项”错误。

任何信息将是伟大的,谢谢。

更新:完全改变了使用我使用的脚本的答案。

您还需要从https://github.com/yuvi/gas-preprocessor下载gas-preprocessor.pl ,并将其放在path中并使其可执行。

然后创build一个脚本(比如说make_for_iphone.sh )并把它放在里面:

 export PLATFORM="iPhoneOS" export MIN_VERSION="4.0" export MAX_VERSION="5.0" export DEVROOT=/Developer/Platforms/${PLATFORM}.platform/Developer export SDKROOT=$DEVROOT/SDKs/${PLATFORM}${MAX_VERSION}.sdk export CC=$DEVROOT/usr/bin/llvm-gcc export LD=$DEVROOT/usr/bin/ld export CPP=$DEVROOT/usr/bin/cpp export CXX=$DEVROOT/usr/bin/llvm-g++ export AR=$DEVROOT/usr/bin/ar export LIBTOOL=$DEVROOT/usr/bin/libtool export NM=$DEVROOT/usr/bin/nm export CXXCPP=$DEVROOT/usr/bin/cpp export RANLIB=$DEVROOT/usr/bin/ranlib COMMONFLAGS="-pipe -gdwarf-2 -no-cpp-precomp -isysroot ${SDKROOT} -marm -fPIC" export LDFLAGS="${COMMONFLAGS} -fPIC" export CFLAGS="${COMMONFLAGS} -fvisibility=hidden" export CXXFLAGS="${COMMONFLAGS} -fvisibility=hidden -fvisibility-inlines-hidden" FFMPEG_LIBS="libavcodec libavdevice libavformat libavutil libswscale" echo "Building armv6..." make clean ./configure \ --cpu=arm1176jzf-s \ --extra-cflags='-arch armv6 -miphoneos-version-min=${MIN_VERSION} -mthumb' \ --extra-ldflags='-arch armv6 -miphoneos-version-min=${MIN_VERSION}' \ --enable-cross-compile \ --arch=arm \ --target-os=darwin \ --cc=${CC} \ --sysroot=${SDKROOT} \ --prefix=installed \ --disable-network \ --disable-decoders \ --disable-muxers \ --disable-demuxers \ --disable-devices \ --disable-parsers \ --disable-encoders \ --disable-protocols \ --disable-filters \ --disable-bsfs \ --enable-decoder=h264 \ --enable-decoder=svq3 \ --enable-gpl \ --enable-pic \ --disable-doc perl -pi -e 's/HAVE_INLINE_ASM 1/HAVE_INLINE_ASM 0/' config.h make -j3 mkdir -p build.armv6 for i in ${FFMPEG_LIBS}; do cp ./$i/$ia ./build.armv6/; done echo "Building armv7..." make clean ./configure \ --cpu=cortex-a8 \ --extra-cflags='-arch armv7 -miphoneos-version-min=${MIN_VERSION} -mthumb' \ --extra-ldflags='-arch armv7 -miphoneos-version-min=${MIN_VERSION}' \ --enable-cross-compile \ --arch=arm \ --target-os=darwin \ --cc=${CC} \ --sysroot=${SDKROOT} \ --prefix=installed \ --disable-network \ --disable-decoders \ --disable-muxers \ --disable-demuxers \ --disable-devices \ --disable-parsers \ --disable-encoders \ --disable-protocols \ --disable-filters \ --disable-bsfs \ --enable-decoder=h264 \ --enable-decoder=svq3 \ --enable-gpl \ --enable-pic \ --disable-doc perl -pi -e 's/HAVE_INLINE_ASM 1/HAVE_INLINE_ASM 0/' config.h make -j3 mkdir -p build.armv7 for i in ${FFMPEG_LIBS}; do cp ./$i/$ia ./build.armv7/; done mkdir -p build.universal for i in ${FFMPEG_LIBS}; do lipo -create ./build.armv7/$ia ./build.armv6/$ia -output ./build.universal/$ia; done for i in ${FFMPEG_LIBS}; do cp ./build.universal/$ia ./$i/$ia; done make install 

这编译armv6和armv7版本,并把它们放进一个脂肪库使用lipo 。 它会安装到您从installed位置运行脚本的下方的文件夹中。

请注意,此刻我不得不closures内联汇编使用perl内联replace将HAVE_INLINE_ASM1更改为0 。 这是因为gas-preprocessor.pl的这个问题 – https://github.com/yuvi/gas-preprocessor/issues/16

另请注意,除了H264解码器外,这已closures所有编码器,解码器,复用器,解复用器等。 只需更改configuration行以编译您想要的用例。

请记住,这已经使GPL代码 – 所以你应该知道这是什么意思的iPhone应用程序。 如果你不知道,那么你应该读一读。

这里是我的工作configuration在iOS 6交叉编译FFmpeg拱门是ARMv7

注意:你必须在/usr/local/bin/目录下有gas-preprocessor.pl ,直到你的bin目录下有gas-preprocessor.pl

  • 从这里下载FFmpeg 1.0“天使”

  • 解压缩并放在某个位置,即您的Desktop文件夹

  • 打开terminal并浏览到解unzipped FFmpeg folder

  • 复制并粘贴以下命令( 耐心等待一会儿

./configure –disable-doc –disable -ffmpeg –disable -ffplay –disable -ffserver –enable-cross-compile –arch = arm –target-os = darwin –cc = / Applications / Xcode .app / Contents / Developer / Platforms / iPhoneOS.platform / Developer / usr / bin / gcc –as ='gas-preprocessor / gas-preprocessor.pl /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform / Developer / usr / bin / gcc'–sysroot = / Applications / Xcode.app / Contents / Developer / Platforms / iPhoneOS.platform / Developer / SDKs / iPhoneOS6.0.sdk –cpu = cortex-a8 –extra- cflags =' – arch armv7'–extra-ldflags =' – arch armv7 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk'–enable- pic –enable-decoder = rawvideo –disable-asm

  • 现在在terminal make上input以下命令( 稍等一会儿

  • 一旦完成,现在键入terminalsudo make install再次等待

  • /usr/local/libfind新鲜出炉的armv7

  • 请享用!

亚历克斯