我有一个OpenGL应用程序,其中渲染的图像需要通过互联网流到移动的客户端。以前,它足以简单地记录渲染到一个视频文件,这已经是工作,现在这应该扩展到后续的流。
目前正在使用的功能:
- 将场景渲染到OpenGL帧缓冲区对象
- 使用NvIFR捕获FBO内容
- 使用NvENC将其编码为H.264(无需CPU往返)
- 将编码帧作为字节数组下载到主机内存
- 将此帧附加到视频文件
到目前为止,这些步骤都没有涉及到FFmpeg或任何其他库。现在我想用“通过互联网传输当前帧的字节数组”来替换最后一步,我假设使用FFmpeg和FFserver将是一个合理的选择。我说的对吗?如果不对,正确的方法是什么?
如果是的话,我如何在我的C代码中处理这个问题呢?正如所指出的,帧已经被编码了。而且,没有声音或其他东西,简单的H.264编码帧作为字节数组,不定期更新,应该转换成稳定的视频流。我假设这将是FFmpeg的工作,通过FFserver的后续流将是简单的。我不知道什么'首先我不知道如何将我的数据输入FFmpeg,因为我找到的所有FFmpeg教程(在非穷举搜索中)都是在文件或网络摄像头/捕获设备上作为数据源工作的,而不是在主内存中的易失性数据。
上面提到的我已经能够创建的文件是一个C文件流,我将每一帧附加到其中,这意味着不同的视频帧速率和渲染没有得到正确的处理。
有人能给我指出正确的方向吗?我能把数据从我的应用程序转发到FFmpeg,以建立一个适当的视频源,而不写入硬盘吗?非常感谢教程。顺便说一下,FFmpeg/FFserver不是强制性的。如果你有一个更好的想法,OpenGL帧缓冲区内容的流,我渴望知道。
1条答案
按热度按时间ss2ws0br1#
您可以向ffmpeg进程提供已编码的H.264数据(
-f h264
),并告诉它只需将流复制到输出多路复用器(-c:v copy
)。然后,您可以将编码的h264流写入
ffmpeg_in
。