Phase 21.3: seek-back-past-window refill + clean refill-failure recovery

Seek-back past the retained tail reuses the existing seek-beyond-buffer
Range path (per-path resolver). A failed refill now halts the scheduler
into a paused-but-loaded state (AC6) instead of a silent false end.
This commit is contained in:
daniel-c-harvey
2026-06-23 23:43:17 -04:00
parent 121983b19d
commit af4cb186f3
5 changed files with 370 additions and 13 deletions
+9
View File
@@ -131,6 +131,15 @@ const DeepDrftAudio = {
return player.reinitializeFromOffset(totalStreamLength, seekPosition);
},
// Phase 21.3 / AC6: recover into a clean paused-but-loaded state after a window-miss refill
// (seek-back past the retained tail) failed its Range fetch or reinit. Prevents the starved
// scheduler from firing a silent false end; leaves the track loaded so a retry is possible.
recoverFromFailedRefill: (playerId: string, seekPosition: number): AudioResult => {
const player = audioPlayers.get(playerId);
if (!player) return { success: false, error: 'Player not found' };
return player.recoverFromFailedRefill(seekPosition);
},
setVolume: (playerId: string, volume: number): AudioResult => {
const player = audioPlayers.get(playerId);
if (!player) return { success: false, error: 'Player not found' };