Embeddable HLS player
One iframe, one channel id. The playlist and every segment are proxied through this origin, so the player never talks to the upstream host and nothing has to be signed, whitelisted or CORS-enabled on your side.
Embed a stream
Point an iframe at /embed/<id>, where <id>
is the channel id:
<iframe src="/embed/CHANNEL_ID"
style="width:100%;aspect-ratio:16/9;border:0"
allow="autoplay; fullscreen; picture-in-picture"
allowfullscreen></iframe>
The id accepts letters, digits, ., _ and
-, up to 64 characters. Anything else answers 400.
What the player does
- Starts muted and autoplays; one tap on the control bar brings sound back.
- Stays inline on iPhone instead of jumping to the native fullscreen controller.
- Fullscreen, picture-in-picture and casting are all in the control bar.
- Fills whatever box you give it without cropping, so a 4:3 channel keeps its whole picture inside a 16:9 frame.
- Larger touch targets on phones and tablets, and it honours reduced-motion.
When a stream is down
Playback errors are retried three times before the player gives up, and the page then asks the tunnel what actually went wrong rather than showing one generic failure. A channel that is simply off air says so; a channel that is on air but failed on this device says that instead.
Ads
Ads run on this page only. They are switched off inside the embed, because an ad inside somebody else's frame reports that host as the traffic source. If you are monetising a player, put the tags on your own page around the iframe.