Integração Externa¶
Outputs externos começam desabilitados e possuem rotas independentes em RenderMode.FULL.
NDI é uma integração experimental, não oficial e somente de vídeo, que exige um runtime instalado separadamente no sistema. Conclua a configuração do Runtime NDI antes de habilitá-lo.
Configure Rotas¶
OutputManager output = dome.getOutputManager();
output.setNdiView(zividomelive.ViewType.EQUIRECTANGULAR);
output.setSyphonView(zividomelive.ViewType.FISHEYE_DOMEMASTER);
output.setSpoutView(zividomelive.ViewType.STANDARD);
Somente o backend local válido para a plataforma fica disponível: Syphon no macOS ou Spout no Windows.
Alterne a Publicação¶
Backends locais não suportados ignoram a solicitação. Um novo toggle desabilita um backend ativo. Depois de falha na inicialização, outra tentativa explícita de ativação executa recuperação.
Consulte o Lifecycle¶
OutputManager.OutputState state =
output.getOutputState(OutputManager.OutputType.NDI);
String reason = output.getOutputFailureReason(OutputManager.OutputType.NDI);
Disponibilidade, inicialização, publicação e demanda de renderização são estados separados. Um backend inicializado não exige renderização até a publicação ser habilitada.
Pipeline NDI¶
NDI é a fronteira GPU para CPU:
- A draw thread chama
loadPixels()depois que o target foi concluído. - Pixels ARGB são copiados para um dos três slots reutilizáveis.
- Uma fila limitada latest-frame-wins controla latência.
- Um worker dedicado converte para RGBA empacotado e envia frame progressivo.
- O worker não executa chamadas OpenGL.
A metadata de frame rate segue dome.getTargetFrameRate(). Use setNdiFrameRate() para taxas fracionárias como 60000/1001.
Telemetria¶
output.getNdiCapturedFrames();
output.getNdiSentFrames();
output.getNdiDroppedFrames();
output.getNdiFailedFrames();
Drops são eventos intencionais de backpressure. Failed frames identificam erros de captura ou envio.
Shutdown e Resume¶
pause() registra publicações ativas, encerra outputs e resume() tenta restaurá-las. dispose() terminal libera recursos e remove callbacks. A espera pelo worker NDI possui limite; um envio nativo bloqueado leva o backend a STOPPING e adia a limpeza até a saída do worker.
A interoperabilidade com receivers nativos continua sendo item de qualificação em hardware.