Über SRT | Funktionen | Erste Schritte | Bauanleitung | Beispiel-Apps und -Tools | Mitmachen | Lizenz | Veröffentlichungen
Secure Reliable Transport (SRT) ist ein Transportprotokoll für Live-Video- und Audio-Streaming mit extrem geringer Latenz (unter einer Sekunde) sowie für die generische Massendatenübertragung 1 . SRT ist als Open-Source-Technologie mit dem Code auf GitHub, einem veröffentlichten Internet Draft und einer wachsenden Community von SRT-Benutzern verfügbar.
SRT wird im Rahmen eines Videostream-Workflows auf Beitrags- und Verteilungsendpunkte angewendet, um jederzeit die beste Videoqualität und die geringste Latenz zu liefern.
Sicher | Verschlüsselt Videostreams |
Zuverlässig | Wiederherstellung nach schwerem Paketverlust |
Transport | Passt sich dynamisch an sich ändernde Netzwerkbedingungen an |
In Live-Streaming-Konfigurationen sorgt das SRT-Protokoll für eine konstante End-to-End-Latenz. Dadurch können die Signaleigenschaften des Live-Streams auf der Empfängerseite wiederhergestellt werden, wodurch der Bedarf an Pufferung reduziert wird. Während Pakete von der Quelle zum Ziel gestreamt werden, erkennt SRT die Netzwerkbedingungen zwischen den beiden Endpunkten in Echtzeit und passt sich diesen an. Es trägt dazu bei, Jitter und Bandbreitenschwankungen aufgrund von Überlastungen in verrauschten Netzwerken auszugleichen.
SRT implementiert AES-Verschlüsselung, um die Nutzlast der Medienströme zu schützen, und bietet verschiedene Fehlerbehebungsmechanismen zur Minimierung des für Internetverbindungen typischen Paketverlusts, wobei Automatic Repeat reQuest (ARQ) die primäre Methode ist. Wenn ein Empfänger bei ARQ feststellt, dass ein Paket fehlt, sendet er eine Warnung an den Absender und fordert eine erneute Übertragung dieses fehlenden Pakets an. Forward Error Correction (FEC) und Connection Bonding, die nahtlosen Stream-Schutz und hitless Failover bieten, werden ebenfalls vom Protokoll unterstützt.
Um mehr über das Protokoll zu erfahren, abonnieren Sie den Innovation Labs Blog auf
Um eine Frage zu stellen, nehmen Sie an der Unterhaltung im #development -Kanal teil
? Klicken Sie auf die Schaltfläche ►, um eine Funktionsbeschreibung zu erweitern.
Unabhängig davon, wie unzuverlässig Ihr Netzwerk ist, kann SRT schwere Paketverluste und Jitter beheben und so die Integrität und Qualität Ihrer Videostreams sicherstellen.
Die Stream-Fehlerkorrektur von SRT ist konfigurierbar, um den Bereitstellungsbedingungen eines Benutzers gerecht zu werden. SRT nutzt die Echtzeit-IP-Kommunikationsentwicklung zur Erweiterung herkömmlicher Netzwerkfehlerbehebungsverfahren und liefert Medien mit deutlich geringerer Latenz als TCP/IP und bietet gleichzeitig die Geschwindigkeit der UDP-Übertragung mit deutlich verbesserter Zuverlässigkeit.
Im Gegensatz zu einigen anderen Streaming-Protokollen, die nur bestimmte Video- und Audioformate unterstützen, ist SRT nutzlastunabhängig. Da SRT auf der Netzwerktransportebene arbeitet und als Wrapper für Ihre Inhalte fungiert, kann es jede Art von Videoformat, Codec, Auflösung oder Bildrate transportieren.
Der von SRT verwendete Handshaking-Prozess unterstützt ausgehende Verbindungen ohne die potenziellen Risiken und Gefahren, die mit der Öffnung dauerhafter externer Ports in einer Firewall einhergehen. Dadurch bleiben die LAN-Sicherheitsrichtlinien des Unternehmens erhalten und die Notwendigkeit von IT-Eingriffen wird minimiert.
Mithilfe der 128/192/256-Bit-AES-Verschlüsselung, der Regierungen und Organisationen auf der ganzen Welt vertrauen, stellt SRT sicher, dass wertvolle Inhalte durchgängig vor der Verbreitung geschützt sind, sodass keine Unbefugten mithören können.
Mit SRT 1.4 wird die Paketfilter-API eingeführt. Dieser Mechanismus ermöglicht die Durchführung einer benutzerdefinierten Verarbeitung von Netzwerkpaketen auf der Senderseite vor dem Senden und auf der Empfängerseite nach dem Empfang aus dem Netzwerk. Die API ermöglicht es Benutzern, ihr eigenes Plugin zu schreiben und so die Fähigkeiten des SRT-Protokolls um alle Arten unterschiedlicher Paketfilterung noch weiter zu erweitern. Benutzer können die resultierenden Paketfilterdaten auf beliebige Weise manipulieren, z. B. für benutzerdefinierte Verschlüsselung, Paketprüfung oder den Zugriff auf Daten vor dem Senden.
Das erste Plugin, das als Beispiel dafür erstellt wurde, was mit der Paketfilter-API erreicht werden kann, dient der Forward Error Correction (FEC), die in bestimmten Anwendungsfällen eine etwas geringere Latenz als Automatic Repeat reQuest (ARQ) bieten kann. Dieses Plugin ermöglicht drei verschiedene Modi:
Nur ARQ – überträgt verlorene Pakete erneut,
Nur FEC – stellt den Overhead bereit, der für die FEC-Wiederherstellung auf der Empfängerseite erforderlich ist.
FEC und ARQ – überträgt verlorene Pakete erneut, die FEC nicht wiederherstellen kann.
Ähnlich wie SMPTE-2022-7 über verwaltete Netzwerke fügt Connection Bonding dem SRT-Protokoll nahtlosen Stream-Schutz und Hitless-Failover hinzu. Diese Technologie ist auf mehr als einen IP-Netzwerkpfad angewiesen, um bei Netzwerküberlastung oder -ausfällen Unterbrechungen der Live-Videostreams zu verhindern und so die Kontinuität des Dienstes aufrechtzuerhalten.
Dies wird mithilfe der in SRT v1.5 eingeführten Socket-Gruppen erreicht. Das allgemeine Konzept von Socket-Gruppen bedeutet, dass eine Gruppe mehrere Sockets enthält, wobei eine Operation zum Senden eines Datensignals auf die Gruppe angewendet wird. Einzelne Steckdosen innerhalb der Gruppe übernehmen diesen Vorgang und tun alles Notwendige, um das Signal an den Empfänger zu liefern.
Es werden zwei Modi unterstützt:
Broadcast – Im Broadcast- Modus werden Daten redundant über alle Mitgliedsverbindungen einer Gruppe gesendet. Wenn einer der Links ausfällt oder es zu Netzwerk-Jitter und/oder Paketverlust kommt, werden die fehlenden Daten über einen anderen Link in der Gruppe empfangen. Redundante Pakete werden auf der Empfängerseite einfach verworfen.
Main/Backup – Im Main/Backup- Modus wird jeweils nur eine (Haupt-)Verbindung für die Datenübertragung verwendet, während andere (Backup-)Verbindungen im Standby-Modus sind, um sicherzustellen, dass die Übertragung fortgesetzt wird, wenn die Hauptverbindung ausfällt. Das Ziel des Haupt-/Backup-Modus besteht darin, einen potenziellen Verbindungsabbruch zu erkennen, bevor er auftritt, und so ein Zeitfenster bereitzustellen, innerhalb dessen nahtlos zu einem der Backup-Links gewechselt werden kann.
Access Control ermöglicht es der Upstream-Anwendung, einzelnen SRT-Streams eine Stream-ID zuzuweisen. Durch die Verwendung einer eindeutigen Stream-ID, die entweder automatisch generiert oder angepasst wird, kann die Upstream-Anwendung mehrere SRT-Streams an eine einzige IP-Adresse und einen UDP-Port senden. Die Stream-IDs können dann von einem Empfänger verwendet werden, um Aufnahmestreams zu identifizieren und zu unterscheiden, Zugriffsmethoden für Benutzerkennwörter anzuwenden und in einigen Fällen sogar eine Automatisierung basierend auf der Benennung der Stream-ID anzuwenden. Beispielsweise könnte ein Beitrag an einen Videoproduktions-Workflow und die Überwachung an einen Überwachungsdienst gesendet werden.
Für Rundfunkveranstalter ist Stream ID der Schlüssel zum Ersatz von RTMP für die Aufnahme von Videostreams, insbesondere HEVC/H.265-Inhalten, in Cloud-Dienste oder CDNs, die über einen einzigen offenen IP-Socket (Adresse + Port) für eingehende Videos verfügen.
Die SRT-API | IETF Internet Draft | Beispiel-Apps |
Referenzdokumentation für die SRT-Bibliotheks-API | Der SRT Protocol Internet Draft | Anleitung zur Verwendung von Test-Apps ( srt-live-transmit , srt-file-transmit usw.) |
Technischer Überblick über SRT | SRT-Bereitstellungshandbuch | SRT-Kochbuch |
Technischer Überblick über den frühen Entwurf (Vorläufer des Internetentwurfs) | Ein umfassender Überblick über das Protokoll mit Bereitstellungsrichtlinien | Entwicklungshinweise zum SRT-Protokoll |
Innovation Labs-Blog | SRTLab YouTube-Kanal | Locker |
Der Blog auf Medium mit SRT-bezogenen technischen Artikeln | Technischer YouTube-Kanal mit nützlichen Videos | Slack-Kanäle, um die neuesten Updates zu erhalten und Fragen zu stellen Treten Sie der SRT Alliance auf Slack bei |
Warum SRT? – Eine kurze Geschichte und Begründung für SRT von Marc Cymontkowski.
RTMP vs. SRT: Whitepaper zum Vergleich von Latenz und maximaler Bandbreite.
Dokumentation auf GitHub mit SRT-API-Dokumenten, Funktionsbeschreibungen usw.
Der SRT-Protokoll-Internetentwurf: Datatracker | Neueste Version | Neueste Arbeitskopie | GitHub-Repo
Linux (Ubuntu/CentOS) | Windows | macOS | iOS | Android | Paketmanager
C++03 oder höher kompatibler Compiler.
CMake 2.8.12 oder höher als Build-System.
OpenSSL 1.1, um die Verschlüsselung zu aktivieren, andernfalls mit -DENABLE_ENCRYPTION=OFF
erstellen.
Multithreading wird durch eine der folgenden Methoden bereitgestellt:
C++11: Standardbibliothek ( std
by -DENABLE_STDCXX_SYNC=ON
CMake-Option),
C++03: Pthreads (für POSIX-Systeme ist es integriert, für Windows gibt es eine portierte Bibliothek).
Tcl 8.5 ist optional und wird vom ./configure
verwendet. Andernfalls verwenden Sie CMake direkt.
Ausführliche Beschreibungen des Build-Systems und der Optionen finden Sie im Dokument „SRT Build Options“.
Das aktuelle Repo bietet Beispielanwendungen und Codebeispiele, die die Verwendung der SRT-Bibliotheks-API veranschaulichen. Darunter sind srt-live-transmit
, srt-file-transmit
und andere Anwendungen. Die entsprechende Dokumentation finden Sie hier. Beachten Sie, dass alle Beispiele zu Lehrzwecken bereitgestellt werden und nicht in einer Produktionsumgebung verwendet werden sollten.
Das Dienstprogramm srt-xtransmit
wird aktiv für interne Tests und Leistungsbewertungen verwendet. Unter anderem unterstützt es die Generierung von Dummy-Nutzlasten, Verkehrsrouting und Verbindungsbündelung. Weitere Details finden Sie im srt-xtransmit
Repository selbst.
Python-Tools, die während der Entwicklung nützlich sein könnten, sind:
srt-stats-plotting
– Ein Skript zum Zeichnen von Diagrammen basierend auf SRT- .csv
-Statistiken.
lib-tcpdump-processing
– Eine Bibliothek zur Verarbeitung .pcap(ng)
tcpdump- oder Wireshark-Trace-Dateien und zum Extrahieren relevanter SRT-Pakete zur weiteren Analyse.
lib-srt-utils
– Eine Python-Bibliothek, die unterstützenden Code zum Ausführen von SRT-Tests basierend auf einer Experimentkonfiguration enthält.
Jeder ist willkommen, einen Beitrag zu leisten. Wenn Sie sich entscheiden, mitzumachen, nehmen Sie sich bitte einen Moment Zeit, um die Richtlinien durchzulesen:
SRT-Entwicklerhandbuch
Mitwirken
Probleme melden
Informationen zum Mitwirken am Internet Draft oder zum Einreichen von Problemen finden Sie im folgenden Repo. Das Repo für Beiträge zum SRT CookBook finden Sie hier.
Indem Sie Code zum SRT-Projekt beisteuern, erklären Sie sich damit einverstanden, Ihren Beitrag unter der MPLv2.0-Lizenz zu lizenzieren.
Versionshinweise
SRT-Versionierung
Der Begriff „Live-Streaming“ bezieht sich auf eine kontinuierliche Datenübertragung (MPEG-TS oder gleichwertig) mit Latenzmanagement. Live-Streaming basierend auf der Segmentierung und Übertragung von Dateien wie im HTTP Live Streaming (HLS)-Protokoll (wie in RFC8216 beschrieben) ist nicht Teil dieses Anwendungsfalls. In diesem Fall sollte eine Dateiübertragung im Nachrichten- oder Puffermodus in Betracht gezogen werden. Weitere Informationen finden Sie in Abschnitt 7. Best Practices und Konfigurationstipps für die Datenübertragung per SRT des Internet Draft. Beachten Sie, dass SRT inhaltsunabhängig ist, was bedeutet, dass jede Art von Daten über seine Nutzlast übertragen werden kann. ↩