Secure Reliable Transport
Secure Reliable Transport is an open source video transport protocol.
History
Secure Reliable Transport is an open source video transport protocol developed originally by Haivision. According to SRT Alliance, an organisation that promotes the technology, it optimises streaming performance across unpredictable networks, such as the Internet, by dynamically adapting to the real-time network conditions between transport endpoints. This helps minimise effects of jitter and bandwidth changes, while error-correction mechanisms help minimise packet loss. SRT supports end-to-end encryption with AES.[1] When performing retransmissions, SRT only attempts to retransmit packets for a limited amount of time based on the latency as configured by the application.[2]
According to Marc Cymontkowski, the architect of SRT, in addition to sending MPEG transport streams over the public internet, it is also being used for IoT connectivity, metadata exchange, as a communication protocol, as well as for uncompressed data delivery.[3]
The reference implementation of the protocol was originally published under the Lesser General Public License version 2.1,[4] but was relicensed under the Mozilla Public License on 22 March 2018.[5]
SRT is supported in the free software multimedia frameworks GStreamer, FFmpeg, OBS Studio and in VLC free software media player.[2][6]
The UDP-based Data Transfer Protocol (UDT) project has been a base for the SRT project.[7] The SRT C API is largely based in design on the UDT API[8]
SRT was designed for low-latency live video transmission.[7][1]
Haivision released the SRT protocol and reference implementation as open source at the 2017 NAB Show.[7]
In March 2020, an individual Internet-Draft, draft-sharabayko-mops-srt,[9] was submitted for consideration to the Media OPerationS (MOPS) working group of the Internet Engineering Task Force.
SRT Alliance
SRT Alliance is an organisation whose members develop, use and promote the Secure Reliable Transport protocol and software based on it. The founding members of the alliance are Haivision and Wowza.[10]
How it works
SRT can be thought of as a competitor for TCP, or implementation of the idea on the application level, using UDP as an underlying transport layer.
The derived UDT project, which was designed for fast file transmission, has provided the reliability mechanism, using a term of connection, sequence numbers, acknowledgments and retransmission of lost packets. It was improved towards the TCP protocol by using selective and immediate (NAK-based) retransmission. SRT was added several features on top of that in order to support live streaming mode:
- Controlled latency, with source time transmission (timestamp-based packet delivery)
- Relaxed sender speed control
- Conditional "too late" packet dropping (prevents head-of-line blocking caused by a lost packet that wasn't recovered on time)
- Eager packet retransmission (periodic NAK-report)
Implementation
There's currently one available implementation, which is the open-source SRT library.
The C language API is mainly based on the previous UDT API, with further changes as new features are added. The API is very similar to the one of TCP.
SRT offers actually three working modes, of which first two were derived from UDT:
- File-stream mode: like TCP
- File-message mode: similar to SCTP protocol - sending blocks of data with clearly defined boundaries
- Live mode: the data should be sent in small packets (usually up to 1316 bytes, if the transmitted stream is MPEG-TS) with already appropriate time intervals between them. The same single packets with the same time intervals between them are then delivered at the receiver side.
The SRT library offers also other interesting features:
- Encryption using a pre-shared key. Encryption support was originally provided by OpenSSL, now also alternatively Nettle (GNU TLS) or mbedTLS can be used.
- SRT Access Control (aka "StreamID") can be used by applications to identify resources and use user-password access method while using the same service port number for multiple purposes.[11]
- The optional Forward Error Correction mechanism.
Further and more detailed documentation can be found in the Source code documentation.
References
- Haivision. "Secure, Reliable, Transport". GitHub.
- Olivier Crête (16 February 2018). "SRT in GStreamer".
- "It glues everything together: an interview with Marc Cymontkowski, evangelist of SRT". Medialooks Blog. 5 November 2019.
- Michael Larabel (24 April 2017). "SRT Video Transport Protocol Open-Sourced". Phoronix.
- Roman rndi (22 March 2018). "Change License to MPLv2.0 · Haivision/srt@a75d4c4". GitHub.
- Olivier Crête (June 2018). "Secure Video Comes of Age". Linux Format magazine (237).
- Marc Cymontkowski. "Why We Created SRT and the Difference Between SRT and UDT".
- "Haivision srt API docs"
- Sharabayko, M.P; Sharabayko, M.A (2020). The SRT Protocol. IETF. I-D draft-sharabayko-mops-srt. Retrieved 26 March 2020.
- "Microsoft Joins SRT Open Source Streaming Project". The Broadcast Bridge. 17 September 2018.
- "SRT Access Control Guidelines". 7 November 2019.