我正在构建一个服务器端的 html 呈现浏览器,它呈现 html 并将 jpegs 发送到移动客户端。我需要弄清楚如何构建一个服务器来抓取 jpeg 并将它们在会话中流式传输到我将在 j2me 中编写的客户端
3 回答
尚不完全清楚您所说的“实时”是什么意思,但我猜您正在谈论向服务器端进程发出请求,该进程呈现传入的 URL 并返回图像。我知道的最简单的方法之一是使用 Java 和SWT。您可以使用SWT 浏览器小部件并捕获画布,然后将其转换为您想要的任何图像类型。浏览器小部件使用 firefox 来呈现页面,因此它们应该看起来不错。
我会编写一个每次提供一个 jpeg 的 servlet,以及一个每隔一段时间请求下一个 jpeg 的 midlet。
嗯,有比普通 JPEG 更好的解决方案。我已经实现了这样的系统,您最好使用 MPEG-2、MPEG-4 ASP、H.264 等视频编解码器而不是 JPEG,并将更新作为 p 帧发送(即前一个的增量图像),如果有“太大”的变化(或错过更新,或将新客户端添加到现有流中),则发送 i-frame。
即使不使用视频编解码器,发送差异通常也是可取的。使用其他一些机制来编码差异。
关于如何获取要发送的缓冲区,您可以使用多个帧缓冲区进行渲染,并设置帧缓冲区代码以在发生更改时启动计时器,并在发生更改时发送周期性更改,当足够的时间时自上次更改(尚未发送)以来已经过去了发送更新(可能比第一个值更短的时间),并且还可能包括某种强制更新可以在某些情况下调用的选通(如果可以的话,对于例如,从浏览器获取页面加载完成指示,您可以通过更改 chrome 等在 Firefox 中进行一些工作)。
[添加]
有关其他解决方案的示例,请查看远程桌面协议和程序,如 VNC、RDP(Windows 远程桌面)等 - 这实际上就是他们正在做的事情,同样具有更高级的压缩和损坏区域跟踪。
对于帧缓冲区,您可以使用标准的 linux/etc 帧缓冲区代码(可能是最简单的),甚至可以使用 XVFB 之类的代码(与原始帧缓冲区相比,它使您可以访问有关事物发生变化的原因和原因的更多信息)。