60 lines
2.3 KiB
Markdown
60 lines
2.3 KiB
Markdown
# Hikvision NVR webcam snapshot
|
||
|
||
Jednoduchý skript stáhne aktuální obrázek z kanálu Hikvision NVR a atomicky jej
|
||
publikuje do zadaného souboru na webu. Mimo společné časové okno publikuje
|
||
připravený dummy obrázek. Podporuje jeden i více kanálů.
|
||
|
||
## Instalace
|
||
|
||
Požadavek je Python 3.9 nebo novější, bez externích balíčků.
|
||
|
||
1. Zkopírujte `.env.example` jako `.env`.
|
||
2. Doplňte adresu NVR, samostatného uživatele pouze s potřebným oprávněním,
|
||
heslo, kanál a cílovou cestu.
|
||
3. Vedle skriptu uložte vlastní `dummy.jpg` (nebo změňte `DUMMY_PATH`).
|
||
4. Jednou skript spusťte ručně:
|
||
|
||
```sh
|
||
python3 snapshot.py
|
||
```
|
||
|
||
Heslo v `.env` může obsahovat mezery a `#`; uvozovky jsou volitelné. Soubor
|
||
`.env` nepatří do verzovacího systému.
|
||
|
||
## Pravidelné spouštění
|
||
|
||
Skript sám čekání ani plánování neprovádí. Na Linuxu jej lze volat každou minutu:
|
||
|
||
```cron
|
||
* * * * * cd /cesta/k/hik2webcam && /usr/bin/python3 snapshot.py >> snapshot.log 2>&1
|
||
```
|
||
|
||
Ve Windows použijte Plánovač úloh a jako program nastavte `python.exe`, argument
|
||
`C:\cesta\snapshot.py` a pracovní adresář projektu.
|
||
|
||
Shodné hodnoty `ACTIVE_FROM` a `ACTIVE_TO` znamenají nepřetržitý provoz.
|
||
Interval může přecházet přes půlnoc. Při chybě NVR zůstane poslední platný
|
||
obrázek zachován a proces skončí kódem `1`; mimo časové okno skončí po úspěšném
|
||
zkopírování dummy obrázku kódem `0`.
|
||
|
||
## Hikvision endpoint
|
||
|
||
Výchozí cesta je:
|
||
|
||
```text
|
||
/ISAPI/Streaming/channels/{channel}{stream_id}/picture
|
||
```
|
||
|
||
Kanál `1` a stream `01` tedy používají ID `101`. Autentizace zobrazená v NVR
|
||
jako `digest` je podporovaná; skript umí jako zálohu také Basic autentizaci.
|
||
Pro HTTPS se self-signed certifikátem lze použít `NVR_VERIFY_TLS=false`.
|
||
|
||
Požadované rozlišení se posílá NVR explicitně pomocí ISAPI parametrů
|
||
`videoResolutionWidth` a `videoResolutionHeight`. Nastavuje se globálně přes
|
||
`NVR_SNAPSHOT_WIDTH` a `NVR_SNAPSHOT_HEIGHT`; výchozí hodnota je 1920×1080.
|
||
NVR musí dané rozlišení podporovat, jinak může vrátit nejbližší podporované
|
||
rozlišení nebo chybovou XML odpověď.
|
||
|
||
Pokud zařízení endpoint odmítne, ověřte, že uživatel smí sledovat daný kanál,
|
||
že je povolené ISAPI a že `NVR_SNAPSHOT_PATH` odpovídá konkrétnímu firmwaru.
|