FFmpeg для iOS5

Кто-нибудь смог скомпилировать библиотеки ffmpeg с помощью iOS5 sdk? Я нашел скрипты, которые используют 4.3 sdk, но ничего для iOS5. Я бы предположил, что библиотеки, созданные со старыми sdk и armv7, по-прежнему будут совместимы для 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

Я также попытался использовать script как этот:

#!/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. Однако я получаю ошибку "Неизвестная опция", указанная ниже в комментариях.

Любая информация будет большой и спасибо.

Ответы

Ответ 1

ОБНОВЛЕНО: Полностью изменил ответ на использование script, который я использую.

Вам также потребуется загрузить gas-preprocessor.pl из https://github.com/yuvi/gas-preprocessor, поместить его в свой путь и сделать его исполняемым.

Затем создайте script (скажем 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/$i.a ./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/$i.a ./build.armv7/; done

mkdir -p build.universal
for i in ${FFMPEG_LIBS}; do lipo -create ./build.armv7/$i.a ./build.armv6/$i.a -output ./build.universal/$i.a; done

for i in ${FFMPEG_LIBS}; do cp ./build.universal/$i.a ./$i/$i.a; done

make install

Это компилирует версии armv6 и armv7 и помещает их в жирную библиотеку, используя lipo. Он устанавливается в папку под ней, где вы запускаете script из вызываемого installed.

Обратите внимание, что на данный момент мне пришлось отключить встроенную сборку, используя perl встроенную замену, чтобы изменить HAVE_INLINE_ASM с 1 на 0. Это связано с этой проблемой с gas-preprocessor.pl - https://github.com/yuvi/gas-preprocessor/issues/16.

Также обратите внимание, что это отключило все кодировщики, декодеры, мультиплексоры, демультиплексоры и т.д., за исключением декодера H264. Просто измените строки конфигурации, чтобы скомпилировать то, что вы хотите для своего использования.

Помните также, что это позволило использовать код GPL, поэтому вам следует знать, что это означает для приложений iPhone. Если вы не знаете, тогда вам следует прочитать об этом.

Ответ 2

Вот моя рабочая настройка для кросс-компиляции FFmpeg на iOS 6, арка ARMv7

ПРИМЕЧАНИЕ. Вы должны иметь gas-preprocessor.pl внутри /usr/local/bin/, пожалуйста, не продолжайте, пока не будет gas-preprocessor.pl в каталоге bin

  • Загрузить FFmpeg 1.0 "Ангел" из здесь

  • Разархивируйте его и поместите его где-нибудь, то есть в папку Desktop

  • Откройте терминал и откройте unzipped FFmpeg folder

  • Скопируйте и вставьте следующую команду, (пациент займет некоторое время)

./configure --disable-doc --disable-ffmpeg --disable-ffplay --disable-ffserver --enable-cross-compile --arch = arm --target-os = darwin --cc =/Приложения/Xcode.app/Содержание/Разработчик/Платформы/iPhoneOS.platform/Разработчик/usr/bin/gcc --as = 'gas-preprocessor/gas-preprocessor.pl/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc '--sysroot =/Приложения/Xcode.app/Содержание/Разработчик/Платформы/iPhoneOS.platform/Разработчик/SDK/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

  • Теперь введите следующую команду в терминал make (подождать немного больше)

  • Как только он закончит, теперь введите терминал sudo make install (снова ждать)

  • Перейдите в /usr/local/lib, чтобы найти свои свежеиспеченные ARMv7 libs

  • Наслаждайтесь!

Алекс

Ответ 3

Я создал проект "ffmpeg4ios" в https://github.com/ciphor/ffmpeg4ios, который успешно скомпилирован на iOS 5.0. Вы можете проверить это.