Project · Mercury
EasyStream
Quicksilver for the videos OneDrive cannot play.
Essence
For the people who use it
OneDrive is a good place to keep video — large files, multiple devices, automatic backup. Its built-in player, however, chokes on most of the formats people actually shoot or download: HEVC, MKV, AC-3, anything modern. EasyStream sits between OneDrive and the browser and quietly converts those files on the fly, so anything you've stored is something you can watch.
Sign in with your Microsoft account, browse the same OneDrive folders you already know, click a video. The transcoder gets to work and playback begins as soon as the first chunk is ready — usually within a couple of seconds. Skip around, resume tomorrow on a different device, queue up the next episode. It feels native because every part of the experience runs in your browser.
Built for personal media libraries, course recordings, archives — anywhere the easiest place to store a video is OneDrive and the most natural place to watch it is the device you happen to be holding.
- Plays anything — HEVC, MKV, AC-3 and other formats OneDrive's web viewer refuses.
- On-demand transcoding — nothing pre-processed, nothing cached on disk.
- Shared sessions — multiple devices watching the same file share a single transcode.
- Resume anywhere — playback position synced via IndexedDB, picks up where you left off.
- Microsoft Entra sign-in — your credentials never leave your browser.
- Quality presets — configurable bitrates per device or connection.
- Next-episode prefetch — the following file is ready before you finish the current one.
Construction
For the engineers
Stack
- Frontend
- React 19 · Vite 6 · TypeScript
- Auth
- Microsoft Authentication Library (MSAL) v5 against Entra ID
- Player
@vidstack/reactwith native HLS playback- Client state
- Zustand (UI) · TanStack Query (server) · IndexedDB (resume position)
- API
- ASP.NET Core 10 minimal API on .NET 10
- Transcoder
- ffmpeg (installed via WinGet)
- Host
- Windows Server 2025 · IIS 10 with
AspNetCoreModuleV2
Architecture
Stateless backend. The transcoder never sees a OneDrive credential. The SPA holds the Microsoft sign-in, asks the Graph API for a pre-authenticated download URL, and hands that URL to the server. The host can run anywhere and forget everything; there is no database, no auth store, no persistent state to compromise.
Streaming into ffmpeg's stdin. Rather than downloading whole files before encoding, the API issues parallel HTTP Range requests against the pre-authenticated URL, reassembles chunks in order through an in-memory buffer, and pipes that buffer into ffmpeg's standard input. A back-pressure cap keeps the buffer bounded so a long film cannot starve the host or spike memory.
Session deduplication. Two devices opening the same OneDrive itemId
share one transcode. The session catalogue is keyed by itemId; health checks prevent a
poisoned session from taking other devices down with it. A reaper cleans abandoned sessions on a
timer so memory always returns to the floor.
HLS event playlist + long-poll. Instead of clients polling the manifest on a tight interval, the server emits an HLS event playlist and exposes a long-poll endpoint for ready-state notifications. Clients fetch new segments only when the playlist grows. When the current session reaches Ready, the next file's transcode kicks off in the background — episodic watching never waits.
Notable details
- Range chunk reassembly buffer with configurable back-pressure cap — prevents memory blow-up on multi-hour files.
- Session lifecycle
Created → Starting → Ready → Stopping → Reaped, exposed via diagnostics endpoints. - Long-polling ready-state avoids wasteful manifest polling and tightens time-to-first-frame.
- Configurable per-device quality presets and bitrate ceilings via API config.
- IndexedDB-backed resume position synced across devices.
- Zero persistence — the API keeps everything in memory and reaps it cleanly.
- Health-check protocol isolates failure: one bad session cannot contaminate the catalogue.