video - iOS10 + SceneKit : render a video with custom shader

标签 video opengl-es sprite-kit scenekit metal

如何在使用自定义着色器时将视频渲染为 SceneKit 节点上的漫反射纹理?这听起来很简单,但是:

  • SceneKit 元素不支持 AVPlayerLayer 作为输入纹理 (SO)
  • 备选方案是:
    • 使用带有 SKVideoNode 的 SpriteKit 场景,但是:
      • 自 iOS 10 起,一旦涉及 SpriteKit 场景,使用 openGL 进行渲染就会失败 (SO) 我已经完成了雷达
      • 我无法弄清楚如何在使用 Metal 时将制服传递给着色器修改器 (SO) 事情与 openGL 完美配合(在 iOS 9 上,当 SpriteKit 工作时)令人惊讶的是,关于这方面的文档很少。
      • 一旦 SceneKit 场景中涉及视频,SCNProgram 似乎就会失败 (SO) 在没有视频的相同设置下一切正常
    • 将视频输出转换为 CGImage,将其传递给 CALayer,并将该层传递给 SceneKit 视频节点(不涉及 SpriteKit)这很详细 here ,但一旦视频有点大,就不是一个可行的解决方案,因为所有输出都被复制到图像中,而且成本很高..

我仍然不太愿意离开 SceneKit,因为它用 opengl/metal 处理了很多烦人的低级事情,但我现在无法让事情正常工作......

作为一个额外的坏消息,看起来 SpriteKit 在与 Metal 一起使用时有内存泄漏,并且它使 SceneView 保持事件状态,因此所有父 View 和附加到它们的所有内容......

您可以找到本期的复制品 here ,还有一个更简单的here :

最佳答案

无法解决这个问题,我编写了自己的库来模仿 SceneKit 的一些功能:https://github.com/team-pie/DDDKit

关于video - iOS10 + SceneKit : render a video with custom shader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39542205/

相关文章:

opengl-es - 将 OpenGL ES 2.0 渲染为图像

ios - 如何区分 Sprite 的副本

javascript - HTML5 视频标签在 iOS 上不起作用,视频未加载

node.js - Node : I want to use url as source of ffmpeg

c# - 如何在 C# 中使用 axWindowsMediaPlayer 跳转 X 秒

java - Libgdx 用纹理重构一个类

ios - 使用 GL_FLOAT 和 GL_LUMINANCE 进行线性插值?

swift - 请帮助我提高 swift 中节点的速度(Sprite Kit)

objective-c - 将 SKLabelNode 设置为 SKSpriteNode Swift 的中心

audio - 通过 ffmpeg 循环播放电影并与音频混合