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 RTP 5 (TS300)   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

sequenceDiagram participant S as Server participant FS as FEC-S participant So as Socket participant FC as FEC-C participant C as Client %% Kommentar Note over S: Start Server (k=2) Note over C: Start Client Note over S,C: RTSP-Kommuniation %% S->>+FS: RTP 1 FS->>So: RTP 1 So->>+FC: RTP 1 S->>FS: RTP 2 FS->>So: RTP 2 So->>FC: RTP 2 FS->>-So: FEC 1 (1+2) So->>FC: FEC 1 (1+2) %% S->>+FS: RTP 3 FS->>So: RTP 3 So->>FC: RTP 3 S->>FS: RTP 4 FS->>So: RTP 4 Note over So: Packet Lost %%So->>FC: RTP 4 FS->>-So: FEC 2 (3+4) So->>FC: FEC 2 (3+4) %% Note over So: ... C->>FC: get RTP 1 FC->>C: RTP 1 C->>FC: get RTP 2 FC->>C: RTP 2 %% C->>FC: get RTP 3 FC->>C: RTP 3 C->>+FC: get RTP 4 FC->>-C: RTP 4 %% Start FC->>-C: Finish

Dienstelemente eines bestätigten Dienstes

Request --> Indication
Confirm <-- Response 

Sender – Zustandsdiagramm

stateDiagram %% Kommentar s1: Wait für HL-Data s2: Wait for ACK [*] --> s1 s1 --> s2: HL-send req | send packet note right of s1: Start or Data note right of s2: ACK for 0/1

Mermaid-Demo

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