Viinex 2.0 provides the most essential functionality for video management. With Viinex, you can have all of that features right in your application.

Video acquisition

Viinex 2.0 is capable of acquiring video from IP cameras and IP encoders supporting RTSP+RTP protocols and H.264 video format. Viinex supports "Basic" and "Digest" RTSP authentication methods. For RTP, the UDP unicast, UDP multicast, and TCP (RTP over RTSP, interleaved mode) implementations are available. Viinex 2.0 can be set up to work with an RTSP video source with a known URL, - that is, it can be also some synthetic video source, such as VLC streaming server. For video cameras, it is possible to specify RTSP URL or to let Viinex find it out automatically via ONVIF protocol.

Video storage

Viinex 2.0 stores video data acquired from cameras in a folder on a filesystem mounted at the server where Viinex is running. This can be a local storage device, or a remote folder (NAS), or a local folder on a remote storage like iSCSI SAN.

Viinex 2.0 automatically maintains the restrictions set for video storage, which can determine maximum video archive size in terms of disk space or maximum video archive depth in terms of time. Given the restrictions set, older video records are overwritten by newer ones, like with any other video management system.

Video data is stored in containers of standardized MP4 format, which can be viewed by means of traditional widely available tools like Windows Media Player, QuickTime, etc. Directory structure where video data is written is very transparent, so it is possible for a user to inspect stored video data and even manipulate it (make excerpts from, or merge fragments) if required - by simply copying files and folders.

Video streaming

Streaming of live or archive video data to clients is performed using HLS protocol. HLS stands for HTTP Live Streaming, which means that HTTP is the transport protocol for video delivery. As a consequence, this approach works well on Internet, even in presence of NAT, restrictive firewalls, and so on.

The use of HLS allows playing video streams from Viinex 2.0 natively in Apple Safari (including iOS) and Microsoft Edge browsers. Google Chrome and Mozilla Firefox support Media Streaming Extensions, which makes possible to play HLS using javascript-based players, for instance hls.js. So, in order to play video re-streamed by Viinex 2.0 one just have to navigate to the corresponding URL in the browser, or point <video> tag to that URL. If the goal is to have video in a "rich client application", one can simply embed a browser control, pointing it to Viinex 2.0 video URL mentioned above.

Viinex 2.0 also implements RTSP server for streaming video to traditional RTSP clients. It supports RTP over UDP unicast, multicast and TCP, implements digest authentication, which allows using Viinex as a convenient RTSP proxy. Of course, Viinex 2.0 RTSP client is compatible with Viinex 2.0 RTSP server, enabling an option to get the live video stream from one Viinex instance to other Viinex instances, who, in their turn, can stream the same data over RTSP or over HLS. This makes it possible with Viinex 2.0 to scale the streaming of data from a single video camera to an unlimited number of remote clients.

Video exporting

Exporting video fragment with Viinex 2.0 is as easy as downloading a file using a web link. Client code determines a time interval which should be exported and issues a HTTP request. The exported media is returned in HTTP response.

Viinex 2.0 supports MP4 and MPEG TS containers as exported output formats; that is, downloaded file can be played on standard media players built into OSes, even 10+ years old (like Windows 7). There is no need to install third-party players, codec packs or whatever, in order to play video exported by Viinex.

External control over video recording

For applications using Viinex 2.0, an API is exposed to control over when the video recording should start and stop. For convenience, one API call is used to start/stop recording on a pre-configured group of cameras (the group may consist of one camera). Of course, pre-recording buffers are supported, and post-recording timeout is supported as well.

Events acquisition and rules for video recording

Viinex 2.0 supports subscription mechanism which allows obtaining events from video cameras supporting ONVIF specification. This makes possible to do two things: a) to get these events in embedding applications via web sockets interface, right in real time, and b) to set up the rules for automatically triggering the video recording on and off, when an alarm events occur. As with external control over video recording, the rules are aware of groups of cameras, which makes the setup really easy for basic scenarios.

Face detector

The facial detection functionality is available in Viinex 2.0. The implementation is divided into two modules in Viinex: there is an "engine" which processes the still images, and a "video analytics module", which presents the sequence of frames to the engine until a result is produced.

Both components are available from the HTTP API. One can try the engine on an arbitrary image using the CURL utility to issue the HTTP POST requests to Viinex (an image goes in the HTTP request body, and detection result is returned as a JSON structure in the HTTP response body). Alternatively, one can associate the face detection video analytics module with a camera, in order to detect the faces on video upon request, -- in this case Viinex takes care about the media data, while the client software just gets the face detection results -- the geometry of faces and the timestamp of a frame where the faces were found. When the faces are detected on video, the analytics module stores corresponding frames in a buffer in memory, so that the client software can get them later, as snapshots. As always, the whole frame is available as a snapshot as well as the region(s) of interest containing the face(s) just detected.

The video source attached to the face detection video analytics module could be an IP camera or an RTSP video source, as well as USB camera that produces uncompressed video. In fact, one video analytics module can even be linked with multiple cameras (possibly of different kind); this is to perform the facial detection on the same scene viewing it at different angles, -- with Viinex, this can be done in a single HTTP API request.

License plate recognition

A license plate recognition engine is built into Viinex 2.0 and, as other features, is available via HTTP RPC. To perform the license plate number recognition, the client's code sends an image as an HTTP request and gets the recognition result in the body of the HTTP response. Such scheme requires that the client software knows when the car license plate is within the camera's field of view. This is usually the case when the client software is intended for the automation of checkpoints.

An important feature of the LPR engine built into Viinex 2.0 is that it is not bound to a single camera: the client software may use one instance of the engine to do license plate number recognition from many cameras.

LPR engine offered with Viinex 2.0 has no adjustments required for a specific camera position. It makes the deployment and usage of this LPR engine very simple. Everything that has to be done to perform a license plate number recognition on a checkpoint is to acquire a JPEG image and feed it as is to Viinex 2.0 LPR engine, - without any additional parameters.