V0.6.4 — Réglages image et vidéo par ONVIF
Publiée le 16/10/2026.
Documentation fonctionnelle
Ce que change la version pour les collaborateurs
Pourquoi
Depuis la 0.6.0, ArgOS règle par ONVIF les Incrustations et l'Horloge d'une Caméra. Le reste de ce qui fait une bonne image (filtre infrarouge, scène sombre, contre-jour, résolution ou débit trop lourds pour le réseau du Site) se réglait encore dans l'interface web du fabricant, souvent inutilisable, ou dans son application cloud. Et le média 1, le seul service qu'ArgOS parlait, décrit mal le H.265 : régler l'encodage par lui risquait de changer le codec du Flux.
Ce qu'on peut faire maintenant
- Voir le Flux de la Caméra en tête de ses Réglages, pour suivre l'effet d'un réglage sans quitter l'Administration.

- Régler l'Image de l'Appareil : filtre infrarouge (jour / nuit / automatique), luminosité, contraste, saturation, netteté, contre-jour et WDR. Chaque champ est relu avec un statut (« pris », « pas pris »), et l'Image vaut pour toutes les Caméras du même Appareil.

- Régler l'Encodage du Flux de la Caméra (résolution, images par seconde, débit max) dans les bornes de la caméra. Le codec, la qualité et l'intervalle entre images clés restent affichés seulement.

- Confirmer avant un changement d'Encodage, qui coupe le Flux quelques secondes. Une modification d'Image ou d'Incrustation seule part sans confirmation.

- Lire clairement ce qui ne se règle pas : « Image non réglable sur cette caméra », « Encodage non réglable sur cette caméra » (H.265 sans média 2), « Encodage introuvable pour ce Flux ».

Autres captures : image d'usine, Image non réglable, sans confirmation, Encodage introuvable, Live.
L'Encodage passe par le service média 2 quand la caméra l'annonce, par le média 1 seulement si le Flux est en H.264, sinon il reste en lecture seule. La Caméra du flux secondaire règle le flux secondaire : ArgOS retient le profil dont l'URL correspond à l'URL RTSP de la Caméra. Après un changement d'Encodage, ArgOS relit la caméra jusqu'à 20 s ; si elle ne répond pas, les champs envoyés sont « pas pris — la caméra n'a pas répondu après l'envoi ». Rien n'est gardé en base : la caméra reste la seule source de vérité.
Pour le développeur : la Caméra simulée 2 sert le service image et le média 2 (WDR accepté sans être appliqué, pour voir « pas pris »), la Caméra simulée 4 reste en média 1 seul, sans service image ; des options du simulateur coupent le média 2 (repli média 1 en H.264) ou rendent la caméra muette après un changement d'Encodage.
Documentation technique
Spec versionnée : docs/specs/v0.6.4-reglages-image-et-video-par-onvif.md
Issue parente : #87
V0.6.4 — Réglages image et vidéo par ONVIF
Problem Statement
Depuis la 0.6.0, ArgOS règle par ONVIF les Incrustations et l'Horloge d'une Caméra. Le reste de ce qui fait une bonne image se règle encore dans l'interface web du fabricant (souvent inutilisable : module ActiveX) ou dans son application cloud : passer le filtre infrarouge en nuit, éclaircir une scène sombre, compenser un contre-jour, baisser la résolution ou le débit d'un flux trop lourd pour le réseau du Site.
Sur la caméra de dev, tout cela est annoncé en ONVIF (service image, médias 1 et 2) mais ArgOS ne sait pas s'en servir. Et le service média 1, le seul qu'ArgOS parle, décrit mal le H.265 : il déclare en H.264 un flux principal servi en H.265. Régler l'encodage par lui risquerait de changer le codec du Flux ou d'être refusé.
Solution
Le panneau Réglages de chaque Caméra active gagne deux sections, lues sur la caméra à chaque ouverture, envoyées et vérifiées comme les Incrustations :
- Image (de l'Appareil, partagée par toutes ses Caméras) : filtre infrarouge (jour, nuit, automatique), luminosité, contraste, saturation, netteté, contre-jour et WDR (activé ou non, et leur niveau quand la caméra le borne).
- Encodage du Flux (de la Caméra) : résolution, images par seconde, débit max ; codec, qualité et intervalle entre images clés en lecture seule. Le profil réglé est celui dont l'URL de flux correspond à l'URL RTSP de la Caméra : la Caméra du flux secondaire règle le flux secondaire.
L'Encodage passe par le service média 2 quand la caméra l'annonce, par le média 1 seulement si le Flux est en H.264 ; sinon il reste en lecture seule (ADR 0008). Un changement d'Encodage coupe le Flux quelques secondes : l'Administrateur le confirme, ArgOS relit la caméra jusqu'à ce qu'elle réponde à nouveau (délai borné).
Un petit lecteur du Flux, en haut du panneau, montre l'effet des réglages sans quitter l'Administration. Chaque champ n'apparaît que si la caméra l'annonce ; une section que la caméra ne propose pas le dit sans gêner les autres. Rien n'est gardé en base : la caméra reste la seule source de vérité.
User Stories
Voir ce que je règle
- En tant qu'Administrateur, je veux voir le Flux de la Caméra en haut du panneau Réglages, pour juger de l'effet d'un réglage sans aller dans le Live.
- En tant qu'Administrateur, je veux que ce lecteur reprenne seul après une coupure due à un changement d'Encodage.
Image
- En tant qu'Administrateur, je veux passer le filtre infrarouge en jour, nuit ou automatique.
- En tant qu'Administrateur, je veux régler la luminosité, le contraste, la saturation et la netteté par des curseurs bornés par la caméra, avec la valeur chiffrée et la valeur d'origine.
- En tant qu'Administrateur, je veux activer ou couper la compensation de contre-jour et le WDR, et régler leur niveau quand la caméra le permet.
- En tant qu'Administrateur, je veux ne voir que les réglages d'image que la caméra annonce.
- En tant qu'Administrateur, je veux lire « Image non réglable sur cette caméra » quand elle n'a pas de service image ou qu'il répond en faute, sans perdre les autres sections.
- En tant qu'Administrateur, je veux être prévenu que l'Image est celle de l'Appareil : la régler depuis une Caméra la règle pour toutes celles du même Appareil.
Encodage du Flux
- En tant qu'Administrateur, je veux choisir la résolution du Flux parmi celles que la caméra propose.
- En tant qu'Administrateur, je veux régler les images par seconde et le débit max dans les bornes de la caméra.
- En tant qu'Administrateur, je veux voir le codec, la qualité et l'intervalle entre images clés sans pouvoir les changer.
- En tant qu'Administrateur, je veux que la Caméra du flux secondaire règle le flux secondaire, et celle du flux principal le flux principal.
- En tant qu'Administrateur, je veux lire « Encodage introuvable pour ce Flux » quand ArgOS ne retrouve pas le profil de l'URL RTSP de la Caméra.
- En tant qu'Administrateur, je veux lire « Encodage non réglable sur cette caméra » quand la caméra n'a pas de média 2 et que son Flux n'est pas en H.264, plutôt qu'un réglage qui changerait le codec.
- En tant qu'Administrateur, je veux confirmer avant l'envoi d'un changement d'Encodage, prévenu que le Flux sera coupé quelques secondes.
- En tant qu'Administrateur, je veux lire « pas pris — la caméra n'a pas répondu après l'envoi » si elle ne revient pas dans le délai.
Envoyer et vérifier
- En tant qu'Administrateur, je veux que l'Image et l'Encodage partagent l'« Enregistrer » (seulement ce qui a changé), l'« Annuler » et les statuts par champ (pris, pas pris, refusé) des Incrustations.
- En tant qu'Administrateur, je veux ne pas pouvoir envoyer une valeur hors des bornes de la caméra.
Caméras simulées et dev
- En tant que développeur, je veux que la Caméra simulée 2 réponde au service image et au média 2, avec un WDR qui accepte sans appliquer, pour tester « pas pris ».
- En tant que développeur, je veux que la Caméra simulée 4 (H.265) n'ait que le média 1 et pas de service image, pour tester « Image non réglable » et « Encodage non réglable ».
- En tant que développeur, je veux pouvoir tester le repli média 1 sur un Flux H.264 contre la simulation, sans matériel.
Documentation
- En tant qu'Administrateur, je veux que « Paramétrer une Caméra » dise ce qu'ArgOS règle désormais en Image et en Encodage, ses messages et ses limites (H.265 et média 2).
- En tant que mainteneur, je veux que le glossaire définisse Image et Encodage.
Implementation Decisions
- Glossaire (
docs/glossaire.md) :- Image : comment l'Appareil rend ce que voit son capteur (filtre infrarouge, luminosité, contraste, saturation, netteté, contre-jour, WDR), partagée par toutes ses Caméras. À éviter : imaging, réglages capteur.
- Encodage : résolution, images par seconde, débit et codec du Flux d'une Caméra. À éviter : profil, configuration vidéo, stream.
- Réglages de la Caméra devient : ses Incrustations, l'Horloge et l'Image de son Appareil, et l'Encodage de son Flux.
- UI : sections « Image » et « Encodage du Flux » (« vidéo » est réservé au Flux).
- Image = paramètres du service image ONVIF (
ver20/imaging) pour la source vidéo du profil de la Caméra :GetImagingSettings,GetOptions,SetImagingSettings(IrCutFilter:ON= jour,OFF= nuit,AUTO= automatique),Brightness,ColorSaturation,Contrast,Sharpness,BacklightCompensation(mode, niveau),WideDynamicRange(mode, niveau). Un champ absent deGetOptionsn'est ni lu ni proposé ; un niveau sans bornes annoncées n'est pas proposé (mode seul). Exposition et balance des blancs : ni lues ni envoyées. - Profil de la Caméra :
GetProfilespuisGetStreamUri(RTSP) par profil ; retenu = celui dont chemin et requête égalent ceux de l'URL RTSP de la Caméra (hôte, port et identifiants ignorés). Aucun → Encodage « profil introuvable » ; Image sur la première source vidéo. Les Incrustations restent sur le premier profil (0.6.0 inchangée). - Encodage : service média 2 (
ver20/media,GetVideoEncoderConfigurations,GetVideoEncoderConfigurationOptions,SetVideoEncoderConfiguration) siGetServicesl'annonce ; sinon média 1 (mêmes opérations enver10) seulement si le codec de la Caméra en base estH264; sinon lecture seule « non réglable ». À l'envoi, le codec, la qualité et le GOP relus sont renvoyés à l'identique : seuls résolution, images par seconde et débit max changent. ADR 0008 : « Encodage réglé par le média 2, média 1 seulement en H.264 ». - Bornes : résolutions = liste des options ; images par seconde, débit et paramètres d'image = bornes des options. Le front borne ses champs ; l'API revérifie contre les options relues et répond
422sans rien envoyer à la caméra. - Après envoi d'Encodage : relecture toutes les 2 s environ, 20 s au plus, jusqu'à une réponse ; au-delà, chaque champ envoyé (l'Encodage, et l'Horloge, les Incrustations et l'Image envoyées avant lui dans la même requête : rien n'a pu être relu) est
pas_prisavec la raisonsans_reponse. L'Image est relue une fois, comme les Incrustations. - Module ONVIF (
api/argos_api/onvif.py) : reste le module profond « lire les Réglages / appliquer une modification » ; il gagne les services image et média 2 (WSDL ajoutés sousapi/argos_api/wsdl/), le choix du profil et du service média, et les mêmes adresses reconstruites, contact HTTPS / en clair et clé mémorisée qu'en 0.6.3. Aucune autre écriture : jamais réseau, IP, utilisateurs, ports. - API :
GET …/reglagesrenvoie en plusimage(valeurs, options,reglable+ raison) etencodage(profil, valeurs, options, lecture seule,reglable+ raisonprofil_introuvable/non_reglable) ;PATCH …/reglagesaccepteimageetencodageen plus, mêmes statuts par champ. - Front (
ReglagesCamera.tsx,reglages.ts) : lecteur du Flux en tête (LecteurFlux, comme le Live) ; sections Image et Encodage du Flux ; curseurs bornés avec valeur et valeur d'origine ; mention « partagée par les Caméras de cet Appareil » sur l'Image ; confirmation avant tout envoi qui touche l'Encodage. - Simulation (
simulation/onvif/) : service image et média 2 sur la Caméra simulée 2 (état « usine » proche de la caméra de dev, valeurs retenues sans changer la vidéo, WDR accepté mais non appliqué) ; Caméra simulée 4 inchangée (média 1 seul, pas de service image, Flux H.265). Une option de démarrage du simulateur (variable d'environnement) coupe le média 2 pour tester le repli média 1 en H.264. Une autre (ONVIF_SILENCE_APRES_ENCODAGE_S) rend la caméra muette quelques secondes après un changement d'Encodage, pour tester « pas pris — la caméra n'a pas répondu après l'envoi ». - Doc :
docs/cameras/parametrer-une-camera.md(§ 6),docs/glossaire.md,simulation/onvif/README.md.
Testing Decisions
- Un bon test vérifie un comportement observable : réponse HTTP de l'API, état relu sur la Caméra simulée, écran du navigateur. Jamais la forme des requêtes SOAP.
simulation/onvif/tests/: réponses du service image et du média 2, état modifié puis relu, WDR non appliqué, média 2 coupé par l'option de démarrage.tests/api/(prior art :test_reglages.py,test_reglages_https.py,test_onvif_simule.py) :- simulée 2 : Image et Encodage lus (valeurs « usine », options), modification prise et relue, WDR
pas_pris, valeur hors bornes →422sans envoi ; - profil retenu selon l'URL RTSP ; URL sans profil correspondant →
profil_introuvable; - simulée 4 : Image
non reglable, Encodagenon_reglable(H.265 sans média 2) ; Incrustations et Horloge toujours lues ; - repli média 1 en H.264 (simulateur sans média 2) : Encodage réglable et pris.
- simulée 2 : Image et Encodage lus (valeurs « usine », options), modification prise et relue, WDR
tests/web/(prior art :test_reglages.py) : lecteur du Flux dans le panneau, sections et messages, curseurs bornés, confirmation avant envoi d'Encodage, statuts par champ, « Annuler ».- Tests humains (caméra de dev réelle) : filtre infrarouge nuit puis jour, luminosité et contraste, flux principal en 1080p puis 2304×1296 avec le Live qui reprend, images par seconde et débit pris ; Caméra du flux secondaire si elle est ajoutée (règle bien son Encodage).
Out of Scope
- Exposition, balance des blancs, mise au point, stabilisation.
- Changer le codec, la qualité, l'intervalle entre images clés, le mode de débit.
- Réseau, IP, utilisateurs et ports de la caméra (jamais).
- Événements ONVIF, PTZ.
- Plusieurs sources vidéo par Appareil (« Un Appareil, plusieurs Caméras », Plus tard).
- Changer la vidéo simulée selon les réglages.
- Bug #86 (mot de passe
***à la modification de l'URL).
Changements apportés aux versions antérieures
Aucun.
Further Notes
IrCutFilterONVIF :ON= filtre infrarouge posé (image jour, en couleurs),OFF= filtre retiré (vision de nuit). L'UI parle de jour / nuit / automatique.- Contexte : spec 0.6.0 (Réglages), spec 0.6.3 (contact ONVIF), ADR 0004 (HLS pour le H.265),
docs/cameras/parametrer-une-camera.md§ 4 (ce qu'annonce la caméra de dev),media/simulated/README.md.