Переведено скачивание клипов на Hikvision SDK (PlayBackByTime_V40 + data callback) — точное время по часам DVR без seek-смещения. Исправлена загрузка SDK-библиотек через self-restart с LD_LIBRARY_PATH. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
107 lines
7.4 KiB
Markdown
107 lines
7.4 KiB
Markdown
# Changelog
|
||
|
||
Все значимые изменения фиксируются в этом файле.
|
||
Формат основан на [Keep a Changelog](https://keepachangelog.com/ru/1.0.0/).
|
||
|
||
|
||
## [1.6] — 2026-04-07
|
||
|
||
### Исправлено
|
||
- Скачивание клипов переведено на Hikvision SDK (`PlayBackByTime_V40` + data callback):
|
||
точное время начала по часам DVR, без seek-смещения
|
||
- SDK-библиотеки загружаются корректно: процесс перезапускается с правильным `LD_LIBRARY_PATH`,
|
||
чтобы `libPlayCtrl.so` находила зависимость `libAudioRender.so`
|
||
|
||
---
|
||
|
||
## [1.5] — 2026-04-06
|
||
|
||
### Добавлено
|
||
- Дашборд обычного пользователя: карточки «Время» (живые часы) и «Версия»
|
||
- Дашборд: обычный пользователь видит только разрешённые ему регистраторы
|
||
- IP регистратора в шапке предпросмотра — кликабельная ссылка на веб-интерфейс устройства
|
||
|
||
### Безопасность
|
||
- **CSRF-защита:** все state-changing запросы (POST/PUT/DELETE) проверяют токен сессии;
|
||
токен автоматически добавляется в формы и fetch-запросы через JavaScript
|
||
- **Куки сессии:** установлены флаги `HttpOnly` и `SameSite=Lax` — куки недоступны из JS
|
||
и не отправляются при кросс-сайтовых запросах
|
||
- **Открытый редирект:** параметр `next` после логина принимается только как относительный путь,
|
||
исключая редирект на внешние домены
|
||
- **XSS:** все пользовательские данные в HTML-шаблонах экранируются через `html.escape()`
|
||
вместо частичного `replace('"', '"')`
|
||
- **Валидация параметров:** `channel`, `year`, `month` проверяются на допустимый формат и диапазон
|
||
до использования в XML-запросах и вычислениях
|
||
- **Контроль доступа:** `/api/dvr/<id>/ping` теперь проверяет права пользователя на конкретный DVR
|
||
- **Небезопасный ключ по умолчанию:** при запуске без `SECRET_KEY` выводится предупреждение в stderr
|
||
|
||
### Убрано
|
||
- Лишние папки и скрипты со старым кодом который уже нигде не используется
|
||
|
||
### Исправлено
|
||
- Удаление пользователя не срабатывало — клик всплывал на строку таблицы и перехватывался её `onclick`
|
||
- После добавления CSRF-защиты ломались пинги регистраторов (порядок загрузки скриптов)
|
||
- После выхода из просмотра канала предпросмотр не возобновлял поток
|
||
|
||
### Улучшено
|
||
- Предпросмотр каналов, плеер, календарь и таймлайн теперь полностью адаптируются к светлой/тёмной теме
|
||
- Кнопка «Войти» на странице логина: hover больше не сливается с фоном
|
||
- IP регистратора в шапке: обводка-кнопка без подчёркивания, появляется только после выбора DVR
|
||
- Архивный плеер: спиннер ожидания при загрузке потока (переключение режима, перемотка, клик по таймлайну)
|
||
- Архивный плеер: отображение текущего времени воспроизведения обновляется каждую секунду
|
||
- Таймлайн: убраны сегменты записей, метки каждый час (0–24) вместо каждых 3 часов
|
||
- Скачивание клипа: поля времени разбиты на отдельные ЧЧ / ММ / СС — каждая часть редактируется независимо
|
||
- Скачивание клипа: кнопка «Отменить» прерывает загрузку и завершает ffmpeg-процесс на сервере
|
||
|
||
---
|
||
|
||
## [1.4] — 2026-04-05
|
||
|
||
### Добавлено
|
||
- Сохранение пользовательского порядка каналов предпросмотра (drag-and-drop, per-user)
|
||
|
||
---
|
||
|
||
## [1.2] — 2026-04-05
|
||
|
||
### Добавлено
|
||
- Смена пароля веб-пользователей (включая admin)
|
||
- Отключение/включение учётных записей (включая admin)
|
||
- Docker-контейнер: `dvr_admin_docker/` с Gunicorn, инструкция деплоя `DEPLOY.md`
|
||
- Ключ шифрования Fernet через переменную окружения `FERNET_KEY`
|
||
|
||
### Исправлено
|
||
- Скачивание клипа всегда начиналось с начала сегмента — теперь с запрошенного времени (byte-range seek)
|
||
- Колонки таблицы веб-пользователей съезжали при добавлении колонки «Статус»
|
||
|
||
---
|
||
|
||
## [1.1] — 2026-04-03
|
||
|
||
### Добавлено
|
||
- Панель сохранения клипа: выбор времени начала/конца, формат mp4/mkv/gif
|
||
- Быстрое скачивание клипов через ISAPI HTTP download (~14 MB/s вместо RTSP)
|
||
- YouTube-подобный спиннер загрузки для предпросмотра, основного потока и архива
|
||
- Адаптивный FPS основного потока и архива (подстраивается под DVR)
|
||
|
||
### Исправлено
|
||
- ffmpeg-процессы не завершались при переключении между DVR — утечка CPU
|
||
- Предпросмотр не загружался на DVR со спецсимволами в пароле (`;#{}]`)
|
||
- Клипы скачивались с начала сегмента вместо запрошенного времени
|
||
|
||
### Улучшено
|
||
- Предпросмотр: 1 fps на канал через `-skip_frame noref` (снижение нагрузки на CPU)
|
||
- SSE-поток предпросмотра ставится на паузу при открытии полноэкранного плеера
|
||
|
||
---
|
||
|
||
## [1.0] — 2026-04-01
|
||
|
||
### Добавлено
|
||
- Централизованное управление регистраторами Hikvision
|
||
- Авторизация с bcrypt, шифрование паролей DVR через Fernet
|
||
- Предпросмотр каналов через SSE (Server-Sent Events)
|
||
- Просмотр архива с календарём и треком записей
|
||
- Управление пользователями и правами доступа к DVR/концепциям
|
||
- Поддержка Hikvision SDK (libhcnetsdk, libPlayCtrl) для Hi-Watch HEVC+
|