2015-08-14 4 views
1

Я занимаюсь исследованием наилучшего способа обработки видео на iOS с использованием новейших технологий и получил несколько разных результатов. Кажется, что есть способы сделать это с помощью Core Image, OpenGL и некоторых фреймворков с открытым исходным кодом. Я хотел бы уклониться от вариантов с открытым исходным кодом, чтобы я мог узнать, что происходит за кулисами, поэтому вопрос:Лучшая практика для обработки видео iOS

Какой у меня лучший вариант для обработки (фильтры, яркость, контрастность и т. Д.).) предварительно записанное видео на iOS?

Я знаю, что Core Image имеет множество великолепных встроенных фильтров и имеет относительно простой API, но я не нашел никаких ресурсов о том, как фактически разбивать видео на изображения и затем перекодировать их. Любая помощь по этой теме была бы чрезвычайно полезна, спасибо.

ответ

7

Как вы заявляете, у вас есть несколько вариантов этого. Независимо от того, что вы считаете «лучшим», вы будете зависеть от ваших конкретных потребностей.

Возможно, вашим простейшим маршрутом без открытия источника будет использование Core Image. Получение наилучшей производительности от фильтрации видеоизображения Core Image по-прежнему займет немного времени, так как вам нужно убедиться, что для этого вы выполняете обработку на GPU.

В a benchmark application У меня в каркасе GPUImage у меня есть код, который использует Core Image оптимизированным образом. Для этого я настроил захват AV Foundation и создал CIImage из буфера пикселей. Контекст Core Image установлен для визуализации в контексте OpenGL ES, а свойства на этом (цветовое пространство и т. Д.) Настроены на визуализацию быстро. В настройках, которые я использую, есть те, которые были предложены командой Core Image, когда я говорил с ними об этом.

Переход на исходный маршрут OpenGL ES - это то, о чем я говорю о here (и там есть связанное приложение-образец), но это требует некоторой настройки. Это может дать вам немного больше гибкости, чем Core Image, потому что вы можете писать полностью настраиваемые шейдеры, чтобы манипулировать изображениями так, как вы не могли бы в Core Image. Раньше было так, что это было быстрее, чем Core Image, но в настоящее время практически нет разрыва в производительности.

Однако создание собственного конвейера обработки видеороликов OpenGL ES не является простым и включает в себя кучу кода шаблона. Именно поэтому я написал this, и я и другие много времени уделяли настройке производительности и простоты использования. Если вас беспокоит не понимание того, как все это работает, прочитайте код класса GPUImageVideo в этой структуре. Вот что вытаскивает кадры из камеры и запускает операцию обработки видео. Это немного сложнее, чем мое тестовое приложение, потому что оно берет плоские рамки YUV из камеры и в большинстве случаев преобразует их в RGBA в шейдеры, вместо того, чтобы захватывать необработанные RGBA-кадры. Последнее немного проще, но есть оптимизация производительности и памяти для первого.

Все вышесказанное касалось видео в реальном времени, но предварительно записанное видео практически одинаково, только с другим типом входа AV Foundation. У моего GPUImageMovie класса есть код внутри него, чтобы взять предварительно записанные фильмы и обработать отдельные кадры из этого. Они оказываются в том же месте, что и кадры, которые вы бы захватили с камеры.

+0

Благодарим за подробный ответ! Я действительно заглянул в вашу инфраструктуру GPUImage раньше, и это потрясающе, отличная работа! Это то, что я буду использовать в будущих проектах, однако прямо сейчас, так как это первый раз, когда я работал с обработкой видео, я хотел бы увидеть, как он работает за кулисами, чтобы, надеюсь, лучше понять рамки, подобные вашим. Кроме того, я использую Swift для моего проекта и хотел бы продолжать это делать. Еще раз спасибо за ваш ответ – tnev

+0

После использования библиотеки GPUImage от Brad для нескольких проектов за последние 2 года я могу сказать, что это одно из лучших мест для начала, если вы находитесь в ситуации, которую описывает мой вопрос.Понимание того, что происходит «под капотом», вероятно, потребует много месяцев или лет обучения и понимания AVFoundation и OpenGL. Не для слабонервных. Если вы хотите сделать обработку изображений/видео в iOS, я настоятельно рекомендую прочитать ответ Брэда выше. – tnev

Смежные вопросы