如何在 iOS Sprite Kit SKVideoNode 中控制视频的播放?

Posted

技术标签:

【中文标题】如何在 iOS Sprite Kit SKVideoNode 中控制视频的播放?【英文标题】:How do I control playback of a video in an iOS Sprite Kit SKVideoNode? 【发布时间】:2014-11-19 21:47:25 【问题描述】:

我将视频加载到我的 Sprite Kit SKVideoNode 中,但如何停止并重新开始播放或转到视频中的特定时间?我看到的只是播放和暂停方法。

// AVPlayer
NSURL *fileURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"HowToPlay" ofType:@"mp4"]];
_avPlayer = [AVPlayer playerWithURL:fileURL];

// SKVideoNode
_videoNode = [SKVideoNode videoNodeWithAVPlayer:_avPlayer];
[_videoNode play];

【问题讨论】:

【参考方案1】:

事实证明这对我有用。

重启:

[_videoNode removeFromParent];
 _videoNode = [SKVideoNode videoNodeWithVideoFileNamed:@"video.mp4"];
 _videoNode.position = ...
_videoNode.size = ...
[self addChild:_videoNode];
[_videoNode play];

暂停:

[_videoNode pause];
_videoNode.paused = YES;

播放:

[_videoNode play];
_videoNode.paused = NO;

【讨论】:

【参考方案2】:

您可以使用 SKVideoNode 做的所有事情都是 documented here。 playpause 是唯一支持的播放方法。

没有停止,因为它相当于在这种情况下暂停 - “停止”应该做什么,渲染黑色纹理?如果应该在“停止”时删除 SKVideoNode,那么只需向其发送 removeFromParent 消息,即可“停止”它。

倒带是不必要的,因为您可以简单地再次运行 play 方法或创建一个新的 SKVideoNode。

我假设不支持跳转到特定时间帧,因为这不是即时的,所以在视频播放位置移动到指定时间戳之前节点应该显示什么的问题再次出现?

【讨论】:

这是凭经验还是您只是猜测? - 它对我的作用非常不同。播放视频时,再次运行 play 方法没有任何效果。我可以使用 pause 命令暂停并使用 play 命令取消暂停,仅此而已。做一个 removeFromParent,just make 是不可见的,它还在播放并且可以听到声音。 主要基于文档和一些实验。删除后它继续播放听起来像一个错误,也许该节点仍然在某处被强烈引用?尝试在 Sprite Kit 模板项目中使用 SKVideoNode 以单独观察其行为。【参考方案3】:

如果您保留对用于初始化视频节点的AVPlayer 对象的引用,那么您可以使用其methods 控制播放

【讨论】:

如果我在 AVPlayer 参考中抛出命令,它们绝对没有效果。只有视频节点的命令在做任何事情。 这听起来确实像一个错误,因为文档清楚地说明了其他情况。

以上是关于如何在 iOS Sprite Kit SKVideoNode 中控制视频的播放?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS Sprite Kit 中裁剪两张图像并拼接成一张?

iOS7 Sprite Kit如何在更改锚点时计算节点位置?

Sprite Kit iOS 中的慢动作

iOS 7 Sprite Kit 释放内存

iOS7 + Sprite Kit:如果我正在改变场景,如何保持一个计时器一直显示?

在 Sprite Kit iOS 中使用一个图像精灵表