背景
我正在使用 video4linux 2 规范捕获视频。它是使用 C 程序实时捕获的。我还有一个可以在本地和远程运行的 Java 前端。远程端很简单,我只需将图像压缩为 JPEG,然后通过 mini-http 服务器将它们发送到客户端,客户端将它们解压缩并显示在屏幕上。
当我们在本地运行时,我希望通过某种方式 IPC 直接连接到该内存并从 Java 访问图像。然后,使用尽可能少的 CPU 资源将它们粘贴到屏幕上。这是一个“监视”类型的系统,所以我可以同时运行 8-16 个摄像机源。
问题
将图像数据(YUV420P)从 v4l2 mmap 缓冲区移动到我的 Java 应用程序以在屏幕上显示的最有效方法是什么?如果有可用的,请显示代码或指向一些 api/specs。
回答
考虑到时间,我决定只使用普通的套接字并以 RGB 格式发送数据。当 Java 客户端在同一台机器上运行时,我能够显着提高性能。如果客户端远程运行,我仍然会通过网络发送 JPEG。接下来,我需要找到一个优化的 JPEG 解码器。
顺便说一句,这不是 2 个客户端,只是我的 CameraStream 小部件读取并解析这两种类型。