Сервер потокового видео в реальном времени на основе AIOHTTP, OpenCV и ECMA6 JS

Здравствуйте, это мой новый сайд-проект — сервер потокового видео в реальном времени.

Исходный код доступен по ссылке ниже: https://github.com/ArtyomKozyrev8/stream_video_server

Приложение состоит из двух сервисов: 1. http-сервер 2. процесс обработки видео 3. опционально Nginx

HTTP-сервер

Он прослушивает входящие соединения через веб-сокет от процессов обработки видео, получает видеокадры из соединений и распределяет их в очереди Asyncio, которые связаны с входящими соединениями через веб-сокет от клиентов (веб-браузеров), затем задачи, связанные с клиентами, получают данные из очередей. и отправить данные в клиентский браузер.

Кроме того, процесс HTTP-сервера уведомляет процесс обработки видео, когда он хочет получить данные, поскольку нет необходимости отправлять видеокадр, когда ни один клиент (веб-браузер) не просматривает видеопоток.

Процесс обработки видео

Он обрабатывает веб-камеру или поток RTSP, получает кадры из потока, добавляет временные метки, изменяет размер кадра и отправляет его в процесс HTTP-сервера.

Ограничения решения

У него может быть только один процесс HTTP-сервера одновременно, у вас может быть больше процессов HTTP-сервера, но вы можете получить неожиданные результаты. Я собираюсь решить эту проблему с помощью очереди сообщений, такой как NATS, и напишу об этом в следующей статье.