Сайт ONVIF: http://www.onvif.org/
Конфигурация установки gSOAP: Конфигурация установки gSOAP + пример использования + ссылки на справочные материалы
Операционная система: CentOS7
Статьи на тему ONVIF от Xu Zhenping: Переход на сайт
Статьи от эксперта 6, 7, 8 (в основном посвящены).
Справочные материалы по обнаружению устройств: ONVIF обнаружение устройств (веб-камеры) — заметки по примеру
Полный исходный код доступен для загрузки: GitHub, Gitee
Как сгенерировать код ONVIF-фреймворка: ONVIF протокол для сетевых камер (IPC) — разработка клиента (6): использование gSOAP для генерации кода ONVIF-фреймворка
Поскольку эксперт не предоставил полный код в 8-й статье, его невозможно скомпилировать. В этом месте будет добавлено.
Необходимо объединить код из 7-й статьи с кодом из 8-й статьи, убрать не предоставленные экспертами заголовочные файлы и функции, заменив их своими.Процесс модификации уже был описан в комментариях к статьям эксперта, и вы можете использовать их для справки.
Для компиляции введите в терминале: gcc -o main main.c stdsoap2.c soapC.c soapClient.c wsaapi.c duration.c
Результат выполнения:
Информация об одном устройстве не может быть получена, а информация о другом устройстве успешно выведена.
Информация, которую я предоставляю для вывода, недостаточно полная.
//dump__wsdd__ProbeMatches(&rep); 166 строка примерно
//dump_tds__GetDeviceInformationResponse(&devinfo_resp); 217 строка примерно
__wsdd__ProbeMatches и _tds__GetDeviceInformationResponse
Поиск этих двух переменных по типу
Связанные структуры можно найти в soapStub.h
Вот некоторые из материалов, которые я нашел, структура __wsdd__ProbeMatches содержит несколько уровней вложенности, и я не могу это выдержать.
struct __wsdd__ProbeMatches {
/** Необязательный элемент 'wsdd:ProbeMatches' типа XML-схемы 'wsdd:ProbeMatchesType' */
struct wsdd__ProbeMatchesType *wsdd__ProbeMatches;
};
struct wsdd__ProbeMatchesType {
/** Последовательность элементов 'wsdd:ProbeMatch' типа XML-схемы 'wsdd:ProbeMatchType', хранящихся в динамическом массиве ProbeMatch длиной __sizeProbeMatch */
int __sizeProbeMatch;
struct wsdd__ProbeMatchType *ProbeMatch;
};
``````c
struct wsdd__ProbeMatchType {
/** Обязательный элемент 'wsa:EndpointReference' типа XML-схемы 'wsa:EndpointReference' */
struct wsa__EndpointReferenceType wsa__EndpointReference;
/** Необязательный элемент 'wsdd:Types' типа XML-схемы 'xsd:QName' */
char *Types;
/** Необязательный элемент 'wsdd:Scopes' типа XML-схемы 'wsdd:ScopesType' */
struct wsdd__ScopesType *Scopes;
/** Необязательный элемент 'wsdd:XAddrs' типа XML-схемы 'wsdd:UriListType' */
char *XAddrs;
/** Обязательный элемент 'wsdd:MetadataVersion' типа XML-схемы 'xsd:unsignedInt' */
unsigned int MetadataVersion;
};
struct _tds__GetDeviceInformationResponse {
/** Обязательный элемент 'tds:Manufacturer' типа XML-схемы 'xsd:string' */
char *Manufacturer;
/** Обязательный элемент 'tds:Model' типа XML-схемы 'xsd:string' */
char *Model;
/** Обязательный элемент 'tds:FirmwareVersion' типа XML-схемы 'xsd:string' */
char *FirmwareVersion;
/** Обязательный элемент 'tds:SerialNumber' типа XML-схемы 'xsd:string' */
char *SerialNumber;
/** Обязательный элемент 'tds:HardwareId' типа XML-схемы 'xsd:string' */
char *HardwareId;
};
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )