Aplikasi desktop kami merekam rapat tanpa bot dan mengalirkannya ke cloud. Selama berbulan-bulan, mesin perekaman adalah bagian produk yang paling sulit diandalkan. Kami memperbaiki satu kelas kasus tepi, merilisnya, dan minggu berikutnya muncul kasus baru. Penyebab akar berbeda, polanya sama. Mesin tersebut berjalan di proses render aplikasi Electron kami. Kami mencoba perbaikan yang jelas: manajemen siklus hidup yang lebih ketat, memindahkan pekerjaan keluar dari main thread, dan mengisolasinya dari siklus render React. Setiap perubahan membantu sedikit, tetapi tidak ada yang mengatasi masalah sebenarnya. Proses render adalah tempat yang salah untuk melakukan perekaman audio dan video realtime. Mesin capture tidak dapat menoleransi jeda GC, throttling, atau hal-hal lain yang dilakukan runtime browser agar tetap responsif.
Jadi kami beralih ke native: Screen Capture Kit di macOS, libobs di Windows, dan lapisan Swift bersama yang menyatukannya. Menjembatani runtime native ke React biasanya berarti menulis binding addon native secara manual. Bagaimana jika setiap properti @Published di Swift otomatis menjadi atom Jotai di React? Itulah yang dilakukan alat internal kami, Atomic.
Di macOS, kami menerima buffer sampel mentah dari tiga sumber independen dan merakit file sendiri. Di Windows, capture, mixing, encoding, dan muxing berjalan sebagai satu graf tunggal. Kami menggunakan Windows Graphics Capture (WGC) sebagai metode utama, dan jika tidak mengirimkan frame tepat waktu, kami beralih ke Bit Blt. Kami juga mendeteksi frame yang seluruhnya hitam dan mengganti metode di tengah perekaman.
Crash di menit ke-30 paling banyak kehilangan detik terakhir. Segmen dikirim ke penyimpanan lokal dan cloud secara bersamaan. Jika jaringan terputus, segmen tetap tersimpan secara lokal dan unggahan dilanjutkan secara otomatis saat konektivitas kembali. Perekaman desktop dulu menjadi salah satu sumber tiket dukungan kami yang paling umum. Sekarang ini bagian aplikasi yang membosankan karena sekadar berfungsi.
Sumber: Hacker News · Diringkas oleh HeadlinesBriefing