FEAT: Test de flux DVRIP — dvrip:// avec handshake Sofia MD5 (agent) #66

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

Contexte

Strix teste les flux dvrip:// (pkg/tester/source.go → go2rtc pkg/dvrip : TCP, auth Sofia MD5, négociation OPMonitor). Heimdall découvre les caméras Dahua/Imou par broadcast DVRIP (Fixes #55) mais ne teste jamais leur flux DVRIP : BuildCandidateUrls ne génère que des URLs RTSP/HTTP, IsStreamUrlAliveAsync ne gère que rtsp:// et http(s):// → une caméra DVRIP-only peut être ajoutée avec un flux mort.

État actuel

  • DiscoverDvripAsync crée des devices (OpenPorts [37777], Vendor Dahua)
  • CameraStreamTemplates : template p:dvrrip (RTSP) mais pas de dvrip://
  • IsStreamUrlAliveAsync : seulement RTSP/HTTP
  • Le central ProtocolFromUrl : pas de DVRIP (retombe sur RTSP)

À faire

  1. Handshake DVRIP en C# (transposer go2rtc pkg/dvrip) : login (digest MD5 Sofia : combinaison username/password/device type/SN), puis OPMonitor ou au minimum login+GetOperateType pour prouver le flux
  2. URLs candidates : générer dvrip://user:pass@ip:port?channel=N&subtype=0 pour les devices DVRIP (comme Strix dvripHandler)
  3. Test : IsStreamUrlAliveAsync cas dvrip:// (connexion TCP 37777 + handshake)
  4. Central/UI : ProtocolFromUrl → StreamProtocol.Dvrip (vérifier l'enum) ; affichage correct dans la popup

Critères d'acceptation

  • Une caméra Imou/Dahua DVRIP-only est détectée ET son flux dvrip:// est testé vivant
  • L'ajout d'une caméra DVRIP produit une URL fonctionnelle (pas un flux mort)
  • Timeout court (pas de hang — cf. 491a253)

Fichiers concernés

  • src/Heimdall.Agent/Services/NetworkCameraScanner.cs
  • src/Heimdall.Application/Discovery/CameraStreamTemplates.cs
  • src/Heimdall.Infrastructure/Services/Discovery/CameraDiscoveryService.cs (ProtocolFromUrl)
  • UI : DiscoveriesPage.razor

Référence

  • Strix pkg/tester/source.go (dvripHandler), go2rtc pkg/dvrip/dvrip.go
## Contexte Strix teste les flux `dvrip://` (pkg/tester/source.go → go2rtc pkg/dvrip : TCP, auth **Sofia MD5**, négociation OPMonitor). Heimdall découvre les caméras Dahua/Imou par broadcast DVRIP (Fixes #55) mais **ne teste jamais leur flux DVRIP** : `BuildCandidateUrls` ne génère que des URLs RTSP/HTTP, `IsStreamUrlAliveAsync` ne gère que `rtsp://` et `http(s)://` → une caméra DVRIP-only peut être ajoutée avec un flux mort. ## État actuel - `DiscoverDvripAsync` crée des devices (OpenPorts [37777], Vendor Dahua) - `CameraStreamTemplates` : template `p:dvrrip` (RTSP) mais pas de `dvrip://` - `IsStreamUrlAliveAsync` : seulement RTSP/HTTP - Le central `ProtocolFromUrl` : pas de DVRIP (retombe sur RTSP) ## À faire 1. **Handshake DVRIP en C#** (transposer go2rtc pkg/dvrip) : login (digest MD5 Sofia : combinaison username/password/device type/SN), puis `OPMonitor` ou au minimum login+GetOperateType pour prouver le flux 2. **URLs candidates** : générer `dvrip://user:pass@ip:port?channel=N&subtype=0` pour les devices DVRIP (comme Strix `dvripHandler`) 3. **Test** : `IsStreamUrlAliveAsync` cas `dvrip://` (connexion TCP 37777 + handshake) 4. **Central/UI** : `ProtocolFromUrl` → StreamProtocol.Dvrip (vérifier l'enum) ; affichage correct dans la popup ## Critères d'acceptation - Une caméra Imou/Dahua DVRIP-only est détectée ET son flux `dvrip://` est testé vivant - L'ajout d'une caméra DVRIP produit une URL fonctionnelle (pas un flux mort) - Timeout court (pas de hang — cf. 491a253) ## Fichiers concernés - `src/Heimdall.Agent/Services/NetworkCameraScanner.cs` - `src/Heimdall.Application/Discovery/CameraStreamTemplates.cs` - `src/Heimdall.Infrastructure/Services/Discovery/CameraDiscoveryService.cs` (ProtocolFromUrl) - UI : `DiscoveriesPage.razor` ## Référence - Strix `pkg/tester/source.go` (dvripHandler), go2rtc `pkg/dvrip/dvrip.go`
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#66
No description provided.