我正在为Swift和Sprite Kit开发一个应用程序(xCode 6.4,目前正在为iOS 8.4构建)。我正在使用SKVideoNode和AVPlayer一起播放全屏视频。代码如下:
let path = NSBundle.mainBundle().pathForResource("SPLASH_x", ofType:"mov")
let vUrl = NSURL.fileURLWithPath(path!)
let asset = AVAsset.assetWithURL(vUrl) as? AVAsset
let playerItem = AVPlayerItem(asset: asset)
let player = AVPlayer(URL: vUrl)
SplashVideo = SKVideoNode(AVPlayer: player)
SplashVideo!.xScale = self.size.width / SplashVideo!.size.width
SplashVideo!.yScale = self.size.height / SplashVideo!.size.height
SplashVideo!.position = CGPointMake(self.frame.midX, self.frame.midY)
self.addChild(SplashVideo!)
var observer: AnyObject? = nil
observer = player.addPeriodicTimeObserverForInterval(CMTimeMake(1,30), queue: dispatch_get_main_queue(),
usingBlock: { (time: CMTime) -> Void in
let secs:Float64 = CMTimeGetSeconds(time)
println("I think it's playing")
if (secs > 0.01) {
self.hideBackground()
println("I think I'm done observing. Background hidden!")
player.removeTimeObserver(observer!)
}
})
println("I think I'm playing the splash video:")
SplashVideo!.play()
(如果不清楚,这发生在didMoveToView中;我已经在文件顶部导入了Foundation,AVFoundation和SpriteKit。)
这在模拟器中工作正常;如果我为我的iPad构建和运行没有任何事情发生 - 它显示黑屏,或者如果我删除时间观察者(以便背景永远不会被隐藏),我只看到背景(背景是第一帧电影 - 我在视频播放开始时遇到黑色闪光,并使用时间观察器作为掩蔽技术来隐藏它。我的一位用户报告说,在他升级到iOS9(不太关心)之前它一直适用于他,另一位用户报告说他听到了.mov文件的音频,但没有看到视频本身(更多的是一个问题) )。所以我得到了各种非工作行为,这是最好的bug。最好的,我的意思是最糟糕的。
我尝试过的事情:
一切都无效。现在我秃了。而且很伤心。
答案 0 :(得分:0)
回答我自己的问题:经过多次试验和错误后,您似乎无法在iOS9中扩展SKVideoNode(或者可能从未支持过?文档不清楚)。无论我做什么,xCode 7的模拟器都不会播放视频,这也无关紧要。在任何情况下,你可以做的是改变节点的大小属性(我想,让Sprite Kit进行缩放?文档看起来很不稳定),这似乎有效:
let asset = AVAsset.assetWithURL(vUrl) as? AVAsset
let playerItem = AVPlayerItem(asset: asset)
let player = AVPlayer(URL: vUrl)
SplashVideo = SKVideoNode(AVPlayer: player)
SplashVideo!.size = self.size
SplashVideo!.position = CGPointMake(self.frame.midX, self.frame.midY)
self.addChild(SplashVideo!)