【问题标题】:SKVideoNode only rendering in SCNScene when the node or camera movesSKVideoNode 仅在节点或相机移动时在 SCNScene 中渲染
【发布时间】:2016-02-11 22:33:04
【问题描述】:

我正在使用一种非常简单的方法来设置 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()
}

有没有人遇到过类似的事情?任何帮助将不胜感激。

【问题讨论】:

  • 请注意,在最新版本的 SceneKit 中使用 SKSceneSKVideoNode 是不必要的。您可以直接将AVPlayer 设置为SCNMaterialProperty 实例的内容。

标签: ios swift avfoundation scenekit


【解决方案1】:

听起来你需要在SCNView 上设置.playing = true

来自docs

如果该属性的值为 NO(默认),SceneKit 不会 增加场景时间,所以与场景相关的动画 不玩。将此属性的值更改为 YES 以开始为 场景。

【讨论】:

  • 是否可以只静音,可以帮助我。
【解决方案2】:

我没有成功获得一个 SKVideoNode 在 Xcode 7.0 或 7.1 中显示视频。如果我在 iPad 或 iPhone 等硬件设备上运行我的代码或其他示例,则视频显示正常,但在模拟器上只播放音频。相同的代码在 xCode 6.4 的模拟器中运行良好。

我有来自 Ray Wenderlich iOS & tvOS Games by tutorial (iOS 9) 的 CatNap 示例,它不能在 Xcode 7.1 附带的 Simulator 9.1 中运行。我相信模拟器坏了,并且已经向 Apple 提交了一个错误,但一个月内没有任何回应。

有没有人有在 xCode 7.1 模拟器上工作的 SKVideoNode 的示例代码??

【讨论】:

    【解决方案3】:

    我还发现在渲染器(例如 scnView)上将 rendersContinously 设置为 true 会播放视频。

    如果您记录SCNRendererDelegateupdate 调用,您可以看到绘制帧的时间

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多