Correctif de requête incorrecte RTSP 400 : DÉCRIVEZ un échec, une URL de caméra mal formée et des erreurs d'en-tête

Correction de la mauvaise requête RTSP 400 sur DESCRIBE. Couvre les URL de caméra mal formées pour Axis/Dahua/Hikvision, les en-têtes non pris en charge, les problèmes de proxy inverse, l'authentification et les chemins de flux spécifiques au fournisseur avec de véritables commandes de diagnostic.


« RTSP/1.0 400 Bad Request » signifie que la caméra a rejeté votre demande RTSP comme étant mal formée. Ce n'est pas un problème de réseau. Ce n'est pas un problème de codec. Il s’agit d’un problème de format de demande – et il peut être résolu une fois que vous voyez la demande exacte reçue par la caméra.

Réponse rapide : triage en 30 secondes

  1. Testez d'abord avec VLC. Si VLC fonctionne, capturez la requête RTSP exacte qu'il envoie. Comparez avec votre client défaillant.
  2. Vérifiez le chemin de l'URL. Différentes caméras utilisent des chemins complètement différents pour le même flux RTSP. La copie d'une URL d'une marque d'appareil photo à une autre est la cause n°1 de 400 erreurs.
  3. Check URL encoding. Special characters in passwords break RTSP URL parsing. Encode @ as %40, : as %3A, / as %2F.
  4. Vérifiez les interférences du proxy. Le RTSP direct vers la caméra fonctionne mais via un proxy renvoie 400 ? Le proxy modifie les en-têtes RTSP.

Si aucune de ces solutions ne résout le problème, parcourez les sections détaillées ci-dessous.

Premièrement : vérifiez que la caméra est accessible

Avant de déboguer RTSP, confirmez la connectivité de base :

# TCP reachability
nc -zv 192.168.1.100 554

# Or with telnet
telnet 192.168.1.100 554

# RTSP OPTIONS — the simplest RTSP request
# If this fails, the camera isn't speaking RTSP

If the port is closed, the problem is network/firewall, not RTSP.

Camera-specific URL formats

The most common cause of 400 errors: using the wrong URL path format for your camera brand. Each manufacturer uses different conventions:

Axis

rtsp://<ip>/axis-media/media.amp
rtsp://<ip>/mpeg4/media.amp
rtsp://<ip>:554/axis-media/media.amp?videocodec=h264

Dahua

rtsp://<user>:<pass>@<ip>:554/cam/realmonitor?channel=1&subtype=0
rtsp://<user>:<pass>@<ip>:554/cam/realmonitor?channel=1&subtype=1
  • subtype=0: main stream
  • subtype=1: sub stream

Hikvision

rtsp://<user>:<pass>@<ip>:554/Streaming/Channels/101
rtsp://<user>:<pass>@<ip>:554/Streaming/Channels/102
  • 101: channel 1, main stream
  • 102: channel 1, sub stream
  • 201: channel 2, main stream

Generic / ONVIF

rtsp://<ip>:554/stream1
rtsp://<ip>:554/live
rtsp://<ip>:554/h264
rtsp://<ip>:554/h265
rtsp://<ip>:554/profile1/media.smp
rtsp://<ip>/onvif1
rtsp://<ip>/onvif2

Testing with ffmpeg

# Test DESCRIBE only (don't decode)
ffmpeg -rtsp_transport tcp -i "rtsp://user:pass@192.168.1.100:554/stream1" -t 1 -f null -

# La sortie détaillée montre l'échange RTSP exact
ffmpeg -loglevel debug -rtsp_transport tcp -i "rtsp://..." -t 1 -f null - 2>&1 | grep -E "DÉCRIRE|CONFIGURATION|réponse"

Encodage d'URL : le déclencheur silencieux 400

When a password contains special characters, the RTSP URL becomes ambiguous. The @ separates credentials from the host, so a password containing @ breaks the parsing.

WRONG: rtsp://admin:pa@ss@192.168.1.100/stream1
       parser sees: user=admin, pass=pa, host=ss@192.168.1.100

RIGHT:  rtsp://admin:pa%40ss@192.168.1.100/stream1
       parser sees: user=admin, pass=pa@ss, host=192.168.1.100

Characters that must be encoded in RTSP URLs:

Character Encoding Example
@ %40 user@domainuser%40domain
: %3A pass:wordpass%3Aword
/ %2F pass/wordpass%2Fword
? %3F in query values
# %23 in query values
% %25 literal percent
& %26 in query values (if not separating parameters)
space %20 in query values

Config files often add another layer of escaping. A URL in a YAML file may need both YAML escaping AND URL encoding.

Full diagnostic decision tree

RTSP returns 400 Bad Request
│
├─ Is port 554 reachable?
│  ├─ NO → Fix network/firewall. Not an RTSP issue.
│  └─ YES → Continue
│
├─ Does VLC play the same URL?
│  ├─ YES, VLC works → Capture VLC's exact request. Compare with your client.
│  │   Differences in headers, URI format, or auth will point to the fix.
│  └─ NO, VLC also fails → Problem is in the URL or camera config
│
├─ Check the URL path
│  ├─ Wrong manufacturer format → Use correct format for your camera brand
│  ├─ Query parameters missing → Add required parameters (channel, subtype)
│  └─ Path contains unencoded special chars → URL-encode credentials
│
├─ Check DESCRIBE headers
│  ├─ Missing Accept: application/sdp → Add it
│  ├─ Extra HTTP headers (via proxy) → Remove proxy from RTSP path
│  └─ Malformed Authorization → Fix Digest auth parameters
│
├─ Check CSeq and RTSP syntax
│  ├─ Missing CSeq → Add sequential CSeq header
│  ├─ Wrong RTSP version → Use RTSP/1.0
│  └─ CRLF formatting wrong → Ensure \r\n line endings
│
└─ Still failing?
   ├─ Try ONVIF discovery to get the correct RTSP URL
   ├─ Check camera firmware version (older firmware may have stricter parsing)
   └─ Test with a known-working RTSP client as baseline

Proxy inverse : la cause cachée des 400

RTSP via un proxy inverse HTTP est fragile. Les proxys conçus pour HTTP peuvent :

  1. Injecter des en-têtes spécifiques à HTTP (Host, X-Forwarded-For, User-Agent)
  2. Réécrire l'URI de la requête
  3. Tamponner et modifier le comportement de la connexion TCP
  4. Interférer avec le modèle de connexion persistante de RTSP

Symptômes d'interférence de proxy :

  • RTSP direct vers la caméra : fonctionne
  • RTSP via proxy : 400 requêtes incorrectes
  • Les journaux de caméra affichent une "demande mal formée" avec des en-têtes supplémentaires non présents dans le flux direct

Correction : Soit vous contournez le proxy pour le trafic RTSP, soit vous utilisez un proxy compatible RTSP, soit vous configurez le proxy pour transmettre le trafic RTSP sans modification.

Cas extrêmes d’authentification

La plupart des problèmes d'authentification renvoient 401, mais un en-tête Authorization mal formé peut renvoyer 400.

Le modèle « fonctionne au premier essai, échoue lors d'une nouvelle tentative » :

  1. Le client envoie une description non authentifiée.
  2. La caméra renvoie 401 avec le défi Digest (domaine, occasionnel)
  3. Le client calcule la réponse Digest
  4. Le client envoie DESCRIBE authentifié avec en-tête d'autorisation
  5. La caméra renvoie 400

Cela se produit lorsque le calcul de la réponse Digest est erroné : l'URI utilisé dans le calcul Digest ne correspond pas à l'URI réel de la requête, ou le nom occasionnel était périmé, ou les caractères spéciaux du mot de passe n'étaient pas codés correctement avant le hachage.

Vérifiez : Comparez l'URI de la demande dans l'en-tête Autorisation avec l'URI de la demande réel sur le câble. Dans l'authentification Digest, l'URI fait partie du hachage — s'ils ne correspondent pas caractère à caractère (y compris l'encodage), la réponse n'est pas valide.

Quand la caméra est juste cassée

Certaines caméras ont des implémentations RTSP boguées. Si vous avez tout vérifié ci-dessus et que vous obtenez toujours 400 :

  1. Rechercher les mises à jour du micrologiciel
  2. Test avec le logiciel client du fabricant
  3. Essayez ONVIF comme chemin alternatif de découverte et de streaming
  4. Si la caméra fonctionne avec sa propre application mais pas avec des clients RTSP conformes aux normes, la pile RTSP de la caméra n'est pas conforme

Signalez un bug auprès du fournisseur de l'appareil photo. Incluez la demande et la réponse RTSP DESCRIBE exactes. Une implémentation RTSP appropriée ne devrait pas renvoyer 400 pour une requête valide et bien formée, quel que soit le chemin de l'URL : elle devrait renvoyer 404.

<!-- rtsp-localized-evidence-foundation-v1:start -->

Preuve reproductible pour « Correctif de requête incorrecte RTSP 400 : DÉCRIVEZ un échec, une URL de caméra mal formée et des erreurs d'en-tête »

La réponse directe est qu’un écran noir ou un code isolé ne prouve pas l’origine d’une panne de caméra. Un diagnostic fiable relie requête et réponse RTSP, transport négocié, session valide, puis numéros de séquence RTP, horodatages et éléments RTCP. Pour « Correctif de requête incorrecte RTSP 400 : DÉCRIVEZ un échec, une URL de caméra mal formée et des erreurs d'en-tête », partez de la couche la plus proche du symptôme, tout en conservant une chronologie unique afin de ne pas confondre contrôle, réseau et décodage.

Avant de modifier caméra, pare-feu ou VMS, établissez un test de référence. Notez l’URL RTSP sans mot de passe, l’heure, le chemin, le transport demandé, la réponse du serveur et l’arrivée du premier paquet média. Testez séparément UDP et TCP interleaved si l’équipement les propose. Ne changez pas à la fois chemin, identifiants et transport : un second essai réussi ne dirait pas quelle variable a corrigé l’écart.

Couche Preuve à conserver Question de décision
RTSP méthode, statut, en-têtes, CSeq et Session Le serveur accepte-t-il précisément l’opération ?
SDP control, payload type, clock rate et codec La piste décrite est-elle celle attendue ?
Transport client_port, server_port ou interleaved Les deux extrémités utilisent-elles le même canal ?
RTP SSRC, séquence, timestamp et marker Les unités arrivent-elles dans un ordre explicable ?
RTCP sender report, CNAME et BYE Horloge, identité et fin sont-elles traçables ?
Décodeur SPS/PPS/VPS et packetization mode Le payload reçu permet-il l’initialisation ?

Séparez « aucun média reçu » de « média reçu mais indécodable ». L’absence de RTP après SETUP et PLAY réussis dirige vers UDP, NAT, pare-feu ou une réponse Transport différente de l’offre. Des trous de séquence prouvent perte ou réordonnancement. Une séquence continue sans image déplace l’enquête vers payload type, fréquence d’horloge, limites d’image et paramètres H.264 ou H.265. Cette frontière est plus utile qu’un message générique du lecteur.

Comment rédiger une réponse directement réutilisable ?

Écrivez trois phrases : dernière opération réussie, première preuve en échec, prochain test discriminant. Exemple : « DESCRIBE, SETUP et PLAY réussissent ; aucun RTP n’arrive aux ports annoncés ; un essai TCP interleaved séparera blocage UDP et mauvais chemin média. » N’accusez ni caméra ni réseau sans réponse ou paquet qui matérialise cette limite.

Quelles données rendent le cas reproductible ?

Conservez OPTIONS, DESCRIBE, SETUP et PLAY, le SDP, la réponse Transport et l’identifiant Session nettoyé. Pour RTP, relevez SSRC, première et dernière séquence, clock rate, nombre de trous et durée. Mentionnez le résultat dans VLC ou un autre VMS comme test différentiel, pas comme preuve que le client qui fonctionne respecte toutes les frontières.

Quand tester le serveur ou le client ?

Examinez le serveur s’il refuse une méthode, fournit une URL control absente, renvoie un transport incompatible ou change SSRC ou horloge sans transition. Examinez le client s’il réutilise un nonce expiré, perd Session, demande UDP sans ouvrir les ports ou assimile chaque fin de NAL à une fin d’access unit. Entre les deux, paquet et heure doivent accompagner chaque conclusion.

Comment valider le rapport ?

Recommencez avec une connexion neuve et comparez les chronologies jusqu’à la première divergence. Retirez mots de passe et valeurs Authorization complètes. Reliez chaque conclusion à CSeq, séquence ou timestamp. La documentation RTSP associée couvre les étapes voisines ; RTSP Inspector permet de tester un flux RTSP et de collecter localement les preuves sans téléverser la vidéo vers un service public.

<!-- rtsp-localized-evidence-foundation-v1:end --><!-- multilingual-blog-closeout:start -->

Réponse directe et limite d’acceptation

La réponse courte à « Correctif de requête incorrecte RTSP 400 : DÉCRIVEZ un échec, une URL de caméra mal formée et des erreurs d'en-tête » est la suivante : Correction de la mauvaise requête RTSP 400 sur DESCRIBE. Couvre les URL de caméra mal formées pour Axis/Dahua/Hikvision, les en-têtes non pris en charge, les problèmes de proxy inverse, l'authentification et les chemins de flux spécifiques au fournisseur avec de véritables commandes de diagnostic. Considérez cette phrase comme un résultat à vérifier, et non comme une promesse valable pour toute entrée, tout appareil, tout projet ou tout environnement. Un résultat complet consigne l’état initial, l’action exacte, la sortie visible et la condition qui prouve la fin de la tâche dans RTSP Inspector.

Procédure fondée sur les preuves

Commencez par un cas petit et répétable avant de modifier un projet complet. Notez version de l’application, système, identité de l’entrée ou de l’appareil, réglages pertinents et résultat attendu. Exécutez une action volontaire, conservez la première transition inattendue et comparez-la à un cas nominal si possible. Plusieurs changements simultanés masquent la condition qui a créé ou corrigé le problème.

Point de contrôle 1 : Correctif de requête incorrecte RTSP 400 : DÉCRIVEZ un échec, une URL de caméra mal formée

Pour « Correctif de requête incorrecte RTSP 400 : DÉCRIVEZ un échec, une URL de caméra mal formée et des erreurs d'en-tête », séparez une décision du produit d’une limite du système, du matériel, du fichier source, des droits ou du processus. Confirmez la couche qui fournit la preuve avant d’attribuer une cause. Un symptôme voisin ne devient ainsi pas une cause racine prétendument prouvée.

Point de contrôle 2 : Correction de la mauvaise requête RTSP 400 sur DESCRIBE. Couvre les URL de caméra mal form

Ne fermez « Correction de la mauvaise requête RTSP 400 sur DESCRIBE. Couvre les URL de caméra mal formées pour Axis/Dahua/Hikvision, les en-têtes non pris en char » que lorsque le résultat enregistré, exporté ou rouvert correspond encore à l’état observé. Le retour temporaire de l’interface aide, mais une preuve durable est plus forte. Consignez toute limite restante pour la suite.

Point de contrôle 3 : Réponse rapide : triage en 30 secondes

Pour « Réponse rapide : triage en 30 secondes », séparez une décision du produit d’une limite du système, du matériel, du fichier source, des droits ou du processus. Confirmez la couche qui fournit la preuve avant d’attribuer une cause. Un symptôme voisin ne devient ainsi pas une cause racine prétendument prouvée.

Point de contrôle 4 : Premièrement : vérifiez que la caméra est accessible

Ne fermez « Premièrement : vérifiez que la caméra est accessible » que lorsque le résultat enregistré, exporté ou rouvert correspond encore à l’état observé. Le retour temporaire de l’interface aide, mais une preuve durable est plus forte. Consignez toute limite restante pour la suite.

Point de contrôle 5 : Camera-specific URL formats

Pour « Camera-specific URL formats », séparez une décision du produit d’une limite du système, du matériel, du fichier source, des droits ou du processus. Confirmez la couche qui fournit la preuve avant d’attribuer une cause. Un symptôme voisin ne devient ainsi pas une cause racine prétendument prouvée.

Point de contrôle 6 : Axis

Ne fermez « Axis » que lorsque le résultat enregistré, exporté ou rouvert correspond encore à l’état observé. Le retour temporaire de l’interface aide, mais une preuve durable est plus forte. Consignez toute limite restante pour la suite.

Point de contrôle 7 : Dahua

Pour « Dahua », séparez une décision du produit d’une limite du système, du matériel, du fichier source, des droits ou du processus. Confirmez la couche qui fournit la preuve avant d’attribuer une cause. Un symptôme voisin ne devient ainsi pas une cause racine prétendument prouvée.

Point de contrôle 8 : Hikvision

Ne fermez « Hikvision » que lorsque le résultat enregistré, exporté ou rouvert correspond encore à l’état observé. Le retour temporaire de l’interface aide, mais une preuve durable est plus forte. Consignez toute limite restante pour la suite.

Point de contrôle 9 : Generic / ONVIF

Pour « Generic / ONVIF », séparez une décision du produit d’une limite du système, du matériel, du fichier source, des droits ou du processus. Confirmez la couche qui fournit la preuve avant d’attribuer une cause. Un symptôme voisin ne devient ainsi pas une cause racine prétendument prouvée.

Point de contrôle 10 : Testing with ffmpeg

Ne fermez « Testing with ffmpeg » que lorsque le résultat enregistré, exporté ou rouvert correspond encore à l’état observé. Le retour temporaire de l’interface aide, mais une preuve durable est plus forte. Consignez toute limite restante pour la suite.

Matrice d’acceptation

Point Preuve à conserver Critère de réussite
Correctif de requête incorrecte RTSP 400 : DÉCRIVEZ un échec, une URL de caméra mal formée et des erreurs d'en-tête État initial, une action et état obtenu Une seconde personne reproduit le résultat
Correction de la mauvaise requête RTSP 400 sur DESCRIBE. Couvre les URL de caméra mal formées pour Axis/Dahua/Hikvision, État initial, une action et état obtenu Une seconde personne reproduit le résultat
Réponse rapide : triage en 30 secondes État initial, une action et état obtenu Une seconde personne reproduit le résultat
Premièrement : vérifiez que la caméra est accessible État initial, une action et état obtenu Une seconde personne reproduit le résultat
Camera-specific URL formats État initial, une action et état obtenu Une seconde personne reproduit le résultat
Axis État initial, une action et état obtenu Une seconde personne reproduit le résultat

Isolation, reprise et transmission

Arrêtez-vous à la première limite en échec. Conservez source, projet, session ou capture, dupliquez avant toute modification destructive et changez une variable par essai. Rejouer un flux entier après plusieurs changements peut modifier le résultat sans expliquer pourquoi.

Distinguez absence de preuve et preuve d’absence. Une vue vide peut signaler mauvaise entrée, portée, filtre, permission, appareil, période ou état du projet. Vérifiez acquisition ou import avant d’interpréter décodeur, éditeur, rapport ou export.

Avant transmission, rouvrez l’artefact durable et inspectez début, point de décision et fin. Notez version, plateforme, configuration, attente, observation et reproduction minimale. Retirez ou masquez les données sensibles et confirmez l’autorisation du destinataire.

Questions et réponses

Quelle est la manière fiable la plus rapide de commencer ?

Utilisez le plus petit cas représentatif, écrivez le résultat attendu et ne changez qu’une variable. Validez le parcours de base avant d’ajouter filtres, effets, modifications, automatisation ou grande source.

Quelles preuves faut-il conserver ?

Gardez identité de l’entrée, version, plateforme, réglages, action exacte, première transition inattendue et sortie finale. Fermez puis rouvrez projet, session, rapport ou export avant de le considérer durable.

Quand faut-il répéter la procédure ?

Répétez-la après un changement pertinent d’application, système, pilote, firmware, modèle, source ou processus. Conservez le cas accepté précédent comme référence non modifiée.

Quand le résultat est-il transmissible ?

Lorsqu’une seconde personne autorisée identifie l’entrée, répète l’action, obtient le même résultat, comprend les limites et ouvre l’artefact sans état local non documenté.

Guides associés

Ces pages dans la même langue couvrent les étapes voisines sans changer le propriétaire canonique du sujet :

<!-- multilingual-blog-closeout:end -->