mirror of
https://github.com/sol1/rustguac.git
synced 2026-10-25 21:19:45 +00:00
2dec42d019
A .guac recording only plays in rustguac's own player. The Recordings page now has an mp4 button per recording: it starts a conversion, shows progress, and downloads the video when ready. The file is a standard MP4 that plays in VLC and browsers. - POST /api/recordings/:name/mp4 starts it (202 running, 200 ready, 409 while the session is live, 503 without guacenc), GET .../mp4/status reports it, GET .../mp4 downloads it. Same access and name checks as the recording download (poweruser or admin). - guacenc writes <input>.m4v beside its input, so each job links the recording into a work directory inside the cache and moves the finished file to <cache>/<stem>.mp4; the recording directory is never written. guacenc exits 0 even on failure, so success is the output existing and not being empty. Runs with a timeout, killed on timeout. - At most mp4_max_jobs at once (default 1). The video is the recording's own size (its largest layer 0 size), scaled down to fit 1920x1080 and rounded to even. - Cached MP4s go after mp4_cache_hours (24), when their recording goes, and all of them before rotation removes any recording for disk space. Leftover work directories are cleared at startup and hourly. - The listing carries each recording's mp4 state only when conversion is available, so the button is hidden on a build without guacenc. Config: mp4_enabled, guacenc_path, mp4_cache_path, mp4_cache_hours, mp4_max_jobs, mp4_timeout_secs, mp4_bitrate, mp4_max_width/height under [recording]. Docs in configuration.md (MP4 downloads, including converting by hand) and api.md, which also had the recordings role as operator; it is poweruser. Tests: the converter (cache layout, failure leaves nothing, live and missing refused, purge, size parsing and fitting) with a stand-in guacenc, the shared access check, and a browser spec for the button.