Codificação de vídeo escalável VP9 para sessões roteadas
Sobre o suporte ao VP9 para Codificação de Vídeo Escalável (SVC) em sessões roteadas
Visão geral do VP9
O VP9 é um formato de codificação de vídeo aberto e livre de royalties desenvolvido pelo Google. Ele é o sucessor do VP8, oferecendo maior eficiência de compressão. Isso significa que o VP9 pode codificar vídeos de melhor qualidade na mesma taxa de bits do VP8, embora possa exigir mais poder de processamento para isso.
Para obter mais informações, consulte o Codecs de vídeo Guia do desenvolvedor.
Codificação Escalável de Vídeo (SVC)
Uma das principais vantagens do VP9 é o suporte a Codificação de Vídeo Escalável (SVC). O SVC permite que um único fluxo de vídeo contenha múltiplas qualidades espaciais e temporais. Isso possibilita que uma SFU (Unidade de Encaminhamento Seletivo), como a Roteador de mídia de vídeo da Vonage, para enviar diferentes resoluções e taxas de quadros a cada cliente inscrito em um editor compatível com SVC. Isso é mais eficiente do que transmissão simultânea, em que o provedor transmite vários fluxos de vídeo em diferentes resoluções, como costuma ser feito com o VP8.
Modo de escalabilidade
O modo de escalabilidade no SVC define o número e os tipos de camadas espaciais e temporais em um fluxo SVC, bem como as dependências entre elas. Para mais detalhes, consulte o Especificação SVC do WebRTC do W3C. O modo de escalabilidade é definido para um emissor, e o Vonage Video Media Router se encarregará de encaminhar o fluxo adequado, dentre os disponíveis, para o assinante.
Ao publicar um fluxo de câmera, a Video API da Vonage oferece suporte aos formatos L1T3, L2T3 e L3T3 modos de escalabilidade (três camadas temporais com um número variável de camadas espaciais) tanto para clientes web quanto para clientes nativos.
Observe que o número de camadas espaciais será ajustado automaticamente com base na resolução do fluxo da câmera e na largura de banda estimada entre o editor e o Vonage Video Media Router. Com largura de banda suficiente, as camadas espaciais para FHD são 1920x1080, 960x540 e 480x270 pixels. Para HD, são 1280x720, 640x360 e 320x180. Para SD, há apenas duas camadas espaciais: 720x480 e 360x240. Da mesma forma, as camadas temporais serão de 30 FPS para a camada temporal mais alta, 15 FPS para a camada temporal intermediária e 7,5 FPS para a camada temporal mais baixa.
Tanto para clientes web quanto para clientes nativos, ao publicar uma transmissão de compartilhamento de tela, o modo de escalabilidade é determinado por meio de uma opção definida durante a publicação (mais detalhes no Página sobre vídeo escalável. Se estiver desativado, a transmissão utilizará o modo L1T1, oferecendo uma única camada espacial e temporal (sem escalabilidade). No entanto, quando estiver ativada, o sistema irá selecionar dinamicamente entre L1T1, L2T1 ou L3T1 com base na largura de banda estimada entre o editor e o Vonage Video Media Router, bem como na resolução do stream de compartilhamento de tela.
Simulcast (usado no VP8) x SVC (usado no VP9)
Na transmissão simultânea (utilizada com o VP8), o editor envia múltiplos fluxos de vídeo independentes, cada um composto por diferentes camadas temporais com resoluções e taxas de bits variáveis, para o servidor de mídia. Essas camadas temporais codificadas dentro dos múltiplos fluxos permitem que o servidor selecione dinamicamente o fluxo e a camada mais adequados para cada assinante, com base nas condições da rede. Embora esse método aumente a eficiência ao ajustar a qualidade do vídeo em tempo real, ele exige que o editor codifique (o que aumenta a carga da CPU) e transmita (o que aumenta a carga da rede) várias versões do mesmo fluxo para se adaptar a diferentes condições.
Em contrapartida, o SVC (Scalable Video Coding), conforme suportado no VP9, incorpora múltiplas qualidades espaciais e temporais em um único fluxo. O servidor de mídia pode então extrair e encaminhar a camada apropriada para cada assinante sem que o editor precise enviar múltiplos fluxos. Isso torna o SVC mais eficiente em termos de largura de banda e melhora a eficiência da carga de trabalho do editor em comparação com a transmissão simultânea.
Uso
Você pode testar o recurso selecionando o VP9 como o codec de vídeo preferencial na página “Projeto” do seu Video API Account.
- Para sessões retransmitidas, o SVC está desativado.
- Para sessões roteadas, o SVC será ativado automaticamente.
Observações sobre o arquivamento de vídeos em VP9
Nossa plataforma oferece dois modos de arquivamento: arquivos compostos e arquivos de stream individuais, e ambos continuarão funcionando ao selecionar o VP9 como codec preferencial. Nos arquivos compostos, as gravações são armazenadas como arquivos MP4 compostos com vídeo H.264 e áudio AAC, gerando uma saída única e finalizada. Em contrapartida, os arquivos de fluxo individuais armazenam a mídia de cada participante separadamente como fluxos WebM, com vídeo VP9 SVC (Scalable Video Coding).
O suporte ao VP9 SVC em reprodutores comerciais e de código aberto pode variar, dependendo da versão e da implementação específica. Por exemplo, ao reproduzir arquivos de stream individuais, nem todos os reprodutores conseguem lidar com streams codificados em SVC corretamente. No caso do FFMPEG, apenas o codec libvpx-vp9 é capaz de decodificar esses streams adequadamente. Para uma reprodução correta, o seguinte comando pode ser usado:
ffplay -vcodec libvpx-vp9 vp9_with_svc.webm
Além disso, se você precisar converter um arquivo WebM codificado em SVC para um fluxo VP8 padrão sem SVC (para maior compatibilidade), pode usar o seguinte comando do FFMPEG para transcodificar o vídeo:
ffmpeg -c:v libvpx-vp9 -i vp9_with_svc.webm -c:v libvpx vp8.webm
Essa transcodificação remove as camadas SVC, garantindo que o vídeo possa ser reproduzido em reprodutores que não oferecem suporte total ao VP9 e/ou ao SVC.
Além disso, se você quiser remover as camadas SVC mantendo o codec VP9, pode usar:
ffmpeg -c:v libvpx-vp9 -i vp9_with_svc.webm vp9_without_svc.webm
Problemas conhecidos
Estamos cientes das seguintes limitações e problemas conhecidos:
- Para cargas de trabalho do Experience Composer com conteúdo de vídeo altamente dinâmico e texturas complexas, a qualidade do vídeo de saída dos streams do Experience Composer codificados em VP9 obteve pontuação inferior nos testes de qualidade de vídeo perceptiva (VMAF) em comparação com os streams codificados em VP8 . Essa diferença de qualidade do Experience Composer não deve ser perceptível em casos de uso padrão de videoconferência com composição de vídeo.
Perguntas frequentes
Qual é a situação atual da compatibilidade do VP9 com os navegadores?
A partir de 2024, o VP9 terá suporte total em todos os principais navegadores. Isso inclui Google Chrome, Firefox, Microsoft Edge, Samsung Internet, Opera e WebView do Android, que oferecem compatibilidade total com o VP9 desde aproximadamente 2016. O Safari 15+ da Apple e o WebView no iOS 15+ também oferecem suporte ao VP9.
Quais dispositivos são compatíveis com o VP9?
A partir de 2025, a maioria dos dispositivos modernos oferecerá suporte total ao VP9 para serviços WebRTC. Isso inclui computadores de mesa, laptops e dispositivos móveis que executam versões recentes dos principais navegadores, como Google Chrome, Firefox, Microsoft Edge, Opera, WebView no Android e Safari e WebView no iOS (a partir da versão 15). Embora esses navegadores possam realizar a codificação de vídeo por meio de hardware, o suporte de hardware para codificação e decodificação não é tão generalizado. Por exemplo, mesmo que o hardware seja capaz de codificar e decodificar VP9, nossos SDKs nativos usarão a codificação de vídeo por software para o VP9.
Por outro lado, o suporte a SVC por hardware e software não é tão generalizado.
Observação: o VP9 é compatível com o Firefox, mas o SVC não.
Quais dispositivos são recomendados?
O VP9 oferece uma compressão de vídeo aprimorada em relação ao VP8, com a desvantagem de uma maior carga na CPU. Os modelos mais recentes de dispositivos de marcas de ponta (por exemplo, iPhone da Apple; Google Pixel; Samsung Galaxy, etc.) devem apresentar um bom desempenho.
Outro recurso com restrições semelhantes de CPU é a API do Vonage Media Processor. Espera-se que os dispositivos que atendam a esses requisitos tenham um bom desempenho com o VP9.
Dispositivos recomendados por plataforma:
- Dispositivos recomendados para Android
- Dispositivos recomendados para iOS
- Dispositivos recomendados para a Web
Quais versões do Client SDK posso usar?
O que está indicado no página de codecs aplica-se. No entanto, o suporte completo a VP9 e SVC, com melhorias desenvolvidas durante a fase de Acesso Antecipado, está disponível a partir da versão 2.29. Caso você não consiga atualizar, o suporte básico a VP9 e SVC está disponível a partir da versão 2.27 do Client SDK para clientes Web e nativos.
O que acontece se um navegador/SDK/dispositivo não for compatível com VP9?
Se for um emissor, ele recorrerá ao VP8. Se for um assinante, ele não poderá assinar o vídeo e receberá apenas o áudio.
O que acontece se um navegador/SDK/dispositivo for compatível com VP9, mas não com SVC?
Tanto para os editores quanto para os assinantes, o VP9 será negociado, mas sem o suporte à escalabilidade. O terminal utilizará, de forma transparente, o VP9 sem SVC.
Como faço para monitorar o codec em uma sessão?
Assim como acontece com qualquer outro codec, a ferramenta Video Inspector exibirá o codec, a resolução e a taxa de quadros no módulo Métricas de Qualidade. Basta passar o mouse sobre qualquer ponto de uma linha traçada para ver o codec utilizado.
Como posso saber qual codec um terminal está usando?
Os SDKs oferecem métodos para recuperar o objeto RTCStatsReport para cada fluxo, o qual incluirá os codecs de áudio e vídeo utilizados. Para ver exemplos de código, consulte o Manual de Referência do Assinante ou o Referência do editor Manual para JS. Para o Linux, você pode encontrar informações adicionais aqui.