Laboratorio de Remio: notas desde elflujo de píxeles.
Remio lo construye un equipo pequeño a la vista de todos. Esta es la bitácora de trabajo: rutas de captura que desarmamos, ajustes del codificador que nos sorprendieron y presupuestos de latencia que rompimos y reconstruimos. Las entradas más nuevas están arriba; las anteriores se quedan tal como se escribieron, aunque después hayamos cambiado de opinión.
Última actualización 2026-05-197 entradasCronológico, lo más reciente primero
✦Notas de investigación
La bitácora de ingeniería, en orden.
Cada entrada tiene fecha, estado y se entiende por sí sola. En producción significa que el cambio ya está en la última versión, experimento significa que todavía lo estamos midiendo y archivado significa que ya seguimos adelante.
En producción
La pantalla virtual ahora sigue la ventana del cliente.
Durante semanas, el host de macOS mantuvo su pantalla virtual fija en la resolución de pantalla del cliente, lo que hacía que el cursor del host y el del cliente no coincidieran en tamaño en cuanto cualquiera de los dos cambiaba. Reescribimos el administrador de pantallas virtuales para que el espacio de trabajo del host siga el lienzo de la ventana del cliente en tiempo real. Ahora los cursores tienen el mismo tamaño a ambos lados del límite con cualquier tamaño de ventana, como siempre ha funcionado el uso compartido de pantalla de Apple.
puntos lógicos de la pantalla virtual ≡ puntos del lienzo de la ventana del cliente · límite de píxeles 3840 · Retina 1× o 2× según el rango de píxeles nativos de la ventana
Experimento
Por qué limitamos a 3840 píxeles el rango de la pantalla virtual.
El framework interno de macOS que genera los modos de pantalla de las pantallas virtuales tiene un comportamiento destructivo y silencioso: cuando se le da una dimensión máxima de 4096 o más, inventa un modo Retina 2× fantasma en el máximo y se queda con la marca de activo. La cantidad de píxeles solicitada se duplica. Lo confirmamos empíricamente durante cuatro noches de pruebas y registros. Tres mil ochocientos cuarenta alcanza para cualquier MacBook Retina en pantalla completa más un monitor 4K externo, y el framework deja de inventar modos. Seguimos vigilando los casos poco frecuentes.
falla comprobada en ≥ 4096 · límite = 3840 · cubre MacBook Pro de 16″ Retina (3456 × 2234) y monitor externo 4K (3840 × 2160)
En producción
Volvimos a la versión anterior del motor de transmisión tras un experimento de una semana.
Recompilamos nuestro motor de transmisión sobre una rama más nueva con la esperanza de que la lógica de ritmo actualizada ganara unos milisegundos en la ruta de red local. En cambio, el búfer de recepción empeoró en todas las sesiones remotas que medimos: la mediana de extremo a extremo subió 18 ms y la variación se amplió. Volvimos a la versión estable en iOS, macOS, Android y Windows. Los parches de la rama nueva quedaron archivados por si cambia el comportamiento de origen.
latencia mediana de la versión nueva · 64 ms remoto · mediana de la versión anterior · 46 ms remoto · indicadores de ajuste sin cambios
En producción
Detección adaptativa de tasa de bits para red local o remota desde la primera muestra de ida y vuelta.
Ahora el host espera la primera medición del tiempo de ida y vuelta después de que se establece la conexión y luego elige uno de dos rangos de tasa de bits. Por debajo de 15 ms, la conexión se trata como directa en red local: inicio de 8 Mbps, mínimo de 8 Mbps y máximo de 30 Mbps. Por encima de 15 ms se trata como retransmitida o distante: inicio de 2 Mbps, mínimo de 300 Kbps y máximo de 15 Mbps. El umbral queda entre el Wi-Fi de la misma red y cualquier retransmisión celular o entre regiones razonable, así que los falsos positivos han sido raros en la telemetría de la beta.
directa en red local · 1 – 5 ms · Wi-Fi de la misma red · 5 – 10 ms · retransmisión regional · 30 – 80 ms · 4G · 40 – 100 ms
En producción
H.265 por hardware en AMD como codificador principal del host de Windows.
Tras una larga competencia entre codificadores, el H.265 por hardware en AMD ganó todas las pruebas del host de Windows que nos importaban: menor tiempo mediano de codificación, menor pico en los fotogramas clave y un preajuste de tasa de bits constante y latencia ultrabaja que se comporta de forma predecible bajo presión del búfer. H.264 queda como alternativa cuando la GPU no coopera. Los fotogramas B están desactivados. El indicador de baja demora está activado. El codificador siempre emite exactamente un fotograma por cada ciclo de captura.
Por qué dejamos de guardar fotogramas en búfer por completo.
Un escritorio remoto no es una videollamada. Cada fotograma es el estado más reciente de la pantalla. Un fotograma viejo es, por definición, una mentira. Reconstruimos la ruta de recepción para que no haya búfer de reproducción: un fotograma llega, se decodifica y se muestra, en ese orden, dentro del mismo intervalo. Un paquete perdido se reenvía de inmediato si todavía puede llegar a tiempo; si no, Remio lo omite y pide un fotograma nuevo en lugar de esperar. Aceptamos un congelamiento breve de vez en cuando. No aceptamos el impuesto constante de milisegundos de una cola.
retraso de reproducción forzado · mín. 0 / máx. 0 · retraso de reproducción mínimo · 0 · los paquetes perdidos se reenvían si llegan a tiempo; si no, un fotograma nuevo
Archivado
El presupuesto de latencia, escrito por primera vez.
Nos sentamos en una sala y trabajamos hacia atrás desde el número que queríamos que sintieran los usuarios: menos de veinte milisegundos, de pantalla a pantalla, en una sesión típica de red local. Captura, codificación, ritmo, envío, búfer de recepción, decodificación, visualización. Escribimos cada etapa y le dimos un presupuesto en milisegundos que pudiéramos medir. La mayoría de las entradas de esta bitácora vienen de defender esas cifras con tráfico real.
captura · 1 ms · codificación · 3 ms · ráfaga de ritmo · ≤ 10 ms · búfer de recepción · 0 ms · decodificación · 2 ms · visualización · 1 ms
✦Rango de señal
Lo que medimos, sesión tras sesión.
Estas cuatro cifras aparecen en todas las notas de versión porque describen cómo se siente realmente la conexión, no lo que promete una hoja de especificaciones.
Resolución de la transmisión
Hasta 6Krango de píxeles nativos, Retina 1× o 2× según la ventana
Velocidad de fotogramas
Hasta 120 fpsritmo fijo, fotogramas B desactivados, un ciclo de captura por fotograma
Latencia de procesamiento, red local
~8 msmedida internamente en una conexión directa entre dispositivos; el resto es el ciclo de actualización de 60 Hz de tu propia pantalla
Cifrado del transporte
De extremo a extremocifrado de extremo a extremo con una clave de sesión nueva cada vez
El laboratorio se actualiza cuando algo se incorpora o algo se rompe. Si eso te resulta más útil que un boletín trimestral, el enlace de descarga está a un clic; y el informe técnico de seguridad, también, para la versión larga.