Эффект разрушения для видео

Я хочу иметь эффект разрушения при воспроизведении видео (на основе AVPlayer), который будет переходить либо к другому видео, либо к изображению.

Можно ли создать этот эффект в iOS5/6 на видео такого типа?
Если нет, альтернативой может быть выполнение перехода на неподвижном изображении последнего воспроизведенного кадра. Какая структура будет наиболее подходящей для этого? CoreImage? CoreGraphics? OpenGL?


person ESoft    schedule 08.10.2012    source источник


Ответы (4)


Я думаю, что размещение UIVIew поверх видео будет вашим лучшим вариантом. Затем вы можете использовать Quartz2d (или даже OpenGL ES), если вам действительно нужна производительность для рисования в представлении (таким образом, поверх видео).

С помощью Quarz2d вы можете составить простой лист спрайтов (распространенная техника, используемая в играх) со всеми кадрами для вашей анимации разрушения, а затем просто просмотреть их и представить в вышеупомянутом UIView. Если производительности недостаточно, вы можете попробовать использовать OpenGL ES :), но вы можете сэкономить много времени, используя Quarz2d.

Если производительность будет проблемой, вы можете использовать слой Cocos2D поверх вашего видео, как в этом сообщении, где целью было отобразить эмиттер частиц поверх видео... Cocos2d (OpenGL ES) решил проблемы с производительностью. (Хорошо то, что Cocos2d может легко обрабатывать листы спрайтов, поэтому я предполагаю, что вы могли бы реализовать это в кратчайшие сроки)

Вкратце: в зависимости от того, насколько велик ваш переход, выберите либо OpenGL ES (если вам нужна такая производительность), либо Quarz2d, если производительность не имеет большого значения.

Ваше здоровье.

person Goles    schedule 19.10.2012

Я использовал эту технику до того, как все, что я сделал, это взял изображение самого последнего кадра видео и поместил его за видео. Когда видео перестало воспроизводиться, удалите видеоплеер из поля зрения и выполните анимацию разрушения изображения, которая покажет, что за ним стоит.

person CStreel    schedule 20.10.2012

Если вам просто нужен переход между разными видео во время воспроизведения, вы можете использовать переходы просмотра для переключения между видео. Я точно не знаю, как должна выглядеть ваша анимация, но вот пример. Важно вовремя предварительно загрузить другое видео и проверить готовность видео к показу перед началом перехода, иначе оно будет выглядеть не очень хорошо.

Если вы хотите создать какие-то действительно продвинутые эффекты, другим вариантом будет рендеринг видеофайлов в текстуры OpenGL ES и использование GL для создания практически любого 3D-эффекта, о котором вы только можете подумать. Я написал небольшой POC этого, которым я могу поделиться, если вам интересно. См. также этот вопрос.

Если вы хотите сохранить переход к видеофайлу, вам нужно манипулировать видео кадр за кадром и создать из него новый видеопоток. Это сложнее, но AVFoundation API может это сделать. Вот пример.

person Krumelur    schedule 16.10.2012

Привет, добавьте представление mpmoviecontroller в представление viewcontroller и поместите изображение, получите несколько изображений (последовательность изображений для sutter) и воспроизведите анимацию этих изображений для показа эффекта затвора. Надеюсь, этот трюк сработает для вас :)

Для просмотра анимации uiimageview перейдите по этой ссылке

анимация UIImageView

person abhishekkharwar    schedule 20.10.2012
comment
В зависимости от количества изображений, которые пользователь хочет отобразить в последовательности, это может серьезно повредить производительности видео, воспроизводимого в AVPlayer (отставание/изменчивость). Предполагая, что это по крайней мере 24 кадра в секунду, я действительно думаю, что это решение не сократит его в этом случае. - person Goles; 22.10.2012