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).
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.
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 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.
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.
Also, Viinex provides tools to add third-party analytics on your own