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.
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
#EXTM3Udeve ser a primeira linha de toda playlist HLS. Algumas tags, como#EXT-X-VERSIONe#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.- 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.
- 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.
- 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
.m3u8ou.m3u, ou pelo Content-Type HTTPapplication/vnd.apple.mpegurlouaudio/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
- RFC 8216: HTTP Live Streaming, seção 4 (playlists), seção 4.1 (definição de uma playlist), seção 4.3 (tags de playlist), seções 6.2.1, 6.3.1, 6.3.2, 6.3.4 e seção 10 (considerações de segurança)
- Rascunho da IETF: HTTP Live Streaming, edição 2 (draft-pantos-hls-rfc8216bis), trabalho em andamento que renomeia playlist mestre para playlist multivariante
- RFC 3986: identificador uniforme de recursos (URI): sintaxe genérica, seção 5.2.2 (transformação de referências)
- Documentação de formatos do FFmpeg: opções do demultiplexador hls (allowed_extensions, extension_picky)