HeadlinesBriefing HeadlinesBriefing.com

Motor de reuniones de Electron reescrito en Swift

Hacker News •
×

Nuestra app de escritorio captura reuniones sin un bot y las transmite a la nube. Durante meses, el motor de grabación fue la parte más difícil del producto de hacer fiable. Corregíamos una clase de caso límite, la lanzábamos, y a la semana siguiente aparecía una nueva. Causas raíz diferentes, mismo patrón. El motor se ejecutaba en el proceso de renderizado de nuestra app Electron. Probamos las soluciones obvias: una gestión del ciclo de vida más estricta, mover el trabajo fuera del hilo principal y aislarlo del ciclo de renderizado de React. Cada cambio ayudó marginalmente, pero ninguno abordó el problema real. Un proceso de renderizado es el lugar equivocado para realizar captura de audio y vídeo en tiempo real. Un motor de captura no puede tolerar pausas de GC, throttling ni ninguna de las otras cosas que hace un runtime de navegador para mantenerse receptivo.

Así que pasamos a nativo: Screen Capture Kit en macOS, libobs en Windows y una capa Swift compartida que lo une todo. Puentear un runtime nativo a React normalmente significa escribir a mano los bindings de addons nativos. ¿Y si cada propiedad @Published en Swift se convirtiera automáticamente en un átomo de Jotai en React? Eso es exactamente lo que hace nuestra herramienta interna Atomic.

En macOS, recibimos buffers de muestra sin procesar de tres fuentes independientes y ensamblamos el archivo nosotros mismos. En Windows, la captura, la mezcla, la codificación y el muxing se ejecutan como un único grafo. Usamos Windows Graphics Capture (WGC) como método principal y, si no entrega fotogramas a tiempo, recurrimos a Bit Blt. También detectamos fotogramas completamente negros y cambiamos de método a mitad de la grabación.

Un fallo en el minuto 30 pierde como máximo el último segundo. Los segmentos van tanto al almacenamiento local como a la nube simultáneamente. Si la red se cae, los segmentos persisten localmente y la subida se reanuda automáticamente cuando vuelve la conectividad. La grabación de escritorio solía ser una de nuestras fuentes más comunes de tickets de soporte. Ahora es una parte aburrida de la app que simplemente funciona.

Fuente: Hacker News · Resumido por HeadlinesBriefing