6. Hinzufügen und Entfernen von SSRCs
6.1. Hinzufügen von RTP-Strömen
Wenn ein Endpunkt einen neuen RTP-Strom hinzufügt (d. h. beginnt, einen neuen SSRC zu verwenden):
- MUSS er so bald wie möglich ein RTCP-Paket für den neuen SSRC senden
- Das erste RTCP-Paket SOLLTE ein SDES-Paket mit CNAME enthalten
- Andere Teilnehmer erfahren durch diese RTCP-Pakete vom neuen SSRC
- Der Endpunkt MUSS sicherstellen, dass der neue SSRC innerhalb der Sitzung eindeutig ist
6.2. Entfernen von RTP-Strömen
Wenn ein Endpunkt die Verwendung eines SSRCs einstellt:
- SOLLTE er ein BYE-Paket für diesen SSRC senden
- Das BYE-Paket ermöglicht es anderen Teilnehmern, den SSRC schnell aus ihren Datenbanken zu entfernen
- Wenn kein BYE gesendet wird, lassen andere Teilnehmer den SSRC schließlich per Timeout ablaufen
- Nach dem Senden von BYE SOLLTE der SSRC in derselben Sitzung NICHT wiederverwendet werden
7. RTCP-Überlegungen für Ströme mit unterschiedlichen Raten
Wenn ein Endpunkt mehrere RTP-Ströme mit sehr unterschiedlichen Paketraten sendet, gelten besondere Überlegungen.
7.1. Timeout von SSRCs
7.1.1. Probleme mit dem RTP/AVPF-Parameter T_rr_interval
Die ursprüngliche RTP/AVPF-Spezifikation hatte Probleme mit dem SSRC-Timeout, wenn Ströme unterschiedliche Raten hatten. Der Parameter T_rr_interval konnte zu einem vorzeitigen Timeout von Strömen mit niedriger Rate führen.
7.1.2. Vermeidung von vorzeitigem Timeout
Um einen vorzeitigen Timeout zu vermeiden:
- Empfänger DÜRFEN einen SSRC NICHT allein aufgrund des Fehlens von RTP-Paketen per Timeout ablaufen lassen
- RTCP-Pakete MÜSSEN bei der Bestimmung, ob ein SSRC noch aktiv ist, berücksichtigt werden
- Die Timeout-Periode sollte auf dem RTCP-Berichtsintervall basieren, nicht auf der RTP-Paketrate
7.1.3. Interoperabilität zwischen RTP/AVP und RTP/AVPF
Wenn RTP/AVP- und RTP/AVPF-Endpunkte interagieren:
- Beide müssen kompatible Timeout-Regeln verwenden
- Es sollten die konservativeren Timeout-Regeln angewendet werden
- Es muss darauf geachtet werden, dass SSRCs nicht vorzeitig per Timeout ablaufen
7.1.4. Aktualisierte SSRC-Timeout-Regeln
Dieses Dokument aktualisiert RFC 4585 mit den folgenden Timeout-Regeln:
Ein SSRC gilt als inaktiv und DARF (MAY) aus der Teilnehmerdatenbank entfernt werden, wenn:
- Für eine Dauer vom 5-fachen des RTCP-Berichtsintervalls keine RTP- oder RTCP-Pakete für diesen SSRC empfangen wurden
- Ein BYE-Paket für diesen SSRC empfangen wurde
Das für die Timeout-Berechnung verwendete RTCP-Berichtsintervall sollte sein:
- Bei RTP/AVP: Das berechnete Intervall basierend auf der Sitzungsbandbreite
- Bei RTP/AVPF: Der größere Wert von T_rr_interval und dem berechneten Intervall
7.2. Abstimmung von RTCP-Übertragungen
7.2.1. RTP/AVP und RTP/SAVP
Für RTP/AVP- und RTP/SAVP-Profile:
- Die RTCP-Bandbreite wird von allen SSRCs eines Endpunkts geteilt
- Der Endpunkt sollte die RTCP-Bandbreite fair auf seine SSRCs verteilen
- Ströme mit niedriger Rate sollten dennoch regelmäßig RTCP senden, um einen Timeout zu vermeiden
7.2.2. RTP/AVPF und RTP/SAVPF
Für RTP/AVPF- und RTP/SAVPF-Profile:
- Der Parameter T_rr_interval gilt pro SSRC
- Jeder SSRC muss mindestens einmal pro T_rr_interval regelmäßige RTCP-Pakete senden
- Feedback-Nachrichten können innerhalb der Einschränkungen des Profils häufiger gesendet werden
8. Sicherheitsüberlegungen
Es gelten die Sicherheitsüberlegungen von RTP [RFC3550] und RTP/AVPF [RFC4585]. Die Verwendung mehrerer SSRCs führt keine neuen Sicherheitsanfälligkeiten ein, aber Implementierer sollten sich folgender Punkte bewusst sein:
- SSRC-Kollision: Böswillige Endpunkte könnten absichtlich SSRC-Kollisionen verursachen
- Ressourcenerschöpfung: Ein Angreifer könnte viele SSRCs erstellen, um die Ressourcen des Empfängers zu erschöpfen
- Identitätsvortäuschung (Impersonation): Ohne ordnungsgemäße Authentifizierung könnte ein Angreifer SSRCs vortäuschen
Implementierungen SOLLTEN (SHOULD):
- SRTP [RFC3711] verwenden, um RTP- und RTCP-Pakete zu schützen
- Die Anzahl der von einem einzelnen Endpunkt akzeptierten SSRCs begrenzen
- Die SSRC-Inhaberschaft durch RTCP CNAME und andere Mechanismen validieren
9. Referenzen
9.1. Normative Referenzen
- [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, März 1997.
- [RFC3550] Schulzrinne, H., et al., "RTP: A Transport Protocol for Real-Time Applications", STD 64, RFC 3550, Juli 2003.
- [RFC4585] Ott, J., et al., "Extended RTP Profile for Real-time Transport Control Protocol (RTCP)-Based Feedback (RTP/AVPF)", RFC 4585, Juli 2006.
- [RFC3711] Baugher, M., et al., "The Secure Real-time Transport Protocol (SRTP)", RFC 3711, März 2004.
9.2. Informative Referenzen
- [RFC4588] Rey, J., et al., "RTP Retransmission Payload Format", RFC 4588, Juli 2006.
- [RFC5109] Li, A., "RTP Payload Format for Generic Forward Error Correction", RFC 5109, Dezember 2007.
- [CLUE-FRAME] Duckworth, M., et al., "Framework for Telepresence Multi-Streams", Work in Progress, 2015.
- [SDP-BUNDLE] Holmberg, C., et al., "Negotiating Media Multiplexing Using SDP", Work in Progress, 2016.
- [MULTI-RTP] Westerlund, M., et al., "Multiple RTP Sessions on a Single Lower-Layer Transport", Work in Progress, 2016.