У меня есть веб-камера, подключенная к серверу через USB. Я записываю видео с веб-камеры с помощью OpenCV в java, обрабатываю его, а затем отображаю так:
VideoCapture videoDevice = new VideoCapture();
videoDevice.open(0);
if (videoDevice.isOpened()) {
while (true) {
Mat frameCapture = new Mat();
videoDevice.read(frameCapture);
// here i process the captured frame using opencv
Mat processedFrame = process(frameCapture);
lbl.setIcon(new ImageIcon(Mat2Image(processedFrame)));
}
}
...
private void process(Mat frame) {...}
Работает нормально. Кадры захватываются один за другим, обрабатываются и затем отображаются. Хотя кадры отрисовываются последовательно по мере их обработки, они выглядят как непрерывное видео в JFrame
.
Теперь, вместо того, чтобы просматривать его на сервере, цель состоит в том, чтобы превратить / кодировать эти обработанные кадры в непрерывный поток видео, который любой клиентский браузер может просматривать в режиме реального времени, используя URL-адрес, например http://my.server.xyz/feed. Я думаю, что следующие шаги:
- Создание видеопотока из этих обработанных кадров (они обрабатываются последовательно)
- Создание веб-сервера / веб-службы, которая может потоковое видео, так что любой клиент может просматривать его в своем веб-браузере.
- Сделать простую страницу html (размещенную на сервере), которая может воспроизводить этот видео поток (что означает один и тот же обработанный видео поток для всех клиенты, которые его просматривают).
Я пытался использовать Spark Java микрофрейм для выполнения этой работы, однако у меня нет большого опыта работы с веб-приложениями. На сервере у меня уже настроены php и apache.
Я изучил много сообщений, но зашел в тупик. Кто-нибудь может мне помочь реализовать эти три шага?
- Как кодировать эти изображения (кадры, как они обрабатываются) в непрерывный видеопоток
- Как реализовать веб-сервер / Веб-сервис для потоковой передачи
- Как воспроизвести этот поток на очень простой веб-странице, которую просматривает клиент (например, http://my.server.xyz/feed)
Если этот подход не хорош, кто-нибудь может предложить другой практический подход?
Любая помощь будет высоко оценена.