import UIKit import SceneKit import SpriteKit import AVFoundation class ViewController: UIViewController { @IBOutlet weak var scnView: SCNView! var videoLayer: AVPlayerLayer! var videoPlayer: AVPlayer! override func viewDidLoad() { super.viewDidLoad() setupVideo() // Do any additional setup after loading the view, typically from a nib. scnView.showsStatistics = true scnView.allowsCameraControl = true let scnScene = SCNScene() scnView.scene = scnScene // setup SceneKit scene let cameraNode = SCNNode() cameraNode.camera = SCNCamera() cameraNode.position = SCNVector3(x: 0.0, y: 0.0, z: 25.0) scnScene.rootNode.addChildNode(cameraNode) let cubeNode = SCNNode() cubeNode.geometry = SCNBox(width: 5.0, height: 5.0, length: 5.0, chamferRadius: 0.0) scnScene.rootNode.addChildNode(cubeNode) let material = cubeNode.geometry!.firstMaterial! let tryAVLayer = false // change me! if tryAVLayer { material.diffuse.contents = videoLayer // This crashes } else { // setup SpriteKit Scene let skScene = SKScene() skScene.backgroundColor = UIColor.black skScene.size = CGSize(width: 100, height: 100) let skVideoNode = SKVideoNode(avPlayer: videoPlayer) skVideoNode.size = CGSize(width: 100, height: 100) skVideoNode.position = CGPoint(x: 50, y: 50) skScene.addChild(skVideoNode) material.diffuse.contents = skScene // This works } } func setupVideo() { let item = AVPlayerItem(url: URL(fileURLWithPath: Bundle.main.path(forResource: "test", ofType: "mp4")!)) let player = AVPlayer(playerItem: item) let layer = AVPlayerLayer(player: player) videoLayer = layer videoPlayer = player player.play() } }