हमारा डेस्कटॉप ऐप बिना बॉट के मीटिंग कैप्चर करता है और उन्हें क्लाउड पर स्ट्रीम करता है। महीनों तक, रिकॉर्डिंग इंजन उत्पाद का सबसे कठिन हिस्सा था जिसे विश्वसनीय बनाना था। हम एक तरह के एज केस को ठीक करते, उसे रिलीज़ करते, और अगले हफ्ते एक नया सामने आ जाता। अलग मूल कारण, वही पैटर्न। इंजन हमारे Electron ऐप के रेंडर प्रोसेस में चलता था। हमने स्पष्ट समाधान आज़माए: कड़ा लाइफसाइकिल मैनेजमेंट, काम को मेन थ्रेड से बाहर ले जाना, और इसे React के रेंडर साइकल से अलग करना। हर बदलाव ने मामूली मदद की, लेकिन किसी ने असली समस्या को हल नहीं किया। रेंडर प्रोसेस रीयलटाइम ऑडियो और वीडियो कैप्चर के लिए गलत जगह है। एक कैप्चर इंजन GC पॉज़, थ्रॉटलिंग, या ब्राउज़र रनटाइम के रिस्पॉन्सिव रहने के लिए किए जाने वाले किसी अन्य काम को बर्दाश्त नहीं कर सकता।
इसलिए हम नेटिव पर गए: macOS पर Screen Capture Kit, Windows पर libobs, और इन्हें जोड़ने वाली एक साझा Swift लेयर। नेटिव रनटाइम को React से जोड़ना आमतौर पर हाथ से नेटिव ऐडऑन बाइंडिंग लिखने का मतलब है। अगर Swift की हर @Published प्रॉपर्टी स्वचालित रूप से React में Jotai एटम बन जाए तो क्या हो? हमारा इंटरनल टूल Atomic यही करता है।
macOS पर, हम तीन स्वतंत्र स्रोतों से रॉ सैंपल बफर प्राप्त करते हैं और फ़ाइल स्वयं असेंबल करते हैं। Windows पर, कैप्चर, मिक्सिंग, एनकोडिंग और मक्सिंग एक सिंगल ग्राफ के रूप में चलते हैं। हम Windows Graphics Capture (WGC) को प्राथमिक विधि के रूप में उपयोग करते हैं, और यदि यह समय पर फ्रेम नहीं देता, तो हम Bit Blt पर वापस आते हैं। हम सभी-काले फ्रेम का भी पता लगाते हैं और रिकॉर्डिंग के बीच में विधि बदल देते हैं।
30वें मिनट पर क्रैश होने पर अधिक से अधिक आखिरी सेकंड खोता है। सेगमेंट एक साथ लोकल स्टोरेज और क्लाउड दोनों में जाते हैं। यदि नेटवर्क ड्रॉप हो जाता है, तो सेगमेंट लोकली सहेजे रहते हैं और कनेक्टिविटी लौटने पर अपलोड स्वचालित रूप से फिर से शुरू हो जाता है। डेस्कटॉप रिकॉर्डिंग हमारे सपोर्ट टिकट के सबसे आम स्रोतों में से एक थी। अब यह ऐप का एक बोरिंग हिस्सा है जो बस काम करता है।
स्रोत: Hacker News · HeadlinesBriefing द्वारा सारांशित