Предварительно запустить SKVideoNode с AVPlayer перед переходом сцены?

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

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

Как только сцена, содержащая видео, исчезает, я сбрасываю ее (я помещаю объект AVPlayer в пользовательский словарь SKVideoNode). Похоже, это работает:

SKVideoNode *v = ...;
AVPlayer *player = [[v userData] objectForKey:@"AVPlayer"];
if ([player isKindOfClass:[AVPlayer class]]) {
    [player seekToTime:kCMTimeZero];

Когда вот-вот должна появиться сцена, содержащая видео, я делаю следующее:

SKTransition *trans = [SKTransition flipHorizontalWithDuration:1.0];
[self.skView presentScene:theScene transition:trans];
[self performSelector:@selector(startVideoInScene:)
           withObject:theScene
           afterDelay:0.2];

тогда...

- (BOOL)startVideoInScene:(SKScene *)theScene
{
    for (SKNode *n in [theScene children])
        if ([n isKindOfClass:[SKVideoNode class]]) {
            SKVideoNode *v = (SKVideoNode *)n;
            AVPlayer *player = [[v userData] objectForKey:@"AVPlayer"];
            if ([player isKindOfClass:[AVPlayer class]]) {
                [v play];
                return YES;
            }
        }
    return NO;
}

Это не работает без запуска с короткой продолжительностью черного перед видео.

Кто-нибудь имел успех с этим?

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


person zzyzy    schedule 25.03.2014    source источник


Ответы (1)


Ответ от этот вопрос предлагает сделать неподвижное изображение из первого кадра видео и сделать его SKSpriteNode, который будет использоваться в качестве изображения, которое сначала появляется при переходе между сценами. Затем, когда переход завершится, скройте изображение постера (SKSpriteNode) и воспроизведите видео.

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

person Matt Fiocca    schedule 09.06.2014