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.
Introduction of Property in spec
Property, as described in ONVIF-Core-Specification-v230.pdf, is a simplified way to represent status change by ONVIF event notification mechanism:
Property operations
According to the spec, there are three kinds of property operation, Initialized, Deleted, and Changed:
What is a Synchronization Point
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.
Does the NVC (client) need to send SetSynchronizationPoint explicitly
No.
Please refer to previous section. This is clearly defined in spec without ambiguity.
What does it really mean by Synchronization Point, I still don't understand
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).
If NVC doesn't need to send SetSynchronizationPoint, then what's the point of having such a command
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.