Attributed Meeting Data Capture

Product sc
Product sc
Tech Stack
Core Runtime
Node.jsPlaywrightplaywright-extra (Stealth)
Real-Time Media
WebRTCMediaRecorder APICanvas APIWebSockets
Processing & Infra
FFmpeg (H.264 / AAC)CloudinaryPowerShell
System design
Core system design
Core System Design

The bot joins a Google Meet call through a Playwright-controlled Chromium browser and hooks its WebRTC peer connections to access every incoming media track. Video tracks are identified by matching each participant tile's DOM SSRC attribute, while audio tracks are identified by correlating Meet's speaking indicators with audio-level spikes and passing every candidate through a 4-strategy bonding filter before locking it to a participant. Each participant then gets a dedicated canvas + MediaRecorder pipeline that records audio and video together, streaming chunks over a local WebSocket to Node.js, which writes them as segments on disk. Mid-call re-negotiations are caught by two-signal detection and handled with a dual-recorder hand-off, and on stop a 3-phase traffic-light brake finalizes every file before FFmpeg normalizes and stitches the segments into one synced .mp4 per participant with a timeline of their join offsets.

Deployment

MeetIngest runs locally on Windows through a PowerShell launcher that starts the bot and converts Ctrl+C into a safe stop signal. Capture and post-processing are deliberately separated: once the bot has fully exited, a publisher process uploads the per-participant recordings to Cloudinary, generates the meeting manifest, and serves a local replay page that plays all participants in a synced Meet-style grid and can export the combined meeting as a single .mp4 — adding zero load to live recording.

Testing Results

Participants Tested

4 live

Shutdown Time

5–25 s

Re-negotiation Handled

~40% of meetings

Correlation Window

≤120 ms