Hi Alessandro,
Let me try to address all the questions, although it is possible to miss something.
Mobile server and MIP SDK Mobile for JS/Web seem to me your first and natural choice.
Mobile server is designed exactly for that purpose - to provide easy VMS access for Mobile and Web clients. XProtect Web Client uses it.
I 'm not sure what would be the “security” reasons that would force customer to skip installation of the Mobile server. Actually it is the other way around.
Mobile Server is initially designed to work in unfriendly environment of the Internet. It has build-in protections for most of well-known web attacks (like XSS, SQL injection, etc). As well as is built using best practices in the field - fully sanitizing all the inputs and outputs for example.
I believe Mobile Server is a must for your integration.
It provides access to Live and Recorded video streams, where they are transcoded to series of JPEGs. In addition for the Live video is available so called Direct Streaming, which is basically CMAF / MP4 streaming, played in the browser trough MSE.
Transcoding is universal and works for all the camera codecs. The drawback is higher CPU/GPU load of the Mobile server as well as possibly higher bandwidth on higher resolutions and frame-rates.
Direct Streaming just repacks the original video frames from the cameras and could work with JPEG and H.264 on all the browsers and with H.265 on Safari and (eventually) Edge*.
In addition there are plenty of samples how to integrate video from Mobile server with the MIP SDK Mobile. For both Transcoding and Direct Streaming.
Milestone Open Network Bridge (formerly known as ONVIF Bridge) consist two services - ONVIF one and RTSP one. I would suggest that you are more interested in the RTSP part, as video could be fetched only trough it. (ONVIF protocol/interface is mostly for configuration)
RTSP service supports all the cameras of the systems with H.264 and H.265 codecs. Probably soon and with MJPEG.
And you can fetch both Live and Recorded video streams.
But as you know you cannot integrate RTSP/RTP steam directly into the Browsers.
So this is some option if you want to fetch the video from the VMS and convert it to other Web friendly format later (those are not much btw).
You can install Open Network Bridge as easy as the Mobile server. Mean time of installation (of both) is less than a minute without affect of the “core” VMS components. No any system down-time, etc.
I’m not sure I fully understand your question here. I would suggest you are talking to some form of HLS or MPEG-Dash (in terms of HTML 5 compatible streaming).
If you want to do something like that, you could try few slightly different approaches:
- Fetch video from the Mobile Server with Direct Streaming (for live only). You will receive directly MP4 files which should be compatible with both HLS and MPEG-Dash. You will need to take care only for Playlists and synchronization. (Why you wouldn’t like to display them directly with the Browser’s MSE is completely different question)
- Fetch RTSP stream from Open Network Bridge, or fetch video directly from RS (IS protocol integration). And put that to some tool that is doing HLS/Dash repackaging.
Please bear in mind, that in all the cases you will have some delay playing those HLS/Dash streams. If you do conversion wisely, you will be able to achieve around 5 seconds delay (in best case 3 seconds). But in most cases is much more - like 15 to 30 seconds. Which is extremely important (and could be unacceptable) for Live streaming.
As far as I’m aware of Milestone REST API is exposed for Configuration only. And you cannot fetch any media trough it.
Unfortunately Milestone doesn’t provide built-in WebRTC support.
You could try to build such support by yourself.
There are few tools / libraries that could be used for that purpose.
From the unpaid ones the natural choice would be GStreamer.
You could fetch the video from the VMS (possibly trough RTSP) and push it to the WebRtcBin. And you should take care about signalization.
But if you are not very familiar with GStreamer, as well as with WebRTC (from how it works perspective), probably is not a good idea to go in that direction.
Ext)
As I mentioned there are not much options to present video in the browser nowadays:
- Transcode to series of JPEGs (Mobile SDK/Server)
- Media Source Extension (Mobile SDK/Server)
- HLS/MPEG-Dash (Your own implementation)
- WebRTC (Your own implementation)
- RTMP or other Plug-in (Your own implementation) - although Flash / Plug-ins seem already dead to me (RIP)
At least I’m aware only of those options.
It get’s a little bit longer, but hopefully helpful.