首页 > 解决方案 > SceneKit - AVPlayer 材质崩溃

问题描述

我正在使用视频作为 SCNNode 的材料:

geo.materials.first?.diffuse.contents = AVPlayer(url: url)

这在大多数 iOS 设备上运行良好,但在较旧的 iPhone 5s 上崩溃并出现以下错误:

-[MTLTextureDescriptorInternal validateWithDevice:], line 781: error 'MTLTextureDescriptor has invalid pixelFormat (520).'
-[MTLTextureDescriptorInternal validateWithDevice:]:781: failed assertion `MTLTextureDescriptor has invalid pixelFormat (520).'

是否有解决此问题的方法/解决方法?

标签: iphoneswiftavfoundationscenekitios11

解决方案


我认为这是 iPhone 5s 的硬件问题。尝试使用 aSKVideoNode作为解决方法。对于 iPhone 5s,SpriteKit 的对象要“轻”得多。

var videoNode: SKVideoNode? = {

    guard let urlString = Bundle.main.path(forResource: "file", 
                                                ofType: "m4v") else {
        return nil
    }    

    let url = URL(fileURLWithPath: urlString)
    let item = AVPlayerItem(url: url)
    let player = AVPlayer(playerItem: item)

    return SKVideoNode(avPlayer: player)
}()

希望这可以帮助。


推荐阅读