Video management middleware

Embedded video management system

Viinex is middleware for adding video surveillance and video management features to customer’s application. Viinex can be run on stand-alone servers or on virtualized servers hosted in data centers.

Viinex implements functionality for acquiring video data from external devices (IP cameras and encoders), storing video in a video archive, re-streaming video to clients in live mode as well as on demand. It also allows your application to decide when the video from external sources should be recorded, and takes care of low-level aspects of video management including buffering for of pre-recording, precise handling of groups of pictures and keyframes within video stream for exact positioning withing video archive, accurate accounting for presentation timestamps, etc.


Web applications offer a huge advantage over rich client applications in that they are much simpler in deployment. There are no strict requirements for client workstations, like a specific version of Windows or .NET, OpenGL extensions, and so on, to run a web client. The same is true for upgrades: when the server is upgraded, the clients will receive the new frontend automatically. Additionally, with web application you automatically get an ability to use the application over the Internet, in most cases not bothering about routing, port forwarding and other fragile environment-dependent things which should be explicitly watched for in case of rich client.

Viinex was developed with the following criterion in mind: all the features implemented by Viinex should be reachable by a web client application written in JS for a modern browser, without additional software. We premise that if a web client can use the feature, then a rich client can use it, too. This criterion is met: data acquisition, statistics, commands, events, as well as video streams are available from Viinex via HTTP API based on JSON interchange between client and server and stateless REST-like semantics of remote calls. A web client as well as mobile application for Viinex can be developed in a “native” way, without involving any tricks and workarounds like third-party plugins. Viinex does not require its clients to use any other transport protocol except HTTP.

Being middleware, it is totally separated from customer’s application address space; there’s no need for linking your code with client libraries. All interaction with Viinex is performed via HTTP REST-like programming interface. Web clients, like single-page web applications, are of the main priority for Viinex, however HTTP API can be easily reached from wide range of programming languages, from C/C++ to shell scripts.

Conformance to standards

In its interaction with applications, particularly in media interchange, Viinex sticks to ISO-standardized protocols and media formats. Viinex provides access to recorded video in such formats as MP4, MPEG TS, and in form of raw stream, which is convenient for a number of video processing applications. Internally, Viinex stores and manages video archive as a sequence of MP4 files named and arranged across subfolders, according to the video origin and timestamps, in a transparent and obvious manner. This allows, in case of necessity, for a user to operate on video archive by standard means, such as common media players (for example if media containing video archive is detached from the computer where the client software was installed and brought to another standard PC with no additional software).

HTML5-ready video

When it comes to streaming video to the client, Viinex implements WebRTC and HLS specifications, making video playback possible on most of popular browsers, including Apple Safari on iOS and Microsoft Edge. WebRTC allows a peer-to-peer connection between a Viinex instance and client’s browser to be used to deliver video content to the client in real time, with the latency below 300 milliseconds, — which is totally appropriate for live surveillance and PTZ applications.

Designed as an SDK

That is, every piece of functionality implemented in Viinex is available via programming interface, and the functionality is said to be implemented if and only if it is available programmatically.

The criterion for development of Viinex API was whether a feature can be used from web-based client, like a single-page application. We presumed that if a javascript client running in a browser could use a feature, then rich clients can used it, too.

Viinex programming interface is a set of HTTP calls, taking as input and producing as output either JSON documents of terse and simple structure, or the media data. Viinex sticks to REST approach to building the API. The remote calls to Viinex are stateless, i.e. the server maintains no state or context for a specific client.

Viinex does not require its clients to link against native libraries, use additional transport protocols (except HTTP) or data formats (except JSON). Its API is suitable for using not only from Javascript code running in a web browser, but can easily be used from Java, Objective C or Swift, PHP, node.js, C#, Python, and also from Delphi or C++. Viinex is a middleware, it can be used from both client- and server- sides for different use cases. For instance, an NVR can be built solely by means of server-side functionality provided by Viinex, – all the work for developing an NVR would be done on a frontend. On the other hand, a domain-oriented solution, like the ones for alarm monitoring, access control or PSIM, which necessarily have non-video-related server-side parts, can also easily integrate Viinex within the environment of the application server, to incorporate video management functionality.

Viinex is typically deployed as a service/daemon in the operating system, however there is an option for integrating software to control over the lifecycle of Viinex instance.

Here’s the link to Viinex’s HTTP REST API documentation.

Video analytics

Viinex contains basic video detectors and provides integration with cameras’ on-board detectors via ONVIF interface. It also has built-in implementations of such video analytics as face detection and vehicle license plate recognition engine.

Basic detectors

Projective transformition

License plate recognition

Railcar number recognition

Container number recognition

Face detector

Also, Viinex provides tools to add third-party analytics on your own

External software process integration