使用 SKEffectNode 进行颜色混合的 SKVideoNode 崩溃

kel*_*lin 5 ios cifilter hevc sprite-kit skvideonode

我需要将颜色混合到视频中,就像在 SKSpriteNode 中使用纹理一样。该视频具有透明度(HEVC),您可以在此处下载。医生说视频可以混合颜色,我正在编写正确的代码,但它崩溃了。

引用:

视频节点无法着色。但是,可以将其添加为 SKEffectNode 的子级,以添加 Core Image 滤镜以进行颜色处理和其他效果。

我使用的代码:

    let videoEffect = SKEffectNode()
    videoEffect.name = "videoEffect"
    videoEffect.filter = CIFilter(name: "CIColorBlendMode")
    let colorImg = CIImage(color: CIColor(color: .red))
    videoEffect.filter?.setValue(colorImg, forKey: "inputBackgroundImage")
    videoEffect.shouldEnableEffects = true
    addChild(videoEffect)

    let videoNode = SKVideoNode(fileNamed: "puppets_with_alpha_hevc.mov")
    videoNode.name = "video"
    videoNode.zPosition = ZPosition.aiBot - 0.5
    videoEffect.addChild(videoNode)
Run Code Online (Sandbox Code Playgroud)

在 iOS 15.2 模拟器上运行,出现崩溃并输出以下内容:

-[MTLTextureDescriptorInternal validateWithDevice:]:1325: 断言失败`纹理描述符验证 MTLTextureDescriptor 的宽度为零。MTLTextureDescriptor 的高度为零。

可能是过滤器设置不正确?好吧,只需注释掉过滤器,如下所示:

    //videoEffect.filter = CIFilter(name: "CIColorBlendMode")
    //let colorImg = CIImage(color: CIColor(color: .red))
    //videoEffect.filter?.setValue(colorImg, forKey: "inputBackgroundImage")
Run Code Online (Sandbox Code Playgroud)

现在我们只有一个没有效果的效果节点。这应该有效。但...

-[MTLDebugRenderCommandEncoder validateCommonDrawErrors:]:5252: 断言失败`绘制错误验证片段函数(FastSingle_FragFunc): 缺少 u_texture_sampler[0] 索引 0 处的采样器绑定。