Great question! <video> and <audio> are perfectly apt for simple media playing on the web, and you should use them for playing files.
They tend to break down when you want to build more complex applications on top of them (such as a video editor) that require perfect-accuracy seeking and playback, precise control over decoding patterns, and direct access to frame data. Mediabunny was built to power that kind of application, and so this demo acts as a proof of concept that you can reimplement the <video> element from scratch using that library.
Awesome! Mediabunny started life for exactly this purpose. I wanted to build a replay renderer for my game Marble Blast Web that was as fast as the hardware allowed while giving a frame-perfect result. MediaRecorder just didn't cut it!
Impressive. I'm glad you took that challenge and did it! The other option was vendoring ffmpeg wasm which is a few mbs. This is just a few kbs, doesn't require npm, I simply used the release .mjs file, the AI picked up its API right away and did everything for me. Perfect.
Yo, that's awesome and incredibly sweet. There's actually a centralized repository nowadays with all custom levels for the game, here: https://marbleland.vaniverse.io/
You won't believe this: it _is_ playable on mobile! I see a lot of people playing this on their phones and iPads.
I contemplated adding gyro controls, like in "Marble Blast Mobile" from back in the day, but they are very imprecise and don't really scale well to high-level play. With the current d-pad controls, there's actually a mobile player who holds the world record on many levels. Never would've expected mobile controls to scale this far.
They tend to break down when you want to build more complex applications on top of them (such as a video editor) that require perfect-accuracy seeking and playback, precise control over decoding patterns, and direct access to frame data. Mediabunny was built to power that kind of application, and so this demo acts as a proof of concept that you can reimplement the <video> element from scratch using that library.