我正在尝试在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来解决它。这对我来说也不会显示视频。想法?
答案 0 :(得分: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
,我发现SKVideoNode
在SKScene
上播放视频文件。我创建了一个GameScene
继承自SKScene
并在场景UIImageView
(backgroundImage
)上添加了skview
[self.scene.view addSubview:aView]
的实例,接下来我创建了一个SKVideNode's
个实例以及其他UIKit
子视图和SKNode
子项分别添加到scene.view
和scene
。
我为SKVideNode's
配置了代码,如其类引用文档中所述,我构建并运行应用程序以查看视频播放。但除了视频外,屏幕上还出现了一切,当我增加设备音量时,我还能听到视频文件的声音(音频)。
由于我能够听到音频,所以我认为我错过了一些配置,或者由于视频视图不可见而出现问题。
我尝试了一些排列和组合来使用AVPlayer
,不同的文件格式但仍然是相同的行为在此之后我开始挖掘视图layering
和z index
概念以查看视频是否是不在背景图像或任何其他视图后面,仍然是相同的行为。
最后,我做了什么我从屏幕上删除了每个child
和subviews
(包括背景图片)并试图播放视频,这次视频视图在屏幕上可见。
简而言之,我对上述行为的结论是,“如果使用Sprite Kit's
SKVideoNode
想要播放视频而不是我们应该在SKScene
个实例中播放它们,而不是在任何UIKit
观看次数之上,因为如果我们尝试将其添加到已存在SKVideoNode
视图的位置,则UIKit
的实例不可见。
嗯,就SpriteKit
而言,它在场景中有SKView
和SKScene
,允许程序员同时使用SpriteKit
和UIKit
游戏中的元素,但这些类型的问题可能会导致选择我们想要使用的视觉元素类型的妥协。
答案 3 :(得分:-1)
您应该将视频文件添加到捆绑包中并通过捆绑包加载,或者停用沙盒。