HLS e DASH: como funciona o streaming adaptativo
4 min de leitura
Se você já viu um vídeo começar borrado e ficar nítido alguns segundos depois, ou perder qualidade quando o Wi-Fi enfraquece, já viu o streaming adaptativo em ação. Quase todo o vídeo da internet é servido assim, com dois sistemas: HLS e DASH. Eles funcionam de forma parecida, e entendê-los explica muitos comportamentos que parecem falhas e não são.
A ideia: dividir em pedaços e oferecer várias qualidades
Em vez de um arquivo enorme, o servidor guarda o vídeo dividido em segmentos de poucos segundos. E não uma vez só, mas várias: o mesmo filme em 1080p, em 720p, em 480p, cada versão com sua taxa de dados, o bitrate. Primeiro, o player baixa um índice, o manifesto, que informa quais versões existem e onde está cada pedaço. Depois, vai pedindo os segmentos um a um e, a cada momento, escolhe a qualidade que acha que sua conexão consegue sustentar.
As vantagens são claras: o vídeo começa rápido porque parte de pedaços leves, se adapta à rede sem travar e permite pular para qualquer ponto baixando só o necessário. As transmissões ao vivo funcionam do mesmo jeito: o manifesto vai sendo atualizado com os segmentos novos.
HLS
O HLS (HTTP Live Streaming) foi criado pela Apple e é o mais difundido. O manifesto dele é um arquivo de texto com extensão .m3u8, e há dois tipos.
A playlist mestre lista as qualidades disponíveis. Cada uma traz sua largura de banda, sua resolução e seus codecs:
#EXTM3U#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080,CODECS="avc1.640028,mp4a.40.2"1080p/index.m3u8#EXT-X-STREAM-INF:BANDWIDTH=2500000,RESOLUTION=1280x720,CODECS="avc1.64001f,mp4a.40.2"720p/index.m3u8
A playlist de mídia de cada qualidade lista seus segmentos e quanto dura cada um:
#EXTM3U#EXT-X-TARGETDURATION:6#EXTINF:6.0,segmento-001.ts#EXTINF:6.0,segmento-002.ts#EXT-X-ENDLIST
A tag #EXT-X-ENDLIST indica que o vídeo está completo, ou seja, que é sob demanda. Se ela não aparece, é uma transmissão ao vivo, e o player volta a pedir a playlist a cada poucos segundos. Os segmentos podem ser TS ou fMP4 (MP4 fragmentado, reconhecível pela tag #EXT-X-MAP). O áudio em outros idiomas e as legendas podem vir como faixas separadas, declaradas com #EXT-X-MEDIA.
Aliás, o fato de o manifesto do HLS ter a mesma extensão de muitas listas de vídeos gera confusão; explicamos isso em M3U, M3U8 e W3U.
DASH
O DASH (Dynamic Adaptive Streaming over HTTP, ou MPEG-DASH) é um padrão internacional aberto. O manifesto dele é um arquivo XML com extensão .mpd. Ele organiza o conteúdo em conjuntos de adaptação (o vídeo, o áudio de cada idioma, as legendas) e, dentro de cada um, em representações, que são as qualidades. Muitas plataformas e sites o usam. Para quem assiste, a diferença em relação ao HLS é quase nula: muda o formato do índice, não a ideia.
Por que a qualidade muda?
O player mede a rapidez com que os segmentos chegam e quantos segundos ele tem guardados à frente, o buffer. Se o download está folgado, ele sobe a qualidade; se está no limite, baixa antes de ficar sem vídeo. Por isso:
- O começo costuma ser borrado: o player ainda não sabe quanto a sua conexão aguenta e começa com cautela.
- A qualidade cai quando outro aparelho da casa baixa algo ou quando você se afasta do roteador.
- Ela demora alguns segundos para subir mesmo que a rede melhore, porque a troca acontece no segmento seguinte, não na hora.
- Um vídeo pode não passar de 720p mesmo com fibra, se o servidor não oferece mais ou se o aparelho não consegue decodificar a versão superior.
A qualidade cair por um tempo não é uma falha: é o sistema evitando uma interrupção. Se as interrupções forem frequentes, veja travamentos, engasgos e carregamento lento.
Ao vivo, atraso e janela
Em uma transmissão ao vivo, o player não se posiciona no último segundo transmitido, e sim alguns segmentos atrás, para ter margem. Por isso, uma transmissão ao vivo pela internet costuma ter atraso em relação à televisão tradicional, e dois aparelhos podem ficar fora de sincronia. Algumas transmissões permitem voltar um pouco, o quanto durar a janela do manifesto; outras só oferecem os últimos segmentos.
Criptografia e DRM
O HLS permite criptografar os segmentos com AES-128 e uma chave baixada de um endereço. Isso não é DRM: qualquer player HLS abre esse conteúdo se conseguir baixar a chave, e o Whatplay também. O DRM (Widevine, PlayReady, FairPlay) é outra coisa: um sistema de licenças vinculado ao aparelho, usado pelas plataformas pagas, que no HLS é declarado com métodos como SAMPLE-AES e no DASH com a tag ContentProtection. O Whatplay não reproduz conteúdo com DRM; explicamos isso em o navegador do Whatplay e o DRM.
HLS e DASH no Whatplay
- Você pode colocar o endereço de um .m3u8 ou de um .mpd em uma lista, ou abri-lo uma vez com “Adicionar lista” e “Só reproduzir, sem salvar”.
- A qualidade é escolhida automaticamente. Em “Opções” do player, você vê a resolução e os Mb/s do que está tocando.
- No navegador, quando um site usa HLS ou DASH, o painel “Vídeos desta página” mostra até que resolução o vídeo chega (“até 1080p”) e quantas qualidades ele tem.
- Ao enviar para um Chromecast, a TV costuma baixar os segmentos sozinha. Se o servidor pedir dados de acesso que a TV não consegue enviar, o celular serve de ponte e precisa continuar no Wi-Fi.