problem compiling ffmpeg for iFrameExtractor

I’m trying to compile the ffmpeg by using the make and build files in iFrameExtractor example. firstly i tried to follow the readme file on the github, which only says to run the ./build_universal in ffmpeg folder. it did not work

i then tried to follow the info in INSTALL without success. i then tried doing the stuff in INSTALL followed by the ./build_universal which didn’t work. All the *.a files that are imported to the project exists until the end of the build sequence. when the lipo commands in build_universal are run, which i guess concat the .a files for the different architectures(?). anyhow these leave the following errors:

  • Get PTS from raw H264 mdat generated by iOS AVAssetWriter
  • Installing ffmpeg ios libraries armv7, armv7s, i386 and universal on Mac with 10.8
  • ffmpeg won't ./configure in iOS5.1
  • ffmpeg use on iOS
  • How to Build FFMpeg as iOS Framework
  • Mp4 to HLS using ffmpeg
  • lipo: specifed architecture type (armv6) for file (armv6/libavcodec.a) does not match it's cputype (16777223) and cpusubtype (3) (should be cputype (12) and cpusubtype (6))
    lipo: specifed architecture type (armv6) for file (armv6/libavdevice.a) does not match it's cputype (16777223) and cpusubtype (3) (should be cputype (12) and cpusubtype (6))
    lipo: specifed architecture type (armv6) for file (armv6/libavformat.a) does not match it's cputype (16777223) and cpusubtype (3) (should be cputype (12) and cpusubtype (6))
    lipo: specifed architecture type (armv6) for file (armv6/libavutil.a) does not match it's cputype (16777223) and cpusubtype (3) (should be cputype (12) and cpusubtype (6))
    lipo: specifed architecture type (armv6) for file (armv6/libswscale.a) does not match it's cputype (16777223) and cpusubtype (3) (should be cputype (12) and cpusubtype (6))
    

    i can get the project to compile for simulator if i only use ./build_armv7 but if i run the universal the .a files are removed in the end. and only using doesn’t work to build for iphone 4 .

    3 Solutions Collect From Internet About “problem compiling ffmpeg for iFrameExtractor”

    After a week of trial and error, I was finally able to create the ffmpeg universal libraries and successfully compile and run iFrameExtractor for the device as well as the simulator.

    To compile and run the project on your iPhone device OR simulator:

    1) open Terminal

    2) clone the repository: git clone git://github.com/lajos/iFrameExtractor.git

    3) go to the ffmpeg folder in the project: cd iFrameExtractor/ffmpeg

    4) run: ./configure

    5) Edit the build scripts (build_armv6, build_armv7, build_i386) as follows:

    These scripts assume you are using iOS SDK 5.0 on Xcode 4.2.

    build_armv6:

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

    build_armv7:

    #!/bin/tcsh -f
    
    if (! -d armv7) mkdir armv7
    if (! -d lib) mkdir lib
    
    rm armv7/*.a
    
    make clean
    
    ./configure \
    --disable-bzlib --disable-doc \
    --disable-ffmpeg --disable-ffplay \
    --disable-ffserver --disable-mmx \
    --cc=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc \
    --as='gas-preprocessor/gas-preprocessor.pl /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc' \
    --enable-cross-compile --target-os=darwin \
    --arch=arm --cpu=cortex-a8 --enable-pic \
    --sysroot=/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk \
    --extra-ldflags="-arch armv7 -    L/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/usr/lib/system" \
    --extra-cflags="-arch armv7"
    
    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/
    

    build_i386:

    #!/bin/tcsh -f
    
    if (! -d i386) mkdir i386
    if (! -d lib) mkdir lib
    
    rm i386/*.a
    
    make clean
    
    ./configure \
    --disable-bzlib --disable-doc \
    --disable-ffmpeg --disable-ffplay \
    --disable-ffserver --disable-mmx \
    --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/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk \
    --extra-ldflags="-arch i386 -L//Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk/usr/lib/system" \
    --extra-cflags="-arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fpascal-strings -O0 -fasm-blocks -Wreturn-type -Wunused-variable -D__IPHONE_OS_VERSION_MIN_REQUIRED=40000 -isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk -fvisibility=hidden -mmacosx-version-min=10.5 -gdwarf-2"
    
    make
    
    mv libavcodec/libavcodec.a i386/
    mv libavdevice/libavdevice.a i386/
    mv libavformat/libavformat.a i386/
    mv libavutil/libavutil.a i386/
    mv libswscale/libswscale.a i386/
    
    rm lib/*.a
    
    cp i386/*.a lib/
    

    6) build the ffmpeg libraries: ./build_universal

    7) open the xcode project and run it on your iPhone device or simulator

    These steps work perfectly for me. I hope this will help others struggling to get the ffmpeg libraries working for iOS.

    i downloaded the latest ffmpeg repository and used the following to compile only for armv6 and armv7. I couldn’t get it working for i386, i receive errors that the cputype and subcputype are wrong. apparently the cputype is supposed to be x86 and subcputype should be intel.

    anyhow i used the following build scripts to compile for the arm architectures:

    build script:

    #!/bin/sh
    
    set -e
    
    SCRIPT_DIR=$( (cd -P $(dirname $0) && pwd) )
    DIST_DIR_BASE=${DIST_DIR_BASE:="$SCRIPT_DIR/dist"}
    
    if [ -d ffmpeg ]
    then
      echo "Found ffmpeg source directory, no need to fetch from git..."
    else
      echo "Fetching ffmpeg from git://git.videolan.org/ffmpeg.git..."
      git clone git://git.videolan.org/ffmpeg.git
    fi
    
    ARCHS=${ARCHS:-"armv6 armv7"}
    
    for ARCH in $ARCHS
    do
        FFMPEG_DIR=ffmpeg-$ARCH
        if [ -d $FFMPEG_DIR ]
        then
          echo "Removing old directory $FFMPEG_DIR"
          rm -rf $FFMPEG_DIR
        fi
        echo "Copying source for $ARCH to directory $FFMPEG_DIR"
        cp -a ffmpeg $FFMPEG_DIR
    
        cd $FFMPEG_DIR
    
        DIST_DIR=$DIST_DIR_BASE-$ARCH
        mkdir -p $DIST_DIR
    
        case $ARCH in
            armv6)
                EXTRA_FLAGS="--enable-cross-compile --target-os=darwin --arch=arm --cpu=arm1176jzf-s"
                EXTRA_CFLAGS="-arch $ARCH"
                EXTRA_LDFLAGS="-arch $ARCH"
                ;;
            armv7)
                EXTRA_FLAGS="--enable-cross-compile --target-os=darwin --arch=arm --cpu=cortex-a8 --enable-pic"
                EXTRA_CFLAGS="-arch $ARCH"
                EXTRA_LDFLAGS="-arch $ARCH"
                ;;
            x86_64)
                EXTRA_CC_FLAGS="-mdynamic-no-pic"
                ;;
        esac
    
        echo "Configuring ffmpeg for $ARCH..."
        ./configure \
        --prefix=$DIST_DIR \
        --extra-ldflags=-L/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk/usr/lib/system \
        --disable-bzlib \
        --disable-doc \
        --disable-ffmpeg \
        --disable-ffplay \
        --disable-ffserver \
        --cc=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc \
        --sysroot=/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk \
        --extra-ldflags="$EXTRA_LDFLAGS" \
        --extra-cflags="$EXTRA_CFLAGS" \
        $EXTRA_FLAGS
    
        echo "Installing ffmpeg for $ARCH..."
        make && make install
    
        cd $SCRIPT_DIR
    
        if [ -d $DIST_DIR/bin ]
        then
          rm -rf $DIST_DIR/bin
        fi
        if [ -d $DIST_DIR/share ]
        then
          rm -rf $DIST_DIR/share
        fi
    done
    

    and combine libs script:

    #!/bin/bash
    
    set -e
    
    ARCHS="armv6 armv7"
    
    for ARCH in $ARCHS
    do
      if [ -d dist-$ARCH ]
      then
        MAIN_ARCH=$ARCH
      fi
    done
    
    if [ -z "$MAIN_ARCH" ]
    then
      echo "Please compile an architecture"
      exit 1
    fi
    
    
    OUTPUT_DIR="dist-uarch"
    rm -rf $OUTPUT_DIR
    
    mkdir -p $OUTPUT_DIR/lib $OUTPUT_DIR/include
    
    for LIB in dist-$MAIN_ARCH/lib/*.a
    do
      LIB=`basename $LIB`
      LIPO_CREATE=""
      for ARCH in $ARCHS
      do
        if [ -d dist-$ARCH ]
        then
          LIPO_CREATE="$LIPO_CREATE-arch $ARCH dist-$ARCH/lib/$LIB "
        fi
      done
      OUTPUT="$OUTPUT_DIR/lib/$LIB"
      echo "Creating: $OUTPUT"
      lipo -create $LIPO_CREATE -output $OUTPUT
      lipo -info $OUTPUT
    done
    
    echo "Copying headers from dist-$MAIN_ARCH..."
    cp -R dist-$MAIN_ARCH/include/* $OUTPUT_DIR/include
    

    then i import the .a files from BUILD-FOLDER/dist-uarch and it builds in xcode like a charm!

    building FFMPEG for iOS 5.1

    hope this will help you to build latest FFMPEG for iOS 5.1

    git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg
    
    cd ffmpeg
    
    ./build_universal
    

    note: you have to create build_* scripts first, to do this see code below

    script for ARMV7 – create file build_armv7

    #!/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=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc --as='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/iPhoneOS5.1.sdk --cpu=cortex-a8 --extra-cflags='-arch armv7' --extra-ldflags='-arch armv7 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk' --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/
    

    script for ARMV6 – create file build_armv6

    #!/bin/tcsh -f
    
    if (! -d armv6) mkdir armv6
    if (! -d lib) mkdir lib
    
    rm armv6/*.a
    
    make clean
    
    ./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.pl /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc' --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk --cpu=arm1176jzf-s --extra-cflags='-arch armv6' --extra-ldflags='-arch armv6 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk'
    
    make
    
    mv libavcodec/libavcodec.a armv6/
    mv libavdevice/libavdevice.a armv6/
    mv libavformat/libavformat.a armv6/
    mv libavutil/libavutil.a armv6/
    mv libswscale/libswscale.a armv6/
    
    rm lib/*.a
    
    cp armv6/*.a lib/
    

    script for simulator – create file build_i386

    #!/bin/tcsh -f
    
    if (! -d i386) mkdir i386
    if (! -d lib) mkdir lib
    
    rm i386/*.a
    
    make clean
    
    ./configure \
    --disable-bzlib --disable-doc \
    --disable-ffmpeg --disable-ffplay \
    --disable-ffserver --disable-mmx \
    --cc=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc \
    --as='gas-preprocessor.pl /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc' \
    --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.1.sdk \
    --extra-ldflags="-arch i386 -L//Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.1.sdk/usr/lib/system" \
    --extra-cflags="-arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fpascal-strings -O0 -fasm-blocks -Wreturn-type -Wunused-variable -D__IPHONE_OS_VERSION_MIN_REQUIRED=40000 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.1.sdk -fvisibility=hidden -mmacosx-version-min=10.5 -gdwarf-2"
    
    make
    
    mv libavcodec/libavcodec.a i386/
    mv libavdevice/libavdevice.a i386/
    mv libavformat/libavformat.a i386/
    mv libavutil/libavutil.a i386/
    mv libswscale/libswscale.a i386/
    
    rm lib/*.a
    
    cp i386/*.a lib/
    

    script for universal build (will merge libraries into one universal) – create file build_universal

    #!/bin/tcsh -f
    
    source ./build_armv6
    source ./build_armv7
    source ./build_i386
    
    if (! -d universal) mkdir universal
    if (! -d lib) mkdir lib
    
    rm universal/*.a
    
    lipo -create -arch armv6 armv6/libavcodec.a -arch armv7 armv7/libavcodec.a -arch i386 i386/libavcodec.a -output universal/libavcodec.a
    lipo -create -arch armv6 armv6/libavdevice.a -arch armv7 armv7/libavdevice.a -arch i386 i386/libavdevice.a -output universal/libavdevice.a
    lipo -create -arch armv6 armv6/libavformat.a -arch armv7 armv7/libavformat.a -arch i386 i386/libavformat.a -output universal/libavformat.a
    lipo -create -arch armv6 armv6/libavutil.a -arch armv7 armv7/libavutil.a -arch i386 i386/libavutil.a -output universal/libavutil.a
    lipo -create -arch armv6 armv6/libswscale.a -arch armv7 armv7/libswscale.a -arch i386 i386/libswscale.a -output universal/libswscale.a
    
    rm lib/*.a
    
    cp universal/*.a lib/