IP-камеры, каналы, шаблоны, входы, выходы, сервера, зоны SIMT и многие другие объекты собраны в дерево. Дерево объектов можно увидеть в интерфейсе оператора, отобразив в шаблоне Дерево объектов (CMS) или добавить в скрипт нажав кнопку Вставить -> Объекты в редакторе скриптов.
Все объекты объединены в классы:
- Folder - класс родительских объектов ("Channels", "IP Devices", "Templates"), которым принадлежат все остальные классы;
- Server - класс подключенных серверов;
- IP Device - класс подключенных IP-устройств;
- Channel - класс подключенных каналов;
- GPIO Input - класс тревожных входов;
- GPIO Output - класс тревожных выходов;
- OperatorGUI - класс интерфейса оператора;
- Template - класс шаблонов.
Чтобы запросить список объектов класса, необходимо вызвать функцию objects_list().
alert(objects_list("Channel"))
В сообщении будет показан массив, состоящий из объектов класса "Channel".
[
('AC-D1050 1', 'Qmez0La2', 'Channel', 'p0aDXZdXC'),
('DVS Full 8', 'nBSAqWT1', 'Channel', 'p0aDXZdXC'),
('DVS Full 1', 'xeLzkjpd', 'Channel', 'p0aDXZdXC')
]
В данном примере ответ содержит:
- 'AC-D1050 1' - имя объекта;
- 'Qmez0La2' - уникальный guid объекта;
- 'Channel' - класс объекта;
- 'p0aDXZdXC' - guid родительской объекта, которому принадлежит данный объект.
Кроме этого, у каждого объекта есть состояние и методы, то есть функции которые можно вызвать.
Найти объект в скрипте очень просто:
obj = object("Камера 1")
Состояние объекта можно узнать вызовом функции state(). У каждого объекта есть несколько состояний (вектор состояния). Например у канала есть состояния "motion", "signal", "recording",
"recording_on_device".
m = obj.state("motion")
if m=="No Motion":
alert("Движения нет")
Чтобы выяснить, какие состояния есть у объекта, нужно вызвать state() с произвольной строкой. Текст ошибки при выполнении этой операции будет содержать названия элементов в векторе состояний.
Чтобы узнавать об изменениях состояния, нужно использовать активацию по состоянию объекта:
cam1 = object("Камера 1")
def f():
message("Движение: %s" % cam1.state["motion"])
cam1.activate_on_state_changes(f)
Кроме состояния, можно выяснить имя, идентификатор, класс объекта.
alert(obj.name) alert(obj.guid) alert(obj.class_name)
Список методов также можно узнать при помощи функции dir(), которая распечатывает содержимое любой структуры в Python.
alert(dir(obj))
cam1 = object("Камера 1")-
Включить запись архива канала
obj.manual_record_start()
-
Выключить запись архива канала
obj.manual_record_stop()
-
Получить положение поворотной камеры
obj.ptz_position_query()
Значения сохраняются в настройках камеры:
settings("channels/[GUID_канала]/ptz/current_pan") settings("channels/[GUID_канала]/ptz/current_tilt") settings("channels/[GUID_канала]/ptz/current_zoom") -
Переместить поворотную камеру на предустановку
[preset]obj.ptz_preset([preset])
-
Включить запись
obj.record(True or False)
-
Выключить ручную запись архива канала
obj.record_off()
-
Включить ручную запись архива канала
obj.record_on()
-
Сохранить скриншот
obj.screenshot()
-
Сохранить скриншот из архива
obj.screenshot_ex("[timestamp]", "[directory]")[timestamp]- время кадра из архива;[directory]- директория на сервере, в которую сохраняется скриншот. -
Сохранить скриншот из архива
obj.screenshot_v2("[time]", "[filename]", "[directory]", [make_thumb])[time]- время кадра из архива;[filename]- имя сохраняемого скриншота;[directory]- директория на сервере, в которую сохраняется скриншот;[make_thumb]- создать миниатюру (0 - нет). -
Добавить текст на видео
obj.set_watermark("[text]", [text_pos], [time_pos])[text]- произвольный текст;[text_pos]и[time_pos]- угол расположения текст и времени: 1-левый верхний, 2-правый верхний, 3-левый нижний, 4-правый нижний. -
Экспорт основного/дополнительного потока из архива канала
obj.export_archive("[start_time]", "[end_time]", "[filename]", "[options]")[start_time]и[end_time]- время начала и конца экспортируемого фрагмента архива, в форматеYYYYMMDD_HHMMSS;[filename]- имя сохраняемого файла;[options]- дополнительные опции, передаваемые в формате"name" : value:"is_hardware"- экспортировать архив с устройства (0 - нет)"want_ss"- экспортировать дополнительный поток (0 - нет)"video_codec"- перекодировать видео в кодек ("MPEG4" или "WMV")"video_bitrate"- перекодировать с использованием битрейта (значение в кбит/с)"video_resolution"- изменить разрешение видео ("2560x1920", "2048x1536", "1920x1080", "1600x1200", "1280x1024", "1280x960", "1280x720", "1024x768", "800x600", "720x576", "704x576", "640x480", "352x288", "320x240", "176x144")"audio_codec"- кодек для аудио ("PCM")"audio_bitrate"- битрейт для аудио (64, 128) кбит/с"need_channel_name_watermark"- вписать в видео название канала (0 - нет)"need_timestamp_watermark"- вписать в видео время съёмки (0 - нет)"need_fliprotate"- использовать настройки поворота изображения из канала (0 - нет)"watermark_need_figures"- добавить фигуры (0 - нет)"watermark_align"- расположение вписанного текста (1 - верх-лево, 2 - верх-право, 3 - низ-лево, 4 - низ-право)
obj = object("Интерфейс оператора maskaev-pc")-
Экспорт основного/дополнительного потока из архива канала
obj.archive_export("[channel]", "[start_time]", "[end_time]", "[filename]", [on_device]) obj.archive_export_ss("[channel]", "[start_time]", "[end_time]", "[filename]", [on_device])[channel]- имя канала или его GUID;[start_time]и[end_time]- время начала и конца экспортируемого фрагмента архива;[filename]- имя сохраняемого файла;[on_device]- экспорт архива с устройства (не 0). -
Открыть архив канала
obj.archive_open_inplace("[channel]", "[start_time]")[channel]- имя канала или его GUID;[start_time]- время позиционирования. -
Добавить каналы на монитор
obj.assign_channels("[csv_channels]", [monitor_n])[csv_channels]- список каналов через запятую;[monitor_n]- номер монитора. -
Изменить настройки внешнего вида окна камеры, точно также как и при помощи диалогового окна настроек внешнего вида.
obj.change_view_settings("[name]", "[value]")[name]- имя настройки:

"opts_[GUID_канала]_use_common" "opts_[GUID_канала]_figures_on" "opts_[GUID_канала]_figures_mode" "opts_[GUID_канала]_border_mode" "opts_[GUID_канала]_keep_ratio" "opts_[GUID_канала]_show_osd" "opts_[GUID_канала]_show_channel_name" "opts_[GUID_канала]_show_channel_bold" "opts_[GUID_канала]_switch_to_ss_pixels" "opts_[GUID_канала]_turtle_enable"
Подсказка
Если вам необходимо изменить настройки внешнего вида всех камер, то вместо
[GUID_канала]используетеcommon.Например:
obj = object("Интерфейс оператора maskaev-pc") obj.change_view_settings("opts_common_figures_on", "1") obj.change_view_settings("opts_common_figures_mode", "3") obj.change_view_settings("opts_syQURNtf_show_osd", "1") obj.change_view_settings("opts_syQURNtf_show_channel_name", "0")[value]- значение настройки. -
Включить/выключить экономичный режим
obj.eco_start("[channel]", [monitor_n]) obj.eco_stop("[channel]", [monitor_n])[channel]- имя канала или его GUID;[monitor_n]- номер монитора. -
Включить/выключить управление PTZ-камерой
obj.ptz_start("[channel]", [monitor_n]) obj.ptz_stop("[channel]", [monitor_n])[channel]- имя канала или его GUID;[monitor_n]- номер монитора, на котором будет производиться управление PTZ-камерой. -
Управлять PTZ-камерой
obj.ptz_focus_auto("[channel]", [monitor_n]) obj.ptz_iris_auto("[channel]", [monitor_n]) obj.ptz_set_coordinates("[channel]", [monitor_n], [pan], [tilt], [zoom]) obj.ptz_set_focus("[channel]", [monitor_n], [speed]) obj.ptz_set_iris("[channel]", [monitor_n], [speed]) obj.ptz_set_zoom("[channel]", [monitor_n], [speed]) obj.ptz_start("[channel]", [monitor_n]) obj.ptz_stop("[channel]", [monitor_n]) obj.ptz_turn_x("[channel]", [monitor_n], [speed_pan]) obj.ptz_turn_y("[channel]", [monitor_n], [speed_tilt][channel]- имя канала или его GUID;[monitor_n]- номер монитора, на котором будет производиться управление PTZ-камерой;[pan], [tilt], [zoom]- координаты поворота (дробное);[speed], [speed_pan], [speed_tilt]- скорость поворота (целое). -
Отобразить монитор поверх всех окон
obj.raise_monitor([monitor_n])
[monitor_n]- номер монитора. -
Сохранить скриншот из архива
obj.screenshot("[channel]", "[time]", "[filename]") obj.screenshot_ex("[channel]", "[time]", "[filename]", "[directory]", [make_thumb])[channel]- имя канала или его GUID;[time]- время кадра из архива;[filename]- имя сохраняемого скриншота;[directory]- директория на сервере, в которую сохраняется скриншот;[make_thumb]- создать миниатюру (0 - нет). -
Отобразить канал или шаблон на мониторе
obj.show("[name]", [monitor_n]) obj.show_channel("[name]", [monitor_n]) obj.show_template("[name]", [monitor_n]) obj.show_template_by_guid("[name]", [monitor_n])[name]- имя канала или шаблона;[monitor_n]- номер монитора. -
Показать архив канала на мониторе или в шаблоне
obj.show_archive("[name]", [monitor_n], "[start_time]", "[end_time]")[name]- имя канала или шаблона;[monitor_n]- номер монитора;[start_time]и[end_time]- время начала и конца фрагмента архива. -
Отобразить html-страницу на мониторе или в шаблоне
obj.show_html("[source]", "[url]") obj.show_html_on_monitor([monitor_n], "[source]", "[url]") obj.show_html_on_templete([monitor_n], "[name]", "[source]", "[url]")[monitor_n]- номер монитора;[name]- имя шаблона;[source]- идентификатор минибраузера;[url]- адрес отображаемой html-страницы. -
Обновить активный монитор
obj.update_active_monitor([csv_channels])
[csv_channels]- список каналов через запятую.

