GPUImage Видео с прозрачностью поверх UIView

Я работаю над проектом iOS, который использует AV-Out для отображения содержимого в окне 1280x720 на втором экране.

У меня есть представление MPMoviePlayerController в качестве фона и поверх других других элементов, таких как UIImages и UILabels. Фоновый фильм воспроизводится в цикле.

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

Сначала я попробовал анимацию png с UIImageView. Я был удивлен, обнаружив, что это действительно работает на iPhone5, но, конечно, PNG настолько велики по размеру, что для этого используется слишком много оперативной памяти, и он дает сбой на всем, что ниже iPhone4s. Так что мне нужен другой способ.

Я понял, как одновременно воспроизводить второй фильм с помощью AVFoundation. Все идет нормально. Теперь я могу воспроизвести наложенное видео, но, конечно, оно еще не прозрачное.

Я также узнал, что с библиотекой GPUImage я могу использовать GPUImageChromaKeyBlendFilter, чтобы отфильтровать цвет из видео, чтобы сделать его прозрачным, а затем объединить его с другим видео.

То, что я еще не понимаю, - это лучший способ реализовать это в моем случае, чтобы получить желаемый результат.

Могу ли я использовать всю иерархию представлений под верхним видео в качестве первого входа для GPUImageChromaKeyBlendFilter и видео в стиле зеленого экрана в качестве второго входа и показывать результат в реальном времени в разрешении 720p? как бы я это сделал?

Или было бы лучше использовать GPUImageChromaKeyFilter и просто отфильтровать видео в стиле зеленого экрана и воспроизвести его в виде, превосходящем все другие виды? Тогда будет ли фон этого видео прозрачным?

Спасибо за вашу помощь!


person Etienne678    schedule 18.12.2012    source источник


Ответы (2)


Вам нужно будет создать собственный проигрыватель, используя AVFoundation.framework, а затем использовать видео с альфа-каналом. Фреймворк AVFoundation обеспечивает более надежную обработку видео без многих ограничений фреймворка MPMedia. Создать индивидуального игрока не так сложно, как люди думают. Я написал руководство по этому поводу здесь: http://www.sdkboy.com/?p=66

ДРУГОЙ ПУТЬ..........

Пример SimpleVideoFileFilter во фреймворке показывает, как загрузить фильм, отфильтровать его и закодировать обратно на диск. Изменение этого для выполнения цветного ключа дает следующее:

NSURL *sampleURL = [[NSBundle mainBundle] URLForResource:@"sample" withExtension:@"m4v"];
movieFile = [[GPUImageMovie alloc] initWithURL:sampleURL];

filter = [[GPUImageChromaKeyBlendFilter alloc] init];
[filter setColorToReplaceRed:0.0 green:0.0 blue:1.0];
[filter setThresholdSensitivity:0.4];

[movieFile addTarget:filter];

UIImage *inputImage = [UIImage imageNamed:@"background.jpg"];
sourcePicture = [[GPUImagePicture alloc] initWithImage:inputImage smoothlyScaleOutput:YES];
[sourcePicture addTarget:filter];

NSString *pathToMovie = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Movie.m4v"];
NSURL *movieURL = [NSURL fileURLWithPath:pathToMovie];
movieWriter = [[GPUImageMovieWriter alloc] initWithMovieURL:movieURL size:CGSizeMake(480.0, 640.0)];
[filter addTarget:movieWriter];

[movieWriter startRecording];
[movieFile startProcessing];

[movieWriter setCompletionBlock:^{
    [filter removeTarget:movieWriter];
    [movieWriter finishRecording];
}];

Приведенный выше код загрузит фильм из ресурсов приложения под названием sample.m4v, загрузит его в фильтр цветности, который настроен на отключение чистого синего цвета с чувствительностью 0,4, прикрепит фоновое изображение для использования для цветного ключа и затем отправьте все это кодировщику фильмов, который записывает Movie.m4v в каталог приложения / Documents.

Вы можете настроить порог и определенный синий оттенок в соответствии со своими потребностями, а также при необходимости заменить входное изображение другим фильмом или другим источником. Этот процесс также можно применить к живому видео с камеры устройства iOS, и вы можете отображать результаты на экране, если хотите.

На iPhone 4 под управлением iOS 5.0 хроматический ключ занимает 1,8 мс (500+ кадров в секунду) для 640x480 кадров видео, 65 мс для кадров 720p (15 кадров в секунду). Новые устройства на базе A5 в 6–10 раз быстрее, чем для этих операций, поэтому они могут обрабатывать видео 1080p, не беспокоясь. Я использую быстрые кеши текстур iOS 5.0 как для загрузки, так и для извлечения кадров, что ускоряет обработку в этой версии ОС по сравнению с 4.x.

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

person Raju    schedule 24.02.2014

Пример SimpleVideoFileFilter во фреймворке показывает, как загрузить фильм, отфильтровать его и закодировать обратно на диск. Изменение этого для выполнения цветного ключа дает следующее:

NSURL *sampleURL = [[NSBundle mainBundle] URLForResource:@"sample" withExtension:@"m4v"];
movieFile = [[GPUImageMovie alloc] initWithURL:sampleURL];

filter = [[GPUImageChromaKeyBlendFilter alloc] init];
[filter setColorToReplaceRed:0.0 green:0.0 blue:1.0];
[filter setThresholdSensitivity:0.4];

[movieFile addTarget:filter];

UIImage *inputImage = [UIImage imageNamed:@"background.jpg"];
sourcePicture = [[GPUImagePicture alloc] initWithImage:inputImage smoothlyScaleOutput:YES];
[sourcePicture addTarget:filter];

NSString *pathToMovie = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Movie.m4v"];
NSURL *movieURL = [NSURL fileURLWithPath:pathToMovie];
movieWriter = [[GPUImageMovieWriter alloc] initWithMovieURL:movieURL size:CGSizeMake(480.0, 640.0)];
[filter addTarget:movieWriter];

[movieWriter startRecording];
[movieFile startProcessing];

[movieWriter setCompletionBlock:^{
    [filter removeTarget:movieWriter];
    [movieWriter finishRecording];
}];

Приведенный выше код загрузит фильм из ресурсов приложения под названием sample.m4v, загрузит его в фильтр цветности, который настроен на отключение чистого синего цвета с чувствительностью 0,4, прикрепит фоновое изображение для использования для цветного ключа и затем отправьте все это кодировщику фильмов, который записывает Movie.m4v в каталог приложения / Documents.

Вы можете настроить порог и определенный синий оттенок в соответствии со своими потребностями, а также при необходимости заменить входное изображение другим фильмом или другим источником. Этот процесс также можно применить к живому видео с камеры устройства iOS, и вы можете отображать результаты на экране, если хотите.

На iPhone 4 под управлением iOS 5.0 хроматический ключ занимает 1,8 мс (500+ кадров в секунду) для 640x480 кадров видео, 65 мс для кадров 720p (15 кадров в секунду). Новые устройства на базе A5 в 6–10 раз быстрее, чем для этих операций, поэтому они могут обрабатывать видео 1080p, не беспокоясь. Я использую быстрые кеши текстур iOS 5.0 как для загрузки, так и для извлечения кадров, что ускоряет обработку в этой версии ОС по сравнению с 4.x.

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

person Raju    schedule 24.02.2014