O que é M3U8?

M3U8 é a forma UTF-8 do formato de playlist multimídia M3U e é amplamente usado para manifestos de HTTP Live Streaming. Suas entradas de texto podem descrever variantes, segmentos, chaves e metadados de intervalos de datas.

Playlist multivariante: fluxos variantes e representações
Segmentos de mídia e chaves obtidos por URI
Um cliente HLS segue as URIs da playlist multivariante até a playlist de mídia de cada representação selecionada para reprodução, como vídeo e áudio separados, e depois até os segmentos de mídia dessas representações.

Como funciona o M3U8

Um documento M3U8 é um arquivo de texto UTF-8 organizado por linhas. Cada linha é uma URI, está em branco ou começa com #; linhas que começam com #EXT são tags, e as demais linhas com # são comentários. No HLS, uma playlist multivariante anuncia fluxos variantes e representações alternativas, enquanto uma playlist de mídia enumera os segmentos de mídia de uma representação. Os clientes alternam entre variantes de acordo com as condições da rede e recarregam periodicamente uma playlist de mídia, a menos que ela declare que não mudará, conforme descrito abaixo. Os empacotadores gravam essas playlists após codificar e segmentar a mídia.

Informações essenciais

  1. #EXTM3U deve ser a primeira linha de toda playlist HLS. Algumas tags, como #EXT-X-VERSION e #EXT-X-TARGETDURATION, se aplicam à playlist inteira, enquanto as tags de segmentos de mídia se vinculam ao que vem depois delas: #EXTINF é obrigatória para cada segmento de mídia e se aplica apenas à URI do segmento seguinte, e algumas outras tags se aplicam a todos os segmentos seguintes até outra ocorrência da mesma tag. Portanto, mover, excluir ou inserir linhas de tags e URIs pode alterar o significado mesmo que o resultado continue sendo um texto válido.
  2. Uma playlist é de um de dois tipos, nunca de ambos. Uma playlist multivariante, chamada de playlist mestre na RFC 8216, descreve fluxos variantes e aponta para outras playlists; uma playlist de mídia lista os segmentos de uma representação em ordem de reprodução. A RFC 8216 exige que os clientes rejeitem a análise de uma playlist que misture tags de segmentos de mídia com tags de playlist mestre.
  3. As URIs relativas são resolvidas em relação à URI da playlist que as contém, portanto mover uma playlist pode alterar o destino para o qual elas são resolvidas; mantenha os arquivos referenciados na mesma estrutura relativa ou atualize as URIs. Na resolução padrão de URIs, uma referência relativa com caminho próprio não herda a string de consulta da URI base. Portanto, um token ou uma assinatura na consulta da URL da playlist não é repassado às solicitações de segmentos, chaves ou playlists filhas, e um esquema de URLs assinadas precisa assinar cada URI referenciada ou autorizar essas solicitações de outra forma.
  4. Nomeie ou sirva uma playlist de forma que os clientes a aceitem. A RFC 8216 exige que uma playlist HLS seja identificável por um caminho de URI terminado em .m3u8 ou .m3u, ou pelo Content-Type HTTP application/vnd.apple.mpegurl ou audio/mpegurl, e recomenda que os clientes recusem playlists que não sejam identificadas por nenhuma dessas formas. O texto deve ser UTF-8 sem marca de ordem de bytes; recomenda-se que os clientes rejeitem a análise de uma playlist que contenha essa marca.

Quando o M3U8 é importante

O M3U8 é importante sempre que você gera, hospeda ou ingere HLS. Quem produz uma playlist precisa acertar a ordem das tags, as durações e as URIs para que ela seja válida, e quem a hospeda precisa manter todas as URIs nela acessíveis a partir de qualquer local de onde a playlist seja servida. Trate uma playlist de uma fonte não confiável como uma lista de instruções de busca: a RFC 8216 observa que os clientes farão solicitações de rede aos destinos indicados pelas URIs, e o demultiplexador HLS do FFmpeg restringe por padrão quais extensões de arquivo uma playlist pode referenciar.

Trabalhar com M3U8

A RFC 8216 exige que os clientes recarreguem periodicamente uma playlist de mídia, a menos que ela declare #EXT-X-PLAYLIST-TYPE:VOD, ou #EXT-X-PLAYLIST-TYPE:EVENT junto com #EXT-X-ENDLIST. Enquanto uma playlist de mídia não tiver #EXT-X-ENDLIST, o servidor deve publicar uma nova versão com pelo menos um novo segmento entre 0,5 e 1,5 durações-alvo após a versão anterior. Adicione #EXT-X-ENDLIST assim que o segmento final estiver listado e use #EXT-X-PLAYLIST-TYPE:VOD para declarar que a playlist não pode mudar. Uma playlist em crescimento muda em uma URL fixa, enquanto seus segmentos não mudam; o planejamento do cache deve considerar essa característica.

Como a Transloadit ajuda com o M3U8

O Robot /video/adaptive da Transloadit gera arquivos de playlist M3U8 junto com os segmentos de mídia quando seu technique é hls, e uma playlist HLS junto ao manifesto MPEG-DASH quando esse parâmetro é cmaf.

A documentação do Robot diz que seus arquivos de resultado contêm uma propriedade de metadados relative_path e que o caminho de armazenamento deve ser construído a partir dela para que os arquivos de playlist continuem funcionando, o que representa, na prática, a regra de URIs relativas descrita acima. Ela também lista os cabeçalhos de resposta CORS a configurar para reprodutores de navegador que buscam playlists e segmentos de outra origem.

Explore os formatos de arquivo e os recursos de compressão da Transloadit

Fontes

Transforme conhecimento sobre mídia em um pipeline funcional

Conecte uploads, processamento, IA, armazenamento e entrega por meio de uma única API declarativa, com o stack de codificação, o ajuste de escala e as constantes mudanças de formatos gerenciados para você.

Experimente a Transloadit gratuitamente