Fix atTimestamps iterator

This commit is contained in:
Vanilagy
2025-01-14 21:23:37 +01:00
parent 45474764ca
commit 9af3e6eb66
4 changed files with 44 additions and 17 deletions
+21 -15
View File
@@ -40,6 +40,15 @@
source
});
const videoTrack = await input.getPrimaryVideoTrack();
const sink = new Metamuxer.VideoFrameSink(videoTrack);
for await (const thing of sink.framesAtTimestamps([0.2, 1, 2, 423])) {
console.log(thing)
}
console.log("Done")
/*
//const videoTrack = await input.getPrimaryVideoTrack();
//console.log(await videoTrack.computeSampleStats());
//return;
@@ -71,26 +80,22 @@
/*
for await (const sample of sink.samples()) {
//console.log(sample.timestamp);
//sample.timestamp *= 2;
//console.log(sample);
//console.log(sample)
await sampleSource.digest(sample, { decoderConfig });
}
*/
//for await (const sample of sink.samples()) {
// //console.log(sample.timestamp);
// //sample.timestamp *= 2;
// //console.log(sample);
// //console.log(sample)
// await sampleSource.digest(sample, { decoderConfig });
//}
for await (const { data, timestamp } of new Metamuxer.AudioDataSink(audioTrack).data()) {
//console.log("wow", data.timestamp);
//console.log(sample)
await audioDataSource.digest(data);
}
/*
for await (const sample of new Metamuxer.EncodedVideoSampleSink(videoTrack).samples()) {
//console.log(sample)
await videoSampleSource.digest(sample, { decoderConfig: videoDecoderConfig });
}
*/
//for await (const sample of new Metamuxer.EncodedVideoSampleSink(videoTrack).samples()) {
// //console.log(sample)
// await videoSampleSource.digest(sample, { decoderConfig: videoDecoderConfig });
//}
await output.finalize();
@@ -107,6 +112,7 @@
download(new Blob([target.buffer]), 'converted.wav');
document.body.textContent = performance.now() - start;
*/
/*
const input2 = new Metamuxer.Input({
+1 -1
View File
@@ -41,7 +41,7 @@ export const AUDIO_CODECS = [
'vorbis',
'flac',
...PCM_CODECS,
] as const; // TODO add the rest
] as const;
/** @public */
export const SUBTITLE_CODECS = ['webvtt'] as const; // TODO add the rest
+4 -1
View File
@@ -392,7 +392,10 @@ export abstract class BaseMediaFrameSink<
}
let frameUsed = false;
while (samplesOfInterest.length > 0 && samplesOfInterest[0] === wrappedFrame.sample) {
while (
samplesOfInterest.length > 0
&& samplesOfInterest[0]!.is(wrappedFrame.sample as EncodedVideoSample & EncodedAudioSample)
) {
pushToQueue(this._duplicateFrame(wrappedFrame));
samplesOfInterest.shift();
frameUsed = true;
+18
View File
@@ -42,6 +42,15 @@ export class EncodedVideoSample {
});
}
is(otherSample: EncodedVideoSample) {
return (
this.type === otherSample.type
&& this.timestamp === otherSample.timestamp
&& this.duration === otherSample.duration
&& this.byteLength === otherSample.byteLength
);
}
static fromEncodedVideoChunk(chunk: EncodedVideoChunk) {
if (typeof EncodedVideoChunk === 'undefined') {
throw new Error('Your browser does not support EncodedVideoChunk.');
@@ -98,6 +107,15 @@ export class EncodedAudioSample {
});
}
is(otherSample: EncodedAudioSample) {
return (
this.type === otherSample.type
&& this.timestamp === otherSample.timestamp
&& this.duration === otherSample.duration
&& this.byteLength === otherSample.byteLength
);
}
static fromEncodedAudioChunk(chunk: EncodedAudioChunk) {
if (typeof EncodedAudioChunk === 'undefined') {
throw new Error('Your browser does not support EncodedAudioChunk.');