我使用一种非常简单的方法来设置SKVideoNode,并通过几何体的漫反射内容将其放置在SCNNode中。当我这样做时,仅时间纹理更新并正确显示视频是摄像机或节点移动的时间。当两者都静止不动时,纹理永远不会更新(就像视频不会播放一样),但声音确实会播放。
显然它还在播放视频,但渲染不正确。我不明白为什么。
func setupAndPlay() {
// create the asset & player and grab the dimensions
let path = NSBundle.mainBundle().pathForResource("indycar", ofType: "m4v")!
let asset = AVAsset(URL: NSURL(fileURLWithPath: path))
let size = asset.tracksWithMediaType(AVMediaTypeVideo)[0].naturalSize
let player = AVPlayer(playerItem: AVPlayerItem(asset: asset))
// setup the video SKVideoNode
let videoNode = SKVideoNode(AVPlayer: player)
videoNode.size = size
videoNode.position = CGPoint(x: size.width * 0.5, y: size.height * 0.5)
// setup the SKScene that will house the video node
let videoScene = SKScene(size: size)
videoScene.addChild(videoNode)
// create a wrapper ** note that the geometry doesn't matter, it happens with spheres and planes
let videoWrapperNode = SCNNode(geometry: SCNSphere(radius: 10))
videoWrapperNode.position = SCNVector3(x: 0, y: 0, z: 0)
// set the material's diffuse contents to be the video scene we created above
videoWrapperNode.geometry?.firstMaterial?.diffuse.contents = videoScene
videoWrapperNode.geometry?.firstMaterial?.doubleSided = true
// reorient the video properly
videoWrapperNode.scale.y = -1
videoWrapperNode.scale.z = -1
// add it to our scene
scene.rootNode.addChildNode(videoWrapperNode)
// if I uncomment this, the video plays correctly; if i comment it, the texture on the videoWrapperNode only
// get updated when I'm moving the camera around. the sound always plays properly.
videoWrapperNode.runAction( SCNAction.repeatActionForever( SCNAction.rotateByAngle(CGFloat(M_PI * 2.0), aroundAxis: SCNVector3(x: 0, y: 1, z: 0), duration: 15.0 )))
videoNode.play()
}
有没有人遇到类似的东西?任何帮助将不胜感激。
答案 0 :(得分:5)
听起来您需要在.playing = true
上设置SCNView
。
来自docs。
如果此属性的值为NO(默认值),则SceneKit不会 增加场景时间,以便与场景相关联的动画 不玩。将此属性的值更改为YES以开始设置动画 场景。
答案 1 :(得分:0)
我没有成功&获取SKVideoNode以在Xcode 7.0或7.1中显示视频。如果我在iPad或iPhone等硬件设备上运行我的代码或其他样本,视频显示正常,但在模拟器上只播放音频。相同的代码在xCode 6.4的模拟器中工作正常。
我有来自Ray Wenderlich的CatNap示例iOS& tvOS游戏教程(iOS 9)&它不会在Xcode 7.1附带的Simulator 9.1中运行。我相信模拟器坏了。已经向Apple提交了一个错误,但在一个月内没有回复。
有没有人拥有SKVideoNode的示例代码,可以在xCode 7.1中的模拟器上运行?
答案 2 :(得分:0)
我还发现,在渲染器(例如scnView)上将rendersContinously
设置为true可以播放视频。
如果您记录了SCNRendererDelegate
的{{1}}通话,则可以看到绘制帧的时间