diff --git a/play-dl/YouTube/classes/SeekStream.ts b/play-dl/YouTube/classes/SeekStream.ts index 3785d0f..8e86be1 100644 --- a/play-dl/YouTube/classes/SeekStream.ts +++ b/play-dl/YouTube/classes/SeekStream.ts @@ -148,7 +148,7 @@ export class SeekStream { this.timer.reuse(); return this.seek(); } - const bytes = this.stream.seek(); + const bytes = this.stream.seek(this.content_length); if (bytes instanceof Error) { this.stream.emit('error', bytes); this.bytes_count = 0; diff --git a/play-dl/YouTube/classes/WebmSeeker.ts b/play-dl/YouTube/classes/WebmSeeker.ts index d928b7c..95e77de 100644 --- a/play-dl/YouTube/classes/WebmSeeker.ts +++ b/play-dl/YouTube/classes/WebmSeeker.ts @@ -75,7 +75,7 @@ export class WebmSeeker extends Duplex { _read() {} - seek(): Error | number { + seek(content_length: number): Error | number { let clusterlength = 0, position = 0; let time_left = (this.sec - this.time) * 1000 || 0; @@ -86,8 +86,7 @@ export class WebmSeeker extends Duplex { const data = this.header.segment.cues[i]; if (Math.floor((data.time as number) / 1000) === this.time) { position = data.position as number; - if (this.header.segment.cues.length > 1) - clusterlength = this.header.segment.cues[i + 1].position! - position - 1; + clusterlength = (this.header.segment.cues[i + 1]?.position || content_length) - position - 1; break; } else continue; } @@ -145,6 +144,7 @@ export class WebmSeeker extends Duplex { // stop parsing the header once we have found the correct cue if ( ebmlID.name === 'cueClusterPosition' && + this.header.segment.cues!.length > 2 && this.time === (this.header.segment.cues!.at(-2)!.time as number) / 1000 ) this.emit('headComplete');