AVPlayerLayer作为SCNMaterial没有渲染,音频播放正常

时间:2015-10-29 13:31:57

标签: avfoundation calayer avplayer scenekit avplayerlayer

我正在尝试将AVPlayerLayer用作SCNMaterial分配给SCNSphere。

基于: https://developer.apple.com/library/mac/samplecode/SceneKit_Slides_WWDC2013/Listings/Scene_Kit_Session_WWDC_2013_Sources_Slides_ASCSlideMaterialLayer_m.html

我创建一个玩家,创建一个玩家图层并尝试使用和不使用backgroundLayer作为我的SCNSphere的材料

问题是,我得到的报告结果相同: SCNMaterialProperty not rendering layer

音频播放,视频根本无法呈现!

代码很简单:

    // 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]

如上所述,我是否使用backgroundLayer:CALayer并将playerLayer添加为子图层会产生相同的结果。

感谢任何帮助

2 个答案:

答案 0 :(得分:1)

@Guig @Byron,看看SKVideoNode。我不得不使用sprikeKit + SceneKit来获得我想要的东西

答案 1 :(得分:1)

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