2.3 KiB
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ů.
-
Zkopírujte
.env.examplejako.env. -
Doplňte adresu NVR, samostatného uživatele pouze s potřebným oprávněním, heslo, kanál a cílovou cestu.
-
Vedle skriptu uložte vlastní
dummy.jpg(nebo změňteDUMMY_PATH). -
Jednou skript spusťte ručně:
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:
* * * * * 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:
/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.