Pular para o conteúdo

Conceitos

Taxa de bits adaptativa (ABR) guiada pelo buffer

Intuição

Pense em quem enche uma caixa d'água enquanto a casa consome água o tempo todo: tentar adivinhar a vazão do cano nas próximas horas é arriscado, mas olhar quanta água ainda resta na caixa é fácil e diz exatamente o que importa. Se a caixa está quase vazia, você gasta pouco e tenta enchê-la; se está bem cheia, pode se dar ao luxo de gastar mais. No vídeo pela internet, a "água" é o trecho de vídeo já baixado e guardado para exibir, e "gastar mais" é escolher uma versão de maior qualidade (e mais pesada) do vídeo.

Como funciona

Cada vídeo é guardado em várias taxas, de uma mínima (Rmin) a uma máxima (Rmax), e o cliente escolhe a taxa de cada trecho de duração fixa (chunk) que vai baixar; o buffer é medido em segundos de vídeo e drena a um segundo por segundo, de modo que pedir taxa acima da capacidade o esvazia até a reprodução parar (rebuffer). A abordagem usual estima a capacidade futura a partir do passado, o que é frágil quando a vazão varia muito: no trace analisado pelo paper ela oscila entre cerca de 17 Mb/s e 500 kb/s, e um fator de ajuste que evitasse todo rebuffer teria de ser tão conservador (no máximo 0,03 nesse trace) que renderia só cerca de 3% da taxa que uma estimativa correta permitiria. A alternativa é escolher a taxa como função do nível do buffer, por meio de um mapa que vai de Rmin (buffer vazio) a Rmax (buffer cheio). Sob suposições idealizadas (chunks infinitesimais, qualquer taxa disponível, taxa constante de codificação, vídeos infinitos), qualquer mapa contínuo, estritamente crescente na faixa intermediária e preso nas pontas evita rebuffers desnecessários (enquanto a capacidade C(t) não cair abaixo de Rmin, o buffer volta a crescer antes de esvaziar); e, se Rmin < C(t) < Rmax o tempo todo, a taxa média acompanha a média da capacidade C(t). Na prática, com chunks finitos, o mapa é deslocado para criar um reservatório: enquanto o buffer está dentro dele, pede-se sempre Rmin, para que o buffer possa se recompor; acima vem a região de cushion, em que a taxa sobe com o buffer, e depois uma região em que se pede Rmax (no BBA-0: reservatório de 90 s, cushion de 126 s, buffer de 240 s). Como vídeos reais têm taxa variável, o BBA-1 calcula o reservatório a partir do tamanho dos chunks futuros; e como no início o buffer vazio diz pouco sobre a rede, o BBA-2 usa uma estimativa simples (a vazão do último chunk) só nessa fase, voltando a decidir apenas pelo buffer depois.

Na prática

Em testes A/B na Netflix com mais de meio milhão de usuários por grupo, os algoritmos baseados em buffer reduziram a taxa de rebuffer em relação ao algoritmo padrão da época, que se baseava em estimativa de capacidade (por exemplo, 20 a 28% a menos no horário de pico com o BBA-1), e o BBA-2, que trata a fase inicial, manteve a taxa de vídeo praticamente indistinguível da do algoritmo padrão. A lição que o paper tira é que a estimativa de capacidade é desnecessária no regime estável, mas útil no início da sessão. Por isso, ao projetar um player ou um serviço de entrega de vídeo, faz sentido partir de um controle simples pelo nível do buffer, com reservatório, e só acrescentar complexidade onde ela se justifica, como na partida.

Use em um desenho

Pratique na escola de System Design os casos que dependem deste conceito.