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 处的采样器绑定。