i'm trying to use a AVPlayerLayer as a SCNMaterial to be assigned to a SCNSphere.
Based on: https://developer.apple.com/library/mac/samplecode/SceneKit_Slides_WWDC2013/Listings/Scene_Kit_Session_WWDC_2013_Sources_Slides_ASCSlideMaterialLayer_m.html
I create a player, create a player layer and have tried with and without a backgroundLayer to assign as material for my SCNSphere
Issue is, I get the same result reported here: SCNMaterialProperty not rendering layer
Audio plays, video not rendered at all!
The bit of code is quite simple:
// video player
let path = NSBundle.mainBundle().pathForResource("tb", ofType: "mp4")
let url = NSURL(fileURLWithPath: path!)
let player = AVPlayer(URL: url) // AVPlayer
player.actionAtItemEnd = .None
player.play()
let frame = CGRectMake(0, 0, 300, 300)
let playerLayer = AVPlayerLayer()
playerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
playerLayer.frame = frame
playerLayer.player = player
sceneMaterial = SCNMaterial()
sceneMaterial.specular.contents = UIColor.whiteColor()
sceneMaterial.shininess = 0.5
sceneMaterial.diffuse.contents = playerLayer
sphere.materials = [sceneMaterial]
As mentioned, whether I use a backgroundLayer : CALayer and add the playerLayer as a sublayer gives the same result.
Any help is appreciated
@Guig @Byron, take a look at SKVideoNode. I had to use sprikeKit + SceneKit to get what i wanted done
In recent versions of SceneKit using a SKScene
and a SKVideoNode
is not necessary. You can directly set the AVPlayer
as the contents of a SCNMaterialProperty
instance.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With