Фон
Я снимаю видео, используя спецификацию video4linux 2. Он записывается с помощью программы на C в режиме реального времени. У меня также есть интерфейс Java, который может работать как локально, так и удаленно. Удаленная сторона была простой, я просто сжимал изображения в JPEG и отправлял их через сервер mini-http клиенту, который распаковывал их и отображал их на экране.
Когда мы работаем локально, я бы хотел, чтобы IPC каким-то образом подключился напрямую к этой памяти и получил доступ к изображениям из Java. Затем перетащите их на экран, используя как можно меньше ресурсов процессора. Это система типа «наблюдение», поэтому я могу одновременно запускать 8-16 камер.
Вопрос
Каков наиболее эффективный способ перемещения данных изображения (YUV420P) из буфера m4 v4l2 в мое приложение Java для отображения на экране? Пожалуйста, покажите код или укажите мне некоторые API / спецификации, если таковые имеются.
Ответ
В интересах экономии времени я решил использовать простые сокеты и отправлять данные в RGB. Мне удалось значительно повысить производительность, когда клиент Java работает на той же машине. Я все еще отправляю файлы JPEG по сети, если клиент работает удаленно. Далее мне нужно найти оптимизированный JPEG-декодер.
Кстати, это не 2 клиента, просто мой виджет CameraStream читает и анализирует оба типа.