这是一个关于产品开发技术决策的一般问题。我的目标是开发一个基于网络的远程支持(桌面共享应用程序),带有音频和视频通信。
我理想的解决方案是将其开发为网络产品,这意味着客户端始终在浏览器中运行。客户端技术是 JavaScript(使用Google GWT),对于桌面捕获、桌面呈现、音频和视频,我想使用Java 小程序。
服务器端使用带有数据库后端(Hibernate和基于 SQL 的数据源)的Java Servlet技术运行。对于数据流,我的计划是通过 UDP 使用RTP / RTSP传输(对于桌面数据,内部协议将是 VNC(RFB),但传输将是 RTP 本身)。对于音频和视频,RTP 用于传输。
我的基本版本(原型)将使用中继服务器工作,这意味着客户端始终连接到服务器(登录、身份验证、会话控制)并且服务器始终在对等方之间中继数据。
我的问题是——我的技术决定是否正确?我的意思是,由于多平台支持,我决定使用纯 Java。现在我们有Silverlight,它具有更高级的桌面支持,但仅限于一个平台(Windows)。
我还担心 Java 对音频/视频技术的支持。我见过 JMF(Java Media Foundation),它似乎支持 RTP/RTSP、音频和视频捕获/显示,但这个包看起来非常过时。你怎么看待这件事?
对于实际的屏幕截图,我将从AWT Robot 类开始。我知道对于高性能桌面捕获需要更多低级技术,例如 API 挂钩或镜像驱动程序,但我的原型旨在为屏幕捕获提供 1 FPS,所以我相信 Java Robot 会成功。