我有一个 OpenGL 应用程序,其渲染图像需要通过 Internet 流式传输到移动客户端。以前,只需将渲染记录到一个视频文件中就足够了,这已经可以工作了,现在这应该扩展到后续的流媒体。
现在什么工作:
- 将场景渲染到 OpenGL 帧缓冲区对象
- 使用 NvIFR 捕获 FBO 内容
- 使用 NvENC 将其编码为 H.264(无需 CPU 往返)
- 将编码帧作为字节数组下载到主机内存
- 将此帧附加到视频文件
到目前为止,这些步骤都没有涉及 FFmpeg 或任何其他库。我现在想用“通过 Internet 流式传输当前帧的字节数组”替换最后一步,并且我认为使用 FFmpeg 和 FFserver 将是一个合理的选择。我对么?如果没有,正确的方法是什么?
如果是这样,我如何在我的 C++ 代码中处理这个问题?正如所指出的,该帧已经被编码。此外,没有声音或其他东西,只是一个 H.264 编码帧作为字节数组,不定期更新,应该转换为稳定的视频流。我认为这将是 FFmpeg 的工作,并且随后通过 FFserver 进行的流式传输将从那里变得简单。我不知道首先如何将我的数据提供给 FFmpeg,因为我发现的所有 FFmpeg 教程(在非详尽搜索中)都在文件或网络摄像头/捕获设备上工作作为数据源,而不是在主内存。
上面提到的我已经能够创建的文件是一个 C++ 文件流,我将每个单独的帧都附加到该文件流中,这意味着视频和渲染的不同帧速率没有得到正确处理。这也需要在某些时候加以注意。
有人可以指出我正确的方向吗?我可以将数据从我的应用程序转发到 FFmpeg 以构建正确的视频源而不写入硬盘吗?教程非常感谢。顺便说一句,FFmpeg/FFserver 不是强制性的。如果您对 OpenGL 帧缓冲区内容的流式传输有更好的想法,我很想知道。