Hi everyone,
We’re developing a custom integration with Milestone XProtect and would appreciate guidance on how best to implement a non-traditional ingest workflow.
Context:
Our server continuously receives
.ts
files (3 seconds each, containing H.264 video and AAC audio). However, these files may arrive out of order — we might receive a segment recorded at time
X
, followed by one recorded at
X - 100 days
. There is no real-time/live stream: all data is delayed and unpredictable in arrival order.
Goal:
We want to ingest each
.ts
file into Milestone as soon as it is received on our server, regardless of its timestamp or sequence.
Current Approach:
We’ve implemented a virtual ONVIF Profile G-compatible camera to expose the stored video segments. However, we are facing the following issues:
- RTSP Requirement: Milestone requires a live RTSP stream to initialize the camera. Since we don’t have a real-time stream, we’ve created a fake RTSP endpoint just to satisfy this requirement. Is there a way to bypass this or indicate that the device is “archive-only”?
- Edge Storage Not Queried Unless RTSP Breaks: Milestone only queries the edge storage (via ONVIF G) when the RTSP connection is interrupted and then re-established. We would like Milestone to continuously request data from edge storage, regardless of the RTSP stream’s connection state.
- Request Time Range Too Limited: When requesting archived footage via GetMediaAttributes, Milestone always starts from the last timestamp known before the RTSP connection was interrupted. However, we need it to request all available video that has not yet been ingested, without being limited by any prior session’s last-seen timestamp. Is there a way to change this behavior, perhaps through settings in XProtect Management Client (we’re on 2023 R3)?
Question:
Is simulating a Profile G ONVIF camera really the best approach for our scenario? Or would it be better to use a different mechanism, such as the MIP SDK (e.g., implementing a Media Gateway or a custom Recording Server plugin)? We’d like to follow the most compatible and robust path with Milestone’s architecture.
Any insights, suggestions, or references would be greatly appreciated!
Thanks in advance,