Устройство Onvif не найдено диспетчером устройств Onvif

Я пытаюсь реализовать сервер устройств камеры со стандартами профиля onvif, используя gsoap. при динамическом обнаружении ws, когда я пытался запустить код в https://github.com/mpromonet/ws-discovery/blob/master/gsoap/server.cpp, диспетчер устройств Onvif не дает никакого ответа на мое сообщение о совпадениях. Я вижу, что получаю тестовое сообщение, отправляю сообщения probematches, но диспетчер устройств Onvif просто игнорирует их. Я сделал следующие изменения параметров для своего устройства:

const int   _metadataVersion = 1;
static const char* _xaddr= "http://10.0.0.50:1881";
const char* _type="tdn:NetworkVideoTransmitter " "tds:Device " ;
const char* _scope=
        "onvif://www.onvif.org/name/ru "
        "onvif://www.onvif.org/hardware/hw "
        "onvif://www.onvif.org/Profile/Streaming "
        "onvif://www.onvif.org/location/ANY "
        "onvif://www.onvif.org/type/video_encoder onvif://www.onvif.org/type/audio_encoder onvif://www.onvif.org/type/ptz ";

const char* _endpoint="urn";

Я пробовал много параметров, но не смог найти решение. Какие изменения мне нужно внести, чтобы диспетчер устройств Onvif мог его обнаружить?


person rotringuser    schedule 05.08.2016    source источник


Ответы (1)


Как видите, используемое вами пространство имен (tdn и tds) не объявлено в сгенерированных пространствах имен (в gen/wsdd.nsmap):

#include "soapH.h"
SOAP_NMAC struct Namespace namespaces[] =
{
        {"SOAP-ENV", "http://schemas.xmlsoap.org/soap/envelope/", "http://www.w3.org/*/soap-envelope", NULL},
        {"SOAP-ENC", "http://schemas.xmlsoap.org/soap/encoding/", "http://www.w3.org/*/soap-encoding", NULL},
        {"xsi", "http://www.w3.org/2001/XMLSchema-instance", "http://www.w3.org/*/XMLSchema-instance", NULL},
        {"xsd", "http://www.w3.org/2001/XMLSchema", "http://www.w3.org/*/XMLSchema", NULL},
        {"wsa", "http://schemas.xmlsoap.org/ws/2004/08/addressing", NULL, NULL},
        {"wsdd", "http://schemas.xmlsoap.org/ws/2005/04/discovery", NULL, NULL},
        {NULL, NULL, NULL, NULL}
};

Чтобы указать wsdd:ProbeType с полным именем, вы должны использовать:

"http://www.onvif.org/ver10/network/wsdl":NetworkVideoTransmitter

Этого можно добиться, указав аргумент -t:

ws-discovery.exe -t \"http://www.onvif.org/ver10/network/wsdl\":NetworkVideoTransmitter \
                 -x http://10.0.0.50:1881

или изменить код:

const char* _type="\"http://www.onvif.org/ver10/network/wsdl\":NetworkVideoTransmitter" ;
person mpromonet    schedule 28.08.2016
comment
IP-адрес в примере — это адрес камеры, которую вы ищете? - person Murphybro2; 25.07.2017
comment
@Murphybro2: это http-адрес камеры, которую можно будет обнаружить, отправив зонд WS-Discovery. Затем клиент может использовать этот http-адрес для запроса камеры, отправляя некоторые запросы onvif. - person mpromonet; 25.07.2017