- Русские Блоги
- Управление веб-камерой PTZ, разработанное по протоколу ONVIF (версия C)
- 1 Предварительные знания
- 2 Процесс разработки
- Установка 3 gsoap
- 3.1 Экологическая зависимость
- 3.2 Установить gsoap
- Структура сгенерированного кода 4 gsoap
- 4.1 Подготовка файла wsdl
- 4.2 Генерация файла Onvif.h
- 4.3 C генерация файла
- 5 PTZ контроль
- 5.1 Экологическая подготовка
- 5.2 Контроль потока
- 5.3 реализация кода
- 6 Другое
- 6.1 Об аутентификации
- 6.2 Ошибка ошибки сегментации
- 6.3 Другие элементы управления
- 6.4 Описание структуры
- Система видеонаблюдения. Управление PTZ
- Netavis Observer — ПО IP-видеонаблюдения на базе Linux. Установка, настройка и небольшой взлом
- Netavis Observer — программный продукт для организации видеонаблюдения с помощью IP-камер на базе Linux-сервера.
Русские Блоги
Управление веб-камерой PTZ, разработанное по протоколу ONVIF (версия C)
В предыдущей статье (Python-ONVIF для достижения контроля клиента камеры карданного》), Введено использование python для достижения управления карданным движением камеры на основе протокола onvif, учитывая эффективность реализации встроенной стороны, все еще необходимо реализовать версию интерфейса на C / C ++, поэтому попробуйте эту работу. После почти недели броска я, наконец, настроил код, управляемый карданным протоколом onvif. В нем было бесчисленное количество ям. От белого, который ничего не знал об onvif, до успешной функции плавной настройки в конце, он все еще был полезным. Записано, чтобы уменьшить количество раз, чтобы войти в яму для других студентов, цель будет достигнута. Без лишних слов, перейдите непосредственно к теме
1 Предварительные знания
По поводу предыстории внедрения onvif, в интернете много информации, я не буду ее специально здесь расширять, раньше я также воспроизводил статью «Краткий обзор разработки камеры на основе протокола ONVIF«Общее введение в принципы onvif, иСюй Zhenping колонка блоггераЭто также очень подробно. Если вы не знаете об onvif, вы можете обратиться к его предыдущим статьям.
2 Процесс разработки
Сначала убедитесь, что сетевая камера поддерживает протокол onvif, и включите протокол. Метод настройки см. В разделе «Использование onvif тестового инструмента камеры Haikang》;
Затем используйте инструмент gsoap для генерации структуры кода onvif, напишите клиентскую программу для достижения управления PTZ, и процесс вызова клиентской программы будет подробно описан позже.
Чего я хочу добиться — это разработать клиент на встроенном Linux для управления PTZ-камерой веб-камеры. Другие платформы, такие как x86, windows и другие платформы, имеют похожие процессы, и аналогичные процессы также могут быть использованы.
Установка 3 gsoap
При использовании gsoap для генерации структуры кода onvif, в основном с использованием двух исполняемых файлов wsdl2h и soapcpp2, в каталоге gsoap / bin, официальное лицо скомпилировало исполняемые файлы на платформе win32 и macosx, но Linux нужно скомпилировать самостоятельно, поэтому мы Используйте метод компиляции исходного кода для генерации этих двух инструментов.
3.1 Экологическая зависимость
Перед компиляцией необходимо установить OpenSSL, чтобы получить файл wsdl2h с включенным SSL / TLS. Рекомендуется сначала удалить и переустановить SSL в системе, чтобы потом не сообщать об ошибках, удалить метод
Ссылка для скачивания:https://www.openssl.org/source/, Скачайте версию 1.0.2 и разархивируйте ее в домашний каталог
Введите каталог установки
3.2 Установить gsoap
После загрузки распакуйте его в домашний каталог, а затем установите в соответствии со следующими инструкциями.
Путь —with-openssl должен соответствовать пути в вашей среде. Если вы устанавливаете SSL в соответствии с приведенным выше исходным кодом, путь будет / usr / local / ssl / lib.
—host используется для указания компилятора, который генерирует инструмент Gsoap.Если он выполняется на x86, по умолчанию используется OK, то есть настройка не требуется.
—prefix используется для указания пути инструмента генерации, просто используйте значение по умолчанию.
Посмотреть путь установки
Найдите папку / usr / local / bin, найдите два исполняемых файла wsdl2h и soapcpp2 и скопируйте их в путь /home/gsoap-2.8/gsoap/bin для нашего удобства.
Структура сгенерированного кода 4 gsoap
После вышеуказанных шагов среда готова, и вы можете сгенерировать структуру кода
4.1 Подготовка файла wsdl
Загрузите файл wsdl, соответствующий предоставленной функции, на странице «Спецификация» официального сайта Onvif, например analytics.wsdl; devicemgmt.wsdl и т. Д. Сохраните ссылку WSDL напрямую и сохраните ее как файл wsdl. Поскольку я не уверен, какие файлы не нужны, я скачал их все и поместил их во вновь созданную папку wsdl в bin, включая файлы xsd, которые должны вызываться в этих wsdl,
В каталоге gsoap2.8 / gsoap / bin создайте новую папку wsdl для хранения всех только что загруженных файлов wsdl и xsd.
4.2 Генерация файла Onvif.h
На этом шаге мы используем wsdl2h. Мы хотим реализовать управление PTZ. Достаточно нескольких основных файлов wsdl. Я использовал device.wsdl, event.wsdl, media.wsdl, ptz.wsdl и cd. каталог bin, используйте следующую команду
Смысл каждой опции можно посмотреть через wsdl2h -help. Где -c для генерации чистого кода на c, по умолчанию это код на c ++, а -t это логотип typemap.dat.
Здесь есть небольшая хитрость. Если сетевые условия не являются хорошими, вы можете изменить путь к schemaLocation в файле wsdl и указать путь к локальному файлу при условии, что соответствующий файл загружен, что будет быстрее.
После успешного завершения операции создается файл onvif.h. Поскольку для камеры требуется проверка подлинности и аутентификация, в начало файла необходимо добавить следующий код
4.3 C генерация файла
Затем используйте файл onvif.h для создания файла c, используемым инструментом является soapcpp2, запустите следующий код
Среди них -c означает только генерировать код c, -x означает, что не генерировать файл примера XML, -I — включенный путь, после успешной операции будет сгенерирован следующий файл.
Создайте новую папку onvif и скопируйте все сгенерированные файлы в папку onvif. Содержимое файла * .nsmap остается тем же. Нам нужно сохранить только один файл PTZBingding.nsmap.
5 PTZ контроль
5.1 Экологическая подготовка
В папке onvif продолжайте добавлять файлы, перейдите в верхний каталог cd и напрямую используйте команду cp для копирования.
Окончательное содержимое файла в папке onvif выглядит следующим образом
5.2 Контроль потока
1. Через адрес службы устройства (сформированный как http: // xx / onvif / device_service) вызовите интерфейс функции GetCapabilities, чтобы получить URL-адрес мультимедиа;
2. Через Media URL, вызовите интерфейс функции GetProfiles, чтобы получить ProfileToken;
3. Заполните структуру _tptz__AbsoluteMove;
4. Вызвать интерфейс функции soap_call___tptz__AbsoluteMove, чтобы реализовать функцию поворота камеры;
5.3 реализация кода
Создайте новую папку PTZ в папке bin и создайте новый файл myptz.c со следующим содержимым
Создайте новый make-файл со следующим содержимым
Новый файл Makefile.inc
Затем запустите make, чтобы сгенерировать исполняемый файл PTZ в папке PTZ. Запустите этот файл, чтобы создать файл журнала в каталоге. Если сообщается об ошибке, вы можете просмотреть файл журнала. Обратите внимание, что если он развернут на встроенной стороне, вы не должны добавлять опцию -DDEBUG, в противном случае файл журнала будет становиться все больше и больше, что влияет на производительность платы.
6 Другое
6.1 Об аутентификации
Существует много интерфейсов onvif, для которых требуется аутентификация перед вызовом (то есть вызов функции soap_wsse_add_UsernameTokenDigest (& soap, NULL, USERNAME, PASSWORD)) и требуется повторная аутентификация после завершения аутентификации.Разработка клиентской программы для сетевых камер (IPC) с протоколом ONVIF (9): аутентификация (аутентификация)«Подводя итог, можно назвать только следующие интерфейсы без аутентификации, поэтому обратите внимание.
- GetWsdlUrl
- GetServices
- GetServiceCapabilities
- GetCapabilities
- GetHostname
- GetSystemDateAndTime
- GetEndpointReference
- GetRelayOutputOptions
6.2 Ошибка ошибки сегментации
Эта ошибка встречается очень часто, в основном из-за доступа к памяти без выделенного адреса, и ее легко пропустить при заполнении функции функции.структураВыделите память, код, сгенерированный gSoap, получит доступ к структуре, не зная об этом, и затем сообщит об ошибке сегментации, вам нужно обратить на это внимание
6.3 Другие элементы управления
Эта статья реализует абсолютный контроль PTZ, конечно, onvif также поддерживает другие режимы, конкретный код реализации может ссылаться наЭта ссылкаВыполнять
6.4 Описание структуры
Для описания структуры, пожалуйста, обратитесь кЭта статья。
Источник
Система видеонаблюдения. Управление PTZ
Система видеонаблюдения «Линия» осуществляет управление PTZ-камерами с помощью преобразователя интерфейса RS-485. IP PTZ-камеры управляются системой по Ethernet-интерфейсу. Возможно совместное использование поворотной и обзорной камер, которое позволяет автоматизировать переходы PTZ-камеры в зону обнаруженного движения. Данная функция программы полезна для охраняемых объектов с большой территорией. Вы можете ограничить доступ к управлению поворотными камерами любому пользователю. Просто уберите галочку в его настройках.
Поддержка основных протоколов управления (PTZ):
- Pelco D/Pelco P;
- Lilin v.1/Lilin v.2;
- Samsung SCC-C;
- Panasonic;
- Panasonic New;
- TOA;
- ZC-NAF27.
Запустив виджет, можно точно настроить положение камеры и перейти в предустановку. Все возможные предустановки имеют режим превью.
Реализована визуализация запомненных предустановок поворотных камер, позволяющая увидеть расположение камеры до начала перехода по выбранной предустановке. При сохранении предустановки программа автоматически делает превью, что позволяет пользователю визуально определить нужный переход.
Для удобства управления поворотными камерами реализован механизм автоматического перехода по запомненным предустановкам — «Обход». Переход осуществляется с настраиваемым интервалом по созданному пользователем списку предустановок. Количество доступных для создания обходов неограниченно.
Весь функционал управления PTZ-камерой доступен в веб-сервере. Вы можете переходить по предустановкам с превью.
Все клиенты для мобильных устройств позволяют управлять поворотными камерами. Где бы вы ни были, вы всегда сможете с помощью мобильного телефона управлять вашей камерой, переходить по предустановкам.
Источник
Netavis Observer — ПО IP-видеонаблюдения на базе Linux. Установка, настройка и небольшой взлом
Netavis Observer — программный продукт для организации видеонаблюдения с помощью IP-камер на базе Linux-сервера.
Netavis Observer написан на Java, так же используются такие продукты как Apache Tomcat, Webmin, Munin, Mysql.
Существует два варианта Netavis Observer — Bundled(поставляется в виде установочного iso-образа на базе Centos5 или Centos6) и Unbundled — набора rpm-пакетов для самостоятельной установки на сервер под управлением Centos или RedHat.
А теперь приступим к установке
Идем по ссылке и скачиваем Bundled-версию Netavis Observer в виде iso, записываем на болванку и вставляем ее в привод чтения компакт-дисков сервера.
Сразу после загрузки мы видим экран приветствия с вариантами дальнейших действий, и их не очень много:
— install options где options:
— без опций — стандартная установка на один жесткий диск.Все данные с жесткого диска будут удалены.
— hwraid — установка на железный RAID.
— nus — установка сервера событий и без архива.
— part — установка с возможностью ручной разметки дисков.
— nlis — установка без хранения архива на локальных дисках.Хранилища архивов монтируются по NFS или SAMBA.
— repair — восстановление системы после сбоя.
Наш выбор — boot: install Далее — стандартная процедура установки Centos5. После окончания установки соглашаемся перезагрузиться. После загрузки операционной системы видим приглашение ввести логин admin для завершения установки системы.
После чего нажимаем Enter, и далее 0 для подтверждения завершения установки.Соглашаемся с условиями лицензионного соглашения, введя yes.
Далее вводим пароль для пользователя admin:
На этом установка закончена и можно перезагрузиться, предварительно запомнив или записав, по какому адресу находится интерфейс администратора и клиента:
— 192.168.0.5:8000 — интерфейс администратора — сильно обрезанный вариант WEBMIN ( для входа используем логин admin и заданный в начале установке пароль).
— 192.168.0.5 -интерфейс клиента Netavis Observer ( для входа используем логин admin и заданный в начале установке пароль).
Запускаем браузер (проверено в свежих Firefox и Chrome, а также в IE7) и вводим адрес клиента Netavis Observer — в данном случае — 192.168.0.5
Важно! — для работы клиента требуется установленная Java и ее поддержка должна быть активирована в настройках браузера.
Соответственно при входе в интерфейс Netavis сначала появится вот такая страница:
и если с Явой все в порядке можно выбрать язык интерфейса и нажать Start
На следующем скриншоте все понятно — можно запустить клиент из браузера, установить клиента на локальный компьютер под управлением Windows, а так же на смартфоны под iOS(эту возможность не тестировал), а так же посмотреть документацию или зайти в интерфейс Настройщика под логином admin и паролем admin.
Но вернемся назад и запустим( или поставим локально) клиент Netavis Observer.И первое что мы видим — окно, в котором предлагается лицензировать программу — и в нем четыре пункта:
— Запуск без лицензии — обрезанный функционал, даже камеру не добавить.
— Запуск с демо-лицензией — можно добавить камеру, но периодически будет выкидывать из программы.
— Запрос лицензии в зависимости от количества камер, пользователей и прочих плюшек с официального сайта.
— Непосредственный ввод лицензионного ключа.
Нас интересует последний пункт, так как лицензионный ключ в наличии.Вводим ключ, нажимаем ОК и под полями ввода ключа появляется сообщение что ключ сохранен на сервере.Закрываем окно лицензирования и запускаем клиент повторно.
После запуска появляется окно авторизации — логин и пароль согласно документации: admin/admin
и вот наконец интерфейс клиента Netavis Observer:
В какой то момент выяснилось, что установленных в сервер жестких дисков не хватает для постоянной записи архива по каждой камере на 1 месяц.
Были приобретены жесткие диски требуемой емкости и после прочтения документации был уяснен процесс добавления и замены жестких дисков в систему.Для этого недостаточно иметь доступ к интерфейсу клиента, необходим доступ к консоли управления системой — согласно документации нужно зайти по SSH на сервер под пользователем admin и установленным для него паролем.
Это можно выполнить командой ssh -l admin 192.168.0.5 и ввести пароль.Также можно просто залогиниться в консоль локально.
Согласно документации процедура добавления проста как три рубля — выключаем сервер, подключаем чистый, неформатированный жесткий диск, включаем сервер и залогиниваемся в систему.
Далее набираем 27 для проверки на предмет, определился ли жесткий диск или нет, потом набираем 23 и дожидаемся окончания процедуры создания файловой системы, создания точки монтирования и пр.
После рестарта сервера и запуска системы новый жесткий диск виден в системе и готов к записи на него архива.
А на случай, если один из жестких дисков вышел из строя и его необходимо заменить, следуем другой процедуре: выключаем сервер, меняем неисправный жесткий диск на исправный, включаем сервер и логинимся в консоль.там сначала смотрим статус жестких дисков, а потом набираем 24 — Configure replaced disk и ждем окончания процедуры.
Важно: Новый жесткий диск должен быть неформатированным, и подключать его необходимо на то же место, где стоял неисправный жесткий диск.
Ищем проблему — и находим ее
Однажды нужно было добавить два жестких диска и изъять один малой емкости.И так как сервер уже был в практически в производственной эксплуатации, захотелось совместить две процедуры — добавления жесткого диска и замены одного жесткого диска другим.
После загрузки системы и логина в консоль по запарке решил начать с процедуры добавления жесткого диска вместо замены одного жесткого диска на другой.Система добавила два новых жестких диска в систему, а менять жесткий диск уже было не на что.
Результатом таких поспешных действий стала ошибка, отображающаяся в интерфейсе клиента рядом с нагрузкой на процессор — Degraded recording, и ошибочное значение пространства, доступного системе ровно на столько, сколько было гигабайт на замененном жестком диске. При этом в консоли этот жесткий диск отображался как неиспользуемый — пункт 25 — Show unusable disks.
Никакие действия в консоли управления, откат к прежней конфигурации и попытки восстановить систему с установочного диска к успеху не приводили. Документация на этот счет советовала переставить систему с нуля или обратиться к дилеру.
Решение проблемы
Было решено создать аналогичную проблему на виртуальной машине. Это с легкостью удалось.
Под рутом зайти в консоли не получилось — пароль не известен. Загружаемся с live-cd Xubuntu на этой виртуальной машине и начинаем изучение внутренностей системы.
В системе обнаружились следующие интересные разделы:
— / — собственно корневой раздел.
— /netavis — раздел, где собственно находится система Netavis
— /var/lib/mysql — раздел, где находится каталог базы данных.
Так же есть разделы Images1, Images3, Images4 которые монтируются в /Images
Первым делом смотрим файл /etc/shadow на предмет списка пользователей и их паролей.
Нам интересны следующие пользователи:
root:$1$UEe5kAv4$nWyqBmcmg3P.kM/ZB/s/2.:16086:0:99999:7.
arms:$1$gKURq9W3$oYJWwNw9hKtJBmoVpkFju/:16086:0:99999:7.
admin:$1$0.3jcW1k$i6QabIE2yN0hCcTmrQ7j80:16086:0:99999:7.
netavis:$1$SQ4LOu8J$Gp6PEphFVKucMyQbkm55f1:16086:0:99999:7.
chpass:$1$CWDhlmfR$b/IoN0Inx/A6eT04hivM/.:16086:0:99999:7.
Видно что пароль рута есть, но не совпадает с установленным нами паролем для admin-а.
Единственный выход — поменять пароль root-а на известный нам пароль admin-а.Поэтому стираем хэш пароля рута и меняем на хэш пароля admin-а, после чего сохраняем файл, отмонтируем все файловые системы и перезагружаемся в Netavis.
Далее логинимся под root-ом с известным нам паролем от admin-а и начинаем осматриваться уже из под живой системы с правами root-а.
]# fdisk -l
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 664 5229157+ 83 Linux
/dev/sda3 665 1315 5229157+ 83 Linux
/dev/sda4 1316 2635 10602900 5 Extended
/dev/sda5 1316 1966 5229126 83 Linux
/dev/sda6 1967 2097 1052226 82 Linux swap / Solaris
/dev/sda7 2098 2635 4321453+ 83 Linux
/dev/sdb1 1 1045 8388607+ ee EFI GPT
/dev/sdc1 1 1045 8388607+ ee EFI GPT
]# mount
/dev/sda7 on /Images/Images1 type xfs (rw,noatime,nodiratime,logbufs=8,logbsize=256k,allocsize=256k)
/dev/sdb1 on /Images/Images3 type xfs (rw,noatime,nodiratime,logbufs=8,logbsize=256k,allocsize=256k)
/dev/sdc1 on /Images/Images4 type xfs (rw,noatime,nodiratime,logbufs=8,logbsize=256k,allocsize=256k)
То есть присутствует запись о замененном жестком диске, которого фактически нет в сервере. Удаляем точку монтирования Images2 из fstab, сохраняем и перезагружаемся.
После загрузки запускаем клиент и идем в раздел System administration — System information и видим что ошибка не исчезла, значит информация о используемых дисках хранится где то… и это наверняка Mysql.
Разбираемся с Mysql.
Значит нужно подключиться к серверу базы данных, а для этого нужно знать логины и пароли для доступа. Для этого идем в /var/lib/mysql и смотрим какие базы есть в наличии.
Вот список баз:
— arms
— mysql
— test
База mysql — системная, в ней можно посмотреть список пользователей сервера и хэши паролей. Итак — окончательный путь до файла с интересующей нас информацией — /va/lib/mysql/mysql/user.MYD — открываем файл в любимом редакторе и видим что пользователей не так уж и много — root и arms и хэш пароля у них одинаковый — 2f36c5e96b75ee48, к тому же старого типа, что подтверждается просмотром конфига Mysql-сервера, который расположен по пути /etc/my.cnf:
…
old_passwords=1
…
Дело за малым — или угадать пароль или брутфорсить, что могло занять некоторое время. Начал с попытки угадывания пароля, подставляя известные пароли, пустые пароли, пароли, совпадающие с логинами… удача улыбнулась почти сразу.
Для обоих логинов (root и arms) пароль — arms
Далее настроим SSH-туннель между сервером Netavis и компьютером, на котором запустим один из графических инструментов для администрирования базы данных Mysql, например MySQL Workbench или Emma или любой другой, которым вы обычно пользуетесь.
Итак, создаем туннель:
— На Linux — командой ssh -L 3306:localhost:3306 root@192.168.0.5, вводим пароль, который мы скопировали с пользователя admin.
— Универсальный вариант — с помощью Putty:
Далее запускаем например Emma, настраиваем на соединение с localhost:3306 и логином/паролем arms/arms и идем прямиком в базу, с которой и работает Netavis — arms.
Пользуясь поиском текста по всей базе по ключевому слову «Images2» (ведь именно этот раздел мы и пытаемся убрать из настроек программы) получаем результат в виде таблицы Directories, в которой и хранится искомая информация:
Удаляем запись с информацией о Images2 и перезагружаем сервер.
После загрузки запускаем клиент и идем в раздел System administration — System information и видим что ошибка исчезла!
Архив пишется монолитно, ошибка Degraded recording из интерфейса клиента исчезла, как и информация о неиспользуемом жестком диске в консоли управления. Доступное файловое пространство отображается корректно.
Источник