Add stream_identity.h defining JELLYFRAME_STREAM_USER_AGENT ("Jellyframe") and apply it to both the mpv (user-agent) and FFmpeg (user_agent) HTTP options so streaming requests identify themselves consistently.
Update the recovery test to identify the video request by its connection instead of the User-Agent header, since the user agent is no longer a reliable differentiator.
Show a dedicated loading spinner while playback is preparing, seeking, or buffering. This exposes buffering state from the Android and mpv backends, wires the indicator into the VR player UI, updates playback flow to keep it visible even when controls are hidden, and adds coverage for the new loading-state behavior.
This change replaces the old playback button strip with a transparent overlay attached to the movie screen. It adds a seekable timeline, duration reporting, and proper seek routing for resumed/transcoded streams while preserving paused state and overlay behavior across settings and recenter actions.
Pointer and scroll handling were also hardened to improve controller input stability, including hover tracking, exit handling, aim smoothing, and synthetic wheel release events. Regression tests and testing notes were extended to cover overlay toggling, timeline formatting, seek flows, recenter behavior, and pointer/scroll edge cases.