HeadlinesBriefing HeadlinesBriefing.com

Electron মিটিং ইঞ্জিন Swift-এ

Hacker News •
×

আমাদের ডেস্কটপ অ্যাপ বট ছাড়াই মিটিং ক্যাপচার করে এবং সেগুলো ক্লাউডে স্ট্রিম করে। মাসের পর মাস, রেকর্ডিং ইঞ্জিন ছিল পণ্যের সবচেয়ে কঠিন অংশ যা নির্ভরযোগ্য করা যায়। আমরা এক ধরনের এজ কেস ঠিক করতাম, রিলিজ করতাম, আর পরের সপ্তাহে নতুন একটি বেরিয়ে আসত। ভিন্ন মূল কারণ, একই প্যাটার্ন। ইঞ্জিনটি আমাদের Electron অ্যাপের রেন্ডার প্রসেসে চলত। আমরা স্পষ্ট সমাধানগুলো চেষ্টা করেছিলাম: কঠোর লাইফসাইকেল ম্যানেজমেন্ট, কাজ মেইন থ্রেড থেকে সরিয়ে নেওয়া, এবং React-এর রেন্ডার সাইকেল থেকে এটিকে আলাদা করা। প্রতিটি পরিবর্তন সামান্য সাহায্য করেছিল, কিন্তু কোনোটিই আসল সমস্যার সমাধান করেনি। রেন্ডার প্রসেস রিয়েলটাইম অডিও ও ভিডিও ক্যাপচারের জন্য ভুল জায়গা। একটি ক্যাপচার ইঞ্জিন GC পজ, থ্রটলিং, বা ব্রাউজার রানটাইম রেসপন্সিভ থাকতে যা করে তার কোনোটিই সহ্য করতে পারে না।

তাই আমরা নেটিভে গিয়েছিলাম: macOS-এ Screen Capture Kit, Windows-এ libobs, এবং এগুলোকে একসাথে বাঁধা একটি শেয়ার্ড Swift লেয়ার। নেটিভ রানটাইমকে React-এর সাথে ব্রিজ করা সাধারণত হাতে নেটিভ অ্যাডঅন বাইন্ডিং লেখার অর্থ। যদি Swift-এর প্রতিটি @Published প্রপার্টি স্বয়ংক্রিয়ভাবে React-এ Jotai অ্যাটম হয়ে যায়? আমাদের ইন্টারনাল টুল Atomic ঠিক তা-ই করে।

macOS-এ, আমরা তিনটি স্বাধীন উৎস থেকে র স্যাম্পল বাফার গ্রহণ করি এবং ফাইলটি নিজেরাই অ্যাসেম্বল করি। Windows-এ, ক্যাপচার, মিক্সিং, এনকোডিং এবং মাক্সিং একটি একক গ্রাফ হিসেবে চলে। আমরা Windows Graphics Capture (WGC) প্রাথমিক পদ্ধতি হিসেবে ব্যবহার করি, এবং যদি এটি সময়মতো ফ্রেম না দেয়, আমরা Bit Blt-এ ফিরে যাই। আমরা সম্পূর্ণ কালো ফ্রেমও শনাক্ত করি এবং রেকর্ডিংয়ের মাঝপথে পদ্ধতি পরিবর্তন করি।

৩০ মিনিটে ক্র্যাশ হলে সর্বোচ্চ শেষ সেকেন্ড হারায়। সেগমেন্টগুলো একই সাথে লোকাল স্টোরেজ এবং ক্লাউডে যায়। নেটওয়ার্ক ড্রপ হলে, সেগমেন্টগুলো লোকালি থেকে যায় এবং সংযোগ ফিরলে আপলোড স্বয়ংক্রিয়ভাবে পুনরায় শুরু হয়। ডেস্কটপ রেকর্ডিং আমাদের সাপোর্ট টিকিটের অন্যতম সাধারণ উৎস ছিল। এখন এটি অ্যাপের একটি নিরীহ অংশ যা কেবল কাজ করে।

উৎস: Hacker News · সারাংশ: HeadlinesBriefing