init commit

This commit is contained in:
Carlos
2026-02-21 10:33:18 +01:00
parent c863a943ed
commit 9d955bf338
9512 changed files with 2015317 additions and 1305 deletions

View File

@@ -0,0 +1,14 @@
import type { MediaParserAudioSample, MediaParserVideoSample } from '../../webcodec-sample-types';
export declare const samplesObservedState: () => {
addVideoSample: (videoSample: MediaParserVideoSample) => void;
addAudioSample: (audioSample: MediaParserAudioSample) => void;
getSlowDurationInSeconds: () => number;
getFps: () => number;
getSlowNumberOfFrames: () => number;
getAudioBitrate: () => number | null;
getVideoBitrate: () => number | null;
getLastSampleObserved: () => boolean;
setLastSampleObserved: () => void;
getAmountOfSamplesObserved: () => number;
};
export type SamplesObservedState = ReturnType<typeof samplesObservedState>;

View File

@@ -0,0 +1,96 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.samplesObservedState = void 0;
const webcodecs_timescale_1 = require("../../webcodecs-timescale");
const samplesObservedState = () => {
let smallestVideoSample;
let largestVideoSample;
let smallestAudioSample;
let largestAudioSample;
let lastSampleObserved = false;
const videoSamples = new Map();
const audioSamples = new Map();
const getSlowVideoDurationInSeconds = () => {
return (largestVideoSample !== null && largestVideoSample !== void 0 ? largestVideoSample : 0) - (smallestVideoSample !== null && smallestVideoSample !== void 0 ? smallestVideoSample : 0);
};
const getSlowAudioDurationInSeconds = () => {
return (largestAudioSample !== null && largestAudioSample !== void 0 ? largestAudioSample : 0) - (smallestAudioSample !== null && smallestAudioSample !== void 0 ? smallestAudioSample : 0);
};
const getSlowDurationInSeconds = () => {
const smallestSample = Math.min(smallestAudioSample !== null && smallestAudioSample !== void 0 ? smallestAudioSample : Infinity, smallestVideoSample !== null && smallestVideoSample !== void 0 ? smallestVideoSample : Infinity);
const largestSample = Math.max(largestAudioSample !== null && largestAudioSample !== void 0 ? largestAudioSample : 0, largestVideoSample !== null && largestVideoSample !== void 0 ? largestVideoSample : 0);
if (smallestSample === Infinity || largestSample === Infinity) {
return 0;
}
return largestSample - smallestSample;
};
const addVideoSample = (videoSample) => {
var _a;
videoSamples.set(videoSample.timestamp, videoSample.data.byteLength);
const presentationTimeInSeconds = videoSample.timestamp / webcodecs_timescale_1.WEBCODECS_TIMESCALE;
const duration = ((_a = videoSample.duration) !== null && _a !== void 0 ? _a : 0) / webcodecs_timescale_1.WEBCODECS_TIMESCALE;
if (largestVideoSample === undefined ||
presentationTimeInSeconds > largestVideoSample) {
largestVideoSample = presentationTimeInSeconds + duration;
}
if (smallestVideoSample === undefined ||
presentationTimeInSeconds < smallestVideoSample) {
smallestVideoSample = presentationTimeInSeconds;
}
};
const addAudioSample = (audioSample) => {
var _a;
audioSamples.set(audioSample.timestamp, audioSample.data.byteLength);
const presentationTimeInSeconds = audioSample.timestamp / webcodecs_timescale_1.WEBCODECS_TIMESCALE;
const duration = ((_a = audioSample.duration) !== null && _a !== void 0 ? _a : 0) / webcodecs_timescale_1.WEBCODECS_TIMESCALE;
if (largestAudioSample === undefined ||
presentationTimeInSeconds > largestAudioSample) {
largestAudioSample = presentationTimeInSeconds + duration;
}
if (smallestAudioSample === undefined ||
presentationTimeInSeconds < smallestAudioSample) {
smallestAudioSample = presentationTimeInSeconds;
}
};
const getFps = () => {
const videoDuration = (largestVideoSample !== null && largestVideoSample !== void 0 ? largestVideoSample : 0) - (smallestVideoSample !== null && smallestVideoSample !== void 0 ? smallestVideoSample : 0);
if (videoDuration === 0) {
return 0;
}
return (videoSamples.size - 1) / videoDuration;
};
const getSlowNumberOfFrames = () => videoSamples.size;
const getAudioBitrate = () => {
const audioDuration = getSlowAudioDurationInSeconds();
if (audioDuration === 0 || audioSamples.size === 0) {
return null;
}
const audioSizesInBytes = Array.from(audioSamples.values()).reduce((acc, size) => acc + size, 0);
return (audioSizesInBytes * 8) / audioDuration;
};
const getVideoBitrate = () => {
const videoDuration = getSlowVideoDurationInSeconds();
if (videoDuration === 0 || videoSamples.size === 0) {
return null;
}
const videoSizesInBytes = Array.from(videoSamples.values()).reduce((acc, size) => acc + size, 0);
return (videoSizesInBytes * 8) / videoDuration;
};
const getLastSampleObserved = () => lastSampleObserved;
const setLastSampleObserved = () => {
lastSampleObserved = true;
};
return {
addVideoSample,
addAudioSample,
getSlowDurationInSeconds,
getFps,
getSlowNumberOfFrames,
getAudioBitrate,
getVideoBitrate,
getLastSampleObserved,
setLastSampleObserved,
getAmountOfSamplesObserved: () => videoSamples.size + audioSamples.size,
};
};
exports.samplesObservedState = samplesObservedState;