We have an integration with Milestone where our client may display 5 - 10 camera video controls on the display. Each control is a separate ImageViewerControl object.
Each of those video windows might be quite small so that they can all fit on a standard display. Operators can then maximise a particular tile as required so it will then take up the full screen.
The issue is that the ImageViewerControl seems to always request video in the native camera resolution, even when this is far larger than this display area on the client. This causes performance issues on the client for Ultra HD cameras.
Is it possible to have the ImageViewerControl only request video in the resolution it needs to display on screen?
I have noticed the ImageViewerControl has a method ‘SetVideoResolutionAndFPS’, although this does not seem to be working?
Thanks in advance for any assistance you can provide.
By design the ImageViewerControl will request video from the Recording Server in a unmodified raw format. The design is so because otherwise the recording Server is in risk of very quickly being overloaded by too much work in transcoding video for clients. The ImageViewerControl will decode the video stream client side and the decoding server side will be kept low (there is decoding for motion detection going on server side but that is another story).
If you are concerned about clients not being able to decode the streams there are two options you should consider:
Instead of integration with the recording server directly use the Mobile Server. The Mobile Server can be in a separate server and has the job of decoding video and deliver JPEGs in the size requested.
For a camera you can setup multiple live streams. It would be possible to have a setup where you have a high quality high resolution stream, and a lower quality stream, each to be used in different scenarios. The ImageViewerWpfUser and ImageViewerWpfUser samples show how it is possible to show another stream in live mode.