Skip to content

Tela nativa: formato de vídeo só vale para H.264; transmissão AV1 falha e codec fica travado #890

Closed

Description

@lucastaonline

Problema

Depois do #887 (formato Compatível de tela no desktop), a transmissão de tela nativa deixou de funcionar quando o encoder escolhido é AV1, e o seletor de codec ficou travado.

Sintomas

  1. Transmitir tela falha sempre. No log do cliente (%APPDATA%\@monky\client\client-logs\*.jsonl) aparece, com o encoder av1_texture_amf e screenFormat: "main":
    An AV1 screen has no H.264 profile. [monky-screen-failure {"codes":["ERR_ASSERTION"]}]
  2. Não é possível mudar o codec, nem manualmente.
  3. O modo automático deixou de escolher AV1, que é a melhor qualidade. Antes do feat: formato Compatível de tela no desktop e correções do Firefox na web #887 escolhia.

Causa

  • apps/client/src/main/nativeScreenSharing.ts (createEndpoint, ~linha 551) passa h264Profile ao NativeScreenEndpoint mesmo com codec AV1.
  • apps/client/native/screen-share/runtime/nativeEndpoint.cjs:73-75 recusa h264Profile quando source.codec === 'av1' (assert.notEqual(source.codec, 'av1', 'An AV1 screen has no H.264 profile.')).
  • apps/client/src/renderer/views/ScreenEncodingControls.ts (~linhas 187-194 e 448) força codec: 'h264' quando o formato é compatible, travando o seletor de codec e o automático.

Comportamento esperado

  • Tudo volta a funcionar como antes do feat: formato Compatível de tela no desktop e correções do Firefox na web #887.
  • O modo padrão é alta qualidade (formato main), sem restrição de codec.
  • O modo automático sempre escolhe a melhor qualidade disponível, ou seja AV1 quando houver suporte.
  • O seletor de codec continua funcionando no modo manual.
  • O parâmetro h264Profile só é enviado ao pipeline quando o codec é H.264.

Layout / UX

  • A opção Formato de vídeo (Alta qualidade / Compatível) é exclusiva do H.264. Só aparece quando o codec de transmissão é H.264, e deixa claro que vale só para ele.
  • Ela fica abaixo de "Codificação de tela" (Configurações > Qualidade e no seletor de compartilhamento).
  • Com AV1 (ou automático resolvendo para AV1) a opção não aparece nem tem efeito.
  • Textos nos dois locales (pt-BR e en). Sem checkbox nativo: usar renderChoiceCards.

Critérios de aceite

  • Transmitir com AV1 (automático e manual) funciona.
  • Automático escolhe AV1 quando disponível.
  • Codec pode ser alterado manualmente com qualquer formato.
  • Formato de vídeo só aparece com H.264, abaixo de Codificação de tela.
  • Teste de regressão: h264Profile não é enviado com AV1, e o automático não é forçado a H.264 pelo formato.
  • Padrão em alta qualidade no desktop e na web.
  • Nota de release em release-notes/.

Relacionado: #887, #858

Activity

  1. lucastaonline commented on Nov 6, 2026

    @lucastaonline
    CollaboratorAuthor

    💡 Como foi implementado & Decisões Técnicas

    • Resumo Didático: o "Formato do vídeo" (Compatível/Melhor qualidade) é uma opção do H.264, mas era aplicado também ao AV1, e isso fazia a transmissão AV1 falhar. Agora:
      • o formato só aparece e só vale com H.264, abaixo de "Codificação de tela";
      • o automático volta a escolher AV1 quando a placa permite;
      • o codec não fica mais travado.
    • Outras mudanças no mesmo PR:
      • trocar o codec, o modo ou o formato durante a transmissão reinicia a live com o novo encoder;
      • o select mostra "Carregando" em vez de ficar vazio;
      • a live AMD no formato Compatível volta a ser assistida;
      • máquinas sem GPU compatível recebem um aviso claro.
    • Arquivos:
      • nativo: capture/host.cpp, contract.h, mf_rtc_policy.cc;
      • main: screenEncodingPolicy.ts, nativeScreen/encoderDiscovery.ts;
      • renderer: ScreenEncodingControls.ts, QualityTab.ts, nativeScreen/LocalScreenSources.ts, screenShareFailure.ts;
      • shared: nativeScreenIpc.ts, screenShareFailures.ts.

    🧪 Como testar

    1. Escolha AV1 no modo Manual e transmita a tela.
      • Esperado: a live funciona, e o Formato do vídeo some.
    2. Com a tela ao vivo, troque para H.264.
      • Esperado: a transmissão reinicia com o codec novo, e um toast confirma.
    3. Abra Qualidade.
      • Esperado: enquanto detecta os codecs, o campo mostra "Carregando".
    4. Teste numa VM ou máquina sem GPU.
      • Esperado: aparece uma mensagem amigável, em vez de erro técnico.

    Entregue no PR #891.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions