Vídeo escalável

O vídeo escalável é um recurso para sessões roteadas que melhora a qualidade do vídeo em sessões com vários participantes, permitindo que cada assinante receba uma qualidade de vídeo adequada às suas condições atuais de rede — independentemente dos demais assinantes.

Sem o vídeo escalável, o Media Router encaminha a mesma qualidade de vídeo para todos os assinantes de uma transmissão. Quando a conexão de um assinante fica instável, o roteador usa a estimativa de largura de banda para solicitar ao editor que reduza a taxa de bits — o que diminui a qualidade para todos os assinantes daquela transmissão. Com o vídeo escalável ativado, o roteador seleciona a camada de qualidade mais adequada para cada assinante de forma independente e em tempo real, sem afetar o que os outros assinantes recebem.

O vídeo escalável requer um sessão encaminhada (uma sessão que utiliza o Media Router). Ela não está disponível em sessões retransmitidas e não seria útil nesse contexto, uma vez que os fluxos trafegam diretamente entre os clientes, sem nenhum roteador no caminho para selecionar ou alternar entre camadas de qualidade. Consulte O Media Router e os modos de mídia.

O vídeo escalável está ativado por padrão. A configuração no nível do aplicativo é, por padrão, Auto, o que significa que o Media Router ativa o vídeo escalável automaticamente quando há mais de dois clientes em uma sessão e todas as outras condições são atendidas. Você também pode configurá-lo para Em (sempre ativo) ou Desligado — veja Configuração no nível do aplicativo para mais detalhes. Na maioria das aplicações, não é necessário fazer alterações no código.

Codecs e modelos de escalabilidade

O funcionamento do vídeo escalável depende do codec negociado pelo provedor. Compreender as diferenças ajuda você a escolher o codec certo para o seu caso de uso, como quando é necessário otimizar o uso da CPU do provedor, a largura de banda de envio ou a adaptação da qualidade do lado do assinante.

VP8: Transmissão simultânea

Com VP8, o vídeo escalável é implementado por meio de transmissão simultânea. A emissora codifica e transmite vários fluxos de bits totalmente independentes, com diferentes resoluções e taxas de quadros — por exemplo, 1080p, 540p e 270p, cada um com suas próprias camadas temporais (taxa de quadros). Cada fluxo é independente e pode ser decodificado separadamente.

Como cada fluxo é totalmente independente, o Media Router pode alternar instantaneamente qualquer assinante para um nível de qualidade diferente, sem necessidade de recodificação — proporcionando grande resiliência às mudanças nas condições da rede.

Compromisso: A codificação e o envio de múltiplas transmissões exigem mais recursos da CPU e largura de banda de envio do lado do editor do que o envio de uma única qualidade. As camadas de resolução mais baixa são significativamente mais econômicas de codificar do que a qualidade mais alta, mas o custo total ainda é maior do que o de uma transmissão não simultânea.

VP9: Codificação de Vídeo Escalável (SVC)

Com VP9, usos do vídeo escalável Codificação Escalável de Vídeo (SVC). O editor codifica um único fluxo de bits que contém várias camadas espaciais (resolução) e temporais (taxa de quadros) matematicamente incorporadas a ele. Cada camada superior depende das camadas inferiores; assim, um decodificador que receba apenas a camada base obtém baixa qualidade, enquanto aquele que receba todas as camadas obtém qualidade total — tudo a partir do mesmo fluxo de bits.

O custo de CPU do provedor para a codificação SVC é maior do que para a codificação de um único fluxo — aproximadamente comparável à transmissão simultânea em VP8 —, mas o SVC requer menos largura de banda de envio, pois há apenas um fluxo de bits a ser enviado, em vez de vários fluxos independentes. A partir do único fluxo codificado, o Media Router pode extrair e encaminhar exatamente o subconjunto correto de camadas para cada assinante, proporcionando uma adaptação de qualidade eficiente e flexível que também é mais resistente à perda de pacotes.

O SVC exige que tanto o endpoint do publisher quanto o Media Router sejam compatíveis com VP9 SVC. O Firefox é compatível com VP9, mas não com SVC — um editor do Firefox envia VP9 sem camadas, de modo que o Media Router não consegue ajustar a qualidade desse fluxo.

Para uma explicação completa sobre as camadas do SVC e os modos de escalabilidade (L1T3, L2T3, L3T3), comportamento de arquivamento e compatibilidade com dispositivos, consulte Codificação de vídeo escalável VP9 para sessões roteadas.

Principais diferenças em resumo

Aspecto Transmissão simultânea (VP8) SVC (VP9)
O que a editora envia Vários fluxos de bits independentes com diferentes resoluções e taxas de quadros (SSRCs/RIDs distintos) 1 fluxo de bits com camadas espaciais e temporais incorporadas (SSRC único)
Camadas espaciais Multifluxo: cada resolução é um fluxo codificado separado Incorporado em um único fluxo de bits
Camadas temporais Cada transmissão simultânea pode incluir camadas temporais Incorporado em um único fluxo de bits
Função do Media Router Escolha qual transmissão deseja encaminhar Extraia e encaminhe as camadas corretas
Suporte a editores no Firefox Compatível com codificações baseadas em RID VP9 sim; SVC não é compatível com o Firefox

Índice de resolução da camada espacial: Cada passo espacial utiliza um Relação de resolução de 2:1. Um L3T3 O stream possui camadas com 100%, 50% e 25% da resolução da fonte (por exemplo, 1080p → 540p → 270p). É por isso que setPreferredResolution() podem ser direcionados para resoluções substancialmente diferentes.

H.264: Vídeo escalável não é compatível

O codec H.264 é totalmente compatível com a Video API da Vonage para publicação e assinatura, mas O vídeo escalável não está disponível para transmissões em H.264. O Media Router não pode alternar entre camadas de qualidade para fluxos H.264, e as configurações de vídeo escalável não surtem efeito quando o H.264 é negociado. Se o seu aplicativo exigir vídeo escalável, use VP8 ou VP9 em vez disso. Consulte Codecs de vídeo.

Suporte a vídeo escalável

O vídeo escalável é compatível com a transmissão simultânea em VP8 e com o VP9 SVC. Não é compatível com Fluxos H.264. Está disponível apenas em sessões encaminhadas.

Os seguintes clientes oferecem suporte a vídeo escalável:

  • SDK da Web — Chrome, Firefox, Safari, Samsung Internet, WebView no Android, WebView no iOS e o Edge baseado no Chromium. Observação: o Firefox oferece suporte à transmissão simultânea em VP8, mas não ao VP9 SVC.
  • SDK do Android (em dispositivos compatíveis)
  • SDK do iOS (em dispositivos compatíveis)
  • SDK do Windows
  • SDK do Linux
  • SDK do macOS
  • SDK do React Native (em dispositivos compatíveis)

Para obter detalhes sobre a compatibilidade do VP9 SVC com dispositivos e navegadores, consulte Codificação de vídeo escalável VP9 para sessões roteadas.

Observação: Por padrão, o vídeo escalável está desativado para transmissões de compartilhamento de tela e ativado para transmissões de câmera e de fontes de vídeo personalizadas. Para ativar o vídeo escalável para o compartilhamento de tela, consulte Transmissões escaláveis de compartilhamento de tela.

Como usar o vídeo escalável

Configuração no nível do aplicativo

O vídeo escalável possui três modos que você pode definir por aplicação no Painel do Vonage:

  1. Faça login na sua Account da Video API da Vonage.
  2. No menu à esquerda, selecione Applications.
  3. Para uma aplicação já instalada, clique no menu com os três pontos e selecione Editar. Para uma nova inscrição, acesse a seção de qualificações após clicar em Criar um novo aplicativo.
  4. Ative o botão para habilitar o Vídeo opção.
  5. Role a página para baixo e clique Mostrar recursos avançados.
  6. Sob Vídeo escalável, escolha uma das seguintes opções:
    • Auto (recomendado) — O Media Router permite a exibição de vídeo escalável quando há mais de dois clientes em uma sessão. Deixe essa opção selecionada, a menos que tenha um motivo específico para alterá-la.
    • Em — O vídeo escalável está sempre ativado (em clientes compatíveis) para todas as sessões neste aplicativo.
    • Desligado — O vídeo escalável está desativado para todas as sessões neste aplicativo. Use essa opção para fixar a resolução e a taxa de quadros, ou para reduzir o uso de CPU e largura de banda pelo editor.
  7. Clique Salvar alterações.

Observação: Essa configuração controla Transmissão simultânea em VP8 comportamento. O VP9 sempre utiliza SVC quando compatível, e o H.264 não suporta vídeo escalável — nenhum dos dois é afetado por essa configuração.

Observação: As transmissões exigem mais largura de banda de envio do provedor quando o vídeo escalável está ativo, pois camadas adicionais de qualidade são codificadas e transmitidas.

Transmissões escaláveis de compartilhamento de tela

Por padrão, o vídeo escalável é desativado para transmissões com compartilhamento de tela e ativado para transmissões de câmera e fontes de vídeo personalizadas. O conteúdo compartilhado na tela geralmente muda com menos frequência do que o vídeo da câmera; portanto, o custo adicional de codificação do vídeo escalável costuma ser desnecessário. No entanto, ativá-lo pode ser benéfico em sessões em que os participantes do compartilhamento de tela apresentam condições de rede variáveis. É possível substituir a configuração padrão por editor:

SDK Método / Propriedade
SDK da Web scalableScreenshare opção em OT.initPublisher()
SDK do Android PublisherKit.Builder.scalableScreenshare()
SDK do iOS OTPublisherKitSettings.scalableScreenshare
SDK do Windows Publisher.Builder.ScalableScreenshare
SDK do Linux otc_publisher_settings_set_scalable_screenshare()

Como a sugestão de conteúdo afeta as camadas de compartilhamento de tela

Quando o vídeo escalável está habilitado para uma transmissão de compartilhamento de tela em VP8 em uma sessão roteada, o dica sobre conteúdo em vídeo A configuração que você define para o emissor determina como ele estrutura as camadas de transmissão simultânea que envia. É por isso que o número de fluxos (SSRCs) que você observa para um emissor de compartilhamento de tela em uma ferramenta como chrome://webrtc-internals depende da dica de conteúdo:

  • detail ou text — O editor é otimizado para preservar os detalhes finos e a legibilidade (texto, desenhos lineares, conteúdo estático). Ele envia dois fluxos com a mesma resolução espacial que diferem apenas na taxa de quadros: um fluxo em resolução total na taxa de quadros normal e um segundo fluxo em resolução total com uma taxa de quadros mais baixa. Isso mantém o conteúdo compartilhado nítido e legível, ao mesmo tempo em que oferece ao Media Router uma camada com taxa de bits mais baixa para ser utilizada como alternativa quando a rede do assinante se deteriora — de modo que a deterioração reduza a taxa de quadros, em vez de desfocar os detalhes. Duas camadas em resolução total proporcionam um bom equilíbrio entre a resiliência durante a degradação e a manutenção da resolução detalhada original.

  • motion — O editor otimiza para garantir um movimento suave (por exemplo, durante a reprodução de vídeos compartilhados). Ele funciona como uma transmissão simultânea de câmera, enviando vários fluxos em diferentes resoluções espaciais, de modo que o Media Router possa reduzir a resolução para um assinante a fim de manter a fluidez dos movimentos em condições de rede limitadas.

Escolha a sugestão de conteúdo que melhor corresponda ao seu conteúdo compartilhado: detail ou text prioriza manter os detalhes nítidos (reduzindo a taxa de quadros em primeiro lugar), enquanto motion prioriza a fluidez do movimento (reduzindo primeiro a resolução).

Observação: Esse comportamento da camada se aplica a transmissões simultâneas de compartilhamento de tela em VP8. Defina a dica de conteúdo por meio do videoContentHint opção em OT.initPublisher() ou o publisher.setVideoContentHint() método — consulte Dicas sobre conteúdo em vídeo.

Configuração da taxa de quadros e da resolução preferidas pelo assinante

Quando uma transmissão é publicada com vídeo escalável, os assinantes podem indicar ao Media Router a qualidade de sua preferência. O Media Router seleciona a camada disponível mais próxima que se adapte às condições reais de rede do assinante.

Importante: Chamando setPreferredResolution() ou setPreferredFrameRate() isso desencadeia uma renegociação com o Media Router. Fazer isso repetidamente ou em rápida sucessão tem um custo elevado — consome recursos da CPU e pode prejudicar a qualidade geral da transmissão. Defina os valores preferidos uma única vez (ou apenas quando o layout do assinante sofrer alterações significativas), em vez de ajustá-los continuamente.

SDK Taxa de quadros Resolução
SDK da Web Subscriber.setPreferredFrameRate() — veja Guia da Web sobre assinaturas de streaming Subscriber.setPreferredResolution() — veja Guia da Web sobre assinaturas de streaming
SDK do Android SubscriberKit.setPreferredFrameRate() — veja Guia do Android sobre o `subscribe-streams` SubscriberKit.setPreferredResolution() — veja Guia do Android sobre o `subscribe-streams`
SDK do iOS OTSubscriberKit.preferredFrameRate — veja Guia do subscribe-streams para iOS OTSubscriberKit.preferredResolution — veja Guia do subscribe-streams para iOS
SDK do Windows Subscriber.PreferredFramerate — veja Guia do Windows sobre o subscribe-streams Subscriber.PreferredResolution — veja Guia do Windows sobre o subscribe-streams
SDK do Linux otc_subscriber_set_preferred_frame_rate() — veja Guia do Linux sobre subscribe-streams otc_subscriber_set_preferred_resolution() — veja Guia do Linux sobre subscribe-streams
React Native preferredFrameRate propriedade de OTSubscriber — veja Guia do React Native sobre subscribe-streams preferredResolution propriedade de OTSubscriber — veja Guia do React Native sobre subscribe-streams

Como verificar se o vídeo escalável está funcionando

Não há um único indicador de “vídeo escalável ativo” no SDK, mas é possível verificar se ele está funcionando por meio das seguintes abordagens.

Inspecionador de Vídeos

O Inspecionador de Vídeos A ferramenta no módulo Métricas de Qualidade exibe o codec, a resolução e a taxa de quadros. Passe o cursor sobre qualquer ponto de uma linha traçada para visualizar o codec atualmente em uso. Quando o vídeo escalável está ativado, a resolução e/ou a taxa de quadros para um ou mais assinantes podem ser ajustadas dinamicamente em resposta às mudanças nas condições da rede.

Estatísticas do WebRTC

Cada SDK disponibiliza o relatório de estatísticas do WebRTC subjacente. Do lado do editor, verifique RTCOutboundRtpStreamStats:

  • Com Transmissão simultânea em VP8, você verá vários ssrc entradas com diferentes frameWidth/frameHeight valores — um por camada de transmissão simultânea.
  • Com VP9 SVC, você verá um único ssrc com um scalabilityMode conjunto de propriedades (por exemplo, L3T3).

Observação: Para um VP8 compartilhamento de tela transmissão publicada com o detail ou text dica de conteúdo: os dois ssrc as entradas têm o o mesmo frameWidth/frameHeight e diferem na taxa de quadros, em vez de na resolução. Veja Como a sugestão de conteúdo afeta as camadas de compartilhamento de tela.

Métodos do SDK para acessar o relatório de estatísticas:

Lista de verificação: Condições necessárias para que o vídeo escalável esteja ativo

Caso não observe o comportamento de qualidade adaptativa, Verify o seguinte:

  • A sessão é derrotado (não transmitido).
  • O vídeo escalável não está configurado para Desligado no nível do aplicativo.
  • O codec negociado é VP8 ou VP9 (não H.264).
  • A editora está operando em um cliente compatível.

Equívocos comuns e perguntas frequentes

O vídeo escalável é a mesma coisa que o VP9 SVC?

Não. “Vídeo escalável” é o nome do recurso da Video API da Vonage. O mecanismo técnico depende do codec:

  • VP8 implementa vídeo escalável por meio de transmissão simultânea — a editora envia vários fluxos independentes.
  • VP9 implementa vídeo escalável por meio de SVC — o editor envia um fluxo com camadas incorporadas.

Ambos os mecanismos permitem que o Media Router ajuste a qualidade que cada assinante recebe. Quando a documentação menciona “vídeo escalável” sem especificar um codec, ela se refere ao recurso como um todo.

A definição de um codec preferencial ativa o vídeo escalável?

Não. A seleção de um codec preferencial (no painel de controle ou por meio do preferredVideoCodecs (opção do editor) é independente do vídeo escalável. A ativação do vídeo escalável depende de todos os seguintes fatores:

  1. Configuração do recurso de vídeo escalável (Ligado / Desligado / Automático).
  2. A sessão está sendo encaminhada.
  3. O codec negociado compatível com vídeo escalável (VP8 ou VP9 — não H.264).
  4. O cliente do editor ou o navegador que oferece suporte a vídeo escalável.

Por que é que Subscriber.setPreferredResolution() Não está garantindo a qualidade?

O lado do assinante setPreferredResolution() e setPreferredFrameRate() são dicas para o Media Router, e não comandos diretos ao codificador da emissora. O Media Router só pode agir com base nessas sugestões quando estiver selecionando ativamente entre camadas de vídeo escaláveis para aquele assinante. Se qualquer uma das seguintes condições for verdadeira, não haverá camadas para selecionar e as sugestões não terão efeito:

  • O vídeo escalável está desativado no nível do aplicativo ou no stream do editor.
  • O codec negociado é o H.264 (vídeo escalável não é compatível).
  • O cliente do editor não gera camadas escaláveis (por exemplo, um editor do Firefox que envia VP9 sem camadas SVC).
  • O editor está com restrições de CPU ou largura de banda e não está enviando camadas superiores para que o roteador possa selecionar.
  • A sessão é retransmitida — em uma sessão retransmitida, o Media Router não encaminha os fluxos, portanto, a seleção de camada não pode ocorrer. Observe que, em sessões retransmitidas (P2P), o codificador do emissor adapta sua saída diretamente com base nas condições de rede do assinante, mas isso não é o mesmo que a seleção de camada de vídeo escalável.

Observação: Em sessões retransmitidas, alguns SDKs ainda podem aceitar essas chamadas de API sem gerar erros, mas o Media Router não está envolvido no encaminhamento do fluxo; portanto, as preferências não podem ser respeitadas na seleção da camada de qualidade.

Observação: As APIs de resolução e taxa de quadros do lado do editor (quando disponíveis em determinados SDKs) funcionam de maneira diferente — elas controlam diretamente a resolução e a taxa de quadros do fluxo codificado, e não uma sugestão de qualidade do Media Router.

Posso misturar editores escaláveis e não escaláveis na mesma sessão?

Sim. O vídeo escalável é definido por fluxo, e não por sessão. Uma sessão pode conter simultaneamente emissores que utilizam vídeo escalável e emissores que não o utilizam (por exemplo, emissores H.264 ou clientes que transmitem com o vídeo escalável desativado). O Media Router processa cada fluxo de forma independente.

O vídeo escalável afeta o arquivamento?

Para Transmissão simultânea em VP8, o programa de compactação grava usando a camada de qualidade mais alta disponível.

Para VP9 SVC, os arquivos individuais armazenam o fluxo de cada participante no formato WebM com codificação VP9 SVC. Os arquivos compostos são sempre transcodificados para MP4 com H.264/AAC, independentemente do codec da sessão.

A reprodução de arquivos WebM no formato VP9 SVC pode não funcionar em todos os reprodutores de mídia. Para obter instruções de reprodução e comandos de transcodificação, consulte Notas sobre arquivamento no guia do VP9.

Para obter mais informações, consulte este artigo de suporte.