# Real-Time Transport Protocol

RTP (Real-Time Transport Protocol) :
| Familie: | Netzwerkprotokoll |
| Einsatzgebiet: | Transport von Medien-Streams |
| Port: | beliebiger freier, gerader Port ab 1024 |
| RTP im TCP/IP-Protokollstapel: Anwendung RTP Transport UDP Internet IP (IPv4, IPv6) Netzzugang Ethernet Token Bus Token Ring FDDI … ||
| Standard: | RFC 3550 (RTP: A Transport Protocol for Real-Time Applications), 2003 |
Das Real-Time Transport Protocol (RTP) ist ein Protokoll zur kontinuierlichen Übertragung von audiovisuellen Daten (Streams) über IP-basierte Netzwerke. Das Protokoll wurde erstmals 1996 im RFC 1889 standardisiert. 2003 wurde es durch RFC 3550 abgelöst.
Es dient dazu, Multimedia-Datenströme (Audio, Video, Text etc.) über Netzwerke zu transportieren, d. h. die Daten zu kodieren, zu paketieren und zu versenden. RTP ist ein Paket-basiertes Protokoll und wird normalerweise über UDP betrieben. RTP kann sowohl für Unicast-Verbindungen als auch für Multicast-Kommunikation im Internet eingesetzt werden. Das RealTime Control Protocol (RTCP) arbeitet mit RTP zusammen und dient der Aushandlung und Einhaltung von Quality-of-Service-Parametern (QoS).
Es findet Anwendung in vielen Bereichen, u. a. wird es bei den IP-Telefonie-Standards H.323 und SIP dazu verwendet, die Audio- und Videoströme des Gespräches zu übertragen.
Die Funktion von RTP besteht hauptsächlich in der Übertragung von Datenströmen, die Echtzeit benötigen, während das Real-Time Streaming Protocol (RTSP) der Steuerung und Kontrolle der Datenübertragung dient.
Das Datagram Congestion Control Protocol (DCCP) ist ein aktueller Ansatz, um auch für Medienströme auf RTP/UDP-Basis Staukontrolle zu ermöglichen.

## Architektur
### Synchronization Source

    Die Datenquelle wird als Synchronization Source (SSRC) bezeichnet und durch einen Identifikator (32 Bit) im Header gekennzeichnet.

### Translator

    Ein Translator leitet eingehende RTP-Pakete weiter und lässt dabei den SSRC-Identifikator intakt. Translator können die Daten unverändert lassen und dienen zum Beispiel zum Überwinden von Firewalls. Sie können jedoch auch die Kodierung der übertragenen Daten verändern, dabei müssen im Header die Felder Payload Type und Timestamp angepasst werden. Die Umkodierung geschieht für den Empfänger transparent.

### Mixer

    Mixer kombinieren die Datenströme mehrerer Quellen zu einem neuen Datenstrom und leiten diesen weiter. Dabei kann auch die Kodierung verändert werden. Da die Datenströme der zu kombinierenden Quellen nicht zwangsweise synchronisiert sind, muss der Mixer ein eigenes Timing für den kombinierten Stream erzeugen. Aus diesem Grund trägt der Mixer bei allen ausgehenden Paketen seine eigene SSRC-ID in das entsprechende Feld ein. Um die Identität der ursprünglichen Quellen zu bewahren, werden deren SSRC-Identifikatoren in die Liste der CSRC-Identifikatoren eingetragen.

### Empfänger

    Der Empfänger der RTP-Pakete sortiert diese anhand der Sequenznummern und stellt sie der jeweiligen Anwendung zur Verfügung.

### RTP-Paket

    Ein RTP-Paket besteht aus einem Header mit Versions- und Sequenznummer, Datenformat, Sender-ID und Zeitstempel und dem Nutzdatenteil.

## RTP-Header

| Byte 0 | Byte 0 | Byte 0 | Byte 0 | Byte 0 | Byte 0 | Byte 0 | Byte 0 | Byte 1 | Byte 1 | Byte 1 | Byte 1 | Byte 1 | Byte 1 | Byte 1 | Byte 1 | Byte 2 | Byte 2 | Byte 2 | Byte 2 | Byte 2 | Byte 2 | Byte 2 | Byte 2 | Byte 3 | Byte 3 | Byte 3 | Byte 3 | Byte 3 | Byte 3 | Byte 3 | Byte 3 |
| Bit 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | Bit 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | Bit 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | Bit 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| V=2 | V=2 | P | X | CC | CC | CC | CC | M | PT | PT | PT | PT | PT | PT | PT | Sequence Number | Sequence Number | Sequence Number | Sequence Number | Sequence Number | Sequence Number | Sequence Number | Sequence Number | Sequence Number | Sequence Number | Sequence Number | Sequence Number | Sequence Number | Sequence Number | Sequence Number | Sequence Number |
| Timestamp (in sample rate units) ||||||||||||||||||||||||||||||||
| Synchronization Source (SSRC) identifier ||||||||||||||||||||||||||||||||
| Contributing Source (CSRC) identifiers (optional) ||||||||||||||||||||||||||||||||
| Header Extension (optional) ||||||||||||||||||||||||||||||||

### Version (V), 2 bit

    Versionsstand des RTP-Protokolls

### Padding (P), 1 bit

    Das Füll-Bit ist gesetzt, wenn ein oder mehrere Füll-Bytes am Ende des Pakets angehängt sind, die nicht zum eigentlichen Dateninhalt (Payload) gehören. Das letzte Füll-Byte gibt die Anzahl der hinzugefügten Füll-Byte an. Füll-Byte werden nur dann benötigt, wenn nachfolgende Protokolle eine vorgegebene Blockgröße benötigen, z. B. Verschlüsselungsalgorithmen.

### Extension (X), 1 bit

    Das Erweiterungs-Bit ist gesetzt, wenn der Header um genau einen Erweiterungs-Header ergänzt wird.

### CSRC Count (CC), 4 bit

    Der CSRC-Zähler gibt die Anzahl der CSRC-Identifier an.

### Marker (M), 1 bit

    Das Marker-Bit ist für anwendungsspezifische Verwendungen reserviert. Es wird genutzt zur Kennzeichnung von Ereignissen, z. B. dem Auftreten des Endes eines Einzelbildes einer Videosequenz.

### Payload Type (PT), 7 bit

    Dieses Feld beschreibt das Format des zu transportierenden RTP-Inhalts, also der Nutzdaten (Payload).
| Payloadnr. | Codec | Audio/Video | Abtastrate | Audiokanäle | RFC |
| 0 | PCMU | A | 8 kHz | 1 | 3551 |
| 3 | GSM | A | 8 kHz | 1 | 3551 |
| 4 | G723 | A | 8 kHz | 1 | 3551 |
| 5 | DVI4 | A | 8 kHz | 1 | 3551 |
| 6 | DVI4 | A | 16 kHz | 1 | 3551 |
| 7 | LPC | A | 8 kHz | 1 | 3551 |
| 8 | PCMA | A | 8 kHz | 1 | 3551 |
| 9 | G.722 | A | 8 kHz | 1 | 3551 |
| 10 | L16 | A | 44,1 kHz | 2 | 3551 |
| 11 | L16 | A | 44,1 kHz | 1 | 3551 |
| 12 | QCELP | A | 8 kHz | 1 | 3551 |
| 13 | CN | A | 8 kHz | 1 | 3389 |
| 14 | MPA | A | 90 kHz | 1 | 3551, 2250 |
| 15 | G.728 | A | 8 kHz | 1 | 3551 |
| 16 | DVI4 | A | 11,025 kHz | 1 | |
| 17 | DVI4 | A | 22,05 kHz | 1 | |
| 18 | G.729 | A | 8 kHz | 1 | 3551 |
| 25 | CelB | V | 90 kHz | | 3551, 2029 |
| 26 | JPEG | V | 90 kHz | | 3551, 2435 |
| 28 | nv | V | 90 kHz | | 3551 |
| 31 | H.261 | V | 90 kHz | | 3551, 2032 |
| 32 | MPV | V | 90 kHz | | 3551, 2250 |
| 33 | MP2T | AV | 90 kHz | | 3551, 2250 |
| 34 | H.263 | V | 90 kHz | | 3551, 2250 |
| 96-127 | dynamisch | | | | 3551 |

### Sequence Number, 16 bit

    Die Sequenznummer wird für jedes weitere RTP-Datenpaket erhöht. Die Startnummer wird zufällig ausgewählt und ist nicht vorherbestimmbar. Der Empfänger kann mit Hilfe der Sequenznummer die Paketreihenfolge wiederherstellen und den Verlust von Paketen erkennen.

### Timestamp, 32 bit

    Der Zeitstempel gibt den Zeitpunkt des ersten Bytes des RTP-Datenpakets an. Der Zeitpunkt muss sich an einem Takt orientieren, der kontinuierlich und linear ist, damit die Synchronität des Streams sichergestellt und Laufzeitunterschiede der Übertragungsstrecke (Jitter) ermittelt werden können. Der Startwert sollte wie die Sequenznummer ein zufälliger Wert sein. Aufeinanderfolgende Pakete können den gleichen Zeitstempel haben, wenn die transportierten Daten z. B. zum selben Einzelbild ("video frame") gehören. Pakete mit aufeinanderfolgenden Sequenznummern können aber auch nicht aufeinanderfolgende Zeitstempel enthalten, wenn wie z. B. bei komprimiertem Video Übertragungs- und Wiedergabereihenfolge nicht übereinstimmen.

### SSRC, 32 bit

    Dieses Feld dient zur Identifikation der Synchronisationsquelle. Der Wert wird zufällig ermittelt, damit nicht zwei Quellen innerhalb der RTP-Session die gleiche Identifikationsnummer besitzen.

### CSRC List, 0 bis 15 Felder je 32 bit

    Die CSRC-Liste dient zur Identifikation der Quellen, die in den RTP-Nutzdaten enthalten sind. Die Anzahl der Listenfelder wird im CC-Feld angegeben. Falls mehr als 15 Quellen vorkommen, werden nur 15 identifiziert. Die Liste wird von Mixern eingefügt, die dazu den Inhalt des SSRC-Feldes der beteiligten Quellen einsetzen.