O que é HLS (.m3u8) e como testar um stream
Se você já lidou com transmissões ao vivo, TV pela internet ou players de cursos online, provavelmente cruzou com um link terminado em .m3u8. Ele não é um vídeo — e é exatamente por isso que, ao abrir no navegador, você recebe um download de um arquivinho de texto em vez de uma tela de reprodução. Este guia explica o que é esse formato e como saber se um stream está funcionando.
HLS em uma frase
HLS (HTTP Live Streaming) é um protocolo criado pela Apple que entrega vídeo em pequenos pedaços (segmentos de poucos segundos) descritos por uma lista de reprodução — o arquivo .m3u8. O player baixa a lista, descobre onde estão os segmentos e vai reproduzindo um após o outro, como um colar de contas.
Por que fatiar o vídeo?
- Transmissão ao vivo — novos segmentos são adicionados à lista conforme são gravados, e o player os busca continuamente. É assim que funciona a maioria das lives fora do YouTube/Twitch;
- Qualidade adaptativa — o mesmo vídeo existe em várias resoluções, e o player troca de qualidade no meio da reprodução conforme a velocidade da internet, sem travar;
- Compatibilidade com CDNs — os segmentos são arquivos comuns servidos por HTTP, fáceis de distribuir e cachear globalmente.
Por que o .m3u8 não abre direto no navegador?
Aqui mora a confusão mais comum. O suporte nativo a HLS varia:
- Safari (Mac, iPhone, iPad) — reproduz HLS nativamente; basta apontar um
<video>para o .m3u8; - Chrome, Firefox e Edge — não reproduzem HLS nativamente. É preciso uma biblioteca JavaScript (a mais usada é a hls.js) que baixa os segmentos e os entrega ao player via Media Source Extensions.
Ou seja: um link .m3u8 pode estar perfeitamente no ar e mesmo assim "não funcionar" quando colado na barra de endereços do Chrome. O problema não é o stream — é a falta de um player adequado.
Anatomia de um stream HLS
Um .m3u8 típico (a "master playlist") lista as variantes de qualidade disponíveis; cada variante aponta para outra playlist com os segmentos .ts ou .m4s. Quando um stream falha, o defeito pode estar em qualquer camada: a master playlist saiu do ar (erro 404/403), as playlists de variante expiraram, ou os segmentos não estão acessíveis — por exemplo, por bloqueio de CORS, já que o player em JavaScript precisa de permissão do servidor para baixá-los de outra origem.
Como testar se um stream está funcionando
- Cole o link .m3u8 no Testador de Vídeo — usamos hls.js automaticamente, então o teste funciona em qualquer navegador, e o resultado indica se o manifesto foi carregado e o vídeo reproduz;
- Se falhar, abra o link diretamente: se baixar um arquivo de texto começando com
#EXTM3U, o manifesto existe e o problema está nos segmentos ou no CORS; se der erro, o stream está fora do ar; - Lives têm ainda um detalhe: o stream só existe enquanto a transmissão acontece. Um link que funcionou ontem pode legitimamente não existir mais hoje.
HLS ou arquivo MP4: qual usar?
Para um vídeo curto em uma página, um MP4 simples é mais fácil de hospedar e compartilhar (veja nosso guia de formatos). HLS vale a pena para conteúdo longo, audiências grandes ou transmissão ao vivo — situações em que a qualidade adaptativa e o cache em CDN fazem diferença real na experiência.