HeadlinesBriefing HeadlinesBriefing.com

Moteur de réunions Electron réécrit en Swift

Hacker News •
×

Notre app de bureau capture les réunions sans bot et les diffuse vers le cloud. Pendant des mois, le moteur d'enregistrement a été la partie la plus difficile du produit à fiabiliser. Nous corrigions une classe de cas limites, la livrions, et une nouvelle apparaissait la semaine suivante. Des causes racines différentes, le même schéma. Le moteur tournait dans le processus de rendu de notre app Electron. Nous avons essayé les correctifs évidents : une gestion du cycle de vie plus stricte, le déplacement du travail hors du thread principal, son isolement du cycle de rendu de React. Chaque changement a aidé à la marge, mais aucun n'a traité le vrai problème. Un processus de rendu est le mauvais endroit pour effectuer une capture audio et vidéo en temps réel. Un moteur de capture ne peut tolérer ni les pauses GC, ni la limitation, ni aucune des autres choses qu'un runtime de navigateur fait pour rester réactif.

Nous sommes donc passés au natif : Screen Capture Kit sur macOS, libobs sur Windows, et une couche Swift partagée qui relie le tout. Faire le pont entre un runtime natif et React signifie généralement écrire à la main des bindings d'addons natifs. Et si chaque propriété @Published en Swift devenait automatiquement un atome Jotai dans React ? C'est exactement ce que fait notre outil interne Atomic.

Sur macOS, nous recevons des buffers d'échantillons bruts de trois sources indépendantes et assemblons le fichier nous-mêmes. Sur Windows, la capture, le mixage, l'encodage et le muxing s'exécutent comme un seul graphe. Nous utilisons Windows Graphics Capture (WGC) comme méthode principale et, si elle ne livre pas les images à temps, nous revenons à Bit Blt. Nous détectons également les images entièrement noires et changeons de méthode en cours d'enregistrement.

Un crash à la 30e minute perd au plus la dernière seconde. Les segments vont simultanément vers le stockage local et le cloud. Si le réseau tombe, les segments persistent localement et l'upload reprend automatiquement au retour de la connectivité. L'enregistrement de bureau était l'une de nos sources les plus courantes de tickets de support. C'est désormais une partie ennuyeuse de l'app qui fonctionne tout simplement.

Source: Hacker News · Résumé par HeadlinesBriefing