O que é streaming com taxa de bits adaptativa?
O streaming com taxa de bits adaptativa oferece várias versões codificadas do mesmo conteúdo. O reprodutor alterna entre elas conforme a largura de banda, o estado do buffer e a capacidade do dispositivo durante a reprodução.
Como o streaming com taxa de bits adaptativa funciona
O streaming adaptativo divide versões alinhadas no tempo em segmentos de mídia endereçáveis e os descreve em um manifesto: uma playlist no HLS, um documento XML chamado MPD no MPEG-DASH. O reprodutor escolhe uma versão para as próximas solicitações de segmentos com base em sinais como a vazão medida e a mídia armazenada no buffer, portanto a alternância é uma decisão de distribuição do lado do cliente, não uma transcodificação no servidor durante o fluxo. Ambos os protocolos podem transportar segmentos MP4 fragmentados, o que permite que o empacotamento CMAF disponibilize um único conjunto de arquivos de mídia sob ambos os manifestos.
Informações essenciais
- A alternância sem interrupções é definida no momento da codificação e do empacotamento. A RFC 8216 exige que o conteúdo correspondente em cada variante HLS tenha marcações de tempo correspondentes, e a especificação de autoria da Apple exige que cada segmento de vídeo comece com um quadro IDR e recomenda limites de segmentos nos mesmos pontos no tempo entre as variantes. O perfil de interoperabilidade do DASH-IF também inicia cada segmento com um ponto de acesso semelhante a um IDR e alinha os limites dos segmentos dentro de um Adaptation Set.
- O algoritmo de alternância pertence ao reprodutor, não ao protocolo: a RFC 8216 o coloca fora de seu escopo, portanto um mesmo fluxo pode se comportar de forma diferente entre reprodutores. No hls.js, por exemplo, as configurações padrão exigem uma margem de largura de banda maior para subir de nível (
abrBandWidthUpFactor) do que para manter ou reduzir um nível (abrBandWidthFactor), e limitar a qualidade às dimensões do elemento de vídeo ou reagir a quadros descartados só ocorre quandocapLevelToPlayerSizeoucapLevelOnFPSDropestá ativado; ambos ficam desativados por padrão. - A qualidade inicial depende da ordem da playlist e das configurações do reprodutor. A especificação da Apple trata a primeira variante listada na playlist multivariante dentro de cada grupo de variantes com áudio compatível como o padrão desse grupo. No hls.js, deixar
startLevelsem definição não fixa a reprodução no primeiro nível listado, embora partes da documentação da API afirmem que sim: o código-fonte da v1.6.13 escolhe o nível inicial a partir de uma estimativa de largura de banda, que a taxa de bits da primeira variante listada pode elevar, portanto a ordem da playlist influencia o início sem fixá-lo. ComstartLeveldefinido como-1, o hls.js, por padrão, baixa um fragmento do nível mais baixo para estimar a largura de banda antes de escolher. - O espaçamento entre os níveis da escala depende do conteúdo, e as taxas declaradas precisam ser precisas. A Apple apresenta suas tabelas de taxas de bits como referências iniciais a serem avaliadas com seu próprio conteúdo, e o trabalho da Netflix por título constatou que uma escala fixa gasta mais bits do que os títulos simples precisam, enquanto deixa artefatos nos complexos; seu objetivo declarado é separar níveis adjacentes por cerca de uma diferença mínima perceptível, para manter as alternâncias suaves com o menor número de representações. No HLS, a RFC 8216 alerta que um
BANDWIDTHimpreciso pode causar interrupções ou impedir a reprodução de uma variante.
Quando o streaming com taxa de bits adaptativa é relevante
Disponibilize uma escala de taxas de bits quando mudanças nas condições da rede causariam interrupções sem ela. Representações mal espaçadas podem desperdiçar armazenamento ou forçar quedas visíveis de qualidade sem melhorar significativamente a continuidade.
Como a Transloadit ajuda com streaming com taxa de bits adaptativa
O Robot /video/adaptive da Transloadit empacota versões codificadas em saídas HLS, MPEG-DASH ou CMAF e gera os arquivos de playlist e manifesto; com technique definido como cmaf, os manifestos DASH e HLS fazem referência aos mesmos segmentos fMP4. As versões normalmente vêm de Steps que usam /video/encode com as predefinições hls/ ou dash/ e são reunidas em um único Step que usa /video/adaptive.
A Transloadit prepara os arquivos; a escolha de uma versão durante a reprodução é feita pelo reprodutor que você usa. A documentação do Robot também descreve como forçar quadros-chave correspondentes em cada Step que usa /video/encode para que os segmentos fiquem alinhados entre as versões, quais cabeçalhos CORS configurar no seu servidor de arquivos (necessários quando o reprodutor carrega os arquivos de outra origem) e quais metadados relative_path usar ao armazenar os segmentos para que as referências das playlists sejam resolvidas.
Fontes
- RFC 8216: HTTP Live Streaming (seções 4.3.4.2 BANDWIDTH, 6.2.4 fluxos variantes, 6.3.1 alternância no cliente)
- Apple: especificação de autoria HLS para dispositivos Apple (itens 1.25, 1.32, 7.4 e 8.22; a página precisa de JavaScript para ser renderizada)
- Pontos de interoperabilidade do DASH-IF para MPEG-DASH, versão 4.3 (seção 3.1: alinhamento de segmentos e alternância sem interrupções)
- Diretrizes de implementação do DASH-IF: o MPD e o modelo temporal do DASH
- Documentação da API do hls.js: configurações de ABR, nível inicial e limitação de nível
- Código-fonte do hls.js v1.6.13: level-controller.ts (nível inicial e estimativa inicial de largura de banda)
- Código-fonte do hls.js v1.6.13: abr-controller.ts (seleção de firstAutoLevel)
- Spiteri, Urgaonkar, Sitaraman: BOLA, adaptação de taxa de bits quase ideal para vídeos on-line
- Netflix Technology Blog: otimização da codificação por título (cópia arquivada)