Интеграция внешних программных процессов

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

Интеграция со сторонними системами на основе событий может быть относительно простой и также выполнена практически в любом языке программирования, имеется в виду простой интерфейс для обмена событиями. Реализация этого механизма выложена на GitHub под MIT-лицензией, он используется при интеграции внешних систем видеоаналитики не только сторонними производителями, но и самой командой Viinex.

Обмен данными по стандартному механизму stdin/stdout

Viinex может запускать внешний процесс, управлять его жизненным циклом и связываться с этим процессом через именованный канал (Windows) или доменные сокеты UNIX (Linux). Для этого используется простой механизм стандартного ввода/вывода. Все события, на которые подписан внешний процесс, сериализуются в формате JSON и отправляются Viinex на стандартный ввод этого процесса. И наоборот – все, что внешний процесс записывает в свой стандартный вывод, должно иметь синтаксис JSON, который принимается Viinex как событие этого процесса. Таким образом, все сводится к простому обмену JSON-командами через stdin/stdout.

Таким образом Viinex может отправлять и принимать события – структуры данных, содержащие некоторые предопределенные поля (а также некоторые произвольные данные), сериализуемые и десериализуемые из формата JSON.

При таком взаимодействии внешнему процессу не придется использовать какой-либо дополнительный API, сторонние библиотеки, и т.п. А значит, внешний процесс может быть реализован с использованием практически любого языка программирования; все, что ему требуется — это доступ к стандартному вводу и выводу, и возможность разбирать и формировать данные в формате JSON. Никаких других ограничений Viinex на реализацию внешнего процесса не налагает, соответственно, внешний процесс может выполнять любые действия и взаимодействовать с любой сторонней программной системой.

Предоставление raw-видео для подключения сторонних систем видеоналитики

Кроме обмена данными, Viinex предоставляет API для получения несжатого видео. Используя этот API, внешний процесс может получать видео, например, для выполнения пользовательской видеоаналитики.

Методы IPC, используемые для реализации API для получения несжатого видеопотока в Viinex, представляют собой комбинацию из общей памяти (shared memory) и именованных каналов. Это позволяет обрабатывать несжатый видеопоток между процессами на локальной машине без какого-либо копирования.