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.