SDL 1.3:如何在不显示视频的情况下呈现视频?

| 所以我需要的很简单:想象一下,我们根本没有GUI-SSH访问一些我们将用来构建和托管应用程序的Linux。该应用程序将生成视频流。我们有一些带有OpenGL着色器的SDL应用程序。我们想要做的只是将渲染(通常是在SDL窗口中得到的)作为char *(大小为W * H * 3)进行处理吗?如何使SDL将内容不呈现到其gui窗口中,而是呈现给某些可交换指针中?     
已邀请:
        要进行任何使用,OpenGL应该在硬件上加速,因此首先检查您的服务器是否确实具有满足您要求的GPU。如果您在租用的虚拟服务器或某些标准根服务器上,则很可能没有GPU。 如果您有GPU,则有两种可能的方法: 方法1-简单的方法 您(不幸的是)必须为其配置和启动X服务器,并且该X服务器也必须是当前的虚拟终端(即它必须是图形卡上的活动设备)。然后,您将为将要运行该视频生成器的用户提供对该X显示器的访问权限(读取“ 0”及其引用内容) 下一步独立于SDL,这是OpenGL的想法:创建一个在其上呈现所需图形的帧缓冲区对象;一个PBuffer也可以工作,实际上我在这种情况下更喜欢它,但是我发现Framebuffer Objects在当前Linux及其驱动程序上比PBuffers更可靠。 然后照常渲染到此Framebuffer对象或PBuffer并使用using1ѭ检索内容 方法2-灵活的一种 在底层上,这与方法1十分相似,但是为您提供了抽象的方法:获取VirtualGL http://www.virtualgl.org/以在GPU上执行实际的OpenGL渲染。您无需直接在辅助X服务器上启动应用程序,而是直接使用VirtualGL服务器,只要发送GLX流并获取回JPEG图像流即可。您还可以使用运行虚拟帧缓冲区的辅助X服务器,并对其进行连续的截屏。或也许是最优雅的:编写自己的X.Org视频驱动程序,将视频直接传递到视频流媒体。     
        您无法在OpenGL中直接渲染为字节数组。 有两种处理方法。第一种方法最简单,不需要上下文提示,第二种方法则需要。 首先,简单的方法。 为了使OpenGL工作,您需要有一个窗口。这并不意味着该窗口需要可见,但是您需要创建一个窗口以获得有效的OpenGL上下文。因此,步骤1:创建一个窗口并将其最小化。 现在,为了获得有效的渲染,帧缓冲区中的像素必须通过“像素所有权测试”。当渲染到保存屏幕本身的帧缓冲区时,实际上在屏幕上不可见的窗口像素将使像素失效所有权测试。因此,如果使用glReadPixels,则这些像素的值是不确定的。 但是,这仅与与窗口关联的默认帧缓冲区有关。帧缓冲对象始终通过像素所有权测试。因此,步骤2:根据您的需要创建一个帧缓冲区对象和关联的渲染缓冲区。 从那里开始,非常简单。只需正常渲染即可,并在需要获取数据时执行glReadPixels。如果性能受到关注,则可以使用像素缓冲区对象异步传输像素数据。步骤3:渲染并使用glReadPixels获取数据。 第二种方法使用范围更广(FBO需要扩展支持或OpenGL 3.0),但特定于平台。 而不是在步骤2中创建FBO,而是具有步骤2:使用glXCreatePbuffer创建pbuffer。 pbuffer是一种屏幕外渲染目标,其作用类似于默认的帧缓冲区。您glXMakeContextCurrent告诉OpenGL渲染到pbuffer而不是默认的帧缓冲区。 步骤1和3与上述相同。     

要回复问题请先登录注册