An MP4 played audio but showed a black screen. The video track was mp4v.
An MP4 played audio perfectly and still gave me a black screen. The container looked fine, so checking video/mp4 told me basically nothing.
The video track was mp4v.20; audio was AAC. <video> played the audio and gave me nothing for the picture.
The fallback keeps the native audio element as the clock. Video goes to a Worker and then an OffscreenCanvas. The decoder stays lazy. An H.264 control made zero loader or WASM requests.
Parsing the sample table is the scary bit. A bad count can trigger a stupid allocation before decoding even starts, so the parser rejects dimensions above 8192, more than 35 million pixels, or samples over 64 MiB.
The browser test got to frame 7 and stayed within 150 ms of the audio. Fine for preview. Memory still sucks because compressed bytes and decoded frames can overlap.
Would you keep this fallback only for small clips, or reject MP4V and tell users to convert the file?