Интеграция FFMPEG в проекте iphone / ipad - PullRequest
8 голосов
/ 28 июля 2011

Может ли кто-нибудь? Скажите мне, как мне интегрировать FFMPEG в мой проект iphone / ipad. Я использую Xcode 4. Я много искал, но не нашел никакой полезной ссылки. Пожалуйста, скажите мне пошаговую процедуру интеграции FFMpeg в мой проект.

спасибо,

Ответы [ 2 ]

39 голосов
/ 15 марта 2013

Предварительные условия

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

Для установки препроцессора газа

  1. Нажмите на значок ZIP, чтобы загрузить газовый препроцессор.
  2. Скопируйте gas-preprocessor.pl в /usr/bin каталог.
  3. Измените разрешение 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.

0 голосов
/ 28 июля 2011

./configure скрипт:

./configure --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 --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/iPhoneOS4.3.sdk --cpu=cortex-a8 --extra-cflags='-arch armv7' --extra-ldflags='-arch armv7' --enable-pic

это отлично работает. поскольку в сценарии конфигурации FFMPEG по умолчанию путь к библиотеке по умолчанию установлен на /usr/lib/system, поэтому он не может найти библиотеку libcache.dylib, поэтому здесь я установил для него самый последний путь SDK.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...