@editframe/assets 0.49.6 → 0.49.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Probe.cjs +112 -18
- package/dist/Probe.cjs.map +1 -1
- package/dist/Probe.d.cts +34 -1
- package/dist/Probe.d.ts +34 -1
- package/dist/Probe.js +112 -18
- package/dist/Probe.js.map +1 -1
- package/dist/generateFragmentIndex.cjs +1 -1
- package/dist/generateFragmentIndex.js +1 -1
- package/dist/generateWebmSegmentIndex.cjs +90 -20
- package/dist/generateWebmSegmentIndex.cjs.map +1 -1
- package/dist/generateWebmSegmentIndex.js +90 -20
- package/dist/generateWebmSegmentIndex.js.map +1 -1
- package/dist/idempotentTask.cjs +1 -1
- package/dist/idempotentTask.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -1
- package/dist/tasks/generateScrubTrack.cjs +1 -1
- package/dist/tasks/generateScrubTrack.cjs.map +1 -1
- package/dist/tasks/generateScrubTrack.js +1 -1
- package/dist/tasks/generateScrubTrack.js.map +1 -1
- package/dist/tasks/generateTrack.cjs +26 -8
- package/dist/tasks/generateTrack.cjs.map +1 -1
- package/dist/tasks/generateTrack.js +27 -10
- package/dist/tasks/generateTrack.js.map +1 -1
- package/dist/tasks/generateTrackFragmentIndex.cjs +51 -29
- package/dist/tasks/generateTrackFragmentIndex.cjs.map +1 -1
- package/dist/tasks/generateTrackFragmentIndex.d.cts +8 -1
- package/dist/tasks/generateTrackFragmentIndex.d.ts +8 -1
- package/dist/tasks/generateTrackFragmentIndex.js +51 -29
- package/dist/tasks/generateTrackFragmentIndex.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { PacketProbe } from "./Probe.js";
|
|
2
2
|
import { createWriteStream } from "node:fs";
|
|
3
|
+
import { unlink } from "node:fs/promises";
|
|
3
4
|
import debug from "debug";
|
|
4
5
|
import { Transform, Writable } from "node:stream";
|
|
5
6
|
import { pipeline } from "node:stream/promises";
|
|
6
|
-
import { unlink } from "node:fs/promises";
|
|
7
7
|
import { tmpdir } from "node:os";
|
|
8
8
|
import { join } from "node:path";
|
|
9
9
|
import { randomBytes } from "node:crypto";
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
const require_runtime = require("./_virtual/_rolldown/runtime.cjs");
|
|
2
2
|
const require_Probe = require("./Probe.cjs");
|
|
3
|
+
let node_fs_promises = require("node:fs/promises");
|
|
3
4
|
let debug = require("debug");
|
|
4
5
|
debug = require_runtime.__toESM(debug);
|
|
5
|
-
let node_fs_promises = require("node:fs/promises");
|
|
6
6
|
//#region src/generateWebmSegmentIndex.ts
|
|
7
7
|
/**
|
|
8
8
|
* WebM / Matroska segment index generator.
|
|
@@ -183,11 +183,9 @@ function parseWebmStructure(buf) {
|
|
|
183
183
|
* More reliable than parsing SimpleBlock flags in-process for large files.
|
|
184
184
|
*/
|
|
185
185
|
async function annotateKeyframes(clusters, absolutePath) {
|
|
186
|
-
const
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
cluster.hasKeyframe = keyframePositions.some((pos) => pos >= cluster.offset && pos < clusterEnd);
|
|
190
|
-
}
|
|
186
|
+
const probe = await require_Probe.PacketProbe.probePath(absolutePath);
|
|
187
|
+
const keyframeTimesMs = new Set(probe.packets.filter((p) => p.flags?.includes("K") && p.pts_time !== void 0).map((p) => Math.round(parseFloat(String(p.pts_time)) * 1e3)));
|
|
188
|
+
for (const cluster of clusters) cluster.hasKeyframe = keyframeTimesMs.has(cluster.timestampMs);
|
|
191
189
|
}
|
|
192
190
|
function buildSegments(clusters, timescale, totalDurationMs) {
|
|
193
191
|
const segments = [];
|
|
@@ -251,7 +249,7 @@ async function generateWebmSegmentIndex(absolutePath, startTimeOffsetMs) {
|
|
|
251
249
|
if (videoPackets && videoPackets.length > 0) {
|
|
252
250
|
const lastPkt = videoPackets[videoPackets.length - 1];
|
|
253
251
|
const ptsMs = Math.round(parseFloat(String(lastPkt.pts_time ?? 0)) * 1e3);
|
|
254
|
-
const durMs = Math.round(parseFloat(String(lastPkt.
|
|
252
|
+
const durMs = Math.round(parseFloat(String(lastPkt.duration_time ?? 0)) * 1e3);
|
|
255
253
|
if (ptsMs + durMs > 0) finalDurationMs = ptsMs + durMs;
|
|
256
254
|
}
|
|
257
255
|
}
|
|
@@ -288,8 +286,83 @@ async function generateWebmSegmentIndex(absolutePath, startTimeOffsetMs) {
|
|
|
288
286
|
return { 1: trackIndex };
|
|
289
287
|
}
|
|
290
288
|
const ID_SEEKHEAD = 290298740;
|
|
289
|
+
const ID_TRACKS = 374648427;
|
|
290
|
+
const ID_TRACK_ENTRY = 174;
|
|
291
|
+
const ID_VIDEO = 224;
|
|
292
|
+
const ID_COLOUR = 21936;
|
|
291
293
|
const EBML_VOID_ID = 236;
|
|
292
294
|
/**
|
|
295
|
+
* Encode a Void element header (id + size VINT) such that the entire
|
|
296
|
+
* element occupies exactly `totalBytes` bytes. Returns the [id, ...vintBytes]
|
|
297
|
+
* prefix; the caller fills the remaining `totalBytes - prefix.length` with zeros.
|
|
298
|
+
*/
|
|
299
|
+
function encodeVoidHeader(totalBytes) {
|
|
300
|
+
const c1 = totalBytes - 2;
|
|
301
|
+
if (c1 >= 0 && c1 <= 126) return [EBML_VOID_ID, 128 | c1];
|
|
302
|
+
const c2 = totalBytes - 3;
|
|
303
|
+
if (c2 >= 0 && c2 <= 16382) return [
|
|
304
|
+
EBML_VOID_ID,
|
|
305
|
+
64 | c2 >> 8,
|
|
306
|
+
c2 & 255
|
|
307
|
+
];
|
|
308
|
+
const c3 = totalBytes - 4;
|
|
309
|
+
return [
|
|
310
|
+
EBML_VOID_ID,
|
|
311
|
+
32 | c3 >> 16,
|
|
312
|
+
c3 >> 8 & 255,
|
|
313
|
+
c3 & 255
|
|
314
|
+
];
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Replace the Colour element inside the video TrackEntry with an EBML Void
|
|
318
|
+
* of identical byte length. We do this because ffmpeg's matroska muxer always
|
|
319
|
+
* emits a Colour element with `MatrixCoefficients=bt470bg, Range=full` derived
|
|
320
|
+
* from `format=yuva420p` filter output, but the actual VP9 bitstream encodes
|
|
321
|
+
* `color_space=BT.601` — the mismatch causes Chrome's WebCodecs VideoDecoder
|
|
322
|
+
* to silently drop every delta frame after the keyframe (issue surfaces as
|
|
323
|
+
* "only 1 sample emitted from a 49-frame segment"). With no Colour element
|
|
324
|
+
* mediabunny passes `colorSpace: undefined` to the decoder and Chrome decodes
|
|
325
|
+
* normally.
|
|
326
|
+
*/
|
|
327
|
+
function stripColourElement(buf, tracksStart, tracksEnd) {
|
|
328
|
+
let pos = tracksStart;
|
|
329
|
+
while (pos < tracksEnd) {
|
|
330
|
+
const { id: childId, width: childIdW } = readElementId(buf, pos);
|
|
331
|
+
const { value: childSize, width: childSizeW } = readVintSize(buf, pos + childIdW);
|
|
332
|
+
if (childSize === null) return;
|
|
333
|
+
const childContentStart = pos + childIdW + childSizeW;
|
|
334
|
+
const childEnd = childContentStart + childSize;
|
|
335
|
+
if (childId === ID_TRACK_ENTRY) {
|
|
336
|
+
let tepos = childContentStart;
|
|
337
|
+
while (tepos < childEnd) {
|
|
338
|
+
const { id: teid, width: teidW } = readElementId(buf, tepos);
|
|
339
|
+
const { value: tesize, width: tesizeW } = readVintSize(buf, tepos + teidW);
|
|
340
|
+
if (tesize === null) break;
|
|
341
|
+
const teContentStart = tepos + teidW + tesizeW;
|
|
342
|
+
const teEnd = teContentStart + tesize;
|
|
343
|
+
if (teid === ID_VIDEO) {
|
|
344
|
+
let vpos = teContentStart;
|
|
345
|
+
while (vpos < teEnd) {
|
|
346
|
+
const { id: vid, width: vidW } = readElementId(buf, vpos);
|
|
347
|
+
const { value: vsize, width: vsizeW } = readVintSize(buf, vpos + vidW);
|
|
348
|
+
if (vsize === null) break;
|
|
349
|
+
const totalElementSize = vidW + vsizeW + vsize;
|
|
350
|
+
if (vid === ID_COLOUR) {
|
|
351
|
+
const header = encodeVoidHeader(totalElementSize);
|
|
352
|
+
for (let i = 0; i < header.length; i++) buf[vpos + i] = header[i];
|
|
353
|
+
buf.fill(0, vpos + header.length, vpos + totalElementSize);
|
|
354
|
+
return;
|
|
355
|
+
}
|
|
356
|
+
vpos += totalElementSize;
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
tepos = teContentStart + tesize;
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
pos = childContentStart + childSize;
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
/**
|
|
293
366
|
* Patch a WebM buffer in-place to make it safe for partial (segment-sliced) serving:
|
|
294
367
|
*
|
|
295
368
|
* 1. Segment-element size VINT → EBML unknown-size (0x01FFFFFFFFFFFFFF).
|
|
@@ -301,7 +374,10 @@ const EBML_VOID_ID = 236;
|
|
|
301
374
|
* falls off the end of the buffer, causing seek errors and de-sync. Replacing
|
|
302
375
|
* it with a Void element forces linear parsing: EBML → Info → Tracks → Clusters.
|
|
303
376
|
*
|
|
304
|
-
*
|
|
377
|
+
* 3. Colour element inside Video TrackEntry → EBML Void of the same byte length.
|
|
378
|
+
* See stripColourElement() for rationale.
|
|
379
|
+
*
|
|
380
|
+
* All patches are applied to a Buffer copy; the source file on disk is not modified.
|
|
305
381
|
*/
|
|
306
382
|
function patchWebmForSegmentedServing(buf) {
|
|
307
383
|
try {
|
|
@@ -332,18 +408,12 @@ function patchWebmForSegmentedServing(buf) {
|
|
|
332
408
|
if (childSize === null) break;
|
|
333
409
|
const totalElementSize = childIdWidth + childSizeWidth + childSize;
|
|
334
410
|
if (childId === ID_SEEKHEAD) {
|
|
335
|
-
const
|
|
336
|
-
let
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
voidContentSize >> 8 & 255,
|
|
342
|
-
voidContentSize & 255
|
|
343
|
-
];
|
|
344
|
-
buf[pos] = EBML_VOID_ID;
|
|
345
|
-
for (let i = 0; i < vintBytes.length; i++) buf[pos + 1 + i] = vintBytes[i];
|
|
346
|
-
buf.fill(0, pos + 1 + vintBytes.length, pos + totalElementSize);
|
|
411
|
+
const header = encodeVoidHeader(totalElementSize);
|
|
412
|
+
for (let i = 0; i < header.length; i++) buf[pos + i] = header[i];
|
|
413
|
+
buf.fill(0, pos + header.length, pos + totalElementSize);
|
|
414
|
+
} else if (childId === ID_TRACKS) {
|
|
415
|
+
const tracksStart = pos + childIdWidth + childSizeWidth;
|
|
416
|
+
stripColourElement(buf, tracksStart, tracksStart + childSize);
|
|
347
417
|
break;
|
|
348
418
|
}
|
|
349
419
|
pos += totalElementSize;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateWebmSegmentIndex.cjs","names":["PacketProbe"],"sources":["../src/generateWebmSegmentIndex.ts"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"generateWebmSegmentIndex.cjs","names":["PacketProbe"],"sources":["../src/generateWebmSegmentIndex.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,MAAM,OAAA,GAAA,MAAA,SAAY,8BAA8B;AAEhD,MAAM,0BAA0B;AAKhC,MAAM,UAAU;AAChB,MAAM,aAAa;AACnB,MAAM,UAAU;AAChB,MAAM,aAAa;AACnB,MAAM,eAAe;AACrB,MAAM,kBAAkB;AACxB,MAAM,iBAAiB;AACvB,MAAM,qBAAqB;AAC3B,MAAM,qBAAqB;;;;;;;AAY3B,SAAS,aAAa,KAAa,QAAyD;CAC1F,MAAM,IAAI,IAAI;CACd,IAAI,QAAQ;CACZ,IAAI,OAAO;AACX,QAAO,SAAS,KAAK,EAAE,IAAI,OAAO;AAChC,WAAS;AACT;;CAEF,IAAI,QAAQ,IAAK,OAAO;AACxB,MAAK,IAAI,IAAI,GAAG,IAAI,OAAO,IACzB,SAAS,SAAS,KAAM,IAAI,SAAS,MAAM;CAG7C,MAAM,mBAAmB,KAAM,IAAI,SAAU;AAC7C,QAAO;EAAE,OAAO,UAAU,kBAAkB,OAAO;EAAO;EAAO;;;;;;AAOnE,SAAS,cAAc,KAAa,QAA+C;CACjF,MAAM,IAAI,IAAI;CACd,IAAI,QAAQ;CACZ,IAAI,OAAO;AACX,QAAO,SAAS,KAAK,EAAE,IAAI,OAAO;AAChC,WAAS;AACT;;CAEF,IAAI,KAAK;AACT,MAAK,IAAI,IAAI,GAAG,IAAI,OAAO,IACzB,MAAM,MAAM,KAAM,IAAI,SAAS,MAAM;AAEvC,QAAO;EAAE;EAAI;EAAO;;;AAItB,SAAS,WAAW,KAAa,QAAgB,MAAsB;CACrE,IAAI,MAAM;AACV,MAAK,IAAI,IAAI,GAAG,IAAI,MAAM,IACxB,OAAO,MAAM,OAAO,IAAI,SAAS,MAAM,OAAQ;AAEjD,QAAO;;;;;;AAsCT,SAAS,mBAAmB,KAA4B;CACtD,IAAI,MAAM;CAGV,MAAM,EAAE,IAAI,QAAQ,OAAO,gBAAgB,cAAc,KAAK,IAAI;AAClE,KAAI,WAAW,QACb,OAAM,IAAI,MAAM,6CAA6C,OAAO,SAAS,GAAG,GAAG;CAErF,MAAM,EAAE,OAAO,UAAU,OAAO,kBAAkB,aAAa,KAAK,MAAM,YAAY;AACtF,KAAI,aAAa,KAAM,OAAM,IAAI,MAAM,gCAAgC;AACvE,QAAO,cAAc,gBAAgB;CAGrC,MAAM,EAAE,IAAI,OAAO,OAAO,eAAe,cAAc,KAAK,IAAI;AAChE,KAAI,UAAU,WACZ,OAAM,IAAI,MAAM,gDAAgD,MAAM,SAAS,GAAG,GAAG;CAEvF,MAAM,wBAAwB,MAAM;CACpC,MAAM,EAAE,OAAO,iBAAiB,aAAa,KAAK,sBAAsB;CAIxE,IAAI,OAHoB,wBAAwB;CAIhD,IAAI,WAAW;CACf,IAAI,mBAAmB;CACvB,MAAM,WAA0B,EAAE;AAElC,QAAO,OAAO,IAAI,QAAQ;AACxB,MAAI,IAAI,SAAS,OAAO,EAAG;EAE3B,MAAM,EAAE,IAAI,SAAS,OAAO,iBAAiB,cAAc,KAAK,KAAK;EACrE,MAAM,EAAE,OAAO,WAAW,OAAO,mBAAmB,aAAa,KAAK,OAAO,aAAa;EAC1F,MAAM,aAAa,eAAe;AAElC,MAAI,cAAc,MAAM;AAEtB,OAAI,0BAA0B,QAAQ,SAAS,GAAG,CAAC,MAAM,KAAK,YAAY;AAC1E;;EAGF,MAAM,aAAa,OAAO,aAAa;AAEvC,MAAI,YAAY,SAAS;GAEvB,IAAI,OAAO,OAAO;AAClB,UAAO,OAAO,cAAc,OAAO,IAAI,QAAQ;IAC7C,MAAM,EAAE,IAAI,aAAa,OAAO,YAAY,cAAc,KAAK,KAAK;IACpE,MAAM,EAAE,OAAO,eAAe,OAAO,cAAc,aAAa,KAAK,OAAO,QAAQ;AACpF,QAAI,kBAAkB,KAAM;AAC5B,QAAI,gBAAgB,mBAClB,oBAAmB,WAAW,KAAK,OAAO,UAAU,WAAW,cAAc;AAE/E,YAAQ,UAAU,YAAY;;aAEvB,YAAY,YAAY;AACjC,OAAI,aAAa,EACf,YAAW;GAIb,IAAI,wBAAwB;GAC5B,IAAI,cAAc;GAClB,IAAI,OAAO,OAAO;AAElB,UAAO,OAAO,cAAc,OAAO,IAAI,QAAQ;AAC7C,QAAI,IAAI,SAAS,OAAO,EAAG;IAC3B,MAAM,EAAE,IAAI,KAAK,OAAO,SAAS,cAAc,KAAK,KAAK;IACzD,MAAM,EAAE,OAAO,OAAO,OAAO,WAAW,aAAa,KAAK,OAAO,KAAK;AACtE,QAAI,UAAU,KAAM;IACpB,MAAM,cAAc,OAAO;AAE3B,QAAI,QAAQ,aACV,yBAAwB,WAAW,KAAK,OAAO,aAAa,MAAM;aACzD,QAAQ,iBAAiB;KAElC,MAAM,WAAW,OAAO;KACxB,MAAM,EAAE,OAAO,kBAAkB,aAAa,KAAK,SAAS;AAE5D,UADkB,IAAI,WAAW,gBAAgB,MAAM,KACvC,IACd,eAAc;eAEP,QAAQ,gBAAgB;KAEjC,IAAI,QAAQ,OAAO;KACnB,MAAM,QAAQ,OAAO,cAAc;KACnC,IAAI,oBAAoB;AACxB,YAAO,QAAQ,SAAS,QAAQ,IAAI,QAAQ;MAC1C,MAAM,EAAE,IAAI,MAAM,OAAO,UAAU,cAAc,KAAK,MAAM;MAC5D,MAAM,EAAE,OAAO,QAAQ,OAAO,YAAY,aAAa,KAAK,QAAQ,MAAM;AAC1E,UAAI,WAAW,KAAM;AACrB,UAAI,SAAS,oBAAoB;AAC/B,2BAAoB;AACpB;;AAEF,eAAS,QAAQ,UAAU;;AAE7B,SAAI,CAAC,kBAAmB,eAAc;;AAGxC,YAAQ,cAAc;;GAGxB,MAAM,cAAc,KAAK,MAAO,wBAAwB,mBAAoB,IAAU;AACtF,YAAS,KAAK;IAAE,QAAQ;IAAM,MAAM,aAAa;IAAW;IAAa;IAAa,CAAC;;AAGzF,SAAO;;AAGT,KAAI,aAAa,EACf,OAAM,IAAI,MAAM,yCAAyC;AAG3D,QAAO;EACL;EACA,sBAAsB;EACtB;EACA;EACA;EACD;;;;;;AAWH,eAAe,kBAAkB,UAAyB,cAAqC;CAC7F,MAAM,QAAQ,MAAMA,cAAAA,YAAY,UAAU,aAAa;CAOvD,MAAM,kBAAkB,IAAI,IACzB,MAAM,QACJ,QAAQ,MAAM,EAAE,OAAO,SAAS,IAAI,IAAI,EAAE,aAAa,KAAA,EAAU,CACjE,KAAK,MAAM,KAAK,MAAM,WAAW,OAAO,EAAE,SAAS,CAAC,GAAG,IAAK,CAAC,CACjE;AAED,MAAK,MAAM,WAAW,SACpB,SAAQ,cAAc,gBAAgB,IAAI,QAAQ,YAAY;;AAQlE,SAAS,cACP,UACA,WACA,iBACgB;CAChB,MAAM,WAA2B,EAAE;CAEnC,IAAI,kBAAiC,EAAE;CACvC,IAAI,iBAAiB;CAErB,MAAM,gBAAgB,gBAAwB;AAC5C,MAAI,gBAAgB,WAAW,EAAG;EAClC,MAAM,QAAQ,gBAAgB;EAC9B,MAAM,OAAO,gBAAgB,gBAAgB,SAAS;EACtD,MAAM,SAAS,MAAM;EACrB,MAAM,OAAO,KAAK,SAAS,KAAK,OAAO,MAAM;EAC7C,MAAM,MAAM,KAAK,MAAO,iBAAiB,YAAa,IAAK;EAC3D,MAAM,MAAM;EACZ,MAAM,WAAW,KAAK,OAAQ,cAAc,kBAAkB,YAAa,IAAK;AAChF,WAAS,KAAK;GAAE;GAAK;GAAK;GAAQ;GAAM;GAAU,CAAC;AACnD,oBAAkB,EAAE;;AAGtB,MAAK,IAAI,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;EACxC,MAAM,UAAU,SAAS;EACzB,MAAM,kBAAkB,gBAAgB,SAAS,IAAI,QAAQ,cAAc,iBAAiB;AAO5F,MAJE,gBAAgB,SAAS,KACzB,mBAAmB,2BACnB,QAAQ,aAEU;AAClB,gBAAa,QAAQ,YAAY;AACjC,oBAAiB,QAAQ;;AAG3B,MAAI,gBAAgB,WAAW,GAAG;AAChC,OAAI,CAAC,QAAQ,YAAa;AAC1B,oBAAiB,QAAQ;;AAG3B,kBAAgB,KAAK,QAAQ;;AAI/B,cAAa,gBAAgB;AAE7B,QAAO;;;;;;;;AAaT,eAAsB,yBACpB,cACA,mBAC6C;AAC7C,KAAI,qCAAqC,eAAe;CAKxD,MAAM,EAAE,UAAU,UAAU,qBAFV,mBADN,OAAA,GAAA,iBAAA,UAAe,aAAa,CACC;CAGzC,MAAM,YAAY;AAElB,KACE,UAAU,SAAS,OAAO,kBAAkB,SAAS,yBACjC,iBAAiB,IACtC;AAGD,OAAM,kBAAkB,UAAU,aAAa;AAG/C,KACE,sBAFuB,SAAS,QAAQ,MAAM,EAAE,YAAY,CAErB,KAAK,MAAM,GAAG,EAAE,YAAY,KAAK,EAAE,SAAS,CAAC,KAAK,KAAK,GAC/F;CAGD,MAAM,cAAc,SAAS,SAAS,SAAS;CAG/C,IAAI,kBAFoB,YAAY,cAAc,YAAY,OAAO;AAGrE,KAAI;EACF,MAAM,QAAQ,MAAMA,cAAAA,YAAY,UAAU,aAAa;EACvD,MAAM,cAAe,MAAc,MAAM,SAAS,MAAM,MAAW,EAAE,eAAe,QAAQ;AAC5F,MAAI,aAAa,SACf,mBAAkB,KAAK,MAAM,WAAW,YAAY,SAAS,GAAG,IAAK;OAChE;GAIL,MAAM,eACH,MAAc,SAQd,QAAQ,MAAM,EAAE,iBAAiB,EAAE;AACtC,OAAI,gBAAgB,aAAa,SAAS,GAAG;IAC3C,MAAM,UAAU,aAAa,aAAa,SAAS;IACnD,MAAM,QAAQ,KAAK,MAAM,WAAW,OAAO,QAAQ,YAAY,EAAE,CAAC,GAAG,IAAK;IAC1E,MAAM,QAAQ,KAAK,MAAM,WAAW,OAAO,QAAQ,iBAAiB,EAAE,CAAC,GAAG,IAAK;AAC/E,QAAI,QAAQ,QAAQ,EAClB,mBAAkB,QAAQ;;;SAI1B;AAIR,KAAI,mBAAmB,gBAAgB,IAAI;CAE3C,MAAM,WAAW,cAAc,UAAU,WAAW,gBAAgB;AAEpE,KACE,SAAS,SAAS,OAAO,aAAa,SAAS,KAAK,MAAM,IAAM,EAAE,MAAM,YAAa,MAAQ,EAAE,YAAY,EAAE,OAAO,QAAQ,EAAE,KAAK,GAAG,CAAC,KAAK,KAAK,GAClJ;CAGD,MAAM,SAAS,MAAMA,cAAAA,YAAY,UAAU,aAAa;CACxD,MAAM,cAAe,OAAe,MAAM,SAAS,MAAM,MAAW,EAAE,eAAe,QAAQ;CAC7F,MAAM,QAAgB,aAAa,SAAS;CAC5C,MAAM,SAAiB,aAAa,UAAU;CAC9C,MAAM,QAAgB,aAAa,oBAAoB,aAAa,cAAc;CAClF,MAAM,cACH,OAAe,SAAS,QAAQ,MAAW,EAAE,eAAe,QAAQ,CAAC,UAAU;CAElF,IAAI;AACJ,KAAI,sBAAsB,KAAA,EACxB,0BAAyB;UAChB,SAAS,MAAM,SAAS,GAAG,cAAc,EAClD,0BAAyB,SAAS,GAAG;CAGvC,MAAM,aAAiC;EACrC,OAAO;EACP,MAAM;EACN;EACA;EACA;EACA;EACA,SAAS;EACT,UAAU,KAAK,MAAO,kBAAkB,YAAa,IAAK;EAC1D,cAAc;EACd,mBAAmB;EACnB,aAAa;GAAE,QAAQ;GAAG,MAAM;GAAU;EAC1C;EACD;AAED,QAAO,EAAE,GAAG,YAAY;;AAO1B,MAAM,cAAc;AACpB,MAAM,YAAY;AAClB,MAAM,iBAAiB;AACvB,MAAM,WAAW;AACjB,MAAM,YAAY;AAClB,MAAM,eAAe;;;;;;AAOrB,SAAS,iBAAiB,YAA8B;CAGtD,MAAM,KAAK,aAAa;AACxB,KAAI,MAAM,KAAK,MAAM,IAAK,QAAO,CAAC,cAAc,MAAO,GAAG;CAC1D,MAAM,KAAK,aAAa;AACxB,KAAI,MAAM,KAAK,MAAM,MAAO,QAAO;EAAC;EAAc,KAAQ,MAAM;EAAI,KAAK;EAAK;CAC9E,MAAM,KAAK,aAAa;AACxB,QAAO;EAAC;EAAc,KAAQ,MAAM;EAAM,MAAM,IAAK;EAAM,KAAK;EAAK;;;;;;;;;;;;;AAcvE,SAAS,mBAAmB,KAAa,aAAqB,WAAyB;CACrF,IAAI,MAAM;AACV,QAAO,MAAM,WAAW;EACtB,MAAM,EAAE,IAAI,SAAS,OAAO,aAAa,cAAc,KAAK,IAAI;EAChE,MAAM,EAAE,OAAO,WAAW,OAAO,eAAe,aAAa,KAAK,MAAM,SAAS;AACjF,MAAI,cAAc,KAAM;EACxB,MAAM,oBAAoB,MAAM,WAAW;EAC3C,MAAM,WAAW,oBAAoB;AAErC,MAAI,YAAY,gBAAgB;GAE9B,IAAI,QAAQ;AACZ,UAAO,QAAQ,UAAU;IACvB,MAAM,EAAE,IAAI,MAAM,OAAO,UAAU,cAAc,KAAK,MAAM;IAC5D,MAAM,EAAE,OAAO,QAAQ,OAAO,YAAY,aAAa,KAAK,QAAQ,MAAM;AAC1E,QAAI,WAAW,KAAM;IACrB,MAAM,iBAAiB,QAAQ,QAAQ;IACvC,MAAM,QAAQ,iBAAiB;AAE/B,QAAI,SAAS,UAAU;KAErB,IAAI,OAAO;AACX,YAAO,OAAO,OAAO;MACnB,MAAM,EAAE,IAAI,KAAK,OAAO,SAAS,cAAc,KAAK,KAAK;MACzD,MAAM,EAAE,OAAO,OAAO,OAAO,WAAW,aAAa,KAAK,OAAO,KAAK;AACtE,UAAI,UAAU,KAAM;MACpB,MAAM,mBAAmB,OAAO,SAAS;AAEzC,UAAI,QAAQ,WAAW;OAErB,MAAM,SAAS,iBAAiB,iBAAiB;AACjD,YAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,IAAK,KAAI,OAAO,KAAK,OAAO;AAC/D,WAAI,KAAK,GAAG,OAAO,OAAO,QAAQ,OAAO,iBAAiB;AAC1D;;AAEF,cAAQ;;;AAGZ,YAAQ,iBAAiB;;;AAG7B,QAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;AAqB9B,SAAgB,6BAA6B,KAAmB;AAC9D,KAAI;EAEF,MAAM,EAAE,IAAI,QAAQ,OAAO,gBAAgB,cAAc,KAAK,EAAE;AAChE,MAAI,WAAW,QAAS;EACxB,MAAM,EAAE,OAAO,UAAU,OAAO,kBAAkB,aAAa,KAAK,YAAY;AAChF,MAAI,aAAa,KAAM;EACvB,MAAM,SAAS,cAAc,gBAAgB;EAC7C,MAAM,EAAE,IAAI,OAAO,OAAO,eAAe,cAAc,KAAK,OAAO;AACnE,MAAI,UAAU,WAAY;EAG1B,MAAM,gBAAgB,SAAS;EAC/B,MAAM,EAAE,OAAO,iBAAiB,aAAa,KAAK,cAAc;AAChE,MAAI,iBAAiB,EACE,QAAO,KAAK;GAAC;GAAM;GAAM;GAAM;GAAM;GAAM;GAAM;GAAM;GAAK,CAAC,CACrE,KAAK,KAAK,cAAc;EAKvC,IAAI,MADoB,SAAS,aAAa;EAK9C,MAAM,YAAY,KAAK,IAAI,MAAM,MAAM,IAAI,OAAO;AAClD,SAAO,MAAM,WAAW;GACtB,MAAM,EAAE,IAAI,SAAS,OAAO,iBAAiB,cAAc,KAAK,IAAI;GACpE,MAAM,EAAE,OAAO,WAAW,OAAO,mBAAmB,aAAa,KAAK,MAAM,aAAa;AACzF,OAAI,cAAc,KAAM;GACxB,MAAM,mBAAmB,eAAe,iBAAiB;AAEzD,OAAI,YAAY,aAAa;IAE3B,MAAM,SAAS,iBAAiB,iBAAiB;AACjD,SAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,IAAK,KAAI,MAAM,KAAK,OAAO;AAC9D,QAAI,KAAK,GAAG,MAAM,OAAO,QAAQ,MAAM,iBAAiB;cAE/C,YAAY,WAAW;IAChC,MAAM,cAAc,MAAM,eAAe;AACzC,uBAAmB,KAAK,aAAa,cAAc,UAAU;AAE7D;;AAGF,UAAO;;SAEH"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { PacketProbe } from "./Probe.js";
|
|
2
|
-
import debug from "debug";
|
|
3
2
|
import { readFile } from "node:fs/promises";
|
|
3
|
+
import debug from "debug";
|
|
4
4
|
//#region src/generateWebmSegmentIndex.ts
|
|
5
5
|
/**
|
|
6
6
|
* WebM / Matroska segment index generator.
|
|
@@ -181,11 +181,9 @@ function parseWebmStructure(buf) {
|
|
|
181
181
|
* More reliable than parsing SimpleBlock flags in-process for large files.
|
|
182
182
|
*/
|
|
183
183
|
async function annotateKeyframes(clusters, absolutePath) {
|
|
184
|
-
const
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
cluster.hasKeyframe = keyframePositions.some((pos) => pos >= cluster.offset && pos < clusterEnd);
|
|
188
|
-
}
|
|
184
|
+
const probe = await PacketProbe.probePath(absolutePath);
|
|
185
|
+
const keyframeTimesMs = new Set(probe.packets.filter((p) => p.flags?.includes("K") && p.pts_time !== void 0).map((p) => Math.round(parseFloat(String(p.pts_time)) * 1e3)));
|
|
186
|
+
for (const cluster of clusters) cluster.hasKeyframe = keyframeTimesMs.has(cluster.timestampMs);
|
|
189
187
|
}
|
|
190
188
|
function buildSegments(clusters, timescale, totalDurationMs) {
|
|
191
189
|
const segments = [];
|
|
@@ -249,7 +247,7 @@ async function generateWebmSegmentIndex(absolutePath, startTimeOffsetMs) {
|
|
|
249
247
|
if (videoPackets && videoPackets.length > 0) {
|
|
250
248
|
const lastPkt = videoPackets[videoPackets.length - 1];
|
|
251
249
|
const ptsMs = Math.round(parseFloat(String(lastPkt.pts_time ?? 0)) * 1e3);
|
|
252
|
-
const durMs = Math.round(parseFloat(String(lastPkt.
|
|
250
|
+
const durMs = Math.round(parseFloat(String(lastPkt.duration_time ?? 0)) * 1e3);
|
|
253
251
|
if (ptsMs + durMs > 0) finalDurationMs = ptsMs + durMs;
|
|
254
252
|
}
|
|
255
253
|
}
|
|
@@ -286,8 +284,83 @@ async function generateWebmSegmentIndex(absolutePath, startTimeOffsetMs) {
|
|
|
286
284
|
return { 1: trackIndex };
|
|
287
285
|
}
|
|
288
286
|
const ID_SEEKHEAD = 290298740;
|
|
287
|
+
const ID_TRACKS = 374648427;
|
|
288
|
+
const ID_TRACK_ENTRY = 174;
|
|
289
|
+
const ID_VIDEO = 224;
|
|
290
|
+
const ID_COLOUR = 21936;
|
|
289
291
|
const EBML_VOID_ID = 236;
|
|
290
292
|
/**
|
|
293
|
+
* Encode a Void element header (id + size VINT) such that the entire
|
|
294
|
+
* element occupies exactly `totalBytes` bytes. Returns the [id, ...vintBytes]
|
|
295
|
+
* prefix; the caller fills the remaining `totalBytes - prefix.length` with zeros.
|
|
296
|
+
*/
|
|
297
|
+
function encodeVoidHeader(totalBytes) {
|
|
298
|
+
const c1 = totalBytes - 2;
|
|
299
|
+
if (c1 >= 0 && c1 <= 126) return [EBML_VOID_ID, 128 | c1];
|
|
300
|
+
const c2 = totalBytes - 3;
|
|
301
|
+
if (c2 >= 0 && c2 <= 16382) return [
|
|
302
|
+
EBML_VOID_ID,
|
|
303
|
+
64 | c2 >> 8,
|
|
304
|
+
c2 & 255
|
|
305
|
+
];
|
|
306
|
+
const c3 = totalBytes - 4;
|
|
307
|
+
return [
|
|
308
|
+
EBML_VOID_ID,
|
|
309
|
+
32 | c3 >> 16,
|
|
310
|
+
c3 >> 8 & 255,
|
|
311
|
+
c3 & 255
|
|
312
|
+
];
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Replace the Colour element inside the video TrackEntry with an EBML Void
|
|
316
|
+
* of identical byte length. We do this because ffmpeg's matroska muxer always
|
|
317
|
+
* emits a Colour element with `MatrixCoefficients=bt470bg, Range=full` derived
|
|
318
|
+
* from `format=yuva420p` filter output, but the actual VP9 bitstream encodes
|
|
319
|
+
* `color_space=BT.601` — the mismatch causes Chrome's WebCodecs VideoDecoder
|
|
320
|
+
* to silently drop every delta frame after the keyframe (issue surfaces as
|
|
321
|
+
* "only 1 sample emitted from a 49-frame segment"). With no Colour element
|
|
322
|
+
* mediabunny passes `colorSpace: undefined` to the decoder and Chrome decodes
|
|
323
|
+
* normally.
|
|
324
|
+
*/
|
|
325
|
+
function stripColourElement(buf, tracksStart, tracksEnd) {
|
|
326
|
+
let pos = tracksStart;
|
|
327
|
+
while (pos < tracksEnd) {
|
|
328
|
+
const { id: childId, width: childIdW } = readElementId(buf, pos);
|
|
329
|
+
const { value: childSize, width: childSizeW } = readVintSize(buf, pos + childIdW);
|
|
330
|
+
if (childSize === null) return;
|
|
331
|
+
const childContentStart = pos + childIdW + childSizeW;
|
|
332
|
+
const childEnd = childContentStart + childSize;
|
|
333
|
+
if (childId === ID_TRACK_ENTRY) {
|
|
334
|
+
let tepos = childContentStart;
|
|
335
|
+
while (tepos < childEnd) {
|
|
336
|
+
const { id: teid, width: teidW } = readElementId(buf, tepos);
|
|
337
|
+
const { value: tesize, width: tesizeW } = readVintSize(buf, tepos + teidW);
|
|
338
|
+
if (tesize === null) break;
|
|
339
|
+
const teContentStart = tepos + teidW + tesizeW;
|
|
340
|
+
const teEnd = teContentStart + tesize;
|
|
341
|
+
if (teid === ID_VIDEO) {
|
|
342
|
+
let vpos = teContentStart;
|
|
343
|
+
while (vpos < teEnd) {
|
|
344
|
+
const { id: vid, width: vidW } = readElementId(buf, vpos);
|
|
345
|
+
const { value: vsize, width: vsizeW } = readVintSize(buf, vpos + vidW);
|
|
346
|
+
if (vsize === null) break;
|
|
347
|
+
const totalElementSize = vidW + vsizeW + vsize;
|
|
348
|
+
if (vid === ID_COLOUR) {
|
|
349
|
+
const header = encodeVoidHeader(totalElementSize);
|
|
350
|
+
for (let i = 0; i < header.length; i++) buf[vpos + i] = header[i];
|
|
351
|
+
buf.fill(0, vpos + header.length, vpos + totalElementSize);
|
|
352
|
+
return;
|
|
353
|
+
}
|
|
354
|
+
vpos += totalElementSize;
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
tepos = teContentStart + tesize;
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
pos = childContentStart + childSize;
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
/**
|
|
291
364
|
* Patch a WebM buffer in-place to make it safe for partial (segment-sliced) serving:
|
|
292
365
|
*
|
|
293
366
|
* 1. Segment-element size VINT → EBML unknown-size (0x01FFFFFFFFFFFFFF).
|
|
@@ -299,7 +372,10 @@ const EBML_VOID_ID = 236;
|
|
|
299
372
|
* falls off the end of the buffer, causing seek errors and de-sync. Replacing
|
|
300
373
|
* it with a Void element forces linear parsing: EBML → Info → Tracks → Clusters.
|
|
301
374
|
*
|
|
302
|
-
*
|
|
375
|
+
* 3. Colour element inside Video TrackEntry → EBML Void of the same byte length.
|
|
376
|
+
* See stripColourElement() for rationale.
|
|
377
|
+
*
|
|
378
|
+
* All patches are applied to a Buffer copy; the source file on disk is not modified.
|
|
303
379
|
*/
|
|
304
380
|
function patchWebmForSegmentedServing(buf) {
|
|
305
381
|
try {
|
|
@@ -330,18 +406,12 @@ function patchWebmForSegmentedServing(buf) {
|
|
|
330
406
|
if (childSize === null) break;
|
|
331
407
|
const totalElementSize = childIdWidth + childSizeWidth + childSize;
|
|
332
408
|
if (childId === ID_SEEKHEAD) {
|
|
333
|
-
const
|
|
334
|
-
let
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
voidContentSize >> 8 & 255,
|
|
340
|
-
voidContentSize & 255
|
|
341
|
-
];
|
|
342
|
-
buf[pos] = EBML_VOID_ID;
|
|
343
|
-
for (let i = 0; i < vintBytes.length; i++) buf[pos + 1 + i] = vintBytes[i];
|
|
344
|
-
buf.fill(0, pos + 1 + vintBytes.length, pos + totalElementSize);
|
|
409
|
+
const header = encodeVoidHeader(totalElementSize);
|
|
410
|
+
for (let i = 0; i < header.length; i++) buf[pos + i] = header[i];
|
|
411
|
+
buf.fill(0, pos + header.length, pos + totalElementSize);
|
|
412
|
+
} else if (childId === ID_TRACKS) {
|
|
413
|
+
const tracksStart = pos + childIdWidth + childSizeWidth;
|
|
414
|
+
stripColourElement(buf, tracksStart, tracksStart + childSize);
|
|
345
415
|
break;
|
|
346
416
|
}
|
|
347
417
|
pos += totalElementSize;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateWebmSegmentIndex.js","names":[],"sources":["../src/generateWebmSegmentIndex.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,MAAM,MAAM,MAAM,8BAA8B;AAEhD,MAAM,0BAA0B;AAKhC,MAAM,UAAU;AAChB,MAAM,aAAa;AACnB,MAAM,UAAU;AAChB,MAAM,aAAa;AACnB,MAAM,eAAe;AACrB,MAAM,kBAAkB;AACxB,MAAM,iBAAiB;AACvB,MAAM,qBAAqB;AAC3B,MAAM,qBAAqB;;;;;;;AAY3B,SAAS,aAAa,KAAa,QAAyD;CAC1F,MAAM,IAAI,IAAI;CACd,IAAI,QAAQ;CACZ,IAAI,OAAO;AACX,QAAO,SAAS,KAAK,EAAE,IAAI,OAAO;AAChC,WAAS;AACT;;CAEF,IAAI,QAAQ,IAAK,OAAO;AACxB,MAAK,IAAI,IAAI,GAAG,IAAI,OAAO,IACzB,SAAS,SAAS,KAAM,IAAI,SAAS,MAAM;CAG7C,MAAM,mBAAmB,KAAM,IAAI,SAAU;AAC7C,QAAO;EAAE,OAAO,UAAU,kBAAkB,OAAO;EAAO;EAAO;;;;;;AAOnE,SAAS,cAAc,KAAa,QAA+C;CACjF,MAAM,IAAI,IAAI;CACd,IAAI,QAAQ;CACZ,IAAI,OAAO;AACX,QAAO,SAAS,KAAK,EAAE,IAAI,OAAO;AAChC,WAAS;AACT;;CAEF,IAAI,KAAK;AACT,MAAK,IAAI,IAAI,GAAG,IAAI,OAAO,IACzB,MAAM,MAAM,KAAM,IAAI,SAAS,MAAM;AAEvC,QAAO;EAAE;EAAI;EAAO;;;AAItB,SAAS,WAAW,KAAa,QAAgB,MAAsB;CACrE,IAAI,MAAM;AACV,MAAK,IAAI,IAAI,GAAG,IAAI,MAAM,IACxB,OAAO,MAAM,OAAO,IAAI,SAAS,MAAM,OAAQ;AAEjD,QAAO;;;;;;AAsCT,SAAS,mBAAmB,KAA4B;CACtD,IAAI,MAAM;CAGV,MAAM,EAAE,IAAI,QAAQ,OAAO,gBAAgB,cAAc,KAAK,IAAI;AAClE,KAAI,WAAW,QACb,OAAM,IAAI,MAAM,6CAA6C,OAAO,SAAS,GAAG,GAAG;CAErF,MAAM,EAAE,OAAO,UAAU,OAAO,kBAAkB,aAAa,KAAK,MAAM,YAAY;AACtF,KAAI,aAAa,KAAM,OAAM,IAAI,MAAM,gCAAgC;AACvE,QAAO,cAAc,gBAAgB;CAGrC,MAAM,EAAE,IAAI,OAAO,OAAO,eAAe,cAAc,KAAK,IAAI;AAChE,KAAI,UAAU,WACZ,OAAM,IAAI,MAAM,gDAAgD,MAAM,SAAS,GAAG,GAAG;CAEvF,MAAM,wBAAwB,MAAM;CACpC,MAAM,EAAE,OAAO,iBAAiB,aAAa,KAAK,sBAAsB;CAIxE,IAAI,OAHoB,wBAAwB;CAIhD,IAAI,WAAW;CACf,IAAI,mBAAmB;CACvB,MAAM,WAA0B,EAAE;AAElC,QAAO,OAAO,IAAI,QAAQ;AACxB,MAAI,IAAI,SAAS,OAAO,EAAG;EAE3B,MAAM,EAAE,IAAI,SAAS,OAAO,iBAAiB,cAAc,KAAK,KAAK;EACrE,MAAM,EAAE,OAAO,WAAW,OAAO,mBAAmB,aAAa,KAAK,OAAO,aAAa;EAC1F,MAAM,aAAa,eAAe;AAElC,MAAI,cAAc,MAAM;AAEtB,OAAI,0BAA0B,QAAQ,SAAS,GAAG,CAAC,MAAM,KAAK,YAAY;AAC1E;;EAGF,MAAM,aAAa,OAAO,aAAa;AAEvC,MAAI,YAAY,SAAS;GAEvB,IAAI,OAAO,OAAO;AAClB,UAAO,OAAO,cAAc,OAAO,IAAI,QAAQ;IAC7C,MAAM,EAAE,IAAI,aAAa,OAAO,YAAY,cAAc,KAAK,KAAK;IACpE,MAAM,EAAE,OAAO,eAAe,OAAO,cAAc,aAAa,KAAK,OAAO,QAAQ;AACpF,QAAI,kBAAkB,KAAM;AAC5B,QAAI,gBAAgB,mBAClB,oBAAmB,WAAW,KAAK,OAAO,UAAU,WAAW,cAAc;AAE/E,YAAQ,UAAU,YAAY;;aAEvB,YAAY,YAAY;AACjC,OAAI,aAAa,EACf,YAAW;GAIb,IAAI,wBAAwB;GAC5B,IAAI,cAAc;GAClB,IAAI,OAAO,OAAO;AAElB,UAAO,OAAO,cAAc,OAAO,IAAI,QAAQ;AAC7C,QAAI,IAAI,SAAS,OAAO,EAAG;IAC3B,MAAM,EAAE,IAAI,KAAK,OAAO,SAAS,cAAc,KAAK,KAAK;IACzD,MAAM,EAAE,OAAO,OAAO,OAAO,WAAW,aAAa,KAAK,OAAO,KAAK;AACtE,QAAI,UAAU,KAAM;IACpB,MAAM,cAAc,OAAO;AAE3B,QAAI,QAAQ,aACV,yBAAwB,WAAW,KAAK,OAAO,aAAa,MAAM;aACzD,QAAQ,iBAAiB;KAElC,MAAM,WAAW,OAAO;KACxB,MAAM,EAAE,OAAO,kBAAkB,aAAa,KAAK,SAAS;AAE5D,UADkB,IAAI,WAAW,gBAAgB,MAAM,KACvC,IACd,eAAc;eAEP,QAAQ,gBAAgB;KAEjC,IAAI,QAAQ,OAAO;KACnB,MAAM,QAAQ,OAAO,cAAc;KACnC,IAAI,oBAAoB;AACxB,YAAO,QAAQ,SAAS,QAAQ,IAAI,QAAQ;MAC1C,MAAM,EAAE,IAAI,MAAM,OAAO,UAAU,cAAc,KAAK,MAAM;MAC5D,MAAM,EAAE,OAAO,QAAQ,OAAO,YAAY,aAAa,KAAK,QAAQ,MAAM;AAC1E,UAAI,WAAW,KAAM;AACrB,UAAI,SAAS,oBAAoB;AAC/B,2BAAoB;AACpB;;AAEF,eAAS,QAAQ,UAAU;;AAE7B,SAAI,CAAC,kBAAmB,eAAc;;AAGxC,YAAQ,cAAc;;GAGxB,MAAM,cAAc,KAAK,MAAO,wBAAwB,mBAAoB,IAAU;AACtF,YAAS,KAAK;IAAE,QAAQ;IAAM,MAAM,aAAa;IAAW;IAAa;IAAa,CAAC;;AAGzF,SAAO;;AAGT,KAAI,aAAa,EACf,OAAM,IAAI,MAAM,yCAAyC;AAG3D,QAAO;EACL;EACA,sBAAsB;EACtB;EACA;EACA;EACD;;;;;;AAWH,eAAe,kBAAkB,UAAyB,cAAqC;
|
|
1
|
+
{"version":3,"file":"generateWebmSegmentIndex.js","names":[],"sources":["../src/generateWebmSegmentIndex.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,MAAM,MAAM,MAAM,8BAA8B;AAEhD,MAAM,0BAA0B;AAKhC,MAAM,UAAU;AAChB,MAAM,aAAa;AACnB,MAAM,UAAU;AAChB,MAAM,aAAa;AACnB,MAAM,eAAe;AACrB,MAAM,kBAAkB;AACxB,MAAM,iBAAiB;AACvB,MAAM,qBAAqB;AAC3B,MAAM,qBAAqB;;;;;;;AAY3B,SAAS,aAAa,KAAa,QAAyD;CAC1F,MAAM,IAAI,IAAI;CACd,IAAI,QAAQ;CACZ,IAAI,OAAO;AACX,QAAO,SAAS,KAAK,EAAE,IAAI,OAAO;AAChC,WAAS;AACT;;CAEF,IAAI,QAAQ,IAAK,OAAO;AACxB,MAAK,IAAI,IAAI,GAAG,IAAI,OAAO,IACzB,SAAS,SAAS,KAAM,IAAI,SAAS,MAAM;CAG7C,MAAM,mBAAmB,KAAM,IAAI,SAAU;AAC7C,QAAO;EAAE,OAAO,UAAU,kBAAkB,OAAO;EAAO;EAAO;;;;;;AAOnE,SAAS,cAAc,KAAa,QAA+C;CACjF,MAAM,IAAI,IAAI;CACd,IAAI,QAAQ;CACZ,IAAI,OAAO;AACX,QAAO,SAAS,KAAK,EAAE,IAAI,OAAO;AAChC,WAAS;AACT;;CAEF,IAAI,KAAK;AACT,MAAK,IAAI,IAAI,GAAG,IAAI,OAAO,IACzB,MAAM,MAAM,KAAM,IAAI,SAAS,MAAM;AAEvC,QAAO;EAAE;EAAI;EAAO;;;AAItB,SAAS,WAAW,KAAa,QAAgB,MAAsB;CACrE,IAAI,MAAM;AACV,MAAK,IAAI,IAAI,GAAG,IAAI,MAAM,IACxB,OAAO,MAAM,OAAO,IAAI,SAAS,MAAM,OAAQ;AAEjD,QAAO;;;;;;AAsCT,SAAS,mBAAmB,KAA4B;CACtD,IAAI,MAAM;CAGV,MAAM,EAAE,IAAI,QAAQ,OAAO,gBAAgB,cAAc,KAAK,IAAI;AAClE,KAAI,WAAW,QACb,OAAM,IAAI,MAAM,6CAA6C,OAAO,SAAS,GAAG,GAAG;CAErF,MAAM,EAAE,OAAO,UAAU,OAAO,kBAAkB,aAAa,KAAK,MAAM,YAAY;AACtF,KAAI,aAAa,KAAM,OAAM,IAAI,MAAM,gCAAgC;AACvE,QAAO,cAAc,gBAAgB;CAGrC,MAAM,EAAE,IAAI,OAAO,OAAO,eAAe,cAAc,KAAK,IAAI;AAChE,KAAI,UAAU,WACZ,OAAM,IAAI,MAAM,gDAAgD,MAAM,SAAS,GAAG,GAAG;CAEvF,MAAM,wBAAwB,MAAM;CACpC,MAAM,EAAE,OAAO,iBAAiB,aAAa,KAAK,sBAAsB;CAIxE,IAAI,OAHoB,wBAAwB;CAIhD,IAAI,WAAW;CACf,IAAI,mBAAmB;CACvB,MAAM,WAA0B,EAAE;AAElC,QAAO,OAAO,IAAI,QAAQ;AACxB,MAAI,IAAI,SAAS,OAAO,EAAG;EAE3B,MAAM,EAAE,IAAI,SAAS,OAAO,iBAAiB,cAAc,KAAK,KAAK;EACrE,MAAM,EAAE,OAAO,WAAW,OAAO,mBAAmB,aAAa,KAAK,OAAO,aAAa;EAC1F,MAAM,aAAa,eAAe;AAElC,MAAI,cAAc,MAAM;AAEtB,OAAI,0BAA0B,QAAQ,SAAS,GAAG,CAAC,MAAM,KAAK,YAAY;AAC1E;;EAGF,MAAM,aAAa,OAAO,aAAa;AAEvC,MAAI,YAAY,SAAS;GAEvB,IAAI,OAAO,OAAO;AAClB,UAAO,OAAO,cAAc,OAAO,IAAI,QAAQ;IAC7C,MAAM,EAAE,IAAI,aAAa,OAAO,YAAY,cAAc,KAAK,KAAK;IACpE,MAAM,EAAE,OAAO,eAAe,OAAO,cAAc,aAAa,KAAK,OAAO,QAAQ;AACpF,QAAI,kBAAkB,KAAM;AAC5B,QAAI,gBAAgB,mBAClB,oBAAmB,WAAW,KAAK,OAAO,UAAU,WAAW,cAAc;AAE/E,YAAQ,UAAU,YAAY;;aAEvB,YAAY,YAAY;AACjC,OAAI,aAAa,EACf,YAAW;GAIb,IAAI,wBAAwB;GAC5B,IAAI,cAAc;GAClB,IAAI,OAAO,OAAO;AAElB,UAAO,OAAO,cAAc,OAAO,IAAI,QAAQ;AAC7C,QAAI,IAAI,SAAS,OAAO,EAAG;IAC3B,MAAM,EAAE,IAAI,KAAK,OAAO,SAAS,cAAc,KAAK,KAAK;IACzD,MAAM,EAAE,OAAO,OAAO,OAAO,WAAW,aAAa,KAAK,OAAO,KAAK;AACtE,QAAI,UAAU,KAAM;IACpB,MAAM,cAAc,OAAO;AAE3B,QAAI,QAAQ,aACV,yBAAwB,WAAW,KAAK,OAAO,aAAa,MAAM;aACzD,QAAQ,iBAAiB;KAElC,MAAM,WAAW,OAAO;KACxB,MAAM,EAAE,OAAO,kBAAkB,aAAa,KAAK,SAAS;AAE5D,UADkB,IAAI,WAAW,gBAAgB,MAAM,KACvC,IACd,eAAc;eAEP,QAAQ,gBAAgB;KAEjC,IAAI,QAAQ,OAAO;KACnB,MAAM,QAAQ,OAAO,cAAc;KACnC,IAAI,oBAAoB;AACxB,YAAO,QAAQ,SAAS,QAAQ,IAAI,QAAQ;MAC1C,MAAM,EAAE,IAAI,MAAM,OAAO,UAAU,cAAc,KAAK,MAAM;MAC5D,MAAM,EAAE,OAAO,QAAQ,OAAO,YAAY,aAAa,KAAK,QAAQ,MAAM;AAC1E,UAAI,WAAW,KAAM;AACrB,UAAI,SAAS,oBAAoB;AAC/B,2BAAoB;AACpB;;AAEF,eAAS,QAAQ,UAAU;;AAE7B,SAAI,CAAC,kBAAmB,eAAc;;AAGxC,YAAQ,cAAc;;GAGxB,MAAM,cAAc,KAAK,MAAO,wBAAwB,mBAAoB,IAAU;AACtF,YAAS,KAAK;IAAE,QAAQ;IAAM,MAAM,aAAa;IAAW;IAAa;IAAa,CAAC;;AAGzF,SAAO;;AAGT,KAAI,aAAa,EACf,OAAM,IAAI,MAAM,yCAAyC;AAG3D,QAAO;EACL;EACA,sBAAsB;EACtB;EACA;EACA;EACD;;;;;;AAWH,eAAe,kBAAkB,UAAyB,cAAqC;CAC7F,MAAM,QAAQ,MAAM,YAAY,UAAU,aAAa;CAOvD,MAAM,kBAAkB,IAAI,IACzB,MAAM,QACJ,QAAQ,MAAM,EAAE,OAAO,SAAS,IAAI,IAAI,EAAE,aAAa,KAAA,EAAU,CACjE,KAAK,MAAM,KAAK,MAAM,WAAW,OAAO,EAAE,SAAS,CAAC,GAAG,IAAK,CAAC,CACjE;AAED,MAAK,MAAM,WAAW,SACpB,SAAQ,cAAc,gBAAgB,IAAI,QAAQ,YAAY;;AAQlE,SAAS,cACP,UACA,WACA,iBACgB;CAChB,MAAM,WAA2B,EAAE;CAEnC,IAAI,kBAAiC,EAAE;CACvC,IAAI,iBAAiB;CAErB,MAAM,gBAAgB,gBAAwB;AAC5C,MAAI,gBAAgB,WAAW,EAAG;EAClC,MAAM,QAAQ,gBAAgB;EAC9B,MAAM,OAAO,gBAAgB,gBAAgB,SAAS;EACtD,MAAM,SAAS,MAAM;EACrB,MAAM,OAAO,KAAK,SAAS,KAAK,OAAO,MAAM;EAC7C,MAAM,MAAM,KAAK,MAAO,iBAAiB,YAAa,IAAK;EAC3D,MAAM,MAAM;EACZ,MAAM,WAAW,KAAK,OAAQ,cAAc,kBAAkB,YAAa,IAAK;AAChF,WAAS,KAAK;GAAE;GAAK;GAAK;GAAQ;GAAM;GAAU,CAAC;AACnD,oBAAkB,EAAE;;AAGtB,MAAK,IAAI,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;EACxC,MAAM,UAAU,SAAS;EACzB,MAAM,kBAAkB,gBAAgB,SAAS,IAAI,QAAQ,cAAc,iBAAiB;AAO5F,MAJE,gBAAgB,SAAS,KACzB,mBAAmB,2BACnB,QAAQ,aAEU;AAClB,gBAAa,QAAQ,YAAY;AACjC,oBAAiB,QAAQ;;AAG3B,MAAI,gBAAgB,WAAW,GAAG;AAChC,OAAI,CAAC,QAAQ,YAAa;AAC1B,oBAAiB,QAAQ;;AAG3B,kBAAgB,KAAK,QAAQ;;AAI/B,cAAa,gBAAgB;AAE7B,QAAO;;;;;;;;AAaT,eAAsB,yBACpB,cACA,mBAC6C;AAC7C,KAAI,qCAAqC,eAAe;CAKxD,MAAM,EAAE,UAAU,UAAU,qBAFV,mBADN,MAAM,SAAS,aAAa,CACC;CAGzC,MAAM,YAAY;AAElB,KACE,UAAU,SAAS,OAAO,kBAAkB,SAAS,yBACjC,iBAAiB,IACtC;AAGD,OAAM,kBAAkB,UAAU,aAAa;AAG/C,KACE,sBAFuB,SAAS,QAAQ,MAAM,EAAE,YAAY,CAErB,KAAK,MAAM,GAAG,EAAE,YAAY,KAAK,EAAE,SAAS,CAAC,KAAK,KAAK,GAC/F;CAGD,MAAM,cAAc,SAAS,SAAS,SAAS;CAG/C,IAAI,kBAFoB,YAAY,cAAc,YAAY,OAAO;AAGrE,KAAI;EACF,MAAM,QAAQ,MAAM,YAAY,UAAU,aAAa;EACvD,MAAM,cAAe,MAAc,MAAM,SAAS,MAAM,MAAW,EAAE,eAAe,QAAQ;AAC5F,MAAI,aAAa,SACf,mBAAkB,KAAK,MAAM,WAAW,YAAY,SAAS,GAAG,IAAK;OAChE;GAIL,MAAM,eACH,MAAc,SAQd,QAAQ,MAAM,EAAE,iBAAiB,EAAE;AACtC,OAAI,gBAAgB,aAAa,SAAS,GAAG;IAC3C,MAAM,UAAU,aAAa,aAAa,SAAS;IACnD,MAAM,QAAQ,KAAK,MAAM,WAAW,OAAO,QAAQ,YAAY,EAAE,CAAC,GAAG,IAAK;IAC1E,MAAM,QAAQ,KAAK,MAAM,WAAW,OAAO,QAAQ,iBAAiB,EAAE,CAAC,GAAG,IAAK;AAC/E,QAAI,QAAQ,QAAQ,EAClB,mBAAkB,QAAQ;;;SAI1B;AAIR,KAAI,mBAAmB,gBAAgB,IAAI;CAE3C,MAAM,WAAW,cAAc,UAAU,WAAW,gBAAgB;AAEpE,KACE,SAAS,SAAS,OAAO,aAAa,SAAS,KAAK,MAAM,IAAM,EAAE,MAAM,YAAa,MAAQ,EAAE,YAAY,EAAE,OAAO,QAAQ,EAAE,KAAK,GAAG,CAAC,KAAK,KAAK,GAClJ;CAGD,MAAM,SAAS,MAAM,YAAY,UAAU,aAAa;CACxD,MAAM,cAAe,OAAe,MAAM,SAAS,MAAM,MAAW,EAAE,eAAe,QAAQ;CAC7F,MAAM,QAAgB,aAAa,SAAS;CAC5C,MAAM,SAAiB,aAAa,UAAU;CAC9C,MAAM,QAAgB,aAAa,oBAAoB,aAAa,cAAc;CAClF,MAAM,cACH,OAAe,SAAS,QAAQ,MAAW,EAAE,eAAe,QAAQ,CAAC,UAAU;CAElF,IAAI;AACJ,KAAI,sBAAsB,KAAA,EACxB,0BAAyB;UAChB,SAAS,MAAM,SAAS,GAAG,cAAc,EAClD,0BAAyB,SAAS,GAAG;CAGvC,MAAM,aAAiC;EACrC,OAAO;EACP,MAAM;EACN;EACA;EACA;EACA;EACA,SAAS;EACT,UAAU,KAAK,MAAO,kBAAkB,YAAa,IAAK;EAC1D,cAAc;EACd,mBAAmB;EACnB,aAAa;GAAE,QAAQ;GAAG,MAAM;GAAU;EAC1C;EACD;AAED,QAAO,EAAE,GAAG,YAAY;;AAO1B,MAAM,cAAc;AACpB,MAAM,YAAY;AAClB,MAAM,iBAAiB;AACvB,MAAM,WAAW;AACjB,MAAM,YAAY;AAClB,MAAM,eAAe;;;;;;AAOrB,SAAS,iBAAiB,YAA8B;CAGtD,MAAM,KAAK,aAAa;AACxB,KAAI,MAAM,KAAK,MAAM,IAAK,QAAO,CAAC,cAAc,MAAO,GAAG;CAC1D,MAAM,KAAK,aAAa;AACxB,KAAI,MAAM,KAAK,MAAM,MAAO,QAAO;EAAC;EAAc,KAAQ,MAAM;EAAI,KAAK;EAAK;CAC9E,MAAM,KAAK,aAAa;AACxB,QAAO;EAAC;EAAc,KAAQ,MAAM;EAAM,MAAM,IAAK;EAAM,KAAK;EAAK;;;;;;;;;;;;;AAcvE,SAAS,mBAAmB,KAAa,aAAqB,WAAyB;CACrF,IAAI,MAAM;AACV,QAAO,MAAM,WAAW;EACtB,MAAM,EAAE,IAAI,SAAS,OAAO,aAAa,cAAc,KAAK,IAAI;EAChE,MAAM,EAAE,OAAO,WAAW,OAAO,eAAe,aAAa,KAAK,MAAM,SAAS;AACjF,MAAI,cAAc,KAAM;EACxB,MAAM,oBAAoB,MAAM,WAAW;EAC3C,MAAM,WAAW,oBAAoB;AAErC,MAAI,YAAY,gBAAgB;GAE9B,IAAI,QAAQ;AACZ,UAAO,QAAQ,UAAU;IACvB,MAAM,EAAE,IAAI,MAAM,OAAO,UAAU,cAAc,KAAK,MAAM;IAC5D,MAAM,EAAE,OAAO,QAAQ,OAAO,YAAY,aAAa,KAAK,QAAQ,MAAM;AAC1E,QAAI,WAAW,KAAM;IACrB,MAAM,iBAAiB,QAAQ,QAAQ;IACvC,MAAM,QAAQ,iBAAiB;AAE/B,QAAI,SAAS,UAAU;KAErB,IAAI,OAAO;AACX,YAAO,OAAO,OAAO;MACnB,MAAM,EAAE,IAAI,KAAK,OAAO,SAAS,cAAc,KAAK,KAAK;MACzD,MAAM,EAAE,OAAO,OAAO,OAAO,WAAW,aAAa,KAAK,OAAO,KAAK;AACtE,UAAI,UAAU,KAAM;MACpB,MAAM,mBAAmB,OAAO,SAAS;AAEzC,UAAI,QAAQ,WAAW;OAErB,MAAM,SAAS,iBAAiB,iBAAiB;AACjD,YAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,IAAK,KAAI,OAAO,KAAK,OAAO;AAC/D,WAAI,KAAK,GAAG,OAAO,OAAO,QAAQ,OAAO,iBAAiB;AAC1D;;AAEF,cAAQ;;;AAGZ,YAAQ,iBAAiB;;;AAG7B,QAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;AAqB9B,SAAgB,6BAA6B,KAAmB;AAC9D,KAAI;EAEF,MAAM,EAAE,IAAI,QAAQ,OAAO,gBAAgB,cAAc,KAAK,EAAE;AAChE,MAAI,WAAW,QAAS;EACxB,MAAM,EAAE,OAAO,UAAU,OAAO,kBAAkB,aAAa,KAAK,YAAY;AAChF,MAAI,aAAa,KAAM;EACvB,MAAM,SAAS,cAAc,gBAAgB;EAC7C,MAAM,EAAE,IAAI,OAAO,OAAO,eAAe,cAAc,KAAK,OAAO;AACnE,MAAI,UAAU,WAAY;EAG1B,MAAM,gBAAgB,SAAS;EAC/B,MAAM,EAAE,OAAO,iBAAiB,aAAa,KAAK,cAAc;AAChE,MAAI,iBAAiB,EACE,QAAO,KAAK;GAAC;GAAM;GAAM;GAAM;GAAM;GAAM;GAAM;GAAM;GAAK,CAAC,CACrE,KAAK,KAAK,cAAc;EAKvC,IAAI,MADoB,SAAS,aAAa;EAK9C,MAAM,YAAY,KAAK,IAAI,MAAM,MAAM,IAAI,OAAO;AAClD,SAAO,MAAM,WAAW;GACtB,MAAM,EAAE,IAAI,SAAS,OAAO,iBAAiB,cAAc,KAAK,IAAI;GACpE,MAAM,EAAE,OAAO,WAAW,OAAO,mBAAmB,aAAa,KAAK,MAAM,aAAa;AACzF,OAAI,cAAc,KAAM;GACxB,MAAM,mBAAmB,eAAe,iBAAiB;AAEzD,OAAI,YAAY,aAAa;IAE3B,MAAM,SAAS,iBAAiB,iBAAiB;AACjD,SAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,IAAK,KAAI,MAAM,KAAK,OAAO;AAC9D,QAAI,KAAK,GAAG,MAAM,OAAO,QAAQ,MAAM,iBAAiB;cAE/C,YAAY,WAAW;IAChC,MAAM,cAAc,MAAM,eAAe;AACzC,uBAAmB,KAAK,aAAa,cAAc,UAAU;AAE7D;;AAGF,UAAO;;SAEH"}
|
package/dist/idempotentTask.cjs
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
const require_runtime = require("./_virtual/_rolldown/runtime.cjs");
|
|
2
2
|
const require_md5 = require("./md5.cjs");
|
|
3
3
|
let node_fs = require("node:fs");
|
|
4
|
+
let node_fs_promises = require("node:fs/promises");
|
|
4
5
|
let debug = require("debug");
|
|
5
6
|
debug = require_runtime.__toESM(debug);
|
|
6
7
|
let node_stream = require("node:stream");
|
|
7
|
-
let node_fs_promises = require("node:fs/promises");
|
|
8
8
|
let node_path = require("node:path");
|
|
9
9
|
node_path = require_runtime.__toESM(node_path);
|
|
10
10
|
let node_url = require("node:url");
|
package/dist/idempotentTask.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { md5FilePath } from "./md5.js";
|
|
2
2
|
import { createWriteStream, existsSync, readFileSync } from "node:fs";
|
|
3
|
+
import { mkdir, readFile, readdir, rename, rm, stat, writeFile } from "node:fs/promises";
|
|
3
4
|
import debug from "debug";
|
|
4
5
|
import { Readable } from "node:stream";
|
|
5
|
-
import { mkdir, readFile, readdir, rename, rm, stat, writeFile } from "node:fs/promises";
|
|
6
6
|
import path, { join } from "node:path";
|
|
7
7
|
import { fileURLToPath } from "node:url";
|
|
8
8
|
//#region src/idempotentTask.ts
|
package/dist/index.cjs
CHANGED
|
@@ -2,8 +2,8 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
|
2
2
|
const require_Probe = require("./Probe.cjs");
|
|
3
3
|
const require_generateFragmentIndex = require("./generateFragmentIndex.cjs");
|
|
4
4
|
const require_md5 = require("./md5.cjs");
|
|
5
|
-
const require_generateTrackFragmentIndex = require("./tasks/generateTrackFragmentIndex.cjs");
|
|
6
5
|
const require_generateTrack = require("./tasks/generateTrack.cjs");
|
|
6
|
+
const require_generateTrackFragmentIndex = require("./tasks/generateTrackFragmentIndex.cjs");
|
|
7
7
|
const require_generateScrubTrack = require("./tasks/generateScrubTrack.cjs");
|
|
8
8
|
const require_findOrCreateCaptions = require("./tasks/findOrCreateCaptions.cjs");
|
|
9
9
|
const require_cacheImage = require("./tasks/cacheImage.cjs");
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { PacketProbe, Probe } from "./Probe.js";
|
|
2
2
|
import { generateFragmentIndex } from "./generateFragmentIndex.js";
|
|
3
3
|
import { md5Buffer, md5Directory, md5FilePath, md5ReadStream } from "./md5.js";
|
|
4
|
-
import { generateTrackFragmentIndex, generateTrackFragmentIndexFromPath } from "./tasks/generateTrackFragmentIndex.js";
|
|
5
4
|
import { generateTrack, generateTrackFromPath } from "./tasks/generateTrack.js";
|
|
5
|
+
import { generateTrackFragmentIndex, generateTrackFragmentIndexFromPath } from "./tasks/generateTrackFragmentIndex.js";
|
|
6
6
|
import { generateScrubTrack, generateScrubTrackFromPath } from "./tasks/generateScrubTrack.js";
|
|
7
7
|
import { findOrCreateCaptions, generateCaptionDataFromPath } from "./tasks/findOrCreateCaptions.js";
|
|
8
8
|
import { cacheImage } from "./tasks/cacheImage.js";
|
|
@@ -3,10 +3,10 @@ const require_Probe = require("../Probe.cjs");
|
|
|
3
3
|
const require_generateFragmentIndex = require("../generateFragmentIndex.cjs");
|
|
4
4
|
const require_idempotentTask = require("../idempotentTask.cjs");
|
|
5
5
|
const require_generateWebmSegmentIndex = require("../generateWebmSegmentIndex.cjs");
|
|
6
|
+
let node_fs_promises = require("node:fs/promises");
|
|
6
7
|
let debug = require("debug");
|
|
7
8
|
debug = require_runtime.__toESM(debug);
|
|
8
9
|
let node_stream = require("node:stream");
|
|
9
|
-
let node_fs_promises = require("node:fs/promises");
|
|
10
10
|
let node_os = require("node:os");
|
|
11
11
|
let node_path = require("node:path");
|
|
12
12
|
//#region src/tasks/generateScrubTrack.ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateScrubTrack.cjs","names":["Probe","generateWebmSegmentIndex","Readable","PassThrough","generateFragmentIndex","idempotentTask"],"sources":["../../src/tasks/generateScrubTrack.ts"],"mappings":";;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"generateScrubTrack.cjs","names":["Probe","generateWebmSegmentIndex","Readable","PassThrough","generateFragmentIndex","idempotentTask"],"sources":["../../src/tasks/generateScrubTrack.ts"],"mappings":"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"}
|
|
@@ -2,9 +2,9 @@ import { Probe } from "../Probe.js";
|
|
|
2
2
|
import { generateFragmentIndex } from "../generateFragmentIndex.js";
|
|
3
3
|
import { idempotentTask } from "../idempotentTask.js";
|
|
4
4
|
import { generateWebmSegmentIndex, patchWebmForSegmentedServing } from "../generateWebmSegmentIndex.js";
|
|
5
|
+
import { mkdtemp, readFile, rm } from "node:fs/promises";
|
|
5
6
|
import debug from "debug";
|
|
6
7
|
import { PassThrough, Readable } from "node:stream";
|
|
7
|
-
import { mkdtemp, readFile, rm } from "node:fs/promises";
|
|
8
8
|
import { tmpdir } from "node:os";
|
|
9
9
|
import { basename, join } from "node:path";
|
|
10
10
|
//#region src/tasks/generateScrubTrack.ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateScrubTrack.js","names":[],"sources":["../../src/tasks/generateScrubTrack.ts"],"mappings":";;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"generateScrubTrack.js","names":[],"sources":["../../src/tasks/generateScrubTrack.ts"],"mappings":"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"}
|
|
@@ -3,28 +3,45 @@ const require_Probe = require("../Probe.cjs");
|
|
|
3
3
|
const require_idempotentTask = require("../idempotentTask.cjs");
|
|
4
4
|
const require_generateWebmSegmentIndex = require("../generateWebmSegmentIndex.cjs");
|
|
5
5
|
const require_generateSingleTrack = require("../generateSingleTrack.cjs");
|
|
6
|
+
let node_fs_promises = require("node:fs/promises");
|
|
6
7
|
let debug = require("debug");
|
|
7
8
|
debug = require_runtime.__toESM(debug);
|
|
8
9
|
let node_stream = require("node:stream");
|
|
9
|
-
let
|
|
10
|
+
let node_os = require("node:os");
|
|
10
11
|
let node_path = require("node:path");
|
|
11
12
|
//#region src/tasks/generateTrack.ts
|
|
13
|
+
/** Target segment duration for keyframe-aligned WebM. Each cluster in the
|
|
14
|
+
* output is independently decodable, so the segment carving in
|
|
15
|
+
* generateWebmSegmentIndex can produce safe byte-range slices. */
|
|
16
|
+
const VP9_ALPHA_SEGMENT_MS = 2e3;
|
|
12
17
|
const generateTrackFromPath = async (absolutePath, trackId) => {
|
|
13
18
|
const log = (0, debug.default)("ef:generateTrackFragment");
|
|
14
19
|
log(`Generating track ${trackId} for ${absolutePath}`);
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
+
const probe = await require_Probe.Probe.probePath(absolutePath);
|
|
21
|
+
if (probe.hasAlphaVideo) {
|
|
22
|
+
log(`VP9 alpha WebM: re-encoding with forced keyframes every ${VP9_ALPHA_SEGMENT_MS}ms`);
|
|
23
|
+
const tmpDir = await (0, node_fs_promises.mkdtemp)((0, node_path.join)((0, node_os.tmpdir)(), "ef-vp9-alpha-"));
|
|
24
|
+
const tmpPath = (0, node_path.join)(tmpDir, "track.webm");
|
|
25
|
+
try {
|
|
26
|
+
await probe.transcodeWebmKeyframeAligned(tmpPath, VP9_ALPHA_SEGMENT_MS);
|
|
27
|
+
const buf = await (0, node_fs_promises.readFile)(tmpPath);
|
|
28
|
+
require_generateWebmSegmentIndex.patchWebmForSegmentedServing(buf);
|
|
29
|
+
return node_stream.Readable.from(buf);
|
|
30
|
+
} finally {
|
|
31
|
+
(0, node_fs_promises.rm)(tmpDir, {
|
|
32
|
+
recursive: true,
|
|
33
|
+
force: true
|
|
34
|
+
}).catch(() => {});
|
|
35
|
+
}
|
|
20
36
|
}
|
|
21
37
|
return (await require_generateSingleTrack.generateSingleTrackFromPath(absolutePath, trackId)).stream;
|
|
22
38
|
};
|
|
23
39
|
const generateTrackTask = require_idempotentTask.idempotentTask({
|
|
24
40
|
label: "track",
|
|
25
41
|
filename: (absolutePath, _trackId) => {
|
|
26
|
-
const
|
|
27
|
-
|
|
42
|
+
const lower = absolutePath.toLowerCase();
|
|
43
|
+
const isWebm = lower.endsWith(".webm") || /[._]webm[._]/.test(lower);
|
|
44
|
+
return `${(0, node_path.basename)(absolutePath)}.track-1.${isWebm ? "webm" : "mp4"}`;
|
|
28
45
|
},
|
|
29
46
|
runner: generateTrackFromPath
|
|
30
47
|
});
|
|
@@ -42,5 +59,6 @@ const generateTrack = async (cacheRoot, absolutePath, url) => {
|
|
|
42
59
|
//#endregion
|
|
43
60
|
exports.generateTrack = generateTrack;
|
|
44
61
|
exports.generateTrackFromPath = generateTrackFromPath;
|
|
62
|
+
exports.generateTrackTask = generateTrackTask;
|
|
45
63
|
|
|
46
64
|
//# sourceMappingURL=generateTrack.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateTrack.cjs","names":["Probe","Readable","generateSingleTrackFromPath","idempotentTask"],"sources":["../../src/tasks/generateTrack.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"generateTrack.cjs","names":["Probe","Readable","generateSingleTrackFromPath","idempotentTask"],"sources":["../../src/tasks/generateTrack.ts"],"mappings":";;;;;;;;;;;;;;;AAaA,MAAM,uBAAuB;AAE7B,MAAa,wBAAwB,OAAO,cAAsB,YAAoB;CACpF,MAAM,OAAA,GAAA,MAAA,SAAY,2BAA2B;AAC7C,KAAI,oBAAoB,QAAQ,OAAO,eAAe;CAEtD,MAAM,QAAQ,MAAMA,cAAAA,MAAM,UAAU,aAAa;AAYjD,KAAI,MAAM,eAAe;AACvB,MAAI,2DAA2D,qBAAqB,IAAI;EACxF,MAAM,SAAS,OAAA,GAAA,iBAAA,UAAA,GAAA,UAAA,OAAA,GAAA,QAAA,SAA2B,EAAE,gBAAgB,CAAC;EAC7D,MAAM,WAAA,GAAA,UAAA,MAAe,QAAQ,aAAa;AAC1C,MAAI;AACF,SAAM,MAAM,6BAA6B,SAAS,qBAAqB;GACvE,MAAM,MAAM,OAAA,GAAA,iBAAA,UAAe,QAAQ;AACnC,oCAAA,6BAA6B,IAAI;AACjC,UAAOC,YAAAA,SAAS,KAAK,IAAI;YACjB;AACR,IAAA,GAAA,iBAAA,IAAG,QAAQ;IAAE,WAAW;IAAM,OAAO;IAAM,CAAC,CAAC,YAAY,GAAG;;;AAKhE,SADe,MAAMC,4BAAAA,4BAA4B,cAAc,QAAQ,EACzD;;AAGhB,MAAa,oBAAoBC,uBAAAA,eAAe;CAC9C,OAAO;CACP,WAAW,cAAsB,aAAqB;EAKpD,MAAM,QAAQ,aAAa,aAAa;EACxC,MAAM,SAAS,MAAM,SAAS,QAAQ,IAAI,eAAe,KAAK,MAAM;AACpE,SAAO,IAAA,GAAA,UAAA,UAAY,aAAa,CAAC,WAAW,SAAS,SAAS;;CAEhE,QAAQ;CACT,CAAC;AAEF,MAAa,gBAAgB,OAAO,WAAmB,cAAsB,QAAgB;AAC3F,KAAI;EACF,MAAM,UAAU,IAAI,IAAI,mBAAmB,MAAM,CAAC,aAAa,IAAI,UAAU;AAC7E,MAAI,YAAY,KACd,OAAM,IAAI,MACR,kHACD;AAEH,SAAO,MAAM,kBAAkB,WAAW,cAAc,OAAO,QAAQ,CAAC;UACjE,OAAO;AACd,UAAQ,MAAM,MAAM;AACpB,UAAQ,MAAM,0BAA0B,MAAM;AAC9C,QAAM"}
|