【发布时间】:2020-01-24 19:39:42
【问题描述】:
我有一个将数据渲染成 rgba 纹理的 openGL 应用程序。我想使用 gstreamer 框架对其进行编码和流式传输(使用 nvenc 插件进行 h264 编码)。
我正在查看文档以解决这些问题:
- 如何将应用的现有 openGL 上下文导出到 nvenc 元素。
- 如何将纹理 ID 传递给来源?
- 同步将如何工作。即 nvenc 必须等待渲染完成,同样应用程序必须等待 nvenc 完成从纹理中读取。我假设它会涉及使用同步栅栏或 glMemoryBarriers。
任何示例代码都会非常有帮助。
我确实想避免将任何纹理复制到 cpu 内存。 Nvidia 的 NVENC sdk 提到它使用 CUDA 上下文进行调用,并且可以使用 cudaGraphicsGLRegisterImage 调用将 openGL 纹理导入到 CUDA 上下文中。所以我的期望是,从app到视频的编码帧可以不用任何副本就可以完成。
【问题讨论】:
标签: c++ opengl gstreamer nvenc