通过HTTP传输OpenGL帧缓冲区(通过FFmpeg)

nzrxty8p  于 2022-11-04  发布在  其他
关注(0)|答案(1)|浏览(207)

我有一个OpenGL应用程序,其中渲染的图像需要通过互联网流到移动的客户端。以前,它足以简单地记录渲染到一个视频文件,这已经是工作,现在这应该扩展到后续的流。
目前正在使用的功能:

  • 将场景渲染到OpenGL帧缓冲区对象
  • 使用NvIFR捕获FBO内容
  • 使用NvENC将其编码为H.264(无需CPU往返)
  • 将编码帧作为字节数组下载到主机内存
  • 将此帧附加到视频文件

到目前为止,这些步骤都没有涉及到FFmpeg或任何其他库。现在我想用“通过互联网传输当前帧的字节数组”来替换最后一步,我假设使用FFmpeg和FFserver将是一个合理的选择。我说的对吗?如果不对,正确的方法是什么?
如果是的话,我如何在我的C代码中处理这个问题呢?正如所指出的,帧已经被编码了。而且,没有声音或其他东西,简单的H.264编码帧作为字节数组,不定期更新,应该转换成稳定的视频流。我假设这将是FFmpeg的工作,通过FFserver的后续流将是简单的。我不知道什么'首先我不知道如何将我的数据输入FFmpeg,因为我找到的所有FFmpeg教程(在非穷举搜索中)都是在文件或网络摄像头/捕获设备上作为数据源工作的,而不是在主内存中的易失性数据。
上面提到的我已经能够创建的文件是一个C
文件流,我将每一帧附加到其中,这意味着不同的视频帧速率和渲染没有得到正确的处理。
有人能给我指出正确的方向吗?我能把数据从我的应用程序转发到FFmpeg,以建立一个适当的视频源,而不写入硬盘吗?非常感谢教程。顺便说一下,FFmpeg/FFserver不是强制性的。如果你有一个更好的想法,OpenGL帧缓冲区内容的流,我渴望知道。

ss2ws0br

ss2ws0br1#

您可以向ffmpeg进程提供已编码的H.264数据(-f h264),并告诉它只需将流复制到输出多路复用器(-c:v copy)。

FILE *ffmpeg_in = popen("ffmpeg -i /dev/stdin -f h264 -c copy ...", "w");

然后,您可以将编码的h264流写入ffmpeg_in

相关问题