RIST is a video transport protocol for professional low-latency video over lossy networks. It is also backward compatible with existing MPEG-TS and UDP protocols.
RIST is developed by the closed Video Services Forum. However there is interest in replacing it with protocols built in IETF. Usually VSF documents are kept behind paywalls etc., but the RIST specification was published under CC.
There are many reasons not to use TCP. Not just the latency spikes, but also multicast and multipathing. Also it allows the application to take control which makes things more flexible.
Various solutions exists. There is Forward Error Correction, but there will always be loss that can’t be dealt with. aggregatrtp and others are basically retransmission protocols; many proprietary ones exist.
RTP uses two UDP pairs: port N for RTP (main) and port N+1 for RTCP (control). RTP already has a NACK to trigger retransmission. 16-bit sequence numbers are used, which is a bit small nowadays, it wraps pretty quickly. To be able to NACK more data, the NACK has a base sequence number + a bitmask to indicate which packets where lost (if more than 1).
RIST adds a range NACK for bigger loss. However, it’s not very useful because when there are many retransmits, the overhead of sending multiple NACKs isn’t that much compared to the retransmissions.
RTT can be used to bound the number of retransmission requests.
Two open source RIST implementations exist: upipe and VLC rist://. Also a few proprietary implementations.
To be added to the protocol: encryption (probably DTLS), null packet removal, encoder bitrate changes. More difficult is scalable video, probably not very useful either.