Перейти в хранилище документации
Обратиться в техническую поддержку
Предыдущая страница Следующая страница
Поток из видеоархива присылается в таком же формате, как и живое видео.
Важные поля видеофрейма при работе с архивом:
file.name – значениие этого поля нужно хранить для навигации внутри архива (покадровый просмотр, просмотр по записям и т.п.)
frm.total – сколько всего фреймов в записи
frm.id – id текущего фрейма в записи (начинается с нуля)
Информация о записях в архиве передаётся посредством Msg одним из следующих способов:
Msg=start\n
type=CAM\n
id=1\n
action=SET_INTERVALSREC\n
intervals=14-05-08 14:06:25 14-05-08 14:06:26;14-05-08 14:06:30 14-05-08 14:06:31;\n
Msg=end\n
Msg=start\n
type=CAM\n
id=1\n
action=SET_INTERVALSREC\n
intervals=14:06:25 14:06:26;14:06:30 14:06:31;\n
date=14-05-08
Msg=end\n
В обоих случаях в сообщениях находится одна и та же информация, только по-разному отформатированная.
Информация о начале и конце записи разделены пробелом, информация о записях разделена ";"
день-месяц-год часы:минуты:секунды
14-05-08 14:06:25 14-05-08 14:06:26
Если значение параметра intervals пустое, значит за заданный день нет записей.
Имея в наличии список записей в архиве, file.name, file.id и набор команд ниже, можно организовать подобие плеера на клиенте (пауза, стоп, проигрывание вперёд-назад и т.п.).
GET
http://example.com:[port][/somecontext]/secure/video/action.do?version=4.7.8.0&sessionid=29101F1&cam.id=5&command=arc.enter&intervals=true&date=15.05.10 09:51:07&login=XXX&password=YYY
command=arc.enter – команда входа в архив.
date – дата, архив за которую требуется получить.
intervals – присылать информацию о записях в архиве (начало и конец записи).
После входа в архив клиенту присылается сообщение с интервалами и 1 (один кадр).
GET
http://example.com:[port][/somecontext]/secure/video/action.do?version=4.7.8.0&sessionid=29101F1&cam.id=5&command=arc.play&file.name=C%3A%5CVIDEO%5C20-05-10%2016%5C0._01&frame.id=0&login=XXX&password=YYY
file.name берётся из пришедшего видеофрейма, frame.id - фрейм, с которого требуется проигрывать архив.
Присылается последовательность фреймов из данного отрезка записи, и на этом проигрывание обрывается (отследить это можно по frame.id).
GET
http://example.com:[port][/somecontext]/secure/video/action.do?version=4.7.8.0&sessionid=29101F1&cam.id=5&command=arc.playnonstop&file.name=C%3A%5CVIDEO%5C20-05-10%2016%5C0._01&frame.id=0&login=XXX&password=YYY
Команда аналогична "arc.play", но проигрыватель не останавливается на одной записи, а продолжает проигрывать записи архива дальше. Не следует забывать обновлять fila.name и интегвалы, которые будут периодически меняться.
Проигрывание прекращается , когда все записи вплоть до конца архива проиграны.
GET
http://example.com:[port][/somecontext]/secure/video/action.do?version=4.7.8.0&sessionid=29101F1&cam.id=5&command=arc.prev&file.name=C%3A%5CVIDEO%5C20-05-10%2016%5C0._01&frame.id=0&login=XXX&password=YYY
Если указывается параметр frame.id, то система ищет предыдущий фрейм в архиве и присылает его. Если этот параметр не указан, то присылается первый фрейм предыдущей записи.
В ответ присылается только один фрейм.
Примечание.
Если достигнуто начало архива и больше нет записей, на которые можно было бы переходить, то присылается сообщение:
Msg=start\n
type=CAM\n
id=1\n
action=ARCH_ERROR\n
Msg=end\n
GET
http://example.com:[port][/somecontext]/secure/video/action.do?version=4.7.8.0&sessionid=29101F1&cam.id=5&command=arc.next&file.name=C%3A%5CVIDEO%5C20-05-10%2016%5C0._01&frame.id=0&login=XXX&password=YYY
Если указывается параметр frame.id, то система ищет следующий фрейм в архиве и присылает его. Если этот параметр не указан, то присылается первый фрейм следующей записи.
В ответ присылается один фрейм.
Примечание.
Если достигнут конец архива и нет больше записей, на которые можно было бы переходить, то присылается сообщение:
Msg=start\n
type=CAM\n
id=1\n
action=ARCH_ERROR\n
Msg=end\n
GET
http://example.com:[port][/somecontext]/secure/video/action.do?version=4.7.8.0&sessionid=29101F1&cam.id=5&command=arc.stop&login=XXX&password=YYY
GET
http://example.com:[port][/somecontext]/secure/archive/CAM:2/[2011-12-30|2011-12][?splitTreshold=50]
splitTreshold – если разница между окончанием предыдущей записи и началом следующей меньше этого числа (в миллисекундах), то записи объединяются в одну. Чтобы никакие записи не объединялись, необходимо указать splitTreshold=0. Значение данного параметра по умолчанию равно 50.
Всё время интерпретируется как локальное для сервера.
Пример. Записи за день (30 декабря 2011 года):
http://example.com:[port][/somecontext]/secure/archive/CAM:2/2011-12-30/
http://example.com:[port][/somecontext]/secure/archive/CAM:2/2011-12-01/
Пример ответа:
XML:
<?xml version="1.0" encoding="UTF-8"?>
<days>
<day>
<id>2011-09-01T00:00:00-05:00</id>
<records>
<from>2011-09-01T00:00:00-05:00</from>
<to>2011-09-01T00:00:35-05:00</to>
</records>
<records>
<from>2011-09-01T00:00:35-05:00</from>
<to>2011-09-01T00:01:10-05:00</to>
</records>
</day>
</days>
JSON:
[ {
"id" : "2011-09-01T00:00:00-0500",
"records" : [ {
"from" : "2011-09-01T00:00:00-0500",
"to" : "2011-09-01T00:00:35-0500"
}, {
"from" : "2011-09-01T00:00:35-0500",
"to" : "2011-09-01T00:01:10-0500"
}, {
"from" : "2011-09-01T01:26:24-0500",
"to" : "2011-09-01T01:26:59-0500"
} ]
} ]
Пример. Записи за месяц (показывает, в какие дни сентября есть записи):
http://example.com:[port][/somecontext]/secure/archive/CAM:2/2011-12/
XML:
<?xml version="1.0" encoding="UTF-8"?>
<days>
<day>
<id>2011-09-02T00:00:00-05:00</id>
</day>
<day>
<id>2011-09-03T00:00:00-05:00</id>
</day>
<day>
<id>2011-09-05T00:00:00-05:00</id>
</day>
</days>
JSON:
[ {
"id" : "2011-09-01T00:00:00-0500",
"records" : [ ]
}, {
"id" : "2011-09-03T00:00:00-0500",
"records" : [ ]
}, {
"id" : "2011-09-01T00:00:00-0500",
"records" : [ ]
} ]
Если записей нет, то присылается
XML:
<days/>
JSON:
[]