HTTP Live Streaming
HTTP Live Streaming is an HTTP-based adaptive bitrate streaming communications protocol developed by Apple Inc. and released in 2009. Support for the protocol is widespread in media players, web browsers, mobile devices, and streaming media servers. As of 2019, an annual video industry survey has consistently found it to be the most popular streaming format.
HLS resembles MPEG-DASH in that it works by breaking the overall stream into a sequence of small HTTP-based file downloads, each downloading one short chunk of an overall potentially unbounded transport stream. A list of available streams, encoded at different bit rates, is sent to the client using an extended M3U playlist.
Based on standard HTTP transactions, HTTP Live Streaming can traverse any firewall or proxy server that lets through standard HTTP traffic, unlike UDP-based protocols such as RTP. This also allows content to be offered from conventional HTTP servers and delivered over widely available HTTP-based content delivery networks. The standard also includes a standard encryption mechanism and secure-key distribution using HTTPS, which together provide a simple DRM system. Later versions of the protocol also provide for trick-mode fast-forward and rewind and for integration of subtitles.
Apple has documented HTTP Live Streaming as an Internet Draft, the first stage in the process of publishing it as a Request for Comments. As of December 2015, the authors of that document have requested the RFC Independent Stream Editor to publish the document as an informational RFC outside of the IETF consensus process.
In August 2017, RFC8216 was published to describe version 7 of the protocol.
Architecture
HTTP Live Streaming uses a conventional web server to distribute audiovisual content and requires specific software. The service architecture comprises:;Server
;Distributor
;Client
Features
HTTP Live Streaming provides mechanisms for players to adapt to unreliable network conditions without causing user-visible playback stalling. For example, on an unreliable wireless network, HLS allows the player to use a lower quality video, thus reducing bandwidth usage. HLS videos can be made highly available by providing multiple servers for the same video, allowing the player to swap seamlessly if one of the servers fails.Adaptability
To enable a player to adapt to the bandwidth of the network, the original video is encoded in several distinct quality levels. The server serves an index, called a "master playlist", of these encodings, called "variant streams". The player can then choose between the variant streams during playback, changing back and forth seamlessly as network conditions change.Using fragmented MP4
On WWDC2016 Apple announced the inclusion of byte-range addressing for fragmented MP4 files, or fMP4, allowing content to be played in HLS without the need to multiplex it into MPEG-2 Transport Stream. The industry considered this as a step towards compatibility between HLS and MPEG-DASH.Low Latency HLS
Two unrelated HLS extensions with a "Low Latency" name and corresponding acronym exist:- Apple Low Latency HLS which was announced by Apple at WWDC2019
- "Community LHLS" which predated Apple's publication and is allegedly simpler
It works by adding partial media segment files into the mix, much like MPEG-CMAF's fMP4. Unlike CMAF, ALHLS also supports partial MPEG-2 TS transport files.
HTTP/2 is required to push the segments along with the playlist, reducing the overhead of establishing repeated HTTP/TCP connections.
Other features include:
- Playlist Delta Updates: only sending what changed between playlist, which typically fit in single MTU making it more efficient to load the playlists which, with large DVR windows, can be quite large.
- Blocking of playlist reload: when requesting live media playlists, wait until the first segment is also ready, and return both at same time
- Rendition Reports: add metadata to other media renditions to make switching between ABR faster
- New tags added: EXT-X-SERVER-CONTROL / EXT-X-PART / EXT-X-SKIP / EXT-X-RENDITION-REPORT
- URL QUERY_STRING ?_HLS callbacks added
Support for low-latency HLS is available in tvOS 13 beta, but not iOS & iPadOS 13 beta.
On April 30, 2020, Apple added the low latency specifications to the second edition of the main HLS specification.
Dynamic ad insertion
Dynamic ad insertion is supported in the HLS using splice information based on SCTE-35 specification. The SCTE-35 splice message is inserted on the media playlist file using the EXT-X-DATERANGE tag. Each SCTE-35 splice_info_section is represented by an EXT-X-DATERANGE tag with a SCTE35-CMD attribute. A SCTE-35 splice out/in pair signaled by the splice_insert commands are represented by one or more EXT-X-DATERANGE tags carrying the same ID attribute. The SCTE-35 splice out command should have the SCTE35-OUT attribute and the splice in command should have the SCTE35-IN attribute.Between the two EXT-X-DATERANGE tags that contain the SCTE35-OUT and SCTE35-IN attributes respectively there may be a sequence of media segment URIs. These media segments normally represent ad programs which can be replaced by the local or customized ad. The ad replacement does not require the replacement of the media files, only the URIs in the playlist need to be changed to point different ad programs. The ad replacement can be done on the origin server or on the client’s media playing device.
Server implementations
Notable server implementations supporting HTTP Live Streaming include:- Adobe Media Server supports HLS for iOS devices and Protected HTTP Live Streaming.
- Akamai supports HLS for live and on-demand streams.
- Instart supports HLS for on-demand streams.
- Amazon CloudFront supports HLS for on-demand streams.
- Bitmovin supports HLS for on-demand and live streaming.
- CDNetworks supports HLS for live and on-demand streams.
- Cisco Systems: supports full end to end delivery for Live/TSTV/VOD/HLS and Cloud DVR services.
- Cloudflare supports HLS for live and on-demand streams.
- EdgeCast Networks supports cross-device streaming using HLS.
- Helix Universal Server from RealNetworks supports iPhone OS 3.0 and later for live and on-demand HTTP Live or On-Demand streaming of H.264 and AAC content to iPhone, iPad and iPod.
- IIS Media Services from Microsoft supports live and on-demand Smooth Streaming and HTTP Live Streaming.
- Level 3 supports HLS live and on-demand streams.
- Limelight Networks supports HLS for some accounts.
- Nginx with the nginx-rtmp-module supports HLS in live mode. Commercial version Nginx Plus also supports HLS/HDS VOD.
- Nimble Streamer supports HLS in live and VOD mode, Apple Low Latency HLS spec is also supported.
- Node.js with the hls-server package supports hls encoding to live mode and local files conversion.
- Tata Communications CDN supports HLS for live and on-demand streams.
- TVersity supports HLS in conjunction with on-the-fly transcoding for playback of any video content on iOS devices.
- Unreal Media Server supports low latency HLS as of version 9.5.
- Ustream supports HLS delivery of live broadcasts. The ingested stream is re-transcoded if the original audio and video codec falls outside HLS requirements.
- VLC Media Player supports HLS for serving live and on-demand streams as of version 2.0.
- Wowza Streaming Engine from Wowza Media Systems supports HLS and encrypted HLS for live, on-demand streaming and Apple Low Latency HLS spec.
Usage
- Google added HTTP Live Streaming support in Android 3.0.
- HP added HTTP Live Streaming support in webOS 3.0.5.
- Microsoft added support for HTTP Live Streaming in EdgeHTML rendering engine in Windows 10 in 2015.
- Microsoft added support for HTTP Live Streaming in IIS Media Services 4.0.
- Yospace added HTTP Live Streaming support in Yospace HLS Player and SDK for flash version 1.0.
- Sling Media added HTTP Live Streaming support to its Slingboxes and its SlingPlayer apps.
- In 2014/15, the BBC introduced HLS-AAC streams for its live internet radio and on-demand audio services, and supports those streams with its iPlayer Radio clients.
Supported players and servers
- Windows 10
- macOS 10.6+
- iOS 3.0+
- Android 4.1+
Clients
Client | Platform | Live Streaming | DRM | As of Version | Editor |
Safari | macOS, iOS | 6.0+ Has full HLS support. | Apple | ||
Microsoft Edge | Windows 10 | EdgeHTML 12+ | Microsoft | ||
Google Chrome / Chromium | Windows, macOS, Linux, Android, iOS | 30+ Android and iOS have native OS support. Other platforms require Media Source Extensions. | |||
Firefox | Windows, macOS, Linux, Android, iOS | 50.0+ for Android and 57.0 for others, 59.0 has enhanced support for Android Other platforms require Media Source Extensions. | Mozilla | ||
QuickTime Player | macOS | 10.0+ Has full HLS support. | Apple | ||
iTunes | Windows, macOS | 10.1+ Has full HLS support. To play a HLS stream, go to File > Open Stream and replace "http://" with "itls://" or "itals://" in the stream URL. | Apple | ||
StreamS HiFi Radio | iOS, tvOS iPhone, iPad, and AppleTV | 7.3+ Plays Internet Radio Streams HLS Audio - 100% Compliant | StreamS/Modulation Index LLC | ||
VLC media player | Windows, macOS, Linux, Android, iOS, Windows Phone | VLC 2.x has partial support up to HLS version 3. VLC 3.0 has full HLS support. | VideoLAN | ||
Media Player Classic Home Cinema | Windows | Gabest, Doom9 forum users | |||
PotPlayer | Windows | Daum Communications | |||
MPlayer / SMPlayer / mpv | Windows, macOS, Linux, BSD | Ricardo Villalba | |||
GOM Player | Windows | Gretech | |||
Cameleon | Windows, macOS | Yatko | |||
Audacious | Windows, Linux | Audacious | |||
Radio Tray | Linux | Carlos Ribeiro | |||
Kodi | Windows, macOS, Linux, Android, iOS | 12.0 Alpha 5 and later DRM support requires a monthly/nightly build | XBMC Foundation | ||
MythTV | Windows, macOS, Linux, FreeBSD | 0.26 | MythTV | ||
JRiver Media Center | Windows, macOS | JRiver | |||
XiiaLive | Android, iOS | 3.0+ Plays internet radio streams. | Visual Blasters LLC | ||
Tunein radio | Android, iOS | 3.3+ Plays internet radio streams. | TuneIn | ||
myTuner Radio | Android, iOS, Windows Phone, Windows 8, macOS | Plays internet radio streams. | AppGeneration Software | ||
Internet Radio Player | Android | Plays internet radio streams. | MuserTech | ||
GuguRadio | iOS | Plays internet radio streams. | Leon Fan | ||
AIMP | Windows, Android | 4.10+ Plays internet radio streams. | Artem Izmaylov | ||
Mini Stream Player | Android | JogiApp | |||
MX Player | Android | J2 Interactive | |||
TV Streams | macOS, iOS, tvOS | v7.1 | Tiago Martinho | ||
HP Touchpad | WebOS | 3.0.5 | HP | ||
Amino x4x STB | Amino set-top boxes | 2.5.2 Aminet | Aminocom.com | ||
Dune HD TV | Dune HD set-top boxes | TV Series | dunehd.com | ||
CTU Systems Ltd | CTU Systems Ltd Eludo Play Out System | TV Series | ctusystems.com | ||
nangu.TV | Motorola set-top boxes | 2.0 | nangu.TV | ||
Roku Digital Video Player | Roku set-top boxes | Roku OS / SDK 2.6 | Roku | ||
Telebreeze Player | HTML, Android, iOS, Windows, MacOS, Roku, MAG Infomir, Samsung Tizen, LG WebOS, Google Chromecast, tvOS, Amazon Fire TV, AndroidTV | Telebreeze | |||
bitdash | HTML5 or Flash, Web and Mobile | Version 3.0+ | bitmovin | ||
3ivx | Windows 8, Windows Phone 8 & Xbox One | 2.0 | 3ivx | ||
THEOplayer | HTML5, SDK | THEO Technologies | |||
Viblast Player | HTML5, iOS, Android | Viblast Ltd | |||
Flowplayer | Adobe Flash, iOS, Android, HTML5 | The Flash HLS plugin is available from GitHub. | Flowplayer Ltd | ||
JW Player | Adobe Flash, iOS, Android, HTML5 | HLS is provided in all JW Player versions as of JW8 | JW Player | ||
Radiant Media Player | Adobe Flash, HTML5 | 1.5.0 | Radiant Media Player | ||
Yospace | Adobe Flash | 2.1 | Yospace | ||
Onlinelib | Adobe Flash | 2.0 | Onlinelib.de | ||
VODOBOX HLS Player | Adobe Flash, HTML5, iOS, Android | Vodobox | |||
NexPlayer | HTML5, Android, iOS, Chromecast, Windows, Mac, Linux, Tizen, WebOS | NexStreaming | |||
ffplay/avplay | FFmpeg/Libav | ||||
GPAC | 0.5.0 | Telecom ParisTech inc. | |||
QuickPlayer | Android, iOS, Windows 7, 8, 8,1 and 10 | Squadeo | |||
hls.js | MSE Browsers | Daily Motion open source | |||
hasplayer.js | MSE Browsers | open source | |||
Hola Player | HTML5, Adobe Flash, iOS, Android | All versions | Hola Ltd open source | ||
Shaka Player | HTML5 | 2.1 | Open Source | ||
Fluid Player | HTML5 | 2.2.0+ | Fluid Player OSS | ||
Video.js | MSE Browsers. Flash with flashls source handler fallback. | Open source |
Servers
Product | Technology | As Of Version | Editor | Free | Notes |
ANEVIA Genova Live | Bundled software for transcoding to H.264 & HEVC, and packaging to HLS, MPEG-DASH, MS Smooth Streaming | Anevia | |||
AvProxy | Light software for live streaming Input and output streams : HTTP, HLS/AES-128, UDP, RTP, MPTS demux | 2.19 | Proprietary but free for use | ||
bitcodin | SaaS | bitmovin | |||
VLC | 1.2 | ||||
Video Cloud | SaaS | Brightcove | |||
IIS Media Services | 4.0 | Microsoft | |||
Antik Media Streamer | Ingest Module, Stream replication UDP/HTTP, HLS streaming, Video archive with snapshots, Server-side Timeshift, time zone shifting with multiple time zones, Stream Encryption using AES and key-rotation | 3.0 | Antik technology | ||
Adobe Media Server | Live and VOD streaming as origin and edge server | 5.0 | Adobe | ||
Evostream Media Server | Cross-platform including embedded systems such as encoders, IP cameras, DVRs, and more. Supports: Adobe Flash RTMP, RTMPS, LiveFLV, full transcoder for creating lower bitrate streams, HTTP Live Streaming for streaming to iPhones, iPads and Androids, HTTP Dynamic Streaming for Adobe Air, Microsoft Smooth Streaming for Microsoft devices, RTSP with RTP or MPEG-TS, MPEG-TS, compatible Live Encoding, strong security for your content, built-in clustering mechanism and more. | 1.6.5 | EvoStream | ||
MythTV | 0.25 | MythTV | |||
MACNETIX VOD-Server | 3.0 | MACNETIX | |||
Anevia NEA Live Servers | Transcapsulation: from one input, several outputs | Anevia | |||
Packet Ship OverView:Origin Server | Capture from IPTV multicast and chunking to HLS for multi-bandwidth live streams, with AES encryption | 2.1 | Packet Ship | ||
nangu.TV Streamers | on-the-fly adaptation: content is stored once enabling several outputs | nangu.TV | |||
TVersity Media Server | 1.9 | TVersity | Pro Edition only | ||
Helix Universal Server | Live + VOD HLS with Verimatrix DRM integration, ABR, Multi-Resolution, AES encryption | 15.0+ | RealNetworks | High performance HLS | |
Wowza Streaming Engine | Live and VOD streaming as origin and edge server with DVR, DRM Integration and Transcoding for adaptive delivery. Outputs to MPEG-DASH, HLS, HDS, Smooth Streaming, RTMP, and RTSP. Supports Apple Low Latency HLS. | 2.0+ | Wowza Media Systems | ||
Unified Streaming Platform | Muxes media content from one unified source to multiple outputs | Unified Streaming | |||
VODOBOX Live Server | Outputs HTTP Live Streaming with Adaptive bitrate streaming. Video codecs : AVC H.264 / HEVC H.265 Audio codecs : MP3 / AAC Transport layers : HTTP / FTP / Amazon AWS S3 / Microsoft Azure Web Storage / writing to disk Hostings : internal HTTP Web server and/or external Web servers | 1.0 | Vodobox | Supports input live streams from DVB-T devices, satellite receivers, IP streams, Microsoft DirectShow drivers. Encoder is compliant with Intel Quick Sync Video and Nvidia NVENC hardware acceleration. | |
Flixwagon Platform Video Server | Flixwagon | ||||
StreamCoder Live Encoder | Realtime video encoder. Supports multi-bitrates and multi-languages | Ektacom | |||
Apache HTTP Server | Apache Software Foundation | ||||
Unreal Media Server | 9.5 | Unreal Streaming Technologies | Latency of live streams can be as low as 2.5 seconds over the Internet | ||
Nimble Streamer | RTMP / RTSP / Icecast / MPEG-TS to ABR HLS. MP4 / MP3 to VOD HLS. Apple Low Latency HLS spec is supported. | 1.0.0-x | WMSPanel | ||
Nginx-rtmp-module | Free module for nginx server with support of HLS live streaming. Compliant with iOS and Android. | 0.9.x | Roman Arutyunyan | ||
Nginx Plus | VOD HLS as origin | NGINX, Inc. | |||
Flussonic Media Server | Multi-platform support for HTTP, RTSP, RTMP, DASH, Time Shifting, DVR Functions with Unlimited Rewind Capabilities HLS streaming specific to iOS platform support. | 3.0+ | Flussonic, LLC. | Supporting a magnitude of features with full HTTP support. | |
VBrick Distributed Media Engine | 2.0 | VBrick Systems, Inc. | Live and stored HLS. Live can be transmuxed from several input mux including RTP, RTMP, and MPEG-TS using H.264 encoding | ||
Telebreeze Coder / Media Server | Input streams / interfaces: UDP, TCP, RTP, HLS, HTTP, RTMP Output Streams: HLS, HTTP, UDP Preprocessing: Resize, Deinterlace, Frame Rate Conversion, Audio Resampling, Logo Rendering | Telebreeze | |||
LEADTOOLS Media Streaming Server SDK | Converts files on the fly to Adobe HDS, Apple HLS, MPEG-DASH, Microsoft Smooth Streaming, RTSP. | 19.0 | LEAD Technologies | ||
MC-ROUTE | Multifunctional software for live stream routing and protocol conversion | 4.4 | Teracue | Supported protocols: TS over UDP, RTP, TCP, HLS, HTTP, RTSP/RTP | |
Direkt router | Live hardware decoder with SDI, NDI out and transcoding | 4.1 | Intinor | Supported protocols in: TS over UDP, RTP, TCP, HLS, HTTP, RTMP out: UDP, RTP, TCP, RTMP | |
Elecard CodecWorks | Professional platform for real-time encoding and transcoding into HEVC/H.265, AVC/H.264 and MPEG-2 video supporting adaptive bitrate streaming via HLS and MPEG-DASH protocols. | 4.6 | Elecard | Supported protocols: TS over UDP/RTP/SRT, RTMP Output, HLS, MPEG-DASH output, UDP/RTP/SRT, NDI |