TL;DR — canvas.captureStream() only carries video tracks. To get audio into your MediaRecorder export you need to build an AudioContext graph that lets every <audio> and <video> element play through speakers AND tap into a MediaStreamDestination simultaneously. There are at least five footguns along the way. Here's the singleton wrapper that finally got it right.
I've been building a client-side video editor over the last few months ( — drop your video on the page and try the export. No signup needed for the editor itself.
Happy to nerd out in comments. 🎚️
SOCIAL SHARE CARD GENERATOR