PacketReader read -> get method naming

This commit is contained in:
Vanilagy
2025-12-30 12:07:08 +01:00
parent 8467a9d672
commit ba26367529
6 changed files with 70 additions and 70 deletions
+32 -32
View File
@@ -84,7 +84,7 @@ export class PacketReader<T extends InputTrack = InputTrack> {
this.track = track; this.track = track;
} }
private maybeVerifyPacketType( private _maybeVerifyPacketType(
packet: EncodedPacket | null, packet: EncodedPacket | null,
options: PacketRetrievalOptions, options: PacketRetrievalOptions,
): MaybePromise<EncodedPacket | null> { ): MaybePromise<EncodedPacket | null> {
@@ -102,7 +102,7 @@ export class PacketReader<T extends InputTrack = InputTrack> {
}); });
} }
readFirst(options: PacketRetrievalOptions = {}): MaybePromise<EncodedPacket | null> { getFirst(options: PacketRetrievalOptions = {}): MaybePromise<EncodedPacket | null> {
validatePacketRetrievalOptions(options); validatePacketRetrievalOptions(options);
if (this.track.input._disposed) { if (this.track.input._disposed) {
@@ -113,13 +113,13 @@ export class PacketReader<T extends InputTrack = InputTrack> {
const promise = this.track._backing.getFirstPacket(result, options); const promise = this.track._backing.getFirstPacket(result, options);
if (result.pending) { if (result.pending) {
return promise.then(() => this.maybeVerifyPacketType(result.value, options)); return promise.then(() => this._maybeVerifyPacketType(result.value, options));
} else { } else {
return this.maybeVerifyPacketType(result.value, options); return this._maybeVerifyPacketType(result.value, options);
} }
} }
readAt(timestamp: number, options: PacketRetrievalOptions = {}): MaybePromise<EncodedPacket | null> { getAt(timestamp: number, options: PacketRetrievalOptions = {}): MaybePromise<EncodedPacket | null> {
validateTimestamp(timestamp); validateTimestamp(timestamp);
validatePacketRetrievalOptions(options); validatePacketRetrievalOptions(options);
@@ -131,13 +131,13 @@ export class PacketReader<T extends InputTrack = InputTrack> {
const promise = this.track._backing.getPacket(result, timestamp, options); const promise = this.track._backing.getPacket(result, timestamp, options);
if (result.pending) { if (result.pending) {
return promise.then(() => this.maybeVerifyPacketType(result.value, options)); return promise.then(() => this._maybeVerifyPacketType(result.value, options));
} else { } else {
return this.maybeVerifyPacketType(result.value, options); return this._maybeVerifyPacketType(result.value, options);
} }
} }
readKeyAt(timestamp: number, options: PacketRetrievalOptions = {}): MaybePromise<EncodedPacket | null> { getKeyAt(timestamp: number, options: PacketRetrievalOptions = {}): MaybePromise<EncodedPacket | null> {
validateTimestamp(timestamp); validateTimestamp(timestamp);
validatePacketRetrievalOptions(options); validatePacketRetrievalOptions(options);
@@ -146,7 +146,7 @@ export class PacketReader<T extends InputTrack = InputTrack> {
} }
if (options.verifyKeyPackets) { if (options.verifyKeyPackets) {
return this.readKeyAtVerified(timestamp, options); return this._readKeyAtVerified(timestamp, options);
} }
const result = new ResultValue<EncodedPacket | null>(); const result = new ResultValue<EncodedPacket | null>();
@@ -159,7 +159,7 @@ export class PacketReader<T extends InputTrack = InputTrack> {
} }
} }
private async readKeyAtVerified( private async _readKeyAtVerified(
timestamp: number, timestamp: number,
options: PacketRetrievalOptions, options: PacketRetrievalOptions,
): Promise<EncodedPacket | null> { ): Promise<EncodedPacket | null> {
@@ -175,13 +175,13 @@ export class PacketReader<T extends InputTrack = InputTrack> {
const determinedType = await this.track.determinePacketType(packet); const determinedType = await this.track.determinePacketType(packet);
if (determinedType === 'delta') { if (determinedType === 'delta') {
// Try returning the previous key packet (in hopes that it's actually a key packet) // Try returning the previous key packet (in hopes that it's actually a key packet)
return this.readKeyAtVerified(packet.timestamp - 1 / this.track.timeResolution, options); return this._readKeyAtVerified(packet.timestamp - 1 / this.track.timeResolution, options);
} }
return packet; return packet;
} }
readNext(from: EncodedPacket, options: PacketRetrievalOptions = {}): MaybePromise<EncodedPacket | null> { getNext(from: EncodedPacket, options: PacketRetrievalOptions = {}): MaybePromise<EncodedPacket | null> {
if (!(from instanceof EncodedPacket)) { if (!(from instanceof EncodedPacket)) {
throw new TypeError('from must be an EncodedPacket.'); throw new TypeError('from must be an EncodedPacket.');
} }
@@ -195,13 +195,13 @@ export class PacketReader<T extends InputTrack = InputTrack> {
const promise = this.track._backing.getNextPacket(result, from, options); const promise = this.track._backing.getNextPacket(result, from, options);
if (result.pending) { if (result.pending) {
return promise.then(() => this.maybeVerifyPacketType(result.value, options)); return promise.then(() => this._maybeVerifyPacketType(result.value, options));
} else { } else {
return this.maybeVerifyPacketType(result.value, options); return this._maybeVerifyPacketType(result.value, options);
} }
} }
readNextKey(from: EncodedPacket, options: PacketRetrievalOptions = {}): MaybePromise<EncodedPacket | null> { getNextKey(from: EncodedPacket, options: PacketRetrievalOptions = {}): MaybePromise<EncodedPacket | null> {
if (!(from instanceof EncodedPacket)) { if (!(from instanceof EncodedPacket)) {
throw new TypeError('from must be an EncodedPacket.'); throw new TypeError('from must be an EncodedPacket.');
} }
@@ -212,7 +212,7 @@ export class PacketReader<T extends InputTrack = InputTrack> {
} }
if (options.verifyKeyPackets) { if (options.verifyKeyPackets) {
return this.readNextKeyVerified(from, options); return this._getNextKeyVerified(from, options);
} }
const result = new ResultValue<EncodedPacket | null>(); const result = new ResultValue<EncodedPacket | null>();
@@ -225,7 +225,7 @@ export class PacketReader<T extends InputTrack = InputTrack> {
} }
} }
private async readNextKeyVerified( private async _getNextKeyVerified(
from: EncodedPacket, from: EncodedPacket,
options: PacketRetrievalOptions, options: PacketRetrievalOptions,
): Promise<EncodedPacket | null> { ): Promise<EncodedPacket | null> {
@@ -241,7 +241,7 @@ export class PacketReader<T extends InputTrack = InputTrack> {
const determinedType = await this.track.determinePacketType(nextPacket); const determinedType = await this.track.determinePacketType(nextPacket);
if (determinedType === 'delta') { if (determinedType === 'delta') {
// Try returning the next key packet (in hopes that it's actually a key packet) // Try returning the next key packet (in hopes that it's actually a key packet)
return this.readNextKeyVerified(nextPacket, options); return this._getNextKeyVerified(nextPacket, options);
} }
return nextPacket; return nextPacket;
@@ -269,7 +269,7 @@ export class PacketCursor<T extends InputTrack = InputTrack> {
} }
private _seekToFirstDirect(): MaybePromise<EncodedPacket | null> { private _seekToFirstDirect(): MaybePromise<EncodedPacket | null> {
const result = this._reader.readFirst(this._options); const result = this._reader.getFirst(this._options);
const onPacket = (packet: EncodedPacket | null) => { const onPacket = (packet: EncodedPacket | null) => {
this._nextIsFirst = false; this._nextIsFirst = false;
@@ -291,7 +291,7 @@ export class PacketCursor<T extends InputTrack = InputTrack> {
validateTimestamp(timestamp); validateTimestamp(timestamp);
return this._callSerializer.call(() => { return this._callSerializer.call(() => {
const result = this._reader.readAt(timestamp, this._options); const result = this._reader.getAt(timestamp, this._options);
const onPacket = (packet: EncodedPacket | null) => { const onPacket = (packet: EncodedPacket | null) => {
this._nextIsFirst = !packet; this._nextIsFirst = !packet;
@@ -310,7 +310,7 @@ export class PacketCursor<T extends InputTrack = InputTrack> {
validateTimestamp(timestamp); validateTimestamp(timestamp);
return this._callSerializer.call(() => { return this._callSerializer.call(() => {
const result = this._reader.readKeyAt(timestamp, this._options); const result = this._reader.getKeyAt(timestamp, this._options);
const onPacket = (packet: EncodedPacket | null) => { const onPacket = (packet: EncodedPacket | null) => {
this._nextIsFirst = !packet; this._nextIsFirst = !packet;
@@ -335,7 +335,7 @@ export class PacketCursor<T extends InputTrack = InputTrack> {
return null; return null;
} }
const result = this._reader.readNext(this.current, this._options); const result = this._reader.getNext(this.current, this._options);
const onPacket = (packet: EncodedPacket | null) => { const onPacket = (packet: EncodedPacket | null) => {
return this.current = packet; return this.current = packet;
@@ -359,7 +359,7 @@ export class PacketCursor<T extends InputTrack = InputTrack> {
return null; return null;
} }
const result = this._reader.readNextKey(this.current, this._options); const result = this._reader.getNextKey(this.current, this._options);
const onPacket = (packet: EncodedPacket | null) => { const onPacket = (packet: EncodedPacket | null) => {
return this.current = packet; return this.current = packet;
@@ -574,17 +574,17 @@ export abstract class SampleCursor<
} }
seekToFirst(): MaybePromise<TransformedSample | null> { seekToFirst(): MaybePromise<TransformedSample | null> {
return this._getSample(result => this._seekToPacket(result, this._packetReader.readFirst())); return this._getSample(result => this._seekToPacket(result, this._packetReader.getFirst()));
} }
seekTo(timestamp: number): MaybePromise<TransformedSample | null> { seekTo(timestamp: number): MaybePromise<TransformedSample | null> {
validateTimestamp(timestamp); validateTimestamp(timestamp);
return this._getSample(result => this._seekToPacket(result, this._packetReader.readAt(timestamp))); return this._getSample(result => this._seekToPacket(result, this._packetReader.getAt(timestamp)));
} }
seekToKey(timestamp: number): MaybePromise<TransformedSample | null> { seekToKey(timestamp: number): MaybePromise<TransformedSample | null> {
validateTimestamp(timestamp); validateTimestamp(timestamp);
return this._getSample(result => this._seekToPacket(result, this._packetReader.readKeyAt(timestamp))); return this._getSample(result => this._seekToPacket(result, this._packetReader.getKeyAt(timestamp)));
} }
next(): MaybePromise<TransformedSample | null> { next(): MaybePromise<TransformedSample | null> {
@@ -940,7 +940,7 @@ export abstract class SampleCursor<
} else { } else {
if (this._packetCursor.current) { if (this._packetCursor.current) {
// We need to see if the target packet is ahead of the decoder, GOP-wise // We need to see if the target packet is ahead of the decoder, GOP-wise
let nextKey = this._packetReader.readNextKey( let nextKey = this._packetReader.getNextKey(
this._packetCursor.current, this._packetCursor.current,
{ verifyKeyPackets: true }, { verifyKeyPackets: true },
); );
@@ -1003,7 +1003,7 @@ export abstract class SampleCursor<
if (this._nextIsFirst) { if (this._nextIsFirst) {
// Easy, just seek to the first sample // Easy, just seek to the first sample
// await is important so that the lock doesn't release too early // await is important so that the lock doesn't release too early
return await this._seekToPacket(res, this._packetReader.readFirst(), lock); return await this._seekToPacket(res, this._packetReader.getFirst(), lock);
} }
// See if the request can be satisfied using already-decoded samples // See if the request can be satisfied using already-decoded samples
@@ -1059,7 +1059,7 @@ export abstract class SampleCursor<
if (this._nextIsFirst) { if (this._nextIsFirst) {
// await is important so that the lock doesn't release too early // await is important so that the lock doesn't release too early
return await this._seekToPacket(res, this._packetReader.readFirst(), lock); return await this._seekToPacket(res, this._packetReader.getFirst(), lock);
} }
let timestampToCheck: number; let timestampToCheck: number;
@@ -1094,11 +1094,11 @@ export abstract class SampleCursor<
// are ascending in timestamp, so we first get the current key (based on a presentation-order search), then // are ascending in timestamp, so we first get the current key (based on a presentation-order search), then
// get the next key after that, which will be the answer we're looking for. // get the next key after that, which will be the answer we're looking for.
let key = this._packetReader.readKeyAt(timestampToCheck, { verifyKeyPackets: true }); let key = this._packetReader.getKeyAt(timestampToCheck, { verifyKeyPackets: true });
if (key instanceof Promise) key = await key; if (key instanceof Promise) key = await key;
assert(key); // Must be assert(key); // Must be
let nextKey = this._packetReader.readNextKey(key, { verifyKeyPackets: true }); let nextKey = this._packetReader.getNextKey(key, { verifyKeyPackets: true });
if (nextKey instanceof Promise) nextKey = await nextKey; if (nextKey instanceof Promise) nextKey = await nextKey;
if (!nextKey) { if (!nextKey) {
@@ -1116,7 +1116,7 @@ export abstract class SampleCursor<
this._ensureNotClosed(); this._ensureNotClosed();
if (this._nextIsFirst) { if (this._nextIsFirst) {
let first = this._packetReader.readFirst(); let first = this._packetReader.getFirst();
if (first instanceof Promise) first = await first; if (first instanceof Promise) first = await first;
return res.set(!!first); return res.set(!!first);
+1 -1
View File
@@ -43,7 +43,7 @@ test('Can decode faulty transparent video and behaves gracefully', async () => {
const videoTrack = (await input.getPrimaryVideoTrack())!; const videoTrack = (await input.getPrimaryVideoTrack())!;
const reader = new PacketReader(videoTrack); const reader = new PacketReader(videoTrack);
const secondKeyPacket = (await reader.readNextKey((await reader.readFirst())!))!; const secondKeyPacket = (await reader.getNextKey((await reader.getFirst())!))!;
await using cursor = new VideoSampleCursor(videoTrack); await using cursor = new VideoSampleCursor(videoTrack);
+2 -2
View File
@@ -23,7 +23,7 @@ test('Annex B to length-prefixed conversion, MP4', async () => {
expect(originalVideoTrack.codec).toBe('avc'); expect(originalVideoTrack.codec).toBe('avc');
const originalReader = new PacketReader(originalVideoTrack); const originalReader = new PacketReader(originalVideoTrack);
const originalFirstPacket = await originalReader.readFirst(); const originalFirstPacket = await originalReader.getFirst();
expect([...originalFirstPacket!.data.slice(0, 4)]).toEqual([0, 0, 0, 1]); expect([...originalFirstPacket!.data.slice(0, 4)]).toEqual([0, 0, 0, 1]);
const originalNalUnits = extractAvcNalUnits(originalFirstPacket!.data, originalDecoderConfig); const originalNalUnits = extractAvcNalUnits(originalFirstPacket!.data, originalDecoderConfig);
@@ -46,7 +46,7 @@ test('Annex B to length-prefixed conversion, MP4', async () => {
expect(newVideoTrack.codec).toBe('avc'); expect(newVideoTrack.codec).toBe('avc');
const newReader = new PacketReader(newVideoTrack); const newReader = new PacketReader(newVideoTrack);
const newFirstPacket = await newReader.readFirst(); const newFirstPacket = await newReader.getFirst();
expect([...newFirstPacket!.data.slice(0, 4)]).not.toEqual([0, 0, 0, 1]); // Successfully converted expect([...newFirstPacket!.data.slice(0, 4)]).not.toEqual([0, 0, 0, 1]); // Successfully converted
const newNalUnits = extractAvcNalUnits(newFirstPacket!.data, newDecoderConfig); const newNalUnits = extractAvcNalUnits(newFirstPacket!.data, newDecoderConfig);
+10 -10
View File
@@ -13,52 +13,52 @@ const __dirname = new URL('.', import.meta.url).pathname;
const testBasicPacketReading = async (track: InputTrack) => { const testBasicPacketReading = async (track: InputTrack) => {
const reader = new PacketReader(track); const reader = new PacketReader(track);
const first = await reader.readFirst(); const first = await reader.getFirst();
expect(first).not.toBe(null); expect(first).not.toBe(null);
expect(first!.timestamp).toBe(0); expect(first!.timestamp).toBe(0);
const next = await reader.readNext(first!); const next = await reader.getNext(first!);
expect(next).not.toBe(null); expect(next).not.toBe(null);
expect(next!.timestamp).toBeCloseTo(first!.timestamp + first!.duration); expect(next!.timestamp).toBeCloseTo(first!.timestamp + first!.duration);
expect(next!.sequenceNumber).toBeGreaterThan(first!.sequenceNumber); expect(next!.sequenceNumber).toBeGreaterThan(first!.sequenceNumber);
const nextKey = await reader.readNextKey(first!); const nextKey = await reader.getNextKey(first!);
expect(nextKey).not.toBe(null); expect(nextKey).not.toBe(null);
expect(nextKey!.type).toBe('key'); expect(nextKey!.type).toBe('key');
expect(nextKey!.timestamp).toBeGreaterThanOrEqual(next!.timestamp); expect(nextKey!.timestamp).toBeGreaterThanOrEqual(next!.timestamp);
const seeked = await reader.readAt(1); const seeked = await reader.getAt(1);
expect(seeked).not.toBe(null); expect(seeked).not.toBe(null);
expect(seeked!.timestamp).toBeGreaterThan(0.9); expect(seeked!.timestamp).toBeGreaterThan(0.9);
expect(seeked!.timestamp).toBeLessThanOrEqual(1); expect(seeked!.timestamp).toBeLessThanOrEqual(1);
expect(seeked!.sequenceNumber).toBeGreaterThan(next!.sequenceNumber); expect(seeked!.sequenceNumber).toBeGreaterThan(next!.sequenceNumber);
const seekedKey = await reader.readKeyAt(1); const seekedKey = await reader.getKeyAt(1);
expect(seekedKey).not.toBe(null); expect(seekedKey).not.toBe(null);
expect(seekedKey!.type).toBe('key'); expect(seekedKey!.type).toBe('key');
expect(seekedKey!.sequenceNumber).toBeGreaterThanOrEqual(first!.sequenceNumber); expect(seekedKey!.sequenceNumber).toBeGreaterThanOrEqual(first!.sequenceNumber);
expect(seekedKey!.sequenceNumber).toBeLessThanOrEqual(seeked!.sequenceNumber); expect(seekedKey!.sequenceNumber).toBeLessThanOrEqual(seeked!.sequenceNumber);
const last = await reader.readAt(Infinity); const last = await reader.getAt(Infinity);
expect(last).not.toBe(null); expect(last).not.toBe(null);
expect(last!.sequenceNumber).toBeGreaterThan(seeked!.sequenceNumber); expect(last!.sequenceNumber).toBeGreaterThan(seeked!.sequenceNumber);
const afterLast = await reader.readNext(last!); const afterLast = await reader.getNext(last!);
expect(afterLast).toBe(null); expect(afterLast).toBe(null);
}; };
const testSyncPacketReading = (track: InputTrack) => { const testSyncPacketReading = (track: InputTrack) => {
const reader = new PacketReader(track); const reader = new PacketReader(track);
const seeked = reader.readAt(1) as EncodedPacket | null; const seeked = reader.getAt(1) as EncodedPacket | null;
expect(seeked).toBeInstanceOf(EncodedPacket); expect(seeked).toBeInstanceOf(EncodedPacket);
let current = reader.readFirst() as EncodedPacket | null; let current = reader.getFirst() as EncodedPacket | null;
expect(current).toBeInstanceOf(EncodedPacket); expect(current).toBeInstanceOf(EncodedPacket);
let count = 0; let count = 0;
while (current) { while (current) {
current = reader.readNext(current) as EncodedPacket | null; current = reader.getNext(current) as EncodedPacket | null;
expect(current instanceof EncodedPacket || current === null).toBe(true); expect(current instanceof EncodedPacket || current === null).toBe(true);
count++; count++;
} }
+6 -6
View File
@@ -67,21 +67,21 @@ test('can do random access', async () => {
const reader = new PacketReader(track); const reader = new PacketReader(track);
const packet = await reader.readAt(10); const packet = await reader.getAt(10);
assert(packet); assert(packet);
expect(packet.timestamp).toBe(9.93814058956916); expect(packet.timestamp).toBe(9.93814058956916);
expect(packet.data.byteLength).toBe(8345); expect(packet.data.byteLength).toBe(8345);
expect(packet.sequenceNumber).toBe(107); expect(packet.sequenceNumber).toBe(107);
expect(packet.duration).toBe(0.09287981859410431); expect(packet.duration).toBe(0.09287981859410431);
const nextPacket = await reader.readNext(packet); const nextPacket = await reader.getNext(packet);
assert(nextPacket); assert(nextPacket);
expect(nextPacket.timestamp).toBe(10.031020408163265); expect(nextPacket.timestamp).toBe(10.031020408163265);
expect(nextPacket.data.byteLength).toBe(8988); expect(nextPacket.data.byteLength).toBe(8988);
expect(nextPacket.sequenceNumber).toBe(108); expect(nextPacket.sequenceNumber).toBe(108);
expect(nextPacket.duration).toBe(0.09287981859410431); expect(nextPacket.duration).toBe(0.09287981859410431);
const priorPacket = await reader.readAt(3); const priorPacket = await reader.getAt(3);
assert(priorPacket); assert(priorPacket);
expect(priorPacket.timestamp).toBe(2.972154195011338); expect(priorPacket.timestamp).toBe(2.972154195011338);
expect(priorPacket.data.byteLength).toBe(6877); expect(priorPacket.data.byteLength).toBe(6877);
@@ -101,7 +101,7 @@ test('can get metadata-only packets', async () => {
const reader = new PacketReader(track); const reader = new PacketReader(track);
const packet = await reader.readAt(10, { metadataOnly: true }); const packet = await reader.getAt(10, { metadataOnly: true });
assert(packet); assert(packet);
expect(packet.timestamp).toBe(9.93814058956916); expect(packet.timestamp).toBe(9.93814058956916);
expect(packet.isMetadataOnly).toBe(true); expect(packet.isMetadataOnly).toBe(true);
@@ -227,8 +227,8 @@ test('can re-mux a .flac', async () => {
expect(timestamp).toBe(19.690521541950112); expect(timestamp).toBe(19.690521541950112);
// Test that packets are byte-identical // Test that packets are byte-identical
const inputPacket = await inputReader.readAt(10); const inputPacket = await inputReader.getAt(10);
const outputPacket = await outputReader.readAt(10); const outputPacket = await outputReader.getAt(10);
assert(inputPacket); assert(inputPacket);
assert(outputPacket); assert(outputPacket);
+19 -19
View File
@@ -18,21 +18,21 @@ test('Packet reader', async () => {
const videoTrack = (await input.getPrimaryVideoTrack())!; const videoTrack = (await input.getPrimaryVideoTrack())!;
const reader = new PacketReader(videoTrack); const reader = new PacketReader(videoTrack);
const packet1 = (await reader.readFirst())!; const packet1 = (await reader.getFirst())!;
expect(packet1.timestamp).toBe(0); expect(packet1.timestamp).toBe(0);
const packet3 = (await reader.readNext(packet1))!; const packet3 = (await reader.getNext(packet1))!;
expect(packet3.sequenceNumber).toBeGreaterThan(packet1.sequenceNumber); expect(packet3.sequenceNumber).toBeGreaterThan(packet1.sequenceNumber);
const packet4 = (await reader.readNextKey(packet1))!; const packet4 = (await reader.getNextKey(packet1))!;
expect(packet4.sequenceNumber).toBeGreaterThan(packet3.sequenceNumber); expect(packet4.sequenceNumber).toBeGreaterThan(packet3.sequenceNumber);
expect(packet4.type).toBe('key'); expect(packet4.type).toBe('key');
const packet5 = (await reader.readNext(packet3))!; const packet5 = (await reader.getNext(packet3))!;
expect(packet5.sequenceNumber).toBeGreaterThan(packet3.sequenceNumber); expect(packet5.sequenceNumber).toBeGreaterThan(packet3.sequenceNumber);
expect(packet5.sequenceNumber).toBeLessThan(packet4.sequenceNumber); expect(packet5.sequenceNumber).toBeLessThan(packet4.sequenceNumber);
const packet6 = (await reader.readAt(2.4))!; const packet6 = (await reader.getAt(2.4))!;
expect(packet6.timestamp).toBeGreaterThan(2); expect(packet6.timestamp).toBeGreaterThan(2);
expect(packet6.timestamp).toBeLessThanOrEqual(2.4); expect(packet6.timestamp).toBeLessThanOrEqual(2.4);
}); });
@@ -46,15 +46,15 @@ test('Packet reading throwing after Input disposal', async () => {
const videoTrack = (await input.getPrimaryVideoTrack())!; const videoTrack = (await input.getPrimaryVideoTrack())!;
const reader = new PacketReader(videoTrack); const reader = new PacketReader(videoTrack);
const first = await reader.readFirst(); const first = await reader.getFirst();
input.dispose(); input.dispose();
expect(() => reader.readFirst()).toThrow(InputDisposedError); expect(() => reader.getFirst()).toThrow(InputDisposedError);
expect(() => reader.readAt(0)).toThrow(InputDisposedError); expect(() => reader.getAt(0)).toThrow(InputDisposedError);
expect(() => reader.readKeyAt(0)).toThrow(InputDisposedError); expect(() => reader.getKeyAt(0)).toThrow(InputDisposedError);
expect(() => reader.readNext(first!)).toThrow(InputDisposedError); expect(() => reader.getNext(first!)).toThrow(InputDisposedError);
expect(() => reader.readNextKey(first!)).toThrow(InputDisposedError); expect(() => reader.getNextKey(first!)).toThrow(InputDisposedError);
}); });
test('Packet cursor seeking', async () => { test('Packet cursor seeking', async () => {
@@ -223,7 +223,7 @@ test('Synchronous packet reading', async () => {
const reader = new PacketReader(videoTrack); const reader = new PacketReader(videoTrack);
const cursor = new PacketCursor(videoTrack); const cursor = new PacketCursor(videoTrack);
expect(reader.readFirst()).not.toBeInstanceOf(Promise); expect(reader.getFirst()).not.toBeInstanceOf(Promise);
expect(cursor.seekToFirst()).not.toBeInstanceOf(Promise); expect(cursor.seekToFirst()).not.toBeInstanceOf(Promise);
expect(cursor.seekTo(0.1)).not.toBeInstanceOf(Promise); expect(cursor.seekTo(0.1)).not.toBeInstanceOf(Promise);
@@ -320,31 +320,31 @@ test('verifyKeyPackets with faultily-labeled key frames', async () => {
const videoTrack = (await input.getPrimaryVideoTrack())!; const videoTrack = (await input.getPrimaryVideoTrack())!;
const reader = new PacketReader(videoTrack); const reader = new PacketReader(videoTrack);
const firstPacket = (await reader.readFirst())!; const firstPacket = (await reader.getFirst())!;
expect(firstPacket.type).toBe('key'); expect(firstPacket.type).toBe('key');
const fakeKeyPacket = (await reader.readNextKey(firstPacket))!; const fakeKeyPacket = (await reader.getNextKey(firstPacket))!;
expect(fakeKeyPacket).not.toBe(null); expect(fakeKeyPacket).not.toBe(null);
expect(fakeKeyPacket.type).toBe('key'); // Metadata says it's a key frame expect(fakeKeyPacket.type).toBe('key'); // Metadata says it's a key frame
expect(fakeKeyPacket.sequenceNumber).toBeGreaterThan(firstPacket.sequenceNumber); expect(fakeKeyPacket.sequenceNumber).toBeGreaterThan(firstPacket.sequenceNumber);
const verifiedPacket = (await reader.readAt(fakeKeyPacket.timestamp, { verifyKeyPackets: true }))!; const verifiedPacket = (await reader.getAt(fakeKeyPacket.timestamp, { verifyKeyPackets: true }))!;
expect(verifiedPacket.sequenceNumber).toBe(fakeKeyPacket.sequenceNumber); expect(verifiedPacket.sequenceNumber).toBe(fakeKeyPacket.sequenceNumber);
expect(verifiedPacket.type).toBe('delta'); // After verification, it's actually a delta frame expect(verifiedPacket.type).toBe('delta'); // After verification, it's actually a delta frame
const unverifiedKeyAt = (await reader.readKeyAt(fakeKeyPacket.timestamp))!; const unverifiedKeyAt = (await reader.getKeyAt(fakeKeyPacket.timestamp))!;
expect(unverifiedKeyAt.sequenceNumber).toBe(fakeKeyPacket.sequenceNumber); expect(unverifiedKeyAt.sequenceNumber).toBe(fakeKeyPacket.sequenceNumber);
expect(unverifiedKeyAt.type).toBe('key'); expect(unverifiedKeyAt.type).toBe('key');
const verifiedKeyAt = (await reader.readKeyAt(fakeKeyPacket.timestamp, { verifyKeyPackets: true }))!; const verifiedKeyAt = (await reader.getKeyAt(fakeKeyPacket.timestamp, { verifyKeyPackets: true }))!;
expect(verifiedKeyAt.sequenceNumber).toBe(firstPacket.sequenceNumber); expect(verifiedKeyAt.sequenceNumber).toBe(firstPacket.sequenceNumber);
expect(verifiedKeyAt.type).toBe('key'); expect(verifiedKeyAt.type).toBe('key');
const unverifiedNextKey = (await reader.readNextKey(firstPacket))!; const unverifiedNextKey = (await reader.getNextKey(firstPacket))!;
expect(unverifiedNextKey).not.toBe(null); expect(unverifiedNextKey).not.toBe(null);
expect(unverifiedNextKey.type).toBe('key'); expect(unverifiedNextKey.type).toBe('key');
expect(unverifiedNextKey.sequenceNumber).toBe(fakeKeyPacket.sequenceNumber); expect(unverifiedNextKey.sequenceNumber).toBe(fakeKeyPacket.sequenceNumber);
const verifiedNextKey = await reader.readNextKey(firstPacket, { verifyKeyPackets: true }); const verifiedNextKey = await reader.getNextKey(firstPacket, { verifyKeyPackets: true });
expect(verifiedNextKey).toBe(null); expect(verifiedNextKey).toBe(null);
}); });