Итак, ONVIF — это протокол поверх SOAP, в котором сведена (или сделана попытка) вся существующая логика, связанная с охранным видеонаблюдением и смежными областями (умный дом).
ONVIF — это не обобщенный транспорт всего-всего, а уже работающий протокол в котором написано, что конкретно надо послать в устройство, что бы оно выполнило ту или иную бизнес-функцию, как-то: сообщило свой RTSP урл или повернулось направо или что-то ещё.
ONVIF описывает работу с камерами, мониторами, рекордерами и всякими смежными штуками. Например механизмы по автоматизации пенитенциарных учреждений в ONVIF не прописаны, но работа с датчиками по открытию дверей есть.
Начинается ONVIF с WS-Discovery. WS-Discovery — это механизм поиска ONVIF совместимых устройств в локальной сети (на самом деле это общий механизм для SOAP, но черт с ним).
Когда вы запускаете программу, управляющую камерами, она посылает UDP пакет по мультикаст адресу 239.255.255.250:3702 со следующим содержимым:
<s:Envelope
xmlns:s="http://www.w3.org/2003/05/soap-envelope"
xmlns:a="http://schemas.xmlsoap.org/ws/2004/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">http://schemas.xmlsoap.org/ws/2005/04/discovery/Probe</a:Action>
<a:MessageID>uuid:53062770-f8a5-438e-b9b1-f05d892a4104</a:MessageID>
<a:ReplyTo>
<a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address>
</a:ReplyTo>
<a:To s:mustUnderstand="1">urn:schemas-xmlsoap-org:ws:2005:04:discovery</a:To>
</s:Header>
<s:Body>
<Probe xmlns="http://schemas.xmlsoap.org/ws/2005/04/discovery">
<d:Types
xmlns:d="http://schemas.xmlsoap.org/ws/2005/04/discovery"
xmlns:dp0="http://www.onvif.org/ver10/network/wsdl">
dp0:NetworkVideoTransmitter
</d:Types>
</Probe>
</s:Body>
</s:Envelope>
Тут XML во всей красе: куча всякого-всякого, но по сути здесь есть MessageID, и Probe(types=[NetworkVideoTransmitter])
Могут быть и другие запросы: Hello и Bye.
Порядочное ONVIF устройство слушает на этом мультикаст адресе (не забываем, что на один мультикаст адрес:порт можно повесить несколько программ) и, получив такой запрос, отвечает в ответ совсем беспощадным XML-ем, в котором оно рассказывает о том, какие подвиды ONVIF оно знает и по каким HTTP(s) адресам к нему можно обращаться в надежде получить сервис.