OpenGL实时渲染传输

时间:2010-08-19 14:47:59

标签: c++ opengl networking rendering

我正在尝试用C ++开发远程OpenGL渲染工具。基本思路是:

  1. 客户端发出OpenGL命令,就像它是一个普通的应用程序
    • 这些命令实际上是通过网络发送到外部服务器的
    • 服务器使用一些屏幕外技术执行渲染
    • 完成后,服务器通过网络将单帧传输到客户端
    • 客户端在屏幕上呈现框架。
    • 循环。
  2. 我知道如果我还没有成品,我不应该开始担心优化,但我很确定这会非常慢,而且瓶颈可能是单帧传输通过网络,即使这些计算机连接在同一个局域网中。

    我正在考虑使用某种视频流媒体库。这样,帧将使用适当的压缩算法传输,从而使过程更快。

    我是否在正确的道路上?在这里使用视频流媒体库是对的吗?如果你这么认为,这个任务的好库(用C或C ++,最好是C ++)是什么?

    感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

你有两个解决方案。

解决方案1 ​​

  • 远程运行应用
  • 拦截openGL调用
  • 在网络上转发它们
  • 发出openGL调用localy

- >复杂,特别是在处理缓冲区和纹理时;真正的openGL代码是在本地执行的,可能不是你想要的,但这取决于你。更重要的是,它对于远程应用程序是透明的(没有源修改,没有重建)。几乎没有网络通信。

解决方案2:你所描述的,有利有弊。

如果您选择解决方案2,请暂时不要考虑速度问题。你会对openGL有足够的挑战,相信我。

从同步模式开始:渲染,获取,发送,渲染,获取,发送 然后是异步模式:渲染,开始获取,渲染,获取结束,开始发送,渲染等 我认为这很难,

答案 1 :(得分:1)

根据您需要支持的分辨率和LAN的速度,可以流式传输未压缩的数据。

24位1280x1024帧需要30 Mbit,而使用千兆以太网这意味着理论上每秒33帧未压缩。

如果这还不够,那么自己添加一个简单的RLE压缩就相当简单了。

答案 2 :(得分:0)

想象一下,必须在两台机器上花费$才能为它们提供适当的图形处理能力。如果将所有与图形相关的任务集中在一台计算机上,则可以避免这种情况并简化客户端开发。客户端的工作只是发送/接收/显示数据,服务器可以专注于处理图形(OpenGL)并将数据(作为帧)发送回客户端。

您提到的瓶颈取决于您身边的一些事项:图像的大小以及发送/接收/显示它们所需的帧速率。

这些是我读过的一些有趣的话题,希望他们会对这个主题有所了解:

Video streaming using c++

How do I stream video and play it?