Guest User

Untitled

a guest
Feb 16th, 2019
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.82 KB | None | 0 0
  1. /// Creates A Video Player As An SCNGeometries Diffuse Contents
  2. static func setupVideoOnNode(_ node: SCNNode, fromURL url: URL) {
  3.  
  4. //1. Create An SKVideoNode
  5. var videoPlayerNode: SKVideoNode!
  6.  
  7. //2. Create An AVPlayer With Our Video URL
  8. let videoPlayer = AVPlayer(url: url)
  9.  
  10. //3. Initialize The Video Node With Our Video Player
  11. videoPlayerNode = SKVideoNode(avPlayer: videoPlayer)
  12. videoPlayerNode.yScale = -1
  13.  
  14. //4. Create A SpriteKitScene & Position It
  15. let spriteKitScene = SKScene(size: CGSize(width: 1024, height: 768))
  16. spriteKitScene.scaleMode = .aspectFit
  17. videoPlayerNode.position = CGPoint(x: spriteKitScene.size.width/2, y: spriteKitScene.size.height/2)
  18. videoPlayerNode.size = spriteKitScene.size
  19. spriteKitScene.backgroundColor = .clear
  20.  
  21. //5. Alpha transparency
  22. let effectNode = getAlphaEffectNode(videoPlayerNode: videoPlayerNode)
  23. spriteKitScene.addChild(effectNode)
  24. effectNode.addChild(videoPlayerNode)
  25.  
  26. //6. Set The Nodes Geoemtry Diffuse Contenets To Our SpriteKit Scene
  27. node.geometry?.firstMaterial?.diffuse.contents = spriteKitScene
  28.  
  29. //7. Play The Video
  30. videoPlayerNode.play()
  31. videoPlayer.volume = 0
  32.  
  33. //8. Loop Video
  34. loopVideo(videoPlayer: videoPlayer, node: node)
  35. }
  36.  
  37.  
  38. // MARK: - Add Alpha Transparency
  39.  
  40. static func getAlphaEffectNode(videoPlayerNode: SKVideoNode) -> SKEffectNode {
  41. // Let's make it transparent, using an SKEffectNode,
  42. // since a shader cannot be applied to a SKVideoNode directly
  43. let effectNode = SKEffectNode()
  44. effectNode.shader = EffectNodeHelper.getAlphaShader()
  45. return effectNode
  46. }
  47.  
  48.  
  49. // MARK: - Loop Video
  50.  
  51. static func loopVideo(videoPlayer: AVPlayer, node: SCNNode) {
  52. NotificationCenter.default.addObserver(forName: .AVPlayerItemDidPlayToEndTime,
  53. object: videoPlayer.currentItem,
  54. queue: nil) { (_) in
  55. videoPlayer.seek(to: kCMTimeZero)
  56. videoPlayer.play()
  57. }
Add Comment
Please, Sign In to add comment