SKVideoNode不显示视频

时间:2014-04-10 17:02:53

标签: ios video sprite-kit

我正在尝试在iOS 7.1上使用Sprite Kit和SKVideoNode显示视频。 Apple的文档使这看起来非常简单。从Sprite Kit编程指南中获取的一个例子:

SKVideoNode *sample = [SKVideoNode videoNodeWithVideoFileNamed:@"sample.m4v"];
sample.position = CGPointMake(CGRectGetMidX(self.frame),
[self addChild: sample];
[sample play];

我正在尝试相同的代码并且没有看到视频。 SKVideoNode确实在节点层次结构中。我还尝试了多个视频,都是H.264 AAC。

我发现有类似问题的人here。他们似乎通过实例化AVPlayer来解决它。这对我来说也不会显示视频。想法?

4 个答案:

答案 0 :(得分:4)

首先要做的事情:

  1. 您必须将Foundation.framework添加到您的项目中。
  2. 确保已将视频文件添加到项目中。
  3. 确保您的视频文件是以下格式之一:.mov .mp4 .m4v .3gp .3gpp
  4. 试试下面的示例代码:

    #import "MyScene.h"
    #import <AVFoundation/AVFoundation.h>
    
    @implementation MyScene
    {
         AVPlayer *_player;
         SKVideoNode *_videoNode;
    }
    
    -(id)initWithSize:(CGSize)size
    {
        if (self = [super initWithSize:size])
        {
            [self setupMovie];
        }
        return self;
    }
    
    -(void)setupMovie
    {
        NSURL *fileURL = [NSURL fileURLWithPath: [[NSBundle mainBundle] pathForResource:@"loop" ofType:@"mov"]];
        _player = [AVPlayer playerWithURL: fileURL];
    
        _videoNode = [[SKVideoNode alloc] initWithAVPlayer:_player];
        _videoNode.size = CGSizeMake(200, 100);
        _videoNode.position = CGPointMake(150, 150);
    
        [self addChild:_videoNode];
    
        _player.volume = 1.0;
        [_videoNode play];
    }
    
    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
    {
        //
    }
    
    -(void)update:(CFTimeInterval)currentTime
    {
        //
    }
    
    @end
    

答案 1 :(得分:2)

我刚刚通过使用Prism,MPEG4视频编码器转换视频文件的格式来解决它。希望它有所帮助。

答案 2 :(得分:1)

我知道这个问题是在大约20个月前提出来的,但我认为我也应该分享我的知识(这对于正在研究SKVideoNode并面临同样问题的程序员也有帮助,有案例与我的相同,并在下面提到),与SKVideoNode相关,视频视图显示相关问题。

我最近正在探索Sprite Kit,我发现SKVideoNodeSKScene上播放视频文件。我创建了一个GameScene继承自SKScene并在场景UIImageViewbackgroundImage)上添加了skview [self.scene.view addSubview:aView]的实例,接下来我创建了一个SKVideNode's个实例以及其他UIKit子视图和SKNode子项分别添加到scene.viewscene

我为SKVideNode's配置了代码,如其类引用文档中所述,我构建并运行应用程序以查看视频播放。但除了视频外,屏幕上还出现了一切,当我增加设备音量时,我还能听到视频文件的声音(音频)。

由于我能够听到音频,所以我认为我错过了一些配置,或者由于视频视图不可见而出现问题。

我尝试了一些排列和组合来使用AVPlayer,不同的文件格式但仍然是相同的行为在此之后我开始挖掘视图layeringz index概念以查看视频是否是不在背景图像或任何其他视图后面,仍然是相同的行为。

最后,我做了什么我从屏幕上删除了每个childsubviews(包括背景图片)并试图播放视频,这次视频视图在屏幕上可见。

简而言之,我对上述行为的结论是,“如果使用Sprite Kit's SKVideoNode想要播放视频而不是我们应该在SKScene个实例中播放它们,而不是在任何UIKit观看次数之上,因为如果我们尝试将其添加到已存在SKVideoNode视图的位置,则UIKit的实例不可见。

嗯,就SpriteKit而言,它在场景中有SKViewSKScene,允许程序员同时使用SpriteKitUIKit游戏中的元素,但这些类型的问题可能会导致选择我们想要使用的视觉元素类型的妥协。

答案 3 :(得分:-1)

您应该将视频文件添加到捆绑包中并通过捆绑包加载,或者停用沙盒。