What is Property in the context of ONVIF event? What is SetSynchronizationPoint? How should this be implemented?
Warning! This is an implementation hint article. Read this first.
Property, as described in ONVIF-Core-Specification-v230.pdf, is a simplified way to represent status change by ONVIF event notification mechanism:
According to the spec, there are three kinds of property operation, Initialized, Deleted, and Changed:
According to spec,
Notice the red highlighted text, a Synchronzation Point is requested automatically when CreatePullPointSubscription is requested. What it really means is that the NVC (client) does not need to issue SetSynchronizationPoint explicitly.
Please refer to previous section. This is clearly defined in spec without ambiguity.
The ONVIF specs tend to get very technical about some pretty simple concepts. What you really need to do is that after receiving CreatePullPointSubscription request, NVT should treat the client doesn't know anything about the current device status. Therefore NVT should send all (subscribed) properties with their states to the client, with PropertyOperation="Initialized" in NotificationMessage. This way the client would know the initial state of each subscribed property.
For example, say a digital input is at ON state. When an NVT received CreatePullPointSubscription request from client, it should immediately send the ON state event to client (with PropertyOperation="Initialized"), so the client wouldn't wrongfully assume the digital input state is at OFF state (because the client is not told the correct information).
According to spec:
The SetSynchronizationPoint command is reserved for notification streaming interface (what is this?). Genius Vision NVR uses exclusively Pull-Point style event notification, so this command is never called by Genius Vision NVR.