namespace ytLive.Services.Encoder; /// /// Resolves an absolute path to a usable ffmpeg.exe, downloading it on /// first use if neither the user's PATH nor the local cache provides one — the /// encoder's one external dependency is never shipped in the repo (TASK 4 ship /// step 2; see TASKS.md). Seam so the encoder step and the tests can fake it. /// public interface IFfmpegLocator { /// /// Returns the path to ffmpeg.exe: the first PATH candidate that /// exists, else the cached copy, else a freshly downloaded one (ffmpeg.exe + /// its libav DLLs extracted from the pinned BtbN LGPL-shared zip into the /// tools directory). /// /// The download/extract produced no usable /// binary (offline, expired pin, corrupt archive) — recoverable, logged. Task LocateAsync(CancellationToken cancellationToken = default); }