"Reuse libmpv and FFmpeg for codec and renderer depth; don't spend CWK time rebuilding a media engine."
The Most Seductive Rabbit Hole in Media
Writing a decoder is fascinating. Bitstream parsing, motion vectors, color spaces, hardware acceleration — it's a bottomless, gorgeous well of engineering. It is also, for a bounded player, a trap with no floor. FFmpeg is thirty years of that work by hundreds of people. You will not catch up on a weekend, and every hour you spend on it is an hour not spent on the one thing that makes your player yours.
So Ashen Reel doesn't. It embeds libmpv — an FFmpeg-based engine with a clean embedding API — and inherits the entire codec and renderer depth for free. The engine decodes; Ashen Reel decides.
Own the Join, Borrow the Depth
The reuse decision draws a clean map of what you build versus what you take:
This is the first of the four coding pillars — Reuse before Extend before Scale — applied at the highest level of the app. The moment you catch yourself about to reimplement something a mature library already does well, stop and ask whether that reimplementation is your product or your procrastination. For a media engine, it's almost always procrastination in a lab coat.
Reuse Is Not Free — It's a Trade
Borrowing an engine isn't zero-cost; it's a different cost. You take on a dependency you must pin, license, bundle, and sign (all of Track 6). You accept the engine's model of the world and have to translate it into yours. But that cost is bounded and one-time, whereas rebuilding a decoder is unbounded and forever. The trade is almost always worth it — as long as you keep the borrowed engine on the far side of a boundary, which is exactly what the next lesson builds.