Dan heb je geen HLS, verschillende versies voor verschillende devices, je hebt een video niet zomaar overal embedden. Je kunt een video ook niet zomaar aanbieden voor embed op een andere site.
Zeker wel!
HLS is juist gemaakt zodat je met simpele webservers een eenvoudige workflow op kunt zetten die dit mogelijk maakt.
Moet wel zeggen dat dit een pak lastiger is dan ff videotje uploaden, maar voor een klein beetje IT organisatie of bedrijf wat dusdanig veel doet met Vimeo dat je daar zoveel per maand aan kwijt bent, is het zeer zeker de moeite waard. Je kunt dit in AWS grofweg opzetten als: upload -> transcode naar HLS-> opslaan in S3 -> uitserveren via CloudFront (caching en CDN gelijk geregeld), met wat “player intelligence” eromheen.
Voor de “Vimeo/YT-achtige” flow uploadt een gebruiker eerst een bronbestand (bijv. MP4) naar een ingest-bucket in S3 (vaak via een pre-signed URL zodat je backend niet het bestand hoeft te proxieën). Een event (bijv. S3 event -> Lambda / Step Functions) triggert vervolgens je transcode pipeline met AWS Elemental MediaConvert (of MediaPackage/MediaLive als je live doet). MediaConvert maakt van die ene video meerdere rendities (240p/360p/720p/1080p, verschillende bitrates) en produceert HLS output: één master playlist (.m3u8) die verwijst naar variant-playlists, en allemaal kleine TS/CMAF segmenten (.ts of .m4s). Die output zet je in een “public” of “delivery” S3 bucket (meestal niet écht public; je beschermt met CloudFront + signed URLs/cookies). Je zet er CloudFront voor om latency laag te maken en caching te doen, en je regelt CORS/headers zodat spelers netjes kunnen bufferen en seeken. DRM/anti-hotlinking/“alleen afspelen op mijn domein” doe je typisch met signed CloudFront URLs/cookies, eventueel gecombineerd met referer checks en tokenized playback (en voor echte DRM: FairPlay/Widevine/PlayReady via MediaPackage/partner).
Dan “embeds aanbieden” is in de praktijk: je geeft niet direct de S3/CloudFront .m3u8 weg, maar je biedt een embed-pagina of player endpoint aan die de juiste video-id kent en pas daarna de stream URL (al dan niet signed) uitdeelt. De standaard is een <iframe> embed zoals Vimeo/YT:
- https://jouwdomein.com/embed/{videoId} rendert een minimalistische HTML player (bijv. hls.js voor browsers zonder native HLS, Safari speelt vaak HLS native).
- Die embed-pagina haalt via jouw API een tijdelijke CloudFront HLS URL op (signed) en start playback.
- Extras (autoplay, starttijd, captions, controls, privacy) geef je mee als query params (?autoplay=1&start=30&muted=1) en je kunt via postMessage events (play/pause/timeupdate) “YT-achtig” integreren met de hostpagina.
S3 is je storage
MediaConvert maakt je HLS files
CloudFront maakt het snel en beheersbaar
en embeds zijn meestal een iframe player shell die gecontroleerd (en liefst tijdelijk) toegang geeft tot de HLS playlists. Dat is hoe ik het iig zou doen als je echt HLS support wil.