FEAT: Base de données caméras Strix — 100 000+ patterns URL + table OUI #64

Closed
opened 2026-08-11 21:53:18 +02:00 by nonobis · 0 comments
Owner

Contexte

Strix embarque une base SQLite cameras.db : 3 600 marques, 100 000+ patterns d'URL (tables brands, streams, stream_models, preset_streams, oui), au format d'IDs b:brand / m:brand:model / p:preset — le même format que notre BuiltInCameraDb. La DB est récupérable depuis l'image Docker eduard256/strix (Dockerfile : COPY cameras.db .). Notre catalogue actuel : ~15 entrées en dur + ~12 templates.

État actuel

  • Heimdall.Application/Discovery/CameraStreamTemplates.cs : ~12 templates (p:onvif, p:rtsp-h264…, b:hikvision, b:dahua, b:imou, b:axis…)
  • CameraDiscoveryService.BuiltInCameraDb : 15 entrées (StrixCamDB-inspired)
  • ResolveOuiVendor : ~25 OUIs en dur, côté central uniquement

À faire

  1. Récupérer la DB : docker run --rm eduard256/strix puis extraire cameras.db (ou asset release) ; vérifier licence MIT et taille ; documenter la version/source
  2. Placement : embarquer la DB comme ressource copiée au build (agent + central), en lecture seule
  3. Lecteur : Microsoft.Data.Sqlite (pur managé, compatible Alpine) ; interface ICameraDatabase :
    • Search(brand|model|query) → entrées (remplace BuiltInCameraDb)
    • BuildStreams(ids, ip, user, pass, channel, portFilter) → URLs (remplace CameraStreamTemplates.BuildUrls)
    • LookupOui(mac) → vendor (remplace ResolveOuiVendor, dispo aussi côté agent)
  4. Compatibilité : garder les IDs b:/m:/p: existants (les presets p:onvif/p:rtsp-h264… doivent continuer à fonctionner)
  5. Sous-ensemble si nécessaire : si la DB complète est trop lourde, extraire d'abord les marques utiles (Hikvision, Dahua, Imou/Lechange, Reolink, Uniview, TP-Link…) — mais privilégier la DB complète

Critères d'acceptation

  • Une recherche « DS-2CD2T47 » ou « IPC-F22FE » trouve les patterns réels
  • Le vendor par OUI fonctionne pour des MAC hors table actuelle (ex. caméras Reolink/Annke)
  • dotnet test vert (Application/Infrastructure/Agent)
  • Pas de dépendance native dans le container Alpine (Microsoft.Data.Sqlite pur managé)

Fichiers concernés

  • src/Heimdall.Application/Discovery/ (nouveau lecteur DB)
  • src/Heimdall.Infrastructure/Services/Discovery/CameraDiscoveryService.cs
  • src/Heimdall.Agent/Services/NetworkCameraScanner.cs
  • csproj (package Microsoft.Data.Sqlite) + ressources embarquées

Référence

  • Strix pkg/camdb/streams.go (schéma + BuildStreams), pkg/camdb/search.go
  • Strix pkg/probe/oui.go (SELECT brand FROM oui WHERE prefix = ?)
  • Strix Dockerfile COPY cameras.db . ; catalogue : gostrix.github.io
## Contexte Strix embarque une base SQLite `cameras.db` : **3 600 marques, 100 000+ patterns d'URL** (tables `brands`, `streams`, `stream_models`, `preset_streams`, `oui`), au format d'IDs `b:brand` / `m:brand:model` / `p:preset` — le même format que notre `BuiltInCameraDb`. La DB est récupérable depuis l'image Docker `eduard256/strix` (Dockerfile : `COPY cameras.db .`). Notre catalogue actuel : ~15 entrées en dur + ~12 templates. ## État actuel - `Heimdall.Application/Discovery/CameraStreamTemplates.cs` : ~12 templates (p:onvif, p:rtsp-h264…, b:hikvision, b:dahua, b:imou, b:axis…) - `CameraDiscoveryService.BuiltInCameraDb` : 15 entrées (StrixCamDB-inspired) - `ResolveOuiVendor` : ~25 OUIs en dur, côté **central uniquement** ## À faire 1. **Récupérer la DB** : `docker run --rm eduard256/strix` puis extraire `cameras.db` (ou asset release) ; vérifier licence MIT et taille ; documenter la version/source 2. **Placement** : embarquer la DB comme ressource copiée au build (agent + central), en lecture seule 3. **Lecteur** : `Microsoft.Data.Sqlite` (pur managé, compatible Alpine) ; interface `ICameraDatabase` : - `Search(brand|model|query)` → entrées (remplace `BuiltInCameraDb`) - `BuildStreams(ids, ip, user, pass, channel, portFilter)` → URLs (remplace `CameraStreamTemplates.BuildUrls`) - `LookupOui(mac)` → vendor (remplace `ResolveOuiVendor`, dispo aussi côté agent) 4. **Compatibilité** : garder les IDs `b:/m:/p:` existants (les presets p:onvif/p:rtsp-h264… doivent continuer à fonctionner) 5. **Sous-ensemble si nécessaire** : si la DB complète est trop lourde, extraire d'abord les marques utiles (Hikvision, Dahua, Imou/Lechange, Reolink, Uniview, TP-Link…) — mais privilégier la DB complète ## Critères d'acceptation - Une recherche « DS-2CD2T47 » ou « IPC-F22FE » trouve les patterns réels - Le vendor par OUI fonctionne pour des MAC hors table actuelle (ex. caméras Reolink/Annke) - `dotnet test` vert (Application/Infrastructure/Agent) - Pas de dépendance native dans le container Alpine (Microsoft.Data.Sqlite pur managé) ## Fichiers concernés - `src/Heimdall.Application/Discovery/` (nouveau lecteur DB) - `src/Heimdall.Infrastructure/Services/Discovery/CameraDiscoveryService.cs` - `src/Heimdall.Agent/Services/NetworkCameraScanner.cs` - csproj (package Microsoft.Data.Sqlite) + ressources embarquées ## Référence - Strix `pkg/camdb/streams.go` (schéma + BuildStreams), `pkg/camdb/search.go` - Strix `pkg/probe/oui.go` (SELECT brand FROM oui WHERE prefix = ?) - Strix Dockerfile `COPY cameras.db .` ; catalogue : gostrix.github.io
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
nonobis/Heimdall#64
No description provided.