ZLS: A Reliable Live Streaming Protocol
ZLS is still experimental and subject to change!
ZLS Overview
ZLS is an HTTP-based live streaming protocol that does its best to work well in difficult environments, typically outdoors and using a cellular network, e.g.: unreliable 4G/LTE or 5G. ZLS allows pushing multiples segments of different kinds: video, audio, and even user-defined data. The latter is pretty convenient to pass arbitrary data relative to the live stream, such as the name of the current street.
Goals
Priority of stream when the connection is degraded. A stream may be temporarily dropped to avoid congestion and allow other more important stream to pass. For example, audio segments may pass while video segments are dropped for a few seconds until the connection is strong enough again, so the audience can at least hear.
HTTP-based: because it makes implementing servers and clients easy.
Segments-based: because it makes interoparibility with the end delivery phrase easier, typically using HLS or DASH. Segments can be re-used as is.
Why not use...
...RTMP?
- RTMP works well in a reliable network setup, typically between a broadband connection and a Twitch POP.
- It's a difficult protocol to implement and to work with.
- Not really open.
...SRT?
- The normal version of SRT is UDP-based. It may be beneficial because of the low latency and to have control on the head-of-line blocking problem. However, we may suspect mobile carriers to treat UDP flows weirdly and unreliably.
- SRT supports a "too late" packet dropping mechanism, which is useful. But it cannot drop only certain kind of packets selectively natively. In ZLS, each stream has a priority level which defines how "too late" segments are dropped.