Подтвердить что ты не робот

iOS - Как воспроизвести видео с прозрачностью?

Я записал видео с синим экраном. У нас есть программное обеспечение для преобразования этого видео на прозрачный фон. Какой лучший способ воспроизвести это видео на пользовательском UIView? Каждый раз, когда я смотрю видео на iPhone, он всегда запускает интерфейс этого плеера. Есть ли способ избежать этого?

4b9b3361

Ответ 1

Не знаю, если кто-то еще заинтересован в этом, кроме меня, но я использую GPUImage и фильтр Chromakey, чтобы добиться этого ^^ https://github.com/BradLarson/GPUImage

РЕДАКТИРОВАТЬ: пример кода того, что я сделал (может быть датировано сейчас):

-(void)AnimationGo:(GPUImageView*)view {
    NSURL *url = [[NSBundle mainBundle] URLForResource:@"test" withExtension:@"mov"];

    movieFile = [[GPUImageMovie alloc] initWithURL:url];
    filter = [[GPUImageChromaKeyBlendFilter alloc] init];

    [movieFile addTarget:filter];

    GPUImageView* imageView = (GPUImageView*)view;
    [imageView setBackgroundColorRed:0.0 green:0.0 blue:0.0 alpha:0.0];
    imageView.layer.opaque = NO;
    [filter addTarget:imageView];

    [movieFile startProcessing];

    //to loop
    [imageView setCompletionBlock:^{
        [movieFile removeAllTargets];
        [self AnimationGo:view];
    }];
}

Возможно, мне пришлось немного изменить GPUImage, и он может не работать с последней версией GPUImage, но это то, что мы использовали

Ответ 2

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

Ответ 3

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

Смотрите Захват с камеры с помощью AV Foundation на iOS 5 из WWDC 2011, в котором объясняются методы, необходимые для этого (смотрите Chroma Key в 9:00). Предположительно, источник можно загрузить, но я не могу найти ссылку прямо сейчас.

Ответ 4

GPUImage будет работать, но это не идеально, потому что устройство iOS не является местом для обработки видео. Вы должны сделать все это на рабочем столе, используя профессиональный видео инструмент, который обрабатывает chromakey, а затем экспортирует видео с альфа-каналом. Затем импортируйте видео в пакет приложений iOS, как описано в playing-movies-with-an-alpha-channel-on-the-ipad. Вы можете избежать проблем с качеством и временем загрузки, убедившись, что ваше видео должным образом превращено в альфа-канал, прежде чем оно будет загружено на устройство iOS.

Ответ 5

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

- Майк

Ответ 6

Я не уверен, что API-интерфейсы iPhone позволят вам просматривать фильм поверх другого представления и по-прежнему иметь прозрачность.

Ответ 7

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

Вот что я хотел бы попробовать:

  • получить новое окно, созданное MPMoviePlayerController (см. здесь)
  • исследуйте иерархию представлений в этом окне, используя [window subviews] и [view subviews]
  • попытайтесь выяснить, какое из этих представлений представляет собой фактическое представление игрока.
  • попробуйте вставить представление ЗА НАЙТИ просмотра плеера (sendSubviewToBack)
  • узнайте, поддерживает ли плеер прозрачность или нет.

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

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

Ответ 8

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

enter image description here

в этом изображении, что я загрузил имена изображений, имеет другое имя, но если вы назовете ваши изображения как: frame1, fram2, fram3...., то вы можете поместить это внутри цикла.

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