LensLink
IdiomaPT

Latência e desempenho

Cerca de 60 ms da câmera até o OBS por USB, em 1080p ou 4K; no Wi-Fi é mais alta e mais variável. O valor é medido continuamente, não estimado, e aparece no campo Status, na barra de status e no log.

De onde vem o atraso#

EtapaAproximadamenteObservações
Captura e exposiçãoUm quadroCenas mais claras expõem mais rápido, e a diferença aparece aqui.
Codificação por hardwareAlguns msVideoToolbox. Nada para ajustar.
O linkUSB: pequena, estável. Wi-Fi: variávelA etapa que separa uma configuração boa de uma frustrante.
DecodificaçãoAlguns msGPU por padrão, com retorno automático ao software.
Até a sua cenaMenos de um milissegundo no pipeline de GPUFora dele, uma cópia para fora da memória da GPU e de volta.

Reduzindo o atraso#

  1. Use USB. É o mais consistente, imune ao congestionamento do Wi-Fi, e ainda carrega o celular.
  2. Ilumine a cena. Um ambiente escuro alonga a exposição, e isso cai direto no orçamento de latência.
  3. Mantenha os padrões ativados. O modo de baixa latência e a decodificação por hardware já vêm ativados.
  4. Não exagere nas especificações. Se o enquadramento é uma pessoa falando que ocupa 1000 px de largura na sua cena, 1080p não é uma concessão.
  5. Use a teleobjetiva em vez de muito zoom digital. Vídeo com zoom e ruído comprime mal, o que aparece como picos de taxa de bits e de latência.

Congestionamento é descartado, não enfileirado. Quando o link trava, o LensLink descarta quadros e reduz a qualidade por um momento em vez de acumular atraso, então a latência fica estável em vez de ir subindo ao longo da transmissão.

Acompanhando os números#

O valor é real: uma troca de diferença de relógio no estilo NTP roda uma vez por segundo, e é ela também que torna possível a sincronia labial automática.

O pipeline de decodificação na GPU (beta)#

Normalmente, cada quadro decodificado é baixado da GPU para a memória do sistema, entregue ao OBS e enviado de volta na mesma hora para a composição: cerca de 2 GB/s de pixels em 4K60, para nada. O pipeline beta entrega o quadro ao OBS como textura e pula essa ida e volta.

Ferramentas → Configurações do LensLink. Todas as fontes mudam juntas, depois de reiniciar o OBS.

Resultados medidos#

Doze configurações, ~25 s de vídeo ao vivo cada, mesmo PC e mesmo celular por Wi-Fi. As cópias de pixels marcaram 0,00 MB/s em todas as execuções com o pipeline de GPU.

ConfiguraçãoCusto por quadro (ms)Cópias de pixels (MB/s)CPU do OBS
720p 60 HEVC0,81 → 0,09163 → 02,2% → 1,4%
1080p 60 H.2642,11 → 0,10370 → 02,3% → 1,6%
1080p 60 HEVC1,42 → 0,09373 → 02,6% → 1,4%
4K 30 HEVC4,96 → 0,14721 → 02,9% → 1,5%
4K 60 H.2647,54 → 0,101221 → 04,1% → 1,8%
4K 60 HEVC4,75 → 0,101439 → 04,1% → 1,6%

O custo por quadro cai de 89% a 99%, e o ganho cresce com a resolução: em 4K60 HEVC, o pipeline padrão passava cerca de 1,4 GB/s pela memória do sistema, o que este elimina por completo, reduzindo mais ou menos pela metade o uso de CPU do processo do OBS. A latência e a taxa de quadros não mostraram diferença sistemática: elas são determinadas pela rede e pelo codificador do celular, não pelo caminho de renderização.

Observações por plataforma#

WindowsQualquer sistema suportado pelo OBS 32 (Windows 10 1909+), usando texturas D3D11 compartilhadas.
macOSQualquer sistema suportado pelo OBS 32 (macOS 13+), via IOSurface. Os fluxos de 10 bits são a exceção: o próprio VideoToolbox os converte para 8 bits, então HDR e Apple Log são renderizados pelo caminho padrão, e não por este.
LinuxRequer o OBS em EGL (o padrão no Wayland e nas versões atuais para X11) e um driver VAAPI, já incluído no Mesa para Intel e AMD; a NVIDIA precisa do nvidia-vaapi-driver.
Várias GPUsDecodificar e renderizar em GPUs diferentes impede o compartilhamento de texturas; a fonte volta ao caminho padrão automaticamente.

O retorno ao caminho padrão é por fonte e automático: o pior caso é exatamente o pipeline padrão, com uma linha no log explicando o motivo.

A marca da GPU importa?#

Menos do que o sistema operacional. A decodificação é um bloco de função fixa em toda GPU moderna, e o plugin a solicita pela API da própria plataforma, e não por algo específico de um fabricante.

WindowsIndependente de fabricante. D3D11VA em qualquer GPU atual, DXVA2 como alternativa.
macOSVideoToolbox, tanto em Macs com Apple silicon quanto com Intel.
Linux, Intel ou AMDO VAAPI já vem no Mesa: nada para instalar.
Linux, NVIDIARequer o nvidia-vaapi-driver; o VDPAU é a alternativa. Este é o único caso em que a marca decide se o pipeline de GPU entra em ação ou não.
Notebooks com duas GPUsSe a decodificação cai em uma e o OBS renderiza na outra, as texturas não podem ser compartilhadas e a fonte volta ao caminho padrão sozinha.
GPUs mais antigasUma GPU sem decodificador HEVC Main10 usa decodificação por software para fluxos de 10 bits; os de 8 bits não são afetados.

Vários celulares ao mesmo tempo é uma carga de decodificação, não de codificação. O limite da NVIDIA de sessões NVENC simultâneas não se aplica: nada aqui é codificado no computador. O que limita você é a capacidade de decodificação e a largura de banda da memória, que é exatamente o que o pipeline de GPU economiza.

As medições acima vêm de uma única máquina Windows com placa NVIDIA. O pipeline está em beta em parte porque as outras combinações (IOSurface no macOS, VAAPI do Mesa, nvidia-vaapi-driver e o retorno ao padrão com várias GPUs) precisam mais de relatos de uso real do que de mais código.

Medindo você mesmo#

Ferramentas → Configurações do LensLink → Registrar benchmark do pipeline grava uma linha CSV por segundo na pasta de configuração do plugin (o caminho aparece no log), além de um resumo a cada cinco segundos. Transmita dez segundos em cada configuração e depois compare um par:

python3 tools/bench-report.py BEFORE.csv AFTER.csv

Espera-se que qualquer mudança de desempenho proposta ao LensLink cite um desses resultados.