✦Lab · diário de engenharia

Notas do pipeline de pixels.

O Remio é construído em público por uma equipe pequena. Este é o diário de trabalho — caminhos de captura que desmontamos, ajustes de codificador que nos surpreenderam, orçamentos de latência que estouramos e reconstruímos. As entradas mais novas ficam no topo; as mais antigas ficam como foram escritas, mesmo quando já mudamos de ideia.

Última atualização em 2026-05-197 entradasCronológico, da mais recente para a mais antiga

✦Notas de pesquisa

O diário de engenharia, em ordem.

Cada entrada é datada, tem um status e é autossuficiente. Lançado significa que a mudança está no ar na versão mais recente, experimento significa que ainda estamos medindo e arquivado significa que seguimos em frente.

Lançado

A tela virtual agora acompanha a janela do cliente.

Por semanas, o host macOS manteve a tela virtual fixa na resolução da tela do cliente, o que fazia o cursor do host e o do cliente discordarem sobre o tamanho no instante em que qualquer um dos dois mudava. Reescrevemos o gerenciador de telas virtuais para que o espaço de trabalho do host acompanhe em tempo real a área da janela do cliente. Agora os tamanhos do cursor combinam através da fronteira em qualquer tamanho de janela, do jeito que o Compartilhamento de Tela da Apple sempre se comportou.

pontos lógicos da tela virtual ≡ pontos da área da janela do cliente  ·  limite de pixels 3840  ·  Retina 1× ou 2× escolhido por envelope de pixels nativo da janela

Experimento

Por que limitamos o envelope da tela virtual a 3840 pixels.

O framework interno do macOS que monta os modos de tela das telas virtuais tem um comportamento silenciosamente destrutivo: quando recebe uma dimensão máxima de 4096 ou mais, ele inventa um modo Retina 2× fantasma no máximo e rouba o indicador de ativo. A contagem de pixels solicitada dobra. Confirmamos isso empiricamente em quatro noites de sondagem e registro. Três mil oitocentos e quarenta cabem em todo MacBook Retina em tela cheia mais um monitor 4K externo, e o framework para de sintetizar. Ainda estamos observando a cauda longa.

quebra empírica em ≥ 4096  ·  limite = 3840  ·  cobre o MacBook Pro 16″ Retina (3456 × 2234) e o monitor 4K externo (3840 × 2160)

Lançado

Voltando à versão anterior do mecanismo de streaming após um experimento de uma semana.

Reconstruímos o nosso mecanismo de streaming sobre um branch mais novo, esperando que a lógica de cadência atualizada liberasse alguns milissegundos no caminho de rede local. Em vez disso, o buffer de recepção piorou em toda sessão remota que medimos: a mediana de ponta a ponta subiu 18 ms e a variância aumentou. Voltamos à versão estável em iOS, macOS, Android e Windows. Os patches do novo branch estão arquivados, caso o comportamento do upstream mude.

latência mediana da nova versão · 64 ms remoto  ·  mediana da versão anterior · 46 ms remoto  ·  flags de ajuste inalteradas

Lançado

Detecção adaptativa de bitrate para rede local vs remoto a partir da primeira amostra de ida e volta.

O host agora espera a primeira medição do tempo de ida e volta depois que a conexão sobe e então escolhe um de dois envelopes de bitrate. Abaixo de 15 ms, a conexão é tratada como direta na rede local: início de 8 Mbps, mínimo de 8 Mbps, máximo de 30 Mbps. Acima de 15 ms, é tratada como retransmitida ou distante: início de 2 Mbps, mínimo de 300 Kbps, máximo de 15 Mbps. O limite fica entre o Wi-Fi na mesma rede e qualquer relay móvel ou entre regiões plausível, então os falsos positivos têm sido raros na telemetria do beta.

direta na rede local · 1 – 5 ms  ·  Wi-Fi na mesma rede · 5 – 10 ms  ·  relay regional · 30 – 80 ms  ·  4G · 40 – 100 ms

Lançado

H.265 por hardware na AMD como o codificador principal do host Windows.

Depois de uma longa disputa contra codificadores concorrentes, o H.265 por hardware na AMD venceu todos os benchmarks de host Windows que nos importavam: menor tempo mediano de codificação, menor pico de quadro-chave, e a predefinição de bitrate constante de latência ultrabaixa se comporta de forma previsível sob pressão de buffer. O H.264 permanece como alternativa quando a GPU discorda. B-frames desligados. Flag de baixo atraso ligada. O codificador sempre emite exatamente um quadro por tick de captura.

bitrate · 8 Mbps constante  ·  fps · 60  ·  buffer · 1 quadro  ·  B-frames · 0  ·  predefinição · latência ultrabaixa

Arquivado

Por que paramos de armazenar quadros em buffer de vez.

Uma área de trabalho remota não é uma chamada de vídeo. Cada quadro é o estado mais recente da tela. Um quadro antigo é, por definição, uma mentira. Reconstruímos o caminho de recepção para que não haja buffer de reprodução: um quadro chega, é decodificado, é renderizado, nessa ordem, no mesmo intervalo de quadro. Quadros perdidos pedem um quadro-chave novo em vez da retransmissão do antigo. Aceitamos o congelamento breve ocasional. Não aceitamos o imposto constante de milissegundos de uma fila.

atraso de reprodução forçado · mín. 0 / máx. 0  ·  atraso mínimo de reprodução · 0  ·  pedido de quadro-chave na perda  ·  sem retransmissão de pacotes

Arquivado

O orçamento de latência, escrito pela primeira vez.

Sentamos em uma sala e trabalhamos de trás para a frente a partir do número que queríamos que os usuários sentissem — menos de vinte milissegundos, de vidro a vidro, em uma sessão típica de rede local. Captura, codificação, cadência, envio, buffer de recepção, decodificação, renderização. Escrevemos cada uma e demos a ela um orçamento em milissegundos que podíamos medir. A maioria das entradas deste diário vem de defender esses números no tráfego de produção.

captura · 1 ms  ·  codificação · 3 ms  ·  rajada de cadência · ≤ 10 ms  ·  buffer de recepção · 0 ms  ·  decodificação · 2 ms  ·  renderização · 1 ms

✦Envelope de sinal

O que medimos, sessão após sessão.

Esses quatro números vão em toda nota de versão porque descrevem como a conexão realmente é — e não o que ela afirma em uma ficha técnica.

Resolução do streaming
Até 6Kenvelope de pixels nativo, Retina 1× ou 2× escolhido por janela
Taxa de quadros
Até 120 fpscadência fixa, B-frames desativados, um tick de captura por quadro
Latência de processamento, rede local
~8 msmedida internamente em uma conexão direta de dispositivo para dispositivo — o resto é a própria cadência de atualização de 60 Hz da sua tela
Criptografia de transporte
Ponta a pontacriptografia de ponta a ponta com uma chave de sessão nova a cada vez
Ícone do app Remio

Acompanhe a construção, não o folheto.

O lab é atualizado quando algo chega ou algo quebra. Se isso parece mais útil do que uma newsletter trimestral, o link de download está a um clique — e o whitepaper de segurança também, para a versão longa.

Sem contaSem pixel de rastreamentoConstruído em público