O streaming de vídeo multi-codec é o sistema mais eficiente e abrangente para dar suporte a toda a variedade de dispositivos e seus codecs cada vez mais fragmentados.
Durante a última década, a maioria dos streams de vídeo enviados pela Internet foram codificados usando o codec ITU-T H.264 / MPEG-4 AVC. Desenvolvido no início dos anos 2000, este codec tornou-se amplamente suportado em uma variedade de dispositivos e plataformas de computação com um alcance notável de 97,93%.
No entanto, no que diz respeito à tecnologia, esse codec é bastante antigo. Nos últimos anos, dois novos codecs foram introduzidos: HEVC (dos grupos de padrões ITU-T) e MPEG e AV1 (da Alliance for Open Media). Ambos afirmam um ganho de pelo menos 50% na eficiência de compressão sobre o H.264/AVC.
Em tese, tais ganhos devem levar a uma redução significativa nos custos de streaming. No entanto, na prática, esses novos codecs só podem alcançar subconjuntos específicos dos dispositivos ou navegadores da web. O HEVC, por exemplo, supostamente tem um alcance de apenas 18,73%, apontando principalmente para dispositivos Apple e dispositivos com suporte de hardware HEVC. O suporte do AV1 entre os navegadores da web é maior, mas, notavelmente, não é suportado por dispositivos Apple e pela maioria das plataformas set-top box existentes.
Esta situação levanta a questão: dado um suporte tão fragmentado de novos codecs em diferentes dispositivos, como você projeta um sistema de streaming para alcançar todos os dispositivos e com a maior eficiência possível?
Neste blog post, originalmente publicado pela Brightcove, tentaremos responder a essa pergunta apresentando o conceito de streaming de vídeo multi-codec.
Antes de começarmos a falar sobre streaming de vídeo multi-codec, vamos revisar brevemente alguns princípios das operações dos sistemas de streaming Adaptive Bit-Rate (ABR – bitrate adaptativo) da era moderna. Para simplificar, vamos nos concentrar no caso de entrega de VOD (Video On Demand – vídeo sob demanda).
Quando um recurso de vídeo é preparado para streaming ABR, ele normalmente é transcodificado em várias execuções (ou streams variantes). Essas execuções normalmente têm diferentes taxas de bits, resoluções e outros parâmetros de nível de codecs e apresentação.
Depois que todas as renderizações são geradas, elas são colocadas no servidor de origem. Junto com o conjunto de renderizações, o servidor de origem também recebe um arquivo manifesto especial, descrevendo as propriedades dos streams codificados. Esses manifestos são normalmente apresentados nos formatos HLS ou MPEG DASH. A entrega subsequente do conteúdo codificado para os dispositivos do usuário é feita por HTTP e usando uma Rede de Entrega de Conteúdo (Content Delivery Network – CDN), garantindo a confiabilidade e escalabilidade do sistema de entrega.
Para reproduzir o conteúdo de vídeo, os dispositivos do usuário usam um software especial, chamado de cliente de streaming. Na forma mais simples, um cliente de streaming pode ser JavaScript executado por um navegador da web. Também pode ser um aplicativo personalizado ou um player de vídeo fornecido pelo sistema operacional. Mas, independentemente da implementação, a maioria dos clientes de streaming inclui lógica para seleção adaptativa de streams/representações durante a reprodução.
Por exemplo, se o cliente de streaming perceber que a largura de banda da rede observada é muito baixa para suportar a reprodução em tempo real do stream atual, ele pode decidir alternar para um stream de taxa de bits mais baixa. Isso evita o armazenamento em buffer.
Caso contrário, se houver largura de banda suficiente, o cliente pode optar por alternar para uma taxa de bits mais alta, o que significa um stream de qualidade mais alta, o que leva a uma melhor qualidade de experiência.
Essa lógica é o que torna a entrega de streaming adaptável. É também a razão pela qual os vídeos são sempre transcodificados em vários streams (normalmente 5-10).
Vamos agora considerar um exemplo de uma encoding ladder (escada de codificação) que pode ser usada para streaming. Este exemplo específico foi criado pela Brightcove CAE para conteúdo de vídeo de filme de ação.
Imagem: Brightcove
Como pode ser observado, a escada de codificação define cinco streams, permitindo a entrega de vídeo com resoluções de 216p a 1080p e usando cerca de 260 a 4200Kbps de largura de banda. Todos os streams são produzidos pelo codec H.264/AVC.
A última coluna desta tabela lista as pontuações de qualidade visual percebidas como estimadas para a reprodução dessas interpretações em uma tela de PC. Esses valores são relatados usando a escala Mean Opinion Score (MOS). A pontuação MOS cinco significa qualidade excelente, enquanto a pontuação um significa que a qualidade é ruim.
Em seguida, plotamos (taxa de bits, qualidade) pontos correspondentes às execuções, bem como a melhor qualidade alcançável pelo sistema de streaming com largura de banda de rede variável.
Com um projeto de encoding ladder adequado, os pontos de renderização tornam-se um subconjunto de pontos do modelo de taxa de qualidade, e a “função degrau” que descreve a qualidade alcançável por streaming torna-se uma aproximação desse modelo.
O que influencia a qualidade do sistema de streaming é o número de execuções na escada de codificação, bem como o posicionamento das execuções ao longo do eixo da largura de banda. Quanto mais próxima a função degrau resultante estiver do modelo de taxa de qualidade, melhor a qualidade que pode ser fornecida pelo sistema de streaming.
Isso tudo significa que os perfis/escadas de codificação para streaming ABR devem ser cuidadosamente projetados. Esta é a razão pela qual os sistemas de streaming mais modernos empregam geradores de perfis especiais para realizar esta etapa dinamicamente, contabilizando as propriedades do conteúdo, redes e outros contextos relevantes.
Agora que explicamos os principais conceitos, podemos voltar nossa atenção para o streaming de vídeo multi-codec.
Para tornar isso mais específico, vamos considerar um exemplo de uma encoding ladder, gerada com o uso de dois codecs: H.264/AVC e HEVC. Novamente, o Brightcove CAE foi usado para produzi-la.
A função do modelo de taxa de qualidade para HEVC é consistentemente melhor do que o modelo de taxa de qualidade para H.264/AVC. Da mesma forma, as execuções HEVC também devem oferecer melhores compensações de taxa de qualidade do que as execuções codificadas usando o encoder H.264/AVC.
No entanto, considerando que normalmente há apenas alguns pontos de renderização e eles podem ser colocados esparsamente em um padrão intercalado, isso pode criar regiões de taxas de bits, onde as renderizações H.264/AVC podem oferecer melhor qualidade do que a renderização HEVC mais próxima de menor ou igual taxa de bits. Essas regiões são vistas quando as funções de etapa para clientes H.264/AVC vão acima das mesmas funções para clientes HEVC.
O que isto significa?
Significa que uma encoding ladder de dois codecs apenas de streams codificados em HEVC não resulta automaticamente na melhor qualidade possível. Uma qualidade ainda melhor pode ser alcançada por clientes que alternam seletiva e inteligentemente entre streams H.264/AVC e HEVC.
Como acabamos de ver, a capacidade do cliente de streaming de não apenas decodificar, mas também de alternar de maneira inteligente e transparente entre streams H.264/AVC e HEVC, é extremamente importante. Isso leva a uma melhor qualidade e permite que menos streams/renderizações sejam geradas, reduzindo os custos de streaming.
No entanto, nem todos os clientes de streaming existentes têm esse recurso. Os exemplos mais conhecidos de clientes que fazem isso são players nativos em dispositivos Apple recentes: iPhones, iPads, computadores Mac etc. Eles podem decodificar e alternar entre streams H.264/AVC e HEVC sem problemas.
Versões recentes dos navegadores Chrome e Firefox suportam o chamado método change type, que tecnicamente permite que clientes de streaming baseados em JavaScript implementem a alternância entre codecs.
Os clientes de streaming em muitas plataformas com decodificadores de hardware como smartTVs só podem decodificar streams H.264/AVC ou HEVC e não alternam para outro codec durante uma sessão de streaming. E, naturalmente, há muitos dispositivos legados que só podem decodificar H.264/AVC – streams codificados.
Esse espaço fragmentado de clientes de streaming e seus recursos devem ser considerados no estágio de geração de encoding ladder, definindo adequadamente os manifestos HLS e DASH e o design do sistema de entrega para streaming de vídeo multi-codec.
Se você estiver entregando um alto volume de streams para dispositivos Apple ou outros dispositivos móveis e set-top boxes compatíveis com HEVC, habilitar o uso de streaming multi-codec e HEVC pode oferecer uma redução considerável no tráfego/custos de CDN, sem comprometer o alcance de dispositivos legados.
Sabemos que esse é um assunto com certa complexidade técnica. Por isso nos colocamos à disposição para esclarecer as suas dúvidas.
Deixe um comentário abaixo ou entre em contato para conversarmos sobre os detalhes do vídeo multi-codec.