iOS - Как воспроизвести видео с прозрачностью? - PullRequest
23 голосов
/ 09 сентября 2009

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

Ответы [ 8 ]

9 голосов
/ 31 мая 2012

Не знаю, заинтересован ли кто-нибудь еще в этом, кроме меня, но я использую 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, но это то, что мы использовали

3 голосов
/ 21 июля 2011

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

1 голос
/ 26 июня 2013

GPUImage будет работать, но он не идеален, потому что устройство iOS не место для обработки видео. Вы должны сделать все на рабочем столе, используя профессиональный инструмент видео, который обрабатывает кеинга, а затем экспортировать видео с альфа-каналом. Затем импортируйте видео в ваш пакет приложений для iOS, как описано в Воспроизведение фильмов с альфа-каналом на iPad . Существует множество проблем с качеством и временем загрузки, которые вы можете избежать, убедившись, что ваше видео правильно превращено в видео альфа-канала перед его загрузкой на устройство iOS.

1 голос
/ 25 июля 2011

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

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

0 голосов
/ 16 июня 2011

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

enter image description here

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

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

0 голосов
/ 11 сентября 2009

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

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

  • получить новое окно, созданное MPMoviePlayerController ( см. Здесь )
  • исследовать иерархию представлений в этом окне, используя [окна подпредставлений] и [представления подпредставлений]
  • попытаться выяснить, какое из этих представлений является действительным представлением игрока
  • попытаться вставить представление за видом проигрывателя (sendSubviewToBack)
  • выясните, поддерживает ли плеер прозрачность или нет.

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

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

0 голосов
/ 11 сентября 2009

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

0 голосов
/ 10 сентября 2009

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

- Mike

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