【问题标题】:SceneKit – AVPlayer material crashSceneKit - AVPlayer 材质崩溃
【发布时间】:2019-02-19 22:18:27
【问题描述】:

我正在使用视频作为 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).'

是否有针对此问题的修复/解决方法?

【问题讨论】:

    标签: iphone swift avfoundation scenekit ios11


    【解决方案1】:

    我认为这是 iPhone 5s 的硬件问题。尝试使用SKVideoNode 作为解决方法。对于 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)
    }()
    

    希望这会有所帮助。

    【讨论】:

    • 所以这行得通,除了 SKVideoNode 带来了一个新问题——如果你关闭应用程序然后从后台重新打开它,视频现在开始自动播放。 ://
    • 一开始使用var player: AVPlayer? = nil。或者最后,在play.pause() 之后使用字符串player = nil 来释放AVPlayer (var player: AVPlayer?)。
    猜你喜欢
    • 2018-10-12
    • 1970-01-01
    • 2011-06-07
    • 2019-08-25
    • 2017-07-31
    • 2018-03-25
    • 2016-12-14
    • 2018-06-28
    • 2018-07-06
    相关资源
    最近更新 更多