适用于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_ASM
从1
更改为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以下命令( 稍等一会儿 ) -
一旦完成,现在键入terminal
sudo make install
( 再次等待 ) -
去
/usr/local/lib
find新鲜出炉的armv7
库 -
请享用!
亚历克斯
我在https://github.com/ciphor/ffmpeg4ios上创build了一个“ffmpeg4ios”项目,该项目在iOS 5.0上成功编译。 你可以检查它。