Phase 21 Direction B: bound network memory via Range-segmented forward fetch
Replace the open-ended forward GET with sequential bounded bytes=start-end segments, the next fetched only when the scheduler drains below low-water, so the browser holds ~one segment regardless of file size. Seek converges on the same loop. Strip BP-DIAG.
This commit is contained in:
@@ -269,19 +269,13 @@ export class AudioPlayer {
|
||||
const headerParsed = decoder.ready;
|
||||
const canStart = headerParsed && this.scheduler.hasMinimumBuffers(this.minBuffersForPlayback);
|
||||
|
||||
// [BP-DIAG] Phase 21.4 — value of productionPaused actually placed on the Opus chunk
|
||||
// result handed to C#. Confirms the flag is populated on THIS path (not just the WAV
|
||||
// path). TEMPORARY — strip once confirmed.
|
||||
const opusPaused = this.scheduler.evaluateProductionPause();
|
||||
this.bpDiagLogChunkResult('opus', canStart, opusPaused);
|
||||
|
||||
return {
|
||||
success: true,
|
||||
canStartStreaming: canStart,
|
||||
headerParsed,
|
||||
bufferCount: this.scheduler.getBufferCount(),
|
||||
duration: this.duration,
|
||||
productionPaused: opusPaused
|
||||
productionPaused: this.scheduler.evaluateProductionPause()
|
||||
};
|
||||
} catch (error) {
|
||||
return { success: false, error: (error as Error).message };
|
||||
@@ -320,18 +314,13 @@ export class AudioPlayer {
|
||||
const canStart = this.streamDecoder.headerParsed &&
|
||||
this.scheduler.hasMinimumBuffers(this.minBuffersForPlayback);
|
||||
|
||||
// [BP-DIAG] Phase 21.4 — value of productionPaused actually placed on the WAV/MP3/FLAC
|
||||
// chunk result handed to C#. TEMPORARY — strip once confirmed.
|
||||
const formatPaused = this.scheduler.evaluateProductionPause();
|
||||
this.bpDiagLogChunkResult('format', canStart, formatPaused);
|
||||
|
||||
return {
|
||||
success: true,
|
||||
canStartStreaming: canStart,
|
||||
headerParsed: this.streamDecoder.headerParsed,
|
||||
bufferCount: this.scheduler.getBufferCount(),
|
||||
duration: this.duration,
|
||||
productionPaused: formatPaused
|
||||
productionPaused: this.scheduler.evaluateProductionPause()
|
||||
};
|
||||
} catch (error) {
|
||||
return { success: false, error: (error as Error).message };
|
||||
@@ -742,21 +731,6 @@ export class AudioPlayer {
|
||||
|
||||
// ==================== Private Methods ====================
|
||||
|
||||
// ─────────────────────────────────────────────────────────────────────────────────────────
|
||||
// [BP-DIAG] Phase 21.4 back-pressure diagnostic. TEMPORARY — strip once confirmed in Daniel's
|
||||
// browser run. Logs the productionPaused flag on the chunk result handed back to C#, throttled
|
||||
// to ~4 Hz so it does not flood. Grep "[BP-DIAG] chunk-result" in the browser console.
|
||||
private bpDiagChunkResultLastMs = 0;
|
||||
private bpDiagLogChunkResult(path: 'opus' | 'format', canStart: boolean, paused: boolean): void {
|
||||
const now = (typeof performance !== 'undefined' ? performance.now() : Date.now());
|
||||
if (now - this.bpDiagChunkResultLastMs < 250) return;
|
||||
this.bpDiagChunkResultLastMs = now;
|
||||
console.log(
|
||||
`[BP-DIAG] chunk-result path=${path} productionPaused=${paused} canStart=${canStart} ` +
|
||||
`bufCount=${this.scheduler.getBufferCount()} streamingStarted=${this.streamingStarted} isPlaying=${this.isPlaying}`);
|
||||
}
|
||||
// ─────────────────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
private resetState(): void {
|
||||
this.isPlaying = false;
|
||||
this.isPaused = false;
|
||||
|
||||
Reference in New Issue
Block a user