Предварительные условия
MacPorts для установки: откройте терминал и введите
sudo port install pkgconfig
LaunchТерминал и загрузка исходного кода FFmpeg
Расположение каталога зависит от ваших личных предпочтений, и я решил сохранить его в папке ffmpeg в моей домашней папке для быстрого доступа позже.
git clone git: //source.ffmpeg.org/ffmpeg.git ~ / ffmpeg
Прежде чем идти дальше, нам нужно подумать о будущем и понять, что мы, вероятно, сделаем некоторыесимуляция на самом Mac вместе с реальным тестированием на iPhone.Нам нужно создать библиотеки для 3 архитектур: armv7 (iPhone 3Gs или новее), armv7s (iPhone 5) и i386 (симулятор iPhone).
Давайте создадим несколько папок внутри папки ffmpeg для хранения 3 различных сборок, чтобы мы могли объединить их в одну универсальную сборку.
cd ffmpeg
mkdir armv7
mkdir armv7s
mkdir i386
mkdir -p universal/lib
Для установки препроцессора газа
- Нажмите на значок ZIP, чтобы загрузить газовый препроцессор.
- Скопируйте
gas-preprocessor.pl
в /usr/bin
каталог. - Измените разрешение
gas-preprocessor.pl
, установивпривилегия Чтение и запись для всех.
Настройка FFmpeg для сборки armv7
Перед настройкой вы можете обратиться к подробнымПерейдите в папку ffmpeg и введите:
./configure --help
список параметров для вашей справки: FFmpeg Configure Options .«Параметры компонентов» будут зависеть от вас, в зависимости от того, что вы хотите сделать с FFmpeg.
Теперь запустите следующие параметры конфигурации:
. / Configure \ --prefix =armv7 \ --disable-ffmpeg \ --disable-ffplay \ --disable-ffprobe \ --disable-ffserver \ --enable-avresample \ --enable-cross-compile \ --sysroot = $ (xcrun --sdkiphoneos --show-sdk-path) \ --target-os = darwin \ --cc = "/ Applications / Xcode.app / Содержание / Разработчик / Платформы / iPhoneOS.platform / Разработчик / usr / bin / gcc" \ --extra-cflags = "- arch armv7 -mfpu = neon -miphoneos-version-min = 6.0" \ --extra-ldflags = "- arch armv7 -isysroot $ (xcrun --sdk iphoneos --show-sdk-path)-miphoneos-version-min = 6.0 "\ --arch = arm \ --cpu = cortex-a9 \ --enable-pic \
Вы можете получить предупреждение, например:
ПРЕДУПРЕЖДЕНИЕ: Компилятор не указывает ABI с плавающей точкой, угадывая мягкое.
Не беспокойтесь.Вы можете продолжить выполнение следующих шагов.
Сборка FFmpeg для armv7
Запустите команды сборки:
make clean && make && make install
Теперь вы должны видеть, что файлы заполненывнутри папки ffmpeg/armv7
.Теперь перейдем к сборке armv7s для iPhone 5.
Настройка и установка FFmpeg для архитектуры armv7s (iPhone 5)
./ configure \ --prefix = armv7s \ --disable-ffmpeg \ --disable-ffplay \ --disable-ffprobe \ --disable-ffserver \ --enable-avresample \ --enable-cross-compile \ --sysroot= $ (xcrun --sdk iphoneos --show-sdk-path) \ --target-os = darwin \ --cc = "/ Applications / Xcode.app / Содержание / Разработчик / Платформы / iPhoneOS.platform / Разработчик / usr/ bin / gcc "\ --extra-cflags =" - arch armv7s -mfpu = neon -miphoneos-version-min = 6.0 "\ --extra-ldflags =" - arch armv7s -isysroot $ (xcrun --sdk iphoneos --show-sdk-path) -miphoneos-version-min = 6.0 "\ --arch = arm \ --cpu = cortex-a9 \ --enable-pic \
Затем собрать с помощью:
make clean && make && make install
Настройка FFmpeg для сборки i386
. / Configure \ --prefix = i386 \ --disable-ffmpeg \ --disable-ffplay\ --disable-ffprobe \ --disable-ffserver \ --enable-avresample \ --enable-cross-compile \ --sysroot = $ (xcrun --sdk iphoneos --show-sdk-path) \ --target-os = darwin \ --cc = "/ Applications / Xcode.app / Содержание / Разработчик / Платформы / iPhoneSimulator.platform / Developer / usr / bin / gcc "\ --extra-cflags =" - arch i386 "\ --extra-ldflags =" - arch i386 -isysroot $ (xcrun --sdk iphoneos --show-sdk-path) \ --arch = i386 \ --cpu = i386 \ --enable-pic \ --disable-asm \
Обратите внимание на последний флаг --disable-asm
.Если вы забудете включить этот флаг, вы, скорее всего, получите эту ошибку:
cc1: ошибка в бэкэнде: исчерпаны регистры во время распределения регистров!make: *** [libavcodec / h264_cabac.o] Ошибка 1
Сборка FFmpeg для i386
make clean && make && make install
Создание универсальной библиотеки
Команды lipo (при условии, что вы все еще находитесь в папке ffmpeg): (Обратите внимание, что поставляемый Mountain Lion lipo пока ничего не знает о armv7s. Поэтому нам нужно использовать xcrun, чтобы найти lipo, поставляемый сSDK.)
cd armv7 / lib для файла в * .a do cd ../ .. xcrun -sdk iphoneos lipo -output универсальный / lib / $ file -create \ -arch armv7 armv7/ lib / $ file \ -arch armv7s armv7s / lib / $ file \ -arch i386 i386 / lib / $ file echo "Универсальный файл $ создан."cd - done cd ../..
Посмотрите в Universal / lib, вы найдете все FAT-библиотеки, свежеиспеченные там.Теперь мы обратим наше внимание на связывание этих статических библиотек с проектом Xcode.
если вы получаете такую ошибку Ошибка: каталог разработчика не найден в / Developer »? , затем введите
sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer
Связывание статических библиотек в XCode
Сначала мы извлекаем файлы .a
.
Создайте новое пустое приложение, используя Xcode.Назначьте название продукта и идентификатор компании.Затем нажмите Далее и сохраните проект.Найдите созданные нами универсальные библиотеки (файлы .a) в ffmpeg/universal/lib
.Перетащите файлы .a в папку Frameworks на панели «Навигатор проектов».Отметьте «Копировать объекты в папку целевой группы (при необходимости)».И нажмите кнопку Готово.
Теперь мы позаботимся о включаемых файлах.
Найдите включаемые файлы в ffmpeg/armv7/include
.Перетащите содержимое этой папки в папку «Имя проекта» на панели «Навигатор проектов».Снова отметьте «Копировать элементы в папку целевой группы (если необходимо)».Затем нажмите «Готово».
Наконец, нам нужно установить пути поиска заголовка для проекта .
Нажмите Проект в Навигаторе проектов.панель.В стандартном редакторе в середине экрана нажмите «Настройки сборки».Поиск путей поиска заголовка .Добавьте путь к вашему проекту и установите его в Recursive.т.е. $(SRCROOT)
Нажмите на Фазы сборки.В разделе Link Binary With Libraries добавьте libbz2.dylib
и libz.dylib
.
Протестируйте и проверьте работу библиотеки
Мы не будем углубляться в подробности,Просто чтобы убедиться, что библиотека работает.
Перейдите к AppDelegate.m
и добавьте:
#include "avformat.h"
А в функции didFinishLaunchingWithOptions добавьте:
av_register_all();
если предположить, что вы получаете эту ошибку, значит
Undefined symbols for architecture i386:
"_iconv", referenced from:
_mail_iconv in libmailcore.a(charconv.o)
"_iconv_open", referenced from:
_charconv in libmailcore.a(charconv.o)
_charconv_buffer in libmailcore.a(charconv.o)
"_iconv_close", referenced from:
_charconv in libmailcore.a(charconv.o)
_charconv_buffer in libmailcore.a(charconv.o)
ld: symbol(s) not found for architecture i386
collect2: ld returned 1 exit status
, тогда добавьте libiconv.dylib framework
, к которой вы теперь готовы приступитьРазработка с использованием FFmpeg на iOS.