Secure Reliable Transport (SRT) is an open source video transport protocol that utilises the UDP transport protocol. The SRT Protocol specification is available as an Internet Draft from the IETF.[1]
SRT provides connection and control, reliable transmission similar to TCP; however, it does so at the application layer, using UDP protocol as an underlying transport layer. It supports packet recovery while maintaining low latency (default: 120 ms). SRT also supports encryption using AES.
The protocol was derived from the UDT project,[2] which was designed for fast file transmission. It provided the reliability mechanism by utilising similar methods for connection, sequence numbers, acknowledgements and re-transmission of lost packets. It utilises selective and immediate (NAK-based) re-transmission.
SRT added several features on top of that in order to support live streaming mode:
SRT packets are created at the application layer and handed to the transport layer for delivery. Each unit of SRT media or control data created by an application begins with the SRT packet header.[1]
1 | 2 | 3 | ||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Octet | Bit | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | |
0 | 0 | F | Field meaning depends on the packet type | |||||||||||||||||||||||||||||||
4 | 32 | Field meaning depends on the packet type | ||||||||||||||||||||||||||||||||
8 | 64 | Timestamp | ||||||||||||||||||||||||||||||||
12 | 96 | Destination Socket ID | ||||||||||||||||||||||||||||||||
... | ... | Packet Contents (depends on the packet type) |
1 | 2 | 3 | ||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Octet | Bit | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | |
0 | 0 | 0 | Packet Sequence Number | |||||||||||||||||||||||||||||||
4 | 32 | PP | O | KK | R | Message Number | ||||||||||||||||||||||||||||
8 | 64 | Timestamp | ||||||||||||||||||||||||||||||||
12 | 96 | Destination Socket ID | ||||||||||||||||||||||||||||||||
... | ... | Data |
The fields in the header are as follows:
1 | 2 | 3 | ||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Octet | Bit | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | |
0 | 0 | 1 | Control Type | Subtype | ||||||||||||||||||||||||||||||
4 | 32 | Type-specific Information | ||||||||||||||||||||||||||||||||
8 | 64 | Timestamp | ||||||||||||||||||||||||||||||||
12 | 96 | Destination Socket ID | ||||||||||||||||||||||||||||||||
... | ... | Control Information Field (CIF) |
The fields in the header are as follows:
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. 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.[3] When performing retransmissions, SRT only attempts to retransmit packets for a limited amount of time based on the latency as configured by the application.[4]
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.[5]
The reference implementation of the protocol was originally published under the Lesser General Public License version 2.1,[6] but was relicensed under the Mozilla Public License on 22 March 2018.[7]
SRT is supported in the free software multimedia frameworks GStreamer, FFmpeg, OBS Studio and in VLC free software media player.[4] [8]
The UDP-based Data Transfer Protocol (UDT) project has been a base for the SRT project.[9] The SRT C API is largely based in design on the UDT API[10]
SRT was designed for low-latency live video transmission.
Haivision released the SRT protocol and reference implementation as open source at the 2017 NAB Show.
In March 2020, an individual Internet-Draft, draft-sharabayko-mops-srt,[1] was submitted for consideration to the Media OPerationS (MOPS) working group of the Internet Engineering Task Force.
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 Streaming Engine.[11]
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 the first two were derived from UDT:
The SRT library also offers these features:
Further and more detailed documentation can be found in the Source code documentation.