iOS 编译可调试的FFmpeg

来源:互联网 发布:淘宝做广告多少钱 编辑:程序博客网 时间:2024/05/22 14:43


iOS 编译可调试的FFmpeg


修改FFmpeg-iOS-build-script脚本让其编译出能调试的FFmpeg库。

https://github.com/kewlbear/FFmpeg-iOS-build-script


//当脚本这样写编译会报错 -> 

CONFIGURE_FLAGS="--enable-cross-compile --disable-symver --disable-stripping --enable-static --disable-shared --disable-optimizations --enable-debug --disable-programs \

                 --disable-doc --enable-pic"

//这样编译不会报错

//但是这样编译禁止了汇编代码 导致解码很慢浪费性能

//https://stackoverflow.com/questions/7874667/trying-to-compile-last-ffmpeg-iphone-error-invalid-operand-in-inline-asm


/*

I have tried --disable-asm configuration. It works but the decoder performance is bad.

I tried edit the config.h: #define HAVE_INLINE_ASM 0

this only disables inline assembly

*/


CONFIGURE_FLAGS="--enable-cross-compile --disable-symver --disable-stripping --enable-static --disable-shared --disable-optimizations --enable-debug --disable-asm --disable-programs \

                 --disable-doc --enable-pic"


//这样编译不会报错 也不会影响性能去掉的cpu都是很老的CPU 目前基本上已经没有了


//可用的编译脚本配置

CONFIGURE_FLAGS="--enable-cross-compile --disable-symver --disable-stripping --enable-static --disable-shared --disable-optimizations --enable-debug --disable-armv5te --disable-armv6 --disable-armv6t2 --disable-programs \

                 --disable-doc --enable-pic"

//还要修改 i386下的编译环境。


    CONFIGURE_FLAGS="$CONFIGURE_FLAGS --disable-asm"


//可以用的脚本支持调试

build-ffmpeg.sh 修改后的源码


#!/bin/sh# directoriesSOURCE="ffmpeg-3.3"FAT="FFmpeg-iOS"SCRATCH="scratch"# must be an absolute pathTHIN=`pwd`/"thin"# absolute path to x264 library#X264=`pwd`/fat-x264#FDK_AAC=`pwd`/../fdk-aac-build-script-for-iOS/fdk-aac-iosCONFIGURE_FLAGS="--enable-cross-compile --disable-symver --disable-stripping --enable-static --disable-shared --disable-optimizations --enable-debug --disable-armv5te --disable-armv6 --disable-armv6t2 --disable-programs \                 --disable-doc --enable-pic"if [ "$X264" ]thenCONFIGURE_FLAGS="$CONFIGURE_FLAGS --enable-gpl --enable-libx264"fiif [ "$FDK_AAC" ]thenCONFIGURE_FLAGS="$CONFIGURE_FLAGS --enable-libfdk-aac"fi# avresample#CONFIGURE_FLAGS="$CONFIGURE_FLAGS --enable-avresample"# ARCHS="arm64 armv7 x86_64 i386"ARCHS="armv7 arm64 x86_64 i386"COMPILE="y"LIPO="y"DEPLOYMENT_TARGET="8.0"if [ "$*" ]thenif [ "$*" = "lipo" ]then# skip compileCOMPILE=elseARCHS="$*"if [ $# -eq 1 ]then# skip lipoLIPO=fififiif [ "$COMPILE" ]thenif [ ! `which yasm` ]thenecho 'Yasm not found'if [ ! `which brew` ]thenecho 'Homebrew not found. Trying to install...'                        ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" \|| exit 1fiecho 'Trying to install Yasm...'brew install yasm || exit 1fiif [ ! `which gas-preprocessor.pl` ]thenecho '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 1fiif [ ! -r $SOURCE ]thenecho 'FFmpeg source not found. Trying to download...'curl http://www.ffmpeg.org/releases/$SOURCE.tar.bz2 | tar xj \|| exit 1fiCWD=`pwd`for ARCH in $ARCHSdoecho "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"    CONFIGURE_FLAGS="$CONFIGURE_FLAGS --disable-asm"else    PLATFORM="iPhoneOS"    CFLAGS="$CFLAGS -mios-version-min=$DEPLOYMENT_TARGET -fembed-bitcode"    if [ "$ARCH" = "arm64" ]    then        EXPORT="GASPP_FIX_XCODE5=1"    fifiXCRUN_SDK=`echo $PLATFORM | tr '[:upper:]' '[:lower:]'`CC="xcrun -sdk $XCRUN_SDK clang"# force "configure" to use "gas-preprocessor.pl" (FFmpeg 3.3)if [ "$ARCH" = "arm64" ]then    AS="gas-preprocessor.pl -arch aarch64 -- $CC"else    AS="$CC"fiCXXFLAGS="$CFLAGS"LDFLAGS="$CFLAGS"if [ "$X264" ]thenCFLAGS="$CFLAGS -I$X264/include"LDFLAGS="$LDFLAGS -L$X264/lib"fiif [ "$FDK_AAC" ]thenCFLAGS="$CFLAGS -I$FDK_AAC/include"LDFLAGS="$LDFLAGS -L$FDK_AAC/lib"fiTMPDIR=${TMPDIR/%\/} $CWD/$SOURCE/configure \    --target-os=darwin \    --arch=$ARCH \    --cc="$CC" \    --as="$AS" \    $CONFIGURE_FLAGS \    --extra-cflags="$CFLAGS" \    --extra-ldflags="$LDFLAGS" \    --prefix="$THIN/$ARCH" \|| exit 1make -j3 install $EXPORT || exit 1cd $CWDdonefiif [ "$LIPO" ]thenecho "building fat binaries..."mkdir -p $FAT/libset - $ARCHSCWD=`pwd`cd $THIN/$1/libfor LIB in *.adocd $CWDecho lipo -create `find $THIN -name $LIB` -output $FAT/lib/$LIB 1>&2lipo -create `find $THIN -name $LIB` -output $FAT/lib/$LIB || exit 1donecd $CWDcp -rf $THIN/$1/include $FATfiecho Done