HTTP Live Streaming (HLS) — is een protocol voor adaptieve streaming van mediagegevens, ontwikkeld door Apple. HLS levert video en audio via HTTP-verbindingen, splitst de inhoud op in een reeks kleine bestandssegmenten en beheert de afspeling via tekstuele afspeellijsten in M3U8-formaat. Volgens het Sandvine Internet Phenomena Report (2025) verwerkt HLS meer dan 65% van het wereldwijde verkeer voor adaptieve videostreaming. Het protocol wordt ondersteund op alle Apple-platforms en via bibliotheken van derden is het beschikbaar op Android, Windows en Smart TV.
Belangrijkste punten
HTTP Live Streaming (HLS) — is een protocol voor mediastreaming, ontwikkeld door Apple in 2009 en voor het eerst geïntroduceerd in iOS 3.0 en Safari. In 2017 werd het protocol voorgesteld als internetstandaard via RFC 8216, wat de status als open specificatie bevestigde, beschikbaar voor implementatie op elk platform.
Het basisidee van HLS is het opsplitsen van een continue mediastroom in korte segmenten van 2-10 seconden. Elk segment is een zelfstandig bestand dat via een gewoon HTTP-verzoek kan worden gedownload. Het stroombeheer gebeurt via tekstuele afspeellijsten in M3U8-formaat, die links naar de segmenten en metadata voor correcte afspeling bevatten.
Adaptiviteit — is het belangrijkste voordeel van HLS. De server bereidt meerdere versies van dezelfde inhoud voor met verschillende bitsnelheden — van 200 Kbps voor zwakke verbindingen tot 20+ Mbps voor 4K-video. De client kiest automatisch de juiste bitsnelheid op basis van de huidige bandbreedte van het kanaal. Volgens onderzoek van Apple (WWDC 2024) vermindert LL-HLS de schakeltijd tussen bitsnelheden tot 500 milliseconden, wat zorgt voor een vloeiende kwaliteitswissel zonder merkbare pauzes.
De eerste versie van HLS (2009) ondersteunde alleen MPEG-2 TS-segmenten met AAC-audiocodec en H.264-videocodec. In iOS 8 (2014) werd ondersteuning voor fMP4 (gefragmenteerde MP4)-segmenten toegevoegd, waardoor HLS met modernere codecs kon worden gebruikt, waaronder HEVC (H.265). iOS 11 (2017) introduceerde ondersteuning voor HDR10 en Dolby Vision. iOS 13 (2019) introduceerde Low-Latency HLS, waardoor de latentie teruggebracht werd van traditionele 6-30 seconden tot 2-6 seconden.
In 2023 breidde Apple HLS uit met ondersteuning voor de codecs AV1 en EVC (Essential Video Coding) en implementeerde Content Steering — een mechanisme voor dynamische omleiding van clients tussen CDN-servers voor optimale belasting. Content Steering stelt de server in staat om URL's van segmenten ter plekke te wijzigen, waarbij de client wordt omgeleid naar het dichtstbijzijnde of minst belaste CDN-knooppunt zonder de afspeling te onderbreken.
De architectuur van HLS bestaat uit drie hoofdcomponenten: het serverdeel (origin-server + encoder), het distributienetwerk (CDN) en het clientdeel (speler met HLS-ondersteuning). Het hele proces — van het vastleggen van video tot het afspelen op het apparaat van de gebruiker — omvat verschillende opeenvolgende fasen, die elk cruciaal zijn voor de streamingkwaliteit.
De bronvideo wordt eerst gecodeerd in meerdere varianten met verschillende bitsnelheden en resoluties. Professionele encoders zoals FFmpeg of AWS Elemental MediaConvert maken tegelijkertijd 4-12 stroomvarianten: van 240p (400 Kbps) tot 4K (40 Mbps). Elke variant wordt opgedeeld in segmenten van gelijke duur, meestal 2-6 seconden voor LL-HLS of 6-10 seconden voor traditionele HLS.
Voor elke variant wordt een media-afspeellijst (variant playlist) gemaakt met de URL's van alle segmenten en hun duur. Daarnaast wordt een master-afspeellijst (master playlist) gemaakt die alle varianten combineert en informatie over elke variant bevat: resolutie, bitsnelheid, codec en audiotracks. De client laadt eerst de master-afspeellijst en selecteert vervolgens de juiste variant op basis van de analyse van de verbindingssnelheid.
Segmenten en afspeellijsten worden in de cache opgeslagen op CDN-servers die geografisch dicht bij de gebruikers staan. Het gebruik van het standaard HTTP-protocol voor levering geeft HLS een cruciaal voordeel: elke CDN, load balancer of proxyserver die HTTP ondersteunt, werkt met HLS zonder extra configuratie. Dit onderscheidt HLS van realtime protocollen zoals RTMP of WebRTC, die gespecialiseerde servers vereisen.
import subprocess
subprocess.run([
"ffmpeg",
"-i", "input.mp4",
"-codec:v", "libx264",
"-codec:a", "aac",
"-hls_time", "6",
"-hls_list_size", "0",
"-var_stream_map", "v:0,a:0 v:1,a:1",
"-map", "v:0", "-b:v:0", "5000k",
"-map", "v:1", "-b:v:1", "1000k",
"-f", "hls",
"stream/output.m3u8"
])
De clientzijde gebruikt een algoritme voor bitsnelheidsselectie (ABR — Adaptive Bitrate). De HLS-speler laadt de master-afspeellijst, analyseert de beschikbare varianten en begint met afspelen op de meest geschikte bitsnelheid. Tijdens het afspelen bewaakt de speler voortdurend de downloadsnelheid van segmenten en de bufferstatus en beslist over overschakeling naar een hogere of lagere bitsnelheid. Moderne ABR-algoritmen houden niet alleen rekening met de netwerksnelheid, maar ook met de buffergrootte, het type inhoud en zelfs het energieverbruik van het apparaat.
Inzicht in de structuur van een HLS-stroom is noodzakelijk voor het correct configureren van codering, distributie en het oplossen van afspeelproblemen. Elke HLS-stroom bestaat uit twee niveaus van afspeellijsten en meerdere mediasegmenten, georganiseerd in een strikte hiërarchie.
Master playlist — is het toegangspunt voor de HLS-speler. Het bestand met de extensie .m3u8 bevat links naar alle stroomvarianten (variant streams) en hun kenmerken. De speler laadt dit bestand als eerste en neemt op basis van informatie over bitsnelheden en resoluties een eerste beslissing over de variantkeuze. De master-afspeellijst kan ook links bevatten naar alternatieve audiotracks, ondertitels en I-Frame-afspeellijsten voor snel vooruitspoelen.
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080
1080p/video.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1000000,RESOLUTION=640x360
360p/video.m3u8
Media playlist bevat direct de lijst met segmenten voor één stroomvariant. Elk segment wordt gespecificeerd met duur en URI. De media-afspeellijst kan statisch zijn (voor VOD — volledige lijst van alle segmenten) of dynamisch worden bijgewerkt (voor live-uitzendingen — oude segmenten worden verwijderd, nieuwe worden toegevoegd).
#EXTM3U
#EXT-X-TARGETDURATION:6
#EXTINF:6.000,
segment001.ts
#EXTINF:6.000,
segment002.ts
#EXT-X-ENDLIST
HLS ondersteunt twee hoofdformaten voor mediasegmenten: MPEG-2 Transport Stream (.ts) en Fragmented MP4 (.m4s of .mp4). MPEG-2 TS — het oorspronkelijke HLS-formaat dat maximale compatibiliteit biedt. fMP4 — een moderner formaat dat HDR, HEVC en efficiëntere compressie ondersteunt. Apple beveelt fMP4 aan voor alle nieuwe projecten vanaf iOS 10 en macOS Sierra.
Aanvullende elementen van een HLS-stroom zijn I-Frame-afspeellijsten voor snel vooruitspoelen, ID3-metadata voor synchronisatie van ondertitels en advertentiemarkers, en Session Data voor het verzenden van kijkgegevens naar de analyseserver. Al deze elementen zijn optioneel, maar hun gebruik verbetert de kwaliteit van de gebruikerservaring.
HLS domineert de videostreamingmarkt dankzij een aantal architecturale voordelen, maar heeft ook beperkingen waarmee rekening moet worden gehouden bij de keuze van een protocol voor een specifiek project. Laten we HLS vergelijken met alternatieve videoleveringsprotocollen.
| Kenmerk | HLS | DASH | RTMP |
|---|---|---|---|
| Transport | HTTP (80/443) | HTTP (80/443) | TCP (1935) |
| Adaptiviteit | Ja (ABR) | Ja (ABR) | Nee |
| Lage latentie | 2-6 sec (LL-HLS) | 3-8 sec (LL-DASH) | 0.5-2 sec |
| HDR-ondersteuning | Ja (iOS 11+) | Ja | Beperkt |
| Native iOS | Ja (Safari, AVPlayer) | Via spelers van derden | Nee |
| CDN-gemak | Maximaal (HTTP) | Maximaal (HTTP) | Gespecialiseerde servers |
Het grootste voordeel van HLS — native ondersteuning op alle Apple-apparaten (iPhone, iPad, Apple TV, Mac) via de ingebouwde AVPlayer. Dit maakt HLS de facto standaard voor iOS/macOS-applicaties. Bovendien maakt het gebruik van standaard HTTP voor levering het mogelijk om inhoud op elke CDN en proxyserver in de cache op te slaan zonder extra configuratie, wat de leveringsinfrastructuur aanzienlijk vereenvoudigt.
Nadelen van HLS zijn onder meer hogere latentie in vergelijking met RTMP of WebRTC voor live-uitzendingen. Zelfs met LL-HLS is de minimale latentie 2-6 seconden, wat onaanvaardbaar is voor interactieve realtime scenario's. Ook genereert HLS meer bestanden op de server (elk segment is een apart bestand), wat de bestandssysteembelasting kan verhogen bij een groot aantal gelijktijdige uitzendingen.
Integratie van HLS in mobiele apps verschilt per platform. Op iOS en macOS wordt HLS ondersteund op besturingssysteemniveau via AVFoundation en AVPlayer, wat zorgt voor hardwareversnelling van decodering en minimaal energieverbruik. Op Android wordt HLS niet ondersteund door de ingebouwde MediaPlayer, maar is het beschikbaar via ExoPlayer — de officiële mediaspeler van Google.
Op het Apple-platform is HLS-afspeling uiterst eenvoudig dankzij de ingebouwde ondersteuning in AVPlayer. Het volstaat om een AVPlayer te maken met de URL van de master-afspeellijst en het systeem zal automatisch adaptieve bitsnelheidsschakeling, audiotrackselectie en ondertitelverwerking afhandelen. De ontwikkelaar heeft daarbij volledige controle over de afspeling via AVPlayerItem en AVAssetResourceLoader.
import AVFoundation
let url = URL(string: "https://example.com/stream.m3u8")!
let player = AVPlayer(url: url)
let controller = AVPlayerViewController()
controller.player = player
present(controller, animated: true) {
player.play()
}
Voor Android wordt ExoPlayer gebruikt, die HLS ondersteunt via een aparte extensiemodule. ExoPlayer biedt fijnere controle over de HLS-stroom: bitsnelheidselectie kan worden beheerd, buffering kan worden geconfigureerd en segmentlaadfouten kunnen individueel worden afgehandeld. Voor LL-HLS is ExoPlayer versie 2.14.0 en hoger vereist.
val player = ExoPlayer.Builder(this).build()
val uri = Uri.parse("https://example.com/stream.m3u8")
val mediaItem = MediaItem.fromUri(uri)
player.setMediaItem(mediaItem)
player.prepare()
player.play()
Mobiele apps vereisen een speciale benadering van HLS-configuratie vanwege de instabiliteit van mobiele netwerken en verkeersbeperkingen. De belangrijkste aanbevelingen zijn: het instellen van de initiële bitsnelheid op basis van het netwerktype (Wi-Fi of mobiel), het gebruik van een kortere segmentduur (2-4 seconden) voor snellere aanpassing, het vooraf laden van de buffer bij overschakeling naar Wi-Fi en het prioriteren van de audiotrack bij een zwak signaal.
Apple beveelt in de HLS Authoring Specification for Apple Devices (2024) aan om segmentgroottes van niet meer dan 6 seconden te gebruiken voor mobiele apparaten en minimaal 4 bitsnelheidvarianten. Om verkeer op mobiele netwerken te besparen, moet de server segmenten leveren met de HTTP-header Cache-Control, waardoor inhoud kan worden opgeslagen in de cache op tussentijdse proxyservers van telecomoperators.
Veelgestelde vragen
MP4 — is een container voor het opslaan van een volledig videobestand dat volledig moet worden gedownload voordat het afspelen begint. HLS splitst video op in kleine segmenten en maakt het mogelijk om binnen 2-6 seconden na het downloaden van het eerste segment te beginnen met kijken, waarbij de kwaliteit automatisch wordt aangepast aan de internetsnelheid.
Ja, HLS vereist geen Apple-serversoftware. Elke HTTP-server (Nginx, Apache, CDN) kan HLS-inhoud distribueren. Voor het coderen van video naar HLS wordt FFmpeg of professionele encoders gebruikt. De enige vereiste is een correcte MIME-typeconfiguratie voor .m3u8-bestanden.
Ja, HLS is oorspronkelijk ontworpen voor live-uitzendingen. Bij live-uitzendingen wordt de media-afspeellijst dynamisch bijgewerkt: de server voegt nieuwe segmenten toe en verwijdert oude. Low-Latency HLS (LL-HLS) vermindert de latentie tot 2-6 seconden, waardoor HLS geschikt is voor sportuitzendingen en nieuwsuitzendingen.
Master playlist combineert alle varianten van dezelfde inhoud met verschillende bitsnelheden en resoluties. De speler laadt deze als eerste, analyseert de kenmerken van elke variant (bitsnelheid, resolutie, codec) en selecteert de optimale voor de huidige netwerkomstandigheden. Zonder master-afspeellijst is adaptieve kwaliteitsschakeling onmogelijk.
HLS ondersteunt AES-128-versleuteling van segmenten en integratie met DRM-systemen: FairPlay Streaming (Apple), Widevine (Google) en PlayReady (Microsoft). Versleutelingssleutels worden via een apart beveiligd kanaal verzonden. Voor extra beveiliging wordt tokenauthenticatie gebruikt voor toegang tot afspeellijsten.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook