Our company (Terracom Ltd - http://www.terracom.gr) needs a Win32 library that can communicate with Lynstan DVRs (we got the Lynstan’s SDK) and be able to make some operations. We want this library to be in a procedural style with callbacks, because we want to use it from a .net host application. So interface must be as simple as it can be. We will define the interface functions and callback functions.
In general this library must:
1. Connect to a single DVR and return the error code of the connection attempt (Success, cannot connect, bad login etc.). Also return to an argument by reference, the DVR handle. We will provide to the function host name of the remote DVR, port number, username and password and a dvr unique id (integer).
2. Disconnect from DVR.
3. Be able to poll DVR details such as, number of cameras, which camera has video loss, device serial number or MAC address (all these are provided by the SDK).
4. Be able to play live stream from a specific camera to a window control. We will provide the Win32 control's handle. We need to be able to invoke start and stop commands, with the camera number as a parameter. Note that, Lynstan's SDK does not provide live stream preview in a window control. We are advised to use ffmpeg for that issue.
5. Inform .net host application via a callback function, with DVR's events (motion detection start, motion detection stop, tamper start & stop, DVR disconnect, camera video loss start & stop). We will provide the error codes for each event and win32 library must supply host app with one of these error codes and with the flag ON or OFF.
6. We need to be able to give a start record command and file name as a parameter. Then, library must start a stream from DVR, for a specific camera. Note that, it may be concurrent streams, ex. for all DVR's cameras. This live stream must be stored in a file, where library runs. Also note that, SDK provides a raw bytestream, without any key-frame information in it. So, if the connection line between DVR and win32 library is slow, there is no time-shift effect in the stream (so all frames to be fetched from SDK, but delayed) but DVR tries to send every second all frames that can be transfer through line, in a second and disregards the others. That's why we need to have some kind of key frame information in the recorded video. This will help the correct playback speed.
7. As mentioned in the previous requirement, we have a video file stored in the hdd. We also need to playback this file. At first, we need to be able to give start & stop commands for playback the video file. The function will have file name and window control handle's as parameters.
That were our main requirements for this project. As I mentioned before, we need this library to be a native win32 library. We will merge it in a .net application host, so we need all pointer stuff to be handled from a win32 code.
There is attached the SDK for Lynstan. It also has a documentation.
We also want to make connectors for more SDKs - DVRs. So, if this projects ends successfully there can be further cooperation with the one who will manage to make it work.