Перейти к основному содержимому

Назначение

VISCA — это профессиональный протокол управления PTZ-видеокамерами. Он был разработан Sony для использования в камерах видеонаблюдения.

Аппаратный интерфейс: RS-232. Управление через RS-232 — наследие аналогового прошлого, когда камеры управлялись отдельно от видеосигнала, который передавался по коаксиальному кабелю.

VISCA структура сообщения

Базовая единица связи VISCA называется пакетом.

Первый байт пакета называется заголовком и содержит адреса отправителя и получателя.

Например, заголовок пакета, отправленного на устройство (с адресом 1) от контроллера (адрес 0) представляет собой:

10000001

где 1000.00012 в двоичной — это 8116 в шестнадцатеричной СС. Пакет, отправленный на устройство (адрес 2) — 1000.00102 = 8216.

Рисунок 1.

Заголовок ответного пакета от устройства, которому присвоен адрес 1, равен 1001.00002 = 9016.

Пакет от устройства, которому присвоен адрес 2, равен A016.

Некоторые командные настройки могут быть отправлены на все устройства одновременно (широковещательная передача).

Функция широковещательной передачи недоступна для передачи VISCA по IP. В случае широковещательной передачи заголовок должен быть 88 в шестнадцатеричном формате. Когда терминатор равен FF16, это означает конец пакета.

Временная диаграмма

Поскольку обработка команды VISCA может выполняться максимум один раз в вертикальном (V) цикле, для возврата подтверждения/завершения запроса требуется максимум 4V-цикла. Вертикальный цикл подразумевает один полукадр. Если необходимо отправить несколько команд последовательно, нужно сначала дождаться подтверждения или сообщения об ошибке от предыдущей команды, прежде чем отправлять следующую.

RxD (Receive Data — приём данных)

TxD (Transmit Data — передача данных)

Рисунок 2.

Команды и запрос

Команда — отправляет команды на устройство

Запрос — используется для запроса о текущем состоянии устройства

8X QQ RR … FF # Структура пакета

X — адрес устройства (X = 1 для VISCA по IP)

QQ — 01 (Команда), 09 (Запрос)

RR — код категории

Виды сообщений

ACK сообщение

  • возвращается устройством, когда оно получает команду

  • в случае запроса не возвращается

    Рисунок 3.

Сообщение о завершении

  • возвращается устройством по завершении выполнения команд или запросов
  • данные ответа на запрос содержатся после 3-го байта пакета
  • если ACK сообщение отсутствует, номер сокета будет содержать 0

Сообщение об ошибке

  • когда команда или запрос не могут быть выполнены или завершены с ошибкой, то

вместо сообщения о завершении возвращается сообщение об ошибке:

Рисунок 4.

ACK/Completion Messages

КомандыКод командыКомментарии
ACKz0 4y FF (y: Socket No.)Возвращается, когда команда принята.
Завершениеz0 5y FF (y: Socket No.)Возвращается, когда команда была выполнена.

Error Messages

КомандыКод командыКомментарии
Синтаксическая ошибкаz0 60 02 FFВозвращается, когда формат команды отличается или когда команда содержит недопустимые параметры
Командный буфер заполненz0 60 03 FFНе удалось принять команду, которая получена во время выполнения двух командв данный момент.
Команда отмененаz0 6y 04 FF (y: Socket No.)Возвращается, когда команда отменяется.
Нет сокетаz0 6y 05 FF (y: Socket No.)Возвращается, когда ни одна команда не выполняется в сокете или когда указан недопустимый номер сокета.
Команда не выполняетсяz0 6y 41 FF (y: Socket No.)Возвращается, когда команда не может быть выполнена из-за текущих условий. Например, когдав режиме автоматической фокусировки принимается команда для управления ручной фокусировкой.

Номер сокета

Когда команды отправляются на устройство, обратно отправляется сообщение о завершении или сообщения об ошибке, далее можно слать следующую команду. Устройство имеет два набора буферов для команд, так что может быть получено до двух команд.  Когда устройство получает команды, оно уведомляет, какой буфер был использован, используя номер сокета в ACK-сообщении. Таким образом, ACK-сообщение и сообщение об ошибке указывают, какая команда завершилась. Даже когда используются два буфера, команда управления устройством и некоторые запросы могут быть выполнены. В таком случае сообщение ACK отсутствует и возвращается только сообщение о завершении сокета с номером 0. Таким образом, номер сокета — это просто номер команды.

VISCA over IP

С функцией VISCA over IP можно управлять камерой с помощью VISCA на контроллере, оснащенном возможностями IP-связи по локальной сети. Вы можете одновременно подключать к сети до 5 контроллеров.

Характеристики VISCA по IP:

Интерфейс: RJ-45 10Base-T/100Base-TX

Интернет-протокол: IPv4

Транспортный протокол: UDP

IP-адрес: Устанавливается командой настройки IP-карты

Адрес порта: 52381

Рисунок 5.

Рисунок 6.

Контроллеры и периферийные устройства подключены к однонаправленному кольцу. При IP-соединении контроллеры и периферийные устройства подключаются по шине через локальную сеть.

Заголовок сообщения (8 байт) и полезной нагрузки (от 1 до 16 байт):

Рисунок 7.

Payload type:

Содержится в первых двух байтах сообщения (байт 0 и байт 1). Полезная нагрузка содержит различную информацию о командах и запросах.

Команды VISCA

Команды протокола VISCA используются для управления камерой, получения информации о её настройках и получения информации о статусе отправки команды.

Команды VISCA разделены на:

  • Команды возврата
  • Команды управления
  • Команды запроса
  • Значения поворота/наклона камеры, масштабирования и экспозиции

С подробным списком команд можно ознакомиться по данной ссылке:

Пример реализации

С помощью данной библиотеки, реализующей функционал протокола VISCA over IP, можно задать камере поворачиваться влево и вправо, как если бы она качала головой:

import time
from visca_over_ip import Camera

cam = Camera('192.168.0.123') # IP-адрес камеры

while True:
cam.pantilt(pan_speed=-12, tilt_speed=0)
time.sleep(1) # wait one second
cam.pantilt(pan_speed=12, tilt_speed=0)

Вложения