デスクトップアプリはボットなしで会議をキャプチャし、クラウドへストリーミングします。数か月間、録画エンジンは製品の中で最も信頼性を確保するのが難しい部分でした。ある種のエッジケースを修正してリリースすると、翌週には新しいものが表面化します。根本原因は違っても、パターンは同じでした。エンジンはElectronアプリのレンダラープロセスで動作していました。私たちは明白な修正を試みました:より厳密なライフサイクル管理、メインスレッド外への処理の移動、Reactのレンダリングサイクルからの分離。それぞれの変更はわずかに効果がありましたが、どれも本当の問題には対処していませんでした。レンダラープロセスは、リアルタイムの音声・動画キャプチャを行うには不適切な場所です。キャプチャエンジンは、GCポーズやスロットリング、ブラウザランタイムが応答性を保つために行うその他の動作に耐えられません。
そこで私たちはネイティブに移行しました:macOSではScreen Capture Kit、Windowsではlibobs、そしてそれらを結ぶ共有Swiftレイヤーです。ネイティブランタイムをReactにブリッジするには、通常ネイティブアドオンのバインディングを手書きする必要があります。もしSwiftのすべての@Publishedプロパティが自動的にReactのJotaiアトムになったら?それこそが社内ツールAtomicの役割です。
macOSでは、3つの独立したソースから生のサンプルバッファを受け取り、ファイルを自前で組み立てます。Windowsでは、キャプチャ、ミキシング、エンコード、マキシングが単一のグラフとして動作します。Windows Graphics Capture(WGC)を主要な方式として使用し、フレームが時間内に届かない場合はBit Bltにフォールバックします。また、全黒フレームを検出し、録画中に方式を切り替えます。
30分時点でクラッシュしても、失われるのは最大で最後の1秒だけです。セグメントはローカルストレージとクラウドの両方に同時に送られます。ネットワークが切断されても、セグメントはローカルに保持され、接続が回復するとアップロードが自動的に再開されます。デスクトップ録画はかつてサポートチケットの最も一般的な原因の一つでした。今では、ただ動くだけの退屈な部分になっています。
出典: Hacker News · 要約:HeadlinesBriefing