From 58d73b7de3614aed1308fc57d9b1a51e61abd9eb Mon Sep 17 00:00:00 2001 From: Vanilagy <1696106+Vanilagy@users.noreply.github.com> Date: Mon, 22 Dec 2025 23:20:51 +0100 Subject: [PATCH] Make more use of sequenceNumber in getNextPacket --- src/adts/adts-demuxer.ts | 8 ++------ src/flac/flac-demuxer.ts | 4 ++++ src/mp3/mp3-demuxer.ts | 10 +++------- src/wave/wave-demuxer.ts | 6 +++++- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/adts/adts-demuxer.ts b/src/adts/adts-demuxer.ts index 4a1bbe9..d50cd03 100644 --- a/src/adts/adts-demuxer.ts +++ b/src/adts/adts-demuxer.ts @@ -14,7 +14,6 @@ import { PacketRetrievalOptions } from '../media-sink'; import { assert, AsyncMutex4, - binarySearchExact, binarySearchLessOrEqual, Bitstream, ResultValue, @@ -261,16 +260,13 @@ class AdtsAudioTrackBacking implements InputAudioTrackBacking { using lock = this.demuxer.readingMutex.lock(); if (lock.pending) await lock.ready; - const sampleIndex = binarySearchExact( - this.demuxer.loadedSamples, - packet.timestamp, - x => x.timestamp, - ); + const sampleIndex = packet.sequenceNumber; if (sampleIndex === -1) { throw new Error('Packet was not created from this track.'); } const nextIndex = sampleIndex + 1; + // Ensure the next sample exists while ( nextIndex >= this.demuxer.loadedSamples.length diff --git a/src/flac/flac-demuxer.ts b/src/flac/flac-demuxer.ts index 36b0b80..1c06e73 100644 --- a/src/flac/flac-demuxer.ts +++ b/src/flac/flac-demuxer.ts @@ -644,6 +644,10 @@ class FlacAudioTrackBacking implements InputAudioTrackBacking { using lock = this.demuxer.readingMutex.lock(); if (lock.pending) await lock.ready; + if (packet.sequenceNumber < 0) { + throw new Error('Packet was not created from this track.'); + } + const nextIndex = packet.sequenceNumber + 1; if ( this.demuxer.lastSampleLoaded diff --git a/src/mp3/mp3-demuxer.ts b/src/mp3/mp3-demuxer.ts index 91e417b..191902c 100644 --- a/src/mp3/mp3-demuxer.ts +++ b/src/mp3/mp3-demuxer.ts @@ -15,7 +15,6 @@ import { PacketRetrievalOptions } from '../media-sink'; import { assert, AsyncMutex4, - binarySearchExact, binarySearchLessOrEqual, ResultValue, UNDETERMINED_LANGUAGE, @@ -318,16 +317,13 @@ class Mp3AudioTrackBacking implements InputAudioTrackBacking { using lock = this.demuxer.readingMutex.lock(); if (lock.pending) await lock.ready; - const sampleIndex = binarySearchExact( - this.demuxer.loadedSamples, - packet.timestamp, - x => x.timestamp, - ); - if (sampleIndex === -1) { + const sampleIndex = packet.sequenceNumber; + if (sampleIndex < 0) { throw new Error('Packet was not created from this track.'); } const nextIndex = sampleIndex + 1; + // Ensure the next sample exists while ( nextIndex >= this.demuxer.loadedSamples.length diff --git a/src/wave/wave-demuxer.ts b/src/wave/wave-demuxer.ts index d1aab5e..a63ab92 100644 --- a/src/wave/wave-demuxer.ts +++ b/src/wave/wave-demuxer.ts @@ -516,7 +516,11 @@ class WaveAudioTrackBacking implements InputAudioTrackBacking { options: PacketRetrievalOptions, ): Promise { assert(this.demuxer.audioInfo); - const packetIndex = Math.round(packet.timestamp * this.demuxer.audioInfo.sampleRate / PACKET_SIZE_IN_FRAMES); + + const packetIndex = packet.sequenceNumber; + if (packetIndex < 0) { + throw new Error('Packet was not created from this track.'); + } return this.getPacketAtIndex(res, packetIndex + 1, options); }