Internettechnologien 2
RTPHandler
Methoden für Sender
- jpegToRtpPacket
- Generierung eines RTP-Pakets aus einem JPEG + FEC Generierung
- isFecPacketAvailable
- ist eine FEC-GRuppe vollständig?
- createFecPacket
- erzeuge das entsprechende FEC-Paket
Methoden für Empfänger
- processRtpPacket
- verarbeitet empfangenes RTP-Paket (Speicherung an korrektem Index)
- nextPLaybackImage
- holt nächstes Bild für die Anzeige
- getReceptionStatistics
- Statistiken
FECHandler
- setFecGroupSize
- Sender kann zur Laufzeit Gruppengröße ändern
- setRtp
- Sender baut FEC aus gegebenen Media-RTPs
- checkCorrection
- Prüft das auf das Vorhandensein aller zur Korrektur notwendigen RTP-Pakete.
- correctRTP
- Korrigiert das fehlende RTP-Paket, indem alle vorhandenen RTP-Pakete mit dem betreffenden FEC-Paket XOR-verknüpft werden. Dies realisiert die Methode addRtp der Klasse FECpacket.
Jitter-Puffer im RTPHandler und FEC-Stack im FECHandler
Im RTP-/FECHandler werden mehrere HashMaps für die Pufferung und Indizierung der empfangenen Pakete verwendet:
- mediaPackets (RTP-Handler)
- Speicher für empfangene RTP-Pakete, Nr entsprechend dem Index/Sequenznummer
- tsList (FEC-Handler)
- Liste der RTP-Pakete mit gleichem Timestamp, diese RTPs gehören zu einem Bild
- fecStack (FEC-Handler)
- Speicher für empfangene FEC-Pakete, die Nr ist chronologisch entsprechend dem Index/Sequenznummer
- fecNr (FEC-Handler)
- Nummer des mit dem Index verknüpften FEC-Paketes (wird aus dem empfangenen FEC-Paket ermittelt)
- fecList (FEC-Handler)
- Nummern aller mit dem Index über die FEC-Gruppe verknüpften RTP-Pakete als Java-Liste (wird aus dem empfangenen FEC-Paket ermittelt)
Beispiel für Inhalt des Jitter-Puffers und des FEC-Stacks
Wenn beispielsweise RTP 5 fehlt, kann über den Eintrag 5 der Tabelle fecNr die Nummer des mit dem fehlenden RTP-Paket verknüpften FEC-Paket ermittelt werden (3). Über den Eintrag 5 der Tabelle fecList erhält man die mit einem bestimmten FEC-Paket verknüpften RTP-Pakete (5, 6). Eine Korrektur des fehlenden Pakets ist möglich, wenn alle anderen Pakete der Gruppe vorhanden sind. Im Beispiel sind aus der Gruppe alle Pakete außer Nr. 5 vorhanden, eine Korrektur des Medienpakets Nr.5 ist also möglich.
Index/SN | mediaPackets | fecStack | fecNr | fecList |
---|---|---|---|---|
1 | RTP 1 (TS100) | FEC 1 [1,2] | 1 | 1, 2 |
2 | RTP 2 (TS100) | FEC 2 [3,4] | 1 | 1, 2 |
3 | RTP 3 (TS200) | FEC 3 [5,6] | 2 | 3, 4 |
4 | RTP 4 (TS200) | 2 | 3, 4 | |
5 | 3 | 5, 6 | ||
6 | RTP 6 (TS300) | 3 | 5, 6 |
Nachfolgend ein Beispiel für die tsList
, zu jedem TimeStamp gehören 2 RTP-Pakete:
TimeStamp | tsList |
---|---|
100 | 1, 2 |
200 | 3, 4 |
300 | 5, 6 |
Ablauf der Korrektur
In der Methode checkCorrection wird über die entsprechende Liste der verknüpften RTP-Pakete iteriert. Der Rückgabewert True wird geliefert, wenn nur ein Paket aus der Liste fehlt.
Wenn die Prüfung mittels checkCorrection erfolgreich war, wird die Methode correctRTP aufgerufen. In dieser werden alle vorhandenen RTP-Pakete mit dem dazugehörigen FEC-Paket XOR-verknüpft. Das Ergebnis ist das verlorene RTP-Paket.
Realisiert wird dies durch die Methoden des betreffenden FEC-Pakets. Die Methode add fügt ein Medienpaket dem FEC-Paket hinzu. Dabei werden beide XOR-verknüpft. Wenn man alle vorhandenen Medienpakete dem FEC-Paket hinzugefügt hat, kann man mittels der Methode getLostRtp das verlorene Medienpaket erhalten. Dieses Medienpaket ist der Rückgabewert der Methode correctRTP.
Sequenzdiagramm für RTP-Stream
Dienstelemente eines bestätigten Dienstes
Request --> Indication
Confirm <-- Response
Sender – Zustandsdiagramm
Mathe mit Mathjax
Some inline Latex: \(a^2 + b^2 = c^2\)
Display equation:
\[\int e^{-kx} \, dx = -\frac{1}{k} e^{-kx}\]Letzte Änderung: 09. March 2023 14:53