我需要一个 Java 应用程序(桌面 - Windows 和 Mac),它需要通过套接字(WebSockets,因为客户端使用浏览器)向其他用户发送桌面屏幕视频。
现在我已经设法做到了:
Robot.getImageWritersByFormatName
使用(不是那么快,但据我所知没有其他跨平台解决方案)获取屏幕截图- 我已经设法设置套接字通信
java socket client -> screenshare/socket server -> client(browser)
- 尝试发送 JPEG 压缩图像,然后在浏览器中渲染它们,在本地网络中它是可以接受的,但是当它接近 wan 时它非常慢(3/4fps 并且流已经 >350kbps)
- 发现我需要视频压缩(不是像 JPEG 那样的静止图像)、关键帧、iframe 等。我对视频编码/解码没有太多经验
- 找到 JCodec 库(在我看来,非常好的库,带有纯 Java 编解码器,做得很好,但没有文档)
- 感谢示例代码,我设法将 BufferedImage 图像序列编码为 h264/mp4,但仅将其保存到文件中
我如何想象,如果我可以使用ByteBufferSeekableByteChannel而不是FileChannelWrapper(两者都实现 SeekableByteChannel)并使用ByteBuffer将数据存储在内存中,那么我可以调用channel.read(someOtherByteBuffer)
循环并通过套接字发送字节数组,但我得到的数组全是零。
有人知道如何使这项工作吗?欢迎任何其他建议或其他想法如何制作这个应用程序。