opengl - 如何将 OpenGL 渲染场景从云端传输到远程客户端
问题描述
所以我有一个桌面应用程序,使用 OpenGL 以 3D 形式呈现大型数据集。我想将它移动到云端并使用服务器端渲染,以便将渲染的图像流式传输到远程客户端(JS 等)。据我了解,WebRTC 是最好的方法。然而,它的实现复杂且昂贵,主要针对视频会议应用。是否有任何框架/开源更适合 3D 图形流。Nvidia 的 GameStreaming 是适合探索的技术,还是为游戏量身定制的?还有其他想法和方法吗?
解决方案
有许多想法和方法,哪一种最有效取决于您的特定应用程序、预算、客户端和服务器。
如果您在服务器端渲染,最大的优势是您可以控制 GPU、可用内存、操作系统和驱动程序版本等,因此跨平台或操作系统版本问题基本上消失了。
但是现在您正在将每一帧逐个像素地发送给用户。(在压缩可视化而不是视频时,MPEG-4 并不是很好。)
而且每次击键、鼠标点击或鼠标移动都会产生网络延迟。
如果有几十?数百?数千?的人想要同时使用你的应用程序,你必须有足够的服务器端 CPU/GPU 来处理这么多用户。
所以,是的,无论您选择什么,实施起来都是复杂且昂贵的。除了 WebRTC,您还可以查看 VNC 等屏幕共享软件。Nvidia 游戏流媒体可能是一种更适合探索的技术,因为 3D 游戏和 3D 可视化之间有很多相似之处,但不要指望它是灵丹妙药。
你看过 WebGL 吗?它是用于 JavaScript 的 OpenGL 的略微缩减的 EGL 版本。如果您没有大量使用高级 OpenGL 4 功能,许多 OpenGL C/C++ 代码可以毫不费力地转换为 JavaScript 和 WebGL。地球上几乎所有的 Web 浏览器都运行 WebGL,即使(如 Apple)平台制造商不鼓励使用常规 OpenGL。最大的优势是所有的渲染和交互都发生在客户端,所以延迟不是问题,如果很多人想同时运行它,你不需要为 CPU/GPU 付费。
希望这可以帮助。
推荐阅读
- next.js - NextJS - 在 getServerSideProps 中获取 url
- javascript - Nuxt.js + vuetify 图像未加载
- c++ - 无法让 dup2 为我自己的命令重定向输出,但适用于 execvp
- html - 如何在 Visual Studio 中填充 HTML 工具箱?
- php - 在 Wordpress 中注册新的另一个帐户时,是否有可能再次使用已删除的用户 ID?
- php - MySQL - 查询记录但未插入数据库
- linux - 解决 linux 中的 dig 命令问题
- javascript - 大图像不使用 Webpack + React 渲染?
- spring - 我们可以在 Spring Rest 模板中为 Multipart 文件上传设置自定义边界吗
- python - Apache2.4 + Django 3 - 没有名为“django”的模块