HLS: a playlist, not a video
An HLS stream is not a file. It is a small text playlist, the manifest, that lists the last few seconds of video as separate short segments and is rewritten continuously. Your player fetches the manifest, downloads the segments and stitches them together. When a broadcaster stops transmitting, the manifest stops being updated — and that is exactly the signal an availability checker looks for.
Why there is always a delay
Because segments are typically two to six seconds long and a player buffers several of them, live is realistically ten to thirty seconds behind reality. Low-latency HLS narrows it, but it never reaches zero. If you have ever heard a neighbour celebrate a goal before you saw it, this is why.
Platform embeds behave differently
YouTube, Twitch and Kick do not hand out a manifest. They hand out a player, and they decide what it does. A YouTube live embed shows nothing at all when the channel is off air, which looks identical to a broken link and is not one. Twitch and Kick additionally check which domain is asking, and refuse to play for a domain they were not told about.
Reading a black screen correctly
- Black with controls and no error: the stream exists, the channel is off air.
- Nothing loads at all: the manifest or the embed is gone. The link is dead, not the channel.
- Plays then stops after a few seconds: geographic restriction, or a stream that just ended.
- Audio but no picture: a codec the browser cannot decode. Rare, and almost always an older stream.
Why this site checks instead of listing
Because every one of those states is detectable from the outside, without the broadcaster's cooperation. A manifest that stops updating, an embed page without a live flag, an API that returns a null stream — each is an unambiguous answer to the only question that matters: is it on right now.