So beheben Sie Unknown Write-RTP-/NDPI-Fehler – Dynamischer Nutzlasttyp und SDP-Zuordnung in RTSP-Streams
Debuggen Sie RTP-/NDPI-Fehler beim \"unbekannten Schreiben\" in RTSP-Erfassungen, indem Sie dynamische RTP-Nutzlasttypen wieder den SDP-RTPMAP- und FMTP-Zeilen zuordnen. Deckt H.264-, H.265-, AAC-, ONVIF-Metadaten, Nutzlast-IDs und Depaketiererfehler ab.
Eine RTSP-Sitzung kann fehlerfrei aussehen, bis der Medienparser versucht, RTP-Pakete zu verstehen. „DESCRIBE“ gibt SDP zurück. „SETUP“ ist erfolgreich. „PLAY“ ist erfolgreich. RTP-Pakete kommen an. Dann meldet die Anwendung oder der Paketklassifizierer „unbekanntes Schreiben“, „unbekannte RTP-Nutzlast“, „NDPI unbekannt“, „nicht unterstützter Nutzlasttyp“, „Entpaketierer nicht gefunden“, „ungültige Codec-Zuordnung“, „kein Decoder für Nutzlasttyp 96“ oder „Stream enthält unbekannte Spur“.
Diese Fehler bedeuten normalerweise, dass die Bytes vorhanden sind, der Analysator jedoch keinen RTP-Nutzlasttyp der Codec- und Spurdefinition von SDP zuordnen kann. In RTSP ist der Nutzlasttyp „96“ nicht automatisch H.264. Es handelt sich um eine sitzungslokale dynamische ID. Sie müssen das SDP lesen.
Schnelle Antwort: Überprüfen Sie SDP, bevor Sie NDPI oder der Kamera die Schuld geben
Wenn in einer Erfassung „unbekanntes Schreiben“ / „RTP“ / „NDPI“ steht, beginnen Sie hier:
- Suchen Sie die RTSP-Antwort „DESCRIBE“.
- Kopieren Sie das SDP.
- Finden Sie jede „m=“-Medienzeile und ihre Nutzlastnummern.
- Suchen Sie für jede dynamische Nutzlast (
96-127) die passende Zeile „a=rtpmap:<id>“. - Überprüfen Sie die Zeile „a=fmtp:<id>“ auf Codec-Parameter.
- Vergleichen Sie das RTP-Paket-Nutzlasttyp-Byte mit dieser SDP-Zuordnung.
Wenn RTP-Pakete den Nutzlasttyp „96“ verwenden und SDP „a=rtpmap:96 H265/90000“ sagt, wird ein Analysator, der H.264 erwartet, Unsinn melden. Wenn SDP „a=rtpmap:96 vnd.onvif.metadata/90000“ hat, ist die unbekannte Nutzlast überhaupt kein Video; Es handelt sich um ONVIF-Metadaten und sollte die Wiedergabe nicht beenden.
Aus diesem Grund reicht eine generische DPI-Bezeichnung wie „NDPI unbekannt“ nicht aus. DPI-Engines sehen Paketbytes. Sie verfügen nicht immer über den RTSP-Kontrollebenenkontext, der zur Interpretation sitzungslokaler dynamischer Nutzlast-IDs erforderlich ist. Für RTSP müssen Control Plane und Media Plane gemeinsam gelesen werden.
Dies ist ein Protokollinterpretationsproblem. RTSP Inspector ist nützlich, weil es SDP- und RTP-Beweise zusammenhält. Sie können dynamische RTP-Payload-IDs ohne das SDP, das sie definiert, nicht korrekt interpretieren.
Statische vs. dynamische Nutzlasttypen
Einige RTP-Nutzlasttypen sind statisch. Andere sind dynamisch. Dynamische Nutzlasttypen liegen normalerweise im Bereich 96–127 und müssen von SDP zugeordnet werden.
Beispiel:
m=video 0 RTP/AVP 96
a=rtpmap:96 H264/90000
Here, payload type 96 means H.264 for this session. In another stream, payload type 96 could mean H.265, AAC, metadata, or something vendor-specific. The number alone is not enough.
If a client assumes payload type 96 is always H.264, it will eventually fail.
SDP rtpmap is required for dynamic payloads
For dynamic payload types, SDP should include a=rtpmap:
a=rtpmap:96 H264/90000
a=rtpmap:97 MPEG4-GENERIC/48000/2
a=rtpmap:98 H265/90000
Wenn SDP „rtpmap“ fehlt, weiß der Client möglicherweise nicht, welchen Depacketizer er verwenden soll. Einige Kameras erzeugen unvollständiges SDP. Einige Relays oder Proxys ändern SDP. Einige Clients analysieren nur allgemeine Spuren und ignorieren Metadatenspuren.
Gemeinsame Ergebnisse:
- Die Videonutzlast kommt an, wird aber nicht dekodiert.
- Audiospur wird ignoriert.
- ONVIF-Metadatenspur löst unbekannte Nutzlastfehler aus.
- H.265 wird mit H.264 verwechselt.
- AAC-Taktrate oder Kanalanzahl ist falsch.
Der Nutzlasttyp ändert sich zwischen Sitzungen
Kodieren Sie dynamische Payload-IDs nicht fest. Eine Kamera kann nach einem Neustart, einer Profiländerung, einem Firmware-Update oder einer Stream-Pfad-Änderung unterschiedliche Nutzlastnummern zuweisen.
Zum Beispiel:
Session A: payload 96 = H264
Session B: payload 96 = H265
Session C: payload 97 = H264, payload 96 = metadata
The correct behavior is to parse SDP per session and bind RTP packet payload IDs to that session's mapping.
H.264 and H.265 confusion
H.264 and H.265 both often use 90 kHz RTP clocks, but their packetization and codec configuration are different. A client using the H.264 depacketizer for H.265 packets will not produce valid video.
Symptoms:
- RTP packets arrive.
- Payload type is dynamic.
- SDP says H265 but client expects H264.
- Decoder reports invalid NAL units.
- Video is black or never starts.
Always check SDP before concluding that the camera "sends bad video."
AAC and MPEG4-GENERIC
Audio tracks can be just as tricky. AAC over RTP often uses MPEG4-GENERIC with parameters such as mode, config, sizeLength, indexLength, and profile-level-id.
If the client ignores fmtp, audio may fail even though packets arrive.
Relevant SDP:
a=rtpmap:97 MPEG4-GENERIC/48000/2
a=fmtp:97 streamtype=5; profile-level-id=1; mode=AAC-hbr; config=...
Nutzlasttyp, Taktrate, Kanäle und FMTP-Parameter sind alle wichtig.
Metadaten-Tracks und Anbietererweiterungen
ONVIF-Metadaten, Analyse-Overlays, private Ereignisspuren und herstellerspezifische Nutzlasten können in SDP angezeigt werden. Ein Mediaplayer weiß möglicherweise nicht, was er damit machen soll.
Dies ist nicht unbedingt ein Streamfehler. Dies kann bedeuten, dass der Client nicht unterstützte Nicht-Medientitel ignorieren sollte, während er weiterhin Video und Audio verarbeitet. Wenn der Client jedoch unbekannte Metadaten als schwerwiegend einstuft, kann die Wiedergabe fehlschlagen.
RTSP Inspector soll dabei helfen, den Tracktyp und die Payload-Zuordnung zu identifizieren und festzustellen, ob es sich bei unbekannten Payloads um Video, Audio, Metadaten oder private Daten handelt.
Debug-Checkliste
Verwenden Sie diesen Prozess:
- Erfassen Sie das von „DESCRIBE“ zurückgegebene SDP.
- Listen Sie jeden „m=“-Medienabschnitt auf.
- Listen Sie jeden dynamischen Nutzlasttyp auf.
- Ordnen Sie Payload-IDs mit „a=rtpmap“ zu.
- Überprüfen Sie „a=fmtp“ auf Codec-Konfiguration.
- Vergleichen Sie die Werte des RTP-Paket-Nutzlasttyps mit SDP.
- Überprüfen Sie, ob sich Payload-IDs zwischen Sitzungen ändern.
- Trennen Sie Video, Audio, Metadaten und private Titel.
- Stellen Sie sicher, dass der Client für jeden erforderlichen Codec über einen Depaketierer verfügt.
- Ignorieren Sie nicht unterstützte optionale Spuren nur, wenn die Anwendung dies sicher kann.
Endgültige Diagnose
Eine Nichtübereinstimmung des dynamischen RTP-Payload-Typs tritt auf, wenn der Client eingehende RTP-Pakete nicht dem richtigen Codec oder Track zuordnen kann. Die Lösung besteht darin, SDP als Autorität für die Sitzung zu behandeln: „rtpmap“ analysieren, „fmtp“ analysieren, Payload-IDs pro Sitzung binden und erforderliche Medienspuren von optionalen Metadaten unterscheiden.
RTSP Inspector unterstützt diesen evidenzorientierten Arbeitsablauf, indem es SDP und RTP nebeneinander anzeigt, sodass Nutzlastprobleme diagnostiziert werden können, bevor die Schuld der Kamera, dem Decoder oder dem Netzwerk zugeschrieben wird.