Repository navigation
fix(web): compartilhar tela em H.264 compatível por padrão e liberar o Firefox - #884
Merged
Merged
Conversation
…o Firefox Na web, a tela sai em H.264 Constrained Baseline (42e01f, packetization-mode=1), que Firefox, Safari, Chrome, Edge e o desktop decodificam. Quem publica pode escolher o H.264 Main no diálogo. O Firefox passa a publicar e a assistir, e quem não decodifica o formato (H.264 Main ou AV1) vê uma mensagem que o nomeia. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
O que muda
Na versão web, a tela compartilhada passa a sair por padrão em H.264 Constrained Baseline (
42e01f,packetization-mode=1), o formato que Firefox, Safari, Chrome, Edge e o app desktop decodificam. Quem publica pode escolher o H.264 Main (imagem melhor) num novo grupo "Formato do vídeo" no diálogo de compartilhar, com o aviso de que o Firefox e o Safari não assistem. A escolha fica salva.Causas raiz
4d…), e o Edge ainda usava o encoder de hardware. O Firefox só decodifica Constrained Baseline (OpenH264).→ Agora o codec é fixado nas duas pontas:
setCodecPreferencesem P2P (browserScreenPeer.ts) e o codec doproduceno SFU (webScreenSfuRendition.ts), escolhidos porisScreenCodec(codec, format). Com o42e01fnegociado, o próprio Edge passa para o OpenH264. Isso foi conferido nos testes E2E abaixo.isScreenH264só aceitava Main, entãoscreenSenderCodecsvoltava vazio ewebScreenCapabilities().captureficavafalse.→ A capacidade agora lista os formatos que o navegador codifica (
browserFormats). O Firefox tem['compatible']e publica; o Chromium tem['compatible','main'].→
browserReceivesScreenCodec('h264')aceita CB, e o teste do decodificador usa o CB no nível que a tela pede. Uma resposta P2P com o vídeo recusado (porta 0) e umconsumedo SFU recusado num navegador sem Main viramBrowserScreenCodecError(unsupported). A mensagem sai debrowserScreenRefusal:A fonte continua anunciada como
h264, então não há mudança de protocolo.Por que só "Compatível" e "H.264 Main" (sem AV1, VP9 ou High)
O app desktop não decodifica o AV1 que o navegador gera. O
ReadAv1Sequenceexige cor BT.709 explícita e um único operating point, e o Chrome não manda assim (conferi: web AV1 → web passou, web AV1 → desktop falhou). O desktop também não decodifica VP9 nem H.264 High. Oferecer esses formatos quebraria quem assiste pelo desktop. Liberar o AV1 da web exige relaxarav1_sequence.hno nativo, então fica como follow-up.Testes de regressão
Todos falham sem a correção. Conferi revertendo a correção.
webScreenPublisher.test.ts:screenSenderCodecs/isScreenCodecpor formato: CB escolhido mesmo com Main listado antes;42001fe High recusados;capture: true,['compatible'], botão liberado);browserScreenRefusal(Main/AV1 no Firefox, troca de codec no Chromium).browserScreenSubscription.test.cjs:42e033;unsupported;consumerecusado no SFU →unsupportedno Firefox, enquanto no Chromium continuaconnection-failed.nativeScreenController.test.cjs: o formato chega a todosource-addsó na web.settingsPersistence.test.ts: o formato salvo é lido, e um valor desconhecido volta para "compatible".Validação manual (Edge, servidor SFU remoto de QA)
42e01f, e o desktop decodificou cerca de 55 fps.Limitações e o que falta validar