Управление воспроизведением видео
Средства управления воспроизведением соответствуют стандартам RTSP и спецификации потоковой передачи ONVIF (https://www.onvif.org/profiles/specifications/).
Сводка записей
Можно получить сводку всех записанных видео, доступных на устройстве, с помощью команды GetRecordingSummary. Это необязательно, но таким способом можно получить полезную информацию до проведения поиска.
Можно использовать GetRecordingSummary и (или) GetMediaAttributes, чтобы получить метку времени первой и последней записи, но сначала нужно включить параметр Использовать конфигурацию камер во встраиваемом расширении Milestone Open Network Bridge в XProtect Management Client.
Создайте прокси-сервер для службы RecordingSearch с помощью конечной точки службы, полученной от GetServices. Создайте объекты запроса и ответа, затем вызовите GetRecordingSummary.
SearchBindingProxy searchProxy( &soapSearch );
std::string searchEndpoint = "http://" + host + "/onvif/recording_search_service";
_tse__GetRecordingSummary tse__GetRecordingSummary;
_tse__GetRecordingSummaryResponse tse__GetRecordingSummaryResponse;
result = searchProxy.GetRecordingSummary( searchEndpoint.c_str(), NULL,
&tse__GetRecordingSummary, &tse__GetRecordingSummaryResponse );
Поиск записей
Метод FindRecordings службы «Поиск» запускает асинхронный поиск на камере. FindRecordings возвращает токен со ссылкой на результаты поиска. Даже если будет найдена только одна запись, поиск поможет получить ссылку на эту запись.
Отправьте запрос FindRecordings со следующими обязательными параметрами:
SearchScope>IncludedSources>Token― необходимо указать номер GUID камерыSearchScope>RecordingInformationFilter― строка со следующими параметрами:timestamp(в формате UTC)maxTimeBefore(время до нужной метки времени в миллисекундах)maxCountBefore(максимальное количество дорожек до запрошенной метки времени)maxTimeAfter(время после нужной метки времени в миллисекундах)maxCountAfter(максимальное количество дорожек после запрошенной метки времени)
Пример:
boolean(//Track[TrackType = “Video”]),2016-12-06T08:07:43Z,99999999,20,99999999,20
Вы получите ответ с SearchToken, который будет уникальным для критериев поиска.
Передайте SearchToken в GetRecordingSearchResults , и вы получите список со всеми дорожками, отвечающими критериям поиска.
Запуск воспроизведения
При просмотре воспроизведения видео скорость по умолчанию равна 1 (нормальное воспроизведение вперед).
Воспроизведение запускается методом RTSP PLAY. Можно указать диапазон. Если диапазон не указан, поток воспроизводится с начала и до конца или, если приостановить поток, начинается с того места, где было приостановлено. В этом примере выражение Range: npt=3-20 дает серверу RTSP команду начать воспроизведение с третьей секунды и до 20-й секунды.
Пример:
PLAY rtsp://user:1234@test01:554/vod/943ffaad-42be-4584-bc2c-c8238ed96373 RTSP/1.0
CSeq: 123
Session: 12345678
Require: onvif-replay
Range: npt=3-20
Rate-Control: no
Воспроизведение назад
Устройства ONVIF могут поддерживать воспроизведение назад. Для указания о воспроизведении назад используется поле заголовка Scale с отрицательным значением. Например, для воспроизведения назад без потери данных будет использоваться значение -1,0.
Milestone Open Network Bridge поддерживает значения [-32 : 32].
PLAY rtsp://user:1234@test01:554/vod/943ffaad-42be-4584-bc2c-c8238ed96373 RTSP/1.0
CSeq: 123
Session: 12345678
Require: onvif-replay
Range: clock=20090615T114900.440Z
Rate-Control: no
Scale: -1.0
Изменение скорости
Для управления скоростью используется заголовок RTSP Rate-Control. Если Rate-Control=yes, то скорость воспроизведения контролирует сервер. Поток передается в режиме реального времени с помощью стандартных механизмов синхронизации RTP. Если Rate-Control=no, то скорость воспроизведения контролирует клиент. Как правило, воспроизведение с управлением скоростью используется отдельными клиентами, не относящимися к ONVIF, т. к. они не будут указывать Rate-Control=no.
Для управления скоростью воспроизведения на стороне клиента используйте имеющиеся контроллеры. Например, для универсального проигрывателя VLC выберите Воспроизведение > Скорость > Быстрее или Медленнее. Таким образом скорость увеличится или уменьшится с шагом 0,5.
Функции Точное ускорение и Точное замедление изменяют скорость с шагом 0,25.
Управление воспроизведением в универсальном проигрывателе VLC с помощью записей командной строки
Для управления воспроизведением в универсальном проигрывателе VLC можно использовать командные строки. Подробные сведения приведены в справке по использованию командной строки для VLC (https://wiki.videolan.org/VLC_command-line_help/).
Такие команды позволяют, например, выполнять воспроизведение назад и менять время начала воспроизведения.
Пример типичной командной строки:
>vlc.exe --rate=-1.0 --start-time=3600 "rtsp://user:1234@test01:554/vod/943ffaad-42be-4584-bc2c-c8238ed96373"
В случаях, когда:
- Rate ― это параметр масштаба и скорости
- Start-time ― это время в секундах после запуска базы данных
Далее приведены средства управления воспроизведением для проигрывателя VLC:
Код | Цель | Значения | Использование |
|---|---|---|---|
| input-repeat= | Повторение входных сигналов | <integer [-2147483648 .. 2147483647]> | Количество повторений одного и того же входного сигнала |
start-time= | Время начала | <float> | Поток начнется в этой позиции (в секундах). |
stop-time= | Время остановки | <float> | Поток остановится в этой позиции (в секундах). |
run-time= | Продолжительность | <float> | Поток будет выполняться в течение этого времени (в секундах). |
input-fast-seek no-input-fast-seek | Быстрый поиск (отключен по умолчанию) | В ходе поиска предпочтение отдается скорости, а не точности. | |
rate= | Скорость воспр. | <float> | Этот параметр определяет скорость воспроизведения (номинальная скорость ― 1,0). |
input-list= | Список входных сигналов | <string> | Можно ввести список входных сигналов через запятую, которые будут объединены после нормального значения. |
input-slave= | Подчиненный входной сигнал (экспериментальная функция) | <string> | Позволяет выполнять воспроизведение одновременно от нескольких источников. Это экспериментальная функция, поддерживаются не все форматы. Введите список источников входных сигналов через символ #. |
Получение записей из заданного временного диапазона
Можно запросить воспроизведение видео в определенный момент времени, используя необязательный параметр URL clock в ссылке RTSP.
Формат: rtsp://[hostname]:[port]/vod/[camera_guid]?clock=[start_time]-[end_time]Z.
Параметры [start_time] и [end_time] обычно указываются в формате yyyyMMddTHHmmssZ (год, месяц, день, буква T, часы в 24-часовом формате, минуты, секунды и буква Z).
Параметр end_time является необязательным. Чтобы запросить только время начала, используйте следующий формат: rtsp://[hostname]:[port]/vod/[camera_guid]?clock=[start_time]-. Например, при вводе rtsp://onbhost:554/vod/3bf3b583-768a-43c7-ae74-38df708c4dbf?clock=20250830T140000Z- будет получен поток, который начинается в 14:00 UTC 30 августа 2025 года.
Буква Z обозначает часовой пояс UTC. Даже если опустить ее (не рекомендуется), будет считаться, что используется время UTC, если не указано иное. Чтобы задать часовой пояс, используйте один из поддерживаемых суффиксов:
-
Буква p или +, за которой следует hhmm, указывает на положительное смещение относительно UTC. Например, 20250830T140000p0100 означает UTC+01:00 (центральноевропейское время).
-
Буква m, за которой следует hhmm, указывает на отрицательное смещение относительно UTC. Например, 20250830T140000m0800 означает UTC-08:00 (тихоокеанское время).