@intactfile/engines 0.1.0
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/README.md +68 -0
- package/dist/archive/diagnose.d.ts +37 -0
- package/dist/archive/diagnose.d.ts.map +1 -0
- package/dist/archive/diagnose.js +165 -0
- package/dist/archive/diagnose.js.map +1 -0
- package/dist/archive/format.d.ts +52 -0
- package/dist/archive/format.d.ts.map +1 -0
- package/dist/archive/format.js +87 -0
- package/dist/archive/format.js.map +1 -0
- package/dist/archive/host.d.ts +83 -0
- package/dist/archive/host.d.ts.map +1 -0
- package/dist/archive/host.js +92 -0
- package/dist/archive/host.js.map +1 -0
- package/dist/archive/index.d.ts +22 -0
- package/dist/archive/index.d.ts.map +1 -0
- package/dist/archive/index.js +19 -0
- package/dist/archive/index.js.map +1 -0
- package/dist/archive/salvage.d.ts +73 -0
- package/dist/archive/salvage.d.ts.map +1 -0
- package/dist/archive/salvage.js +210 -0
- package/dist/archive/salvage.js.map +1 -0
- package/dist/byte-source.d.ts +19 -0
- package/dist/byte-source.d.ts.map +1 -0
- package/dist/byte-source.js +16 -0
- package/dist/byte-source.js.map +1 -0
- package/dist/bytesource/blob.d.ts +14 -0
- package/dist/bytesource/blob.d.ts.map +1 -0
- package/dist/bytesource/blob.js +23 -0
- package/dist/bytesource/blob.js.map +1 -0
- package/dist/crc32.d.ts +2 -0
- package/dist/crc32.d.ts.map +1 -0
- package/dist/crc32.js +18 -0
- package/dist/crc32.js.map +1 -0
- package/dist/detect/index.d.ts +16 -0
- package/dist/detect/index.d.ts.map +1 -0
- package/dist/detect/index.js +159 -0
- package/dist/detect/index.js.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/jpeg/browser-loader.d.ts +21 -0
- package/dist/jpeg/browser-loader.d.ts.map +1 -0
- package/dist/jpeg/browser-loader.js +28 -0
- package/dist/jpeg/browser-loader.js.map +1 -0
- package/dist/jpeg/diagnose.d.ts +50 -0
- package/dist/jpeg/diagnose.d.ts.map +1 -0
- package/dist/jpeg/diagnose.js +124 -0
- package/dist/jpeg/diagnose.js.map +1 -0
- package/dist/jpeg/exif.d.ts +11 -0
- package/dist/jpeg/exif.d.ts.map +1 -0
- package/dist/jpeg/exif.js +50 -0
- package/dist/jpeg/exif.js.map +1 -0
- package/dist/jpeg/format.d.ts +106 -0
- package/dist/jpeg/format.d.ts.map +1 -0
- package/dist/jpeg/format.js +248 -0
- package/dist/jpeg/format.js.map +1 -0
- package/dist/jpeg/index.d.ts +18 -0
- package/dist/jpeg/index.d.ts.map +1 -0
- package/dist/jpeg/index.js +14 -0
- package/dist/jpeg/index.js.map +1 -0
- package/dist/jpeg/mozjpeg-host.d.ts +60 -0
- package/dist/jpeg/mozjpeg-host.d.ts.map +1 -0
- package/dist/jpeg/mozjpeg-host.js +138 -0
- package/dist/jpeg/mozjpeg-host.js.map +1 -0
- package/dist/jpeg/repair.d.ts +89 -0
- package/dist/jpeg/repair.d.ts.map +1 -0
- package/dist/jpeg/repair.js +216 -0
- package/dist/jpeg/repair.js.map +1 -0
- package/dist/node.d.ts +11 -0
- package/dist/node.d.ts.map +1 -0
- package/dist/node.js +29 -0
- package/dist/node.js.map +1 -0
- package/dist/pdf/browser-loader.d.ts +30 -0
- package/dist/pdf/browser-loader.d.ts.map +1 -0
- package/dist/pdf/browser-loader.js +21 -0
- package/dist/pdf/browser-loader.js.map +1 -0
- package/dist/pdf/diagnose.d.ts +23 -0
- package/dist/pdf/diagnose.d.ts.map +1 -0
- package/dist/pdf/diagnose.js +113 -0
- package/dist/pdf/diagnose.js.map +1 -0
- package/dist/pdf/format.d.ts +61 -0
- package/dist/pdf/format.d.ts.map +1 -0
- package/dist/pdf/format.js +150 -0
- package/dist/pdf/format.js.map +1 -0
- package/dist/pdf/index.d.ts +17 -0
- package/dist/pdf/index.d.ts.map +1 -0
- package/dist/pdf/index.js +12 -0
- package/dist/pdf/index.js.map +1 -0
- package/dist/pdf/qpdf-host.d.ts +66 -0
- package/dist/pdf/qpdf-host.d.ts.map +1 -0
- package/dist/pdf/qpdf-host.js +149 -0
- package/dist/pdf/qpdf-host.js.map +1 -0
- package/dist/pdf/rebuild.d.ts +32 -0
- package/dist/pdf/rebuild.d.ts.map +1 -0
- package/dist/pdf/rebuild.js +90 -0
- package/dist/pdf/rebuild.js.map +1 -0
- package/dist/pdf/repair.d.ts +61 -0
- package/dist/pdf/repair.d.ts.map +1 -0
- package/dist/pdf/repair.js +167 -0
- package/dist/pdf/repair.js.map +1 -0
- package/dist/png/diagnose.d.ts +50 -0
- package/dist/png/diagnose.d.ts.map +1 -0
- package/dist/png/diagnose.js +261 -0
- package/dist/png/diagnose.js.map +1 -0
- package/dist/png/format.d.ts +133 -0
- package/dist/png/format.d.ts.map +1 -0
- package/dist/png/format.js +350 -0
- package/dist/png/format.js.map +1 -0
- package/dist/png/index.d.ts +13 -0
- package/dist/png/index.d.ts.map +1 -0
- package/dist/png/index.js +10 -0
- package/dist/png/index.js.map +1 -0
- package/dist/png/repair.d.ts +31 -0
- package/dist/png/repair.d.ts.map +1 -0
- package/dist/png/repair.js +335 -0
- package/dist/png/repair.js.map +1 -0
- package/dist/sqlite/diagnose.d.ts +31 -0
- package/dist/sqlite/diagnose.d.ts.map +1 -0
- package/dist/sqlite/diagnose.js +169 -0
- package/dist/sqlite/diagnose.js.map +1 -0
- package/dist/sqlite/format.d.ts +103 -0
- package/dist/sqlite/format.d.ts.map +1 -0
- package/dist/sqlite/format.js +237 -0
- package/dist/sqlite/format.js.map +1 -0
- package/dist/sqlite/index.d.ts +24 -0
- package/dist/sqlite/index.d.ts.map +1 -0
- package/dist/sqlite/index.js +19 -0
- package/dist/sqlite/index.js.map +1 -0
- package/dist/sqlite/recover.d.ts +66 -0
- package/dist/sqlite/recover.d.ts.map +1 -0
- package/dist/sqlite/recover.js +305 -0
- package/dist/sqlite/recover.js.map +1 -0
- package/dist/sqlite/scan.d.ts +94 -0
- package/dist/sqlite/scan.d.ts.map +1 -0
- package/dist/sqlite/scan.js +356 -0
- package/dist/sqlite/scan.js.map +1 -0
- package/dist/sqlite/sqlite-host.d.ts +37 -0
- package/dist/sqlite/sqlite-host.d.ts.map +1 -0
- package/dist/sqlite/sqlite-host.js +80 -0
- package/dist/sqlite/sqlite-host.js.map +1 -0
- package/dist/sqlite/wal.d.ts +14 -0
- package/dist/sqlite/wal.d.ts.map +1 -0
- package/dist/sqlite/wal.js +79 -0
- package/dist/sqlite/wal.js.map +1 -0
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/video/diagnose.d.ts +41 -0
- package/dist/video/diagnose.d.ts.map +1 -0
- package/dist/video/diagnose.js +188 -0
- package/dist/video/diagnose.js.map +1 -0
- package/dist/video/format.d.ts +87 -0
- package/dist/video/format.d.ts.map +1 -0
- package/dist/video/format.js +273 -0
- package/dist/video/format.js.map +1 -0
- package/dist/video/index.d.ts +21 -0
- package/dist/video/index.d.ts.map +1 -0
- package/dist/video/index.js +17 -0
- package/dist/video/index.js.map +1 -0
- package/dist/video/libav-host.d.ts +88 -0
- package/dist/video/libav-host.d.ts.map +1 -0
- package/dist/video/libav-host.js +66 -0
- package/dist/video/libav-host.js.map +1 -0
- package/dist/video/mp4-rebuild.d.ts +167 -0
- package/dist/video/mp4-rebuild.d.ts.map +1 -0
- package/dist/video/mp4-rebuild.js +270 -0
- package/dist/video/mp4-rebuild.js.map +1 -0
- package/dist/video/mp4box-host.d.ts +62 -0
- package/dist/video/mp4box-host.d.ts.map +1 -0
- package/dist/video/mp4box-host.js +209 -0
- package/dist/video/mp4box-host.js.map +1 -0
- package/dist/video/reconstruct.d.ts +97 -0
- package/dist/video/reconstruct.d.ts.map +1 -0
- package/dist/video/reconstruct.js +271 -0
- package/dist/video/reconstruct.js.map +1 -0
- package/dist/video/remux.d.ts +85 -0
- package/dist/video/remux.d.ts.map +1 -0
- package/dist/video/remux.js +350 -0
- package/dist/video/remux.js.map +1 -0
- package/dist/zip/diagnose.d.ts +22 -0
- package/dist/zip/diagnose.d.ts.map +1 -0
- package/dist/zip/diagnose.js +126 -0
- package/dist/zip/diagnose.js.map +1 -0
- package/dist/zip/format.d.ts +79 -0
- package/dist/zip/format.d.ts.map +1 -0
- package/dist/zip/format.js +129 -0
- package/dist/zip/format.js.map +1 -0
- package/dist/zip/repair.d.ts +32 -0
- package/dist/zip/repair.d.ts.map +1 -0
- package/dist/zip/repair.js +82 -0
- package/dist/zip/repair.js.map +1 -0
- package/dist/zip/salvage.d.ts +23 -0
- package/dist/zip/salvage.d.ts.map +1 -0
- package/dist/zip/salvage.js +140 -0
- package/dist/zip/salvage.js.map +1 -0
- package/dist/zip/scan.d.ts +64 -0
- package/dist/zip/scan.d.ts.map +1 -0
- package/dist/zip/scan.js +386 -0
- package/dist/zip/scan.js.map +1 -0
- package/dist/zip/writer.d.ts +14 -0
- package/dist/zip/writer.d.ts.map +1 -0
- package/dist/zip/writer.js +131 -0
- package/dist/zip/writer.js.map +1 -0
- package/package.json +71 -0
- package/src/archive/LICENSE-unrar.txt +53 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mp4-rebuild.js","sourceRoot":"","sources":["../../src/video/mp4-rebuild.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Isolated, injectable host for mp4box.js (`mp4box` 2.4.1, BSD-3) — used ONLY
|
|
3
|
+
* to parse a healthy reference clip's moov into a MoovTemplate for
|
|
4
|
+
* reconstruction. mp4box is a parser here, never a muxer; it never touches the
|
|
5
|
+
* broken file (that is scanned by our own pure code in mp4-rebuild.ts).
|
|
6
|
+
*
|
|
7
|
+
* Loading mirrors libav-host.ts / qpdf-host.ts: Node's default loader resolves
|
|
8
|
+
* the CJS build from node_modules; a browser host calls setMp4BoxLoader() with
|
|
9
|
+
* the mp4box module (and, later, R2/base wiring is irrelevant — mp4box is pure
|
|
10
|
+
* JS, no wasm) before reconstructing. This keeps mp4box out of the pure root
|
|
11
|
+
* diagnose path entirely.
|
|
12
|
+
*/
|
|
13
|
+
import { type MoovTemplate } from './mp4-rebuild.js';
|
|
14
|
+
interface Mp4BoxDataStream {
|
|
15
|
+
buffer: ArrayBuffer;
|
|
16
|
+
}
|
|
17
|
+
interface Mp4BoxDataStreamCtor {
|
|
18
|
+
new (arrayBuffer?: ArrayBuffer, byteOffset?: number, endianness?: unknown): Mp4BoxDataStream;
|
|
19
|
+
BIG_ENDIAN: unknown;
|
|
20
|
+
}
|
|
21
|
+
/** A parsed box: everything mp4box exposes; only `write` is contractual. */
|
|
22
|
+
interface ParsedBox {
|
|
23
|
+
type?: string;
|
|
24
|
+
write(ds: Mp4BoxDataStream): void;
|
|
25
|
+
[key: string]: unknown;
|
|
26
|
+
}
|
|
27
|
+
interface Mp4BoxFile {
|
|
28
|
+
onReady: ((info: unknown) => void) | null;
|
|
29
|
+
onError: ((e: unknown) => void) | null;
|
|
30
|
+
appendBuffer(ab: ArrayBuffer): number;
|
|
31
|
+
flush(): void;
|
|
32
|
+
moov?: ParsedBox;
|
|
33
|
+
}
|
|
34
|
+
export interface Mp4BoxModule {
|
|
35
|
+
createFile(keepMdatData?: boolean): Mp4BoxFile;
|
|
36
|
+
DataStream: Mp4BoxDataStreamCtor;
|
|
37
|
+
}
|
|
38
|
+
export interface Mp4BoxLoader {
|
|
39
|
+
module: Mp4BoxModule;
|
|
40
|
+
}
|
|
41
|
+
/** Inject how the mp4box module is obtained (browser hosts). */
|
|
42
|
+
export declare function setMp4BoxLoader(load: () => Promise<Mp4BoxLoader>): void;
|
|
43
|
+
/**
|
|
44
|
+
* Drop the cached module AND any injected loader, restoring the default Node
|
|
45
|
+
* loader. Unlike a wasm host there is no crashed-instance-to-drop case here, so
|
|
46
|
+
* a reset always returns to a clean default (used by tests for isolation).
|
|
47
|
+
*/
|
|
48
|
+
export declare function resetMp4BoxHost(): void;
|
|
49
|
+
export declare function getMp4Box(): Promise<Mp4BoxModule>;
|
|
50
|
+
/** Thrown when a reference clip cannot yield a usable moov template. */
|
|
51
|
+
export declare class ReferenceParseError extends Error {
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Parse a reference clip into a MoovTemplate: the movie header, and per-track
|
|
55
|
+
* the raw serialized tkhd/mdhd/hdlr/minf-header/dinf/stsd plus the sample
|
|
56
|
+
* cadence (timescale, stts, stsz model, stss). Throws ReferenceParseError when
|
|
57
|
+
* the reference has no readable moov (e.g. it is itself unfinalized / the wrong
|
|
58
|
+
* kind of file), mirroring untrunc's "needs a healthy same-camera reference".
|
|
59
|
+
*/
|
|
60
|
+
export declare function parseReferenceMoov(referenceBytes: Uint8Array): Promise<MoovTemplate>;
|
|
61
|
+
export {};
|
|
62
|
+
//# sourceMappingURL=mp4box-host.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mp4box-host.d.ts","sourceRoot":"","sources":["../../src/video/mp4box-host.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAEL,KAAK,YAAY,EAElB,MAAM,kBAAkB,CAAC;AAO1B,UAAU,gBAAgB;IACxB,MAAM,EAAE,WAAW,CAAC;CACrB;AACD,UAAU,oBAAoB;IAC5B,KAAK,WAAW,CAAC,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,OAAO,GAAG,gBAAgB,CAAC;IAC7F,UAAU,EAAE,OAAO,CAAC;CACrB;AACD,4EAA4E;AAC5E,UAAU,SAAS;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAClC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AACD,UAAU,UAAU;IAClB,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;IAC1C,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;IACvC,YAAY,CAAC,EAAE,EAAE,WAAW,GAAG,MAAM,CAAC;IACtC,KAAK,IAAI,IAAI,CAAC;IACd,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AACD,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,YAAY,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;IAC/C,UAAU,EAAE,oBAAoB,CAAC;CAClC;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,YAAY,CAAC;CACtB;AAKD,gEAAgE;AAChE,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI,CAGvE;AAED;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAGtC;AAsBD,wBAAgB,SAAS,IAAI,OAAO,CAAC,YAAY,CAAC,CAQjD;AAED,wEAAwE;AACxE,qBAAa,mBAAoB,SAAQ,KAAK;CAAG;AAejD;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CAAC,cAAc,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,CAmD1F"}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Isolated, injectable host for mp4box.js (`mp4box` 2.4.1, BSD-3) — used ONLY
|
|
3
|
+
* to parse a healthy reference clip's moov into a MoovTemplate for
|
|
4
|
+
* reconstruction. mp4box is a parser here, never a muxer; it never touches the
|
|
5
|
+
* broken file (that is scanned by our own pure code in mp4-rebuild.ts).
|
|
6
|
+
*
|
|
7
|
+
* Loading mirrors libav-host.ts / qpdf-host.ts: Node's default loader resolves
|
|
8
|
+
* the CJS build from node_modules; a browser host calls setMp4BoxLoader() with
|
|
9
|
+
* the mp4box module (and, later, R2/base wiring is irrelevant — mp4box is pure
|
|
10
|
+
* JS, no wasm) before reconstructing. This keeps mp4box out of the pure root
|
|
11
|
+
* diagnose path entirely.
|
|
12
|
+
*/
|
|
13
|
+
import { nalLengthSizeFromStsd, } from './mp4-rebuild.js';
|
|
14
|
+
let loaderOverride = null;
|
|
15
|
+
let modulePromise = null;
|
|
16
|
+
/** Inject how the mp4box module is obtained (browser hosts). */
|
|
17
|
+
export function setMp4BoxLoader(load) {
|
|
18
|
+
loaderOverride = load;
|
|
19
|
+
modulePromise = null;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Drop the cached module AND any injected loader, restoring the default Node
|
|
23
|
+
* loader. Unlike a wasm host there is no crashed-instance-to-drop case here, so
|
|
24
|
+
* a reset always returns to a clean default (used by tests for isolation).
|
|
25
|
+
*/
|
|
26
|
+
export function resetMp4BoxHost() {
|
|
27
|
+
loaderOverride = null;
|
|
28
|
+
modulePromise = null;
|
|
29
|
+
}
|
|
30
|
+
async function defaultNodeLoader() {
|
|
31
|
+
const isNode = typeof process !== 'undefined' && !!process.versions?.node;
|
|
32
|
+
if (!isNode) {
|
|
33
|
+
throw new Error('mp4box host: no loader configured. In the browser, call setMp4BoxLoader() with the ' +
|
|
34
|
+
"mp4box module (e.g. `await import('mp4box')`) before reconstructing a moov.");
|
|
35
|
+
}
|
|
36
|
+
const { createRequire } = await import('node:module');
|
|
37
|
+
const require = createRequire(import.meta.url);
|
|
38
|
+
const mod = require('mp4box');
|
|
39
|
+
// The CJS build exposes createFile/DataStream on the namespace object.
|
|
40
|
+
const module = mod;
|
|
41
|
+
const resolved = typeof module.createFile === 'function' ? module : module.default;
|
|
42
|
+
if (!resolved || typeof resolved.createFile !== 'function') {
|
|
43
|
+
throw new Error('mp4box host: resolved module does not expose createFile()');
|
|
44
|
+
}
|
|
45
|
+
return { module: resolved };
|
|
46
|
+
}
|
|
47
|
+
export function getMp4Box() {
|
|
48
|
+
modulePromise ??= (loaderOverride ?? defaultNodeLoader)()
|
|
49
|
+
.then((l) => l.module)
|
|
50
|
+
.catch((e) => {
|
|
51
|
+
modulePromise = null;
|
|
52
|
+
throw e;
|
|
53
|
+
});
|
|
54
|
+
return modulePromise;
|
|
55
|
+
}
|
|
56
|
+
/** Thrown when a reference clip cannot yield a usable moov template. */
|
|
57
|
+
export class ReferenceParseError extends Error {
|
|
58
|
+
}
|
|
59
|
+
function serialize(module, boxObj) {
|
|
60
|
+
const ds = new module.DataStream(undefined, 0, module.DataStream.BIG_ENDIAN);
|
|
61
|
+
boxObj.write(ds);
|
|
62
|
+
return new Uint8Array(ds.buffer.slice(0));
|
|
63
|
+
}
|
|
64
|
+
/** Read the whole source and hand it to mp4box as one ArrayBuffer chunk. */
|
|
65
|
+
async function readAll(bytes) {
|
|
66
|
+
const ab = bytes.slice().buffer;
|
|
67
|
+
ab.fileStart = 0;
|
|
68
|
+
return ab;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Parse a reference clip into a MoovTemplate: the movie header, and per-track
|
|
72
|
+
* the raw serialized tkhd/mdhd/hdlr/minf-header/dinf/stsd plus the sample
|
|
73
|
+
* cadence (timescale, stts, stsz model, stss). Throws ReferenceParseError when
|
|
74
|
+
* the reference has no readable moov (e.g. it is itself unfinalized / the wrong
|
|
75
|
+
* kind of file), mirroring untrunc's "needs a healthy same-camera reference".
|
|
76
|
+
*/
|
|
77
|
+
export async function parseReferenceMoov(referenceBytes) {
|
|
78
|
+
const module = await getMp4Box();
|
|
79
|
+
const file = module.createFile(false);
|
|
80
|
+
let readyInfo = null;
|
|
81
|
+
let parseError = null;
|
|
82
|
+
file.onReady = (info) => {
|
|
83
|
+
readyInfo = info;
|
|
84
|
+
};
|
|
85
|
+
file.onError = (e) => {
|
|
86
|
+
parseError = e;
|
|
87
|
+
};
|
|
88
|
+
try {
|
|
89
|
+
file.appendBuffer(await readAll(referenceBytes));
|
|
90
|
+
file.flush();
|
|
91
|
+
}
|
|
92
|
+
catch (e) {
|
|
93
|
+
throw new ReferenceParseError(`reference could not be parsed: ${e instanceof Error ? e.message : String(e)}`);
|
|
94
|
+
}
|
|
95
|
+
if (parseError) {
|
|
96
|
+
throw new ReferenceParseError(`reference parse error: ${String(parseError)}`);
|
|
97
|
+
}
|
|
98
|
+
const moov = file.moov;
|
|
99
|
+
if (!moov || readyInfo === null) {
|
|
100
|
+
throw new ReferenceParseError('reference has no readable moov: a healthy same-camera reference clip is required ' +
|
|
101
|
+
'(the reference itself appears unfinalized or is not an MP4/MOV).');
|
|
102
|
+
}
|
|
103
|
+
const mvhd = getChild(moov, 'mvhd');
|
|
104
|
+
if (!mvhd)
|
|
105
|
+
throw new ReferenceParseError('reference moov has no mvhd');
|
|
106
|
+
const traks = getArray(moov, 'traks');
|
|
107
|
+
if (traks.length === 0)
|
|
108
|
+
throw new ReferenceParseError('reference moov has no traks');
|
|
109
|
+
const tracks = [];
|
|
110
|
+
for (const trak of traks) {
|
|
111
|
+
const track = buildTrackTemplate(module, trak);
|
|
112
|
+
if (track)
|
|
113
|
+
tracks.push(track);
|
|
114
|
+
}
|
|
115
|
+
if (tracks.length === 0) {
|
|
116
|
+
throw new ReferenceParseError('reference moov has no usable audio/video track');
|
|
117
|
+
}
|
|
118
|
+
return {
|
|
119
|
+
movieTimescale: num(mvhd['timescale']),
|
|
120
|
+
movieDuration: num(mvhd['duration']),
|
|
121
|
+
mvhd: serialize(module, mvhd),
|
|
122
|
+
tracks,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
function buildTrackTemplate(module, trak) {
|
|
126
|
+
const tkhd = getChild(trak, 'tkhd');
|
|
127
|
+
const mdia = getChild(trak, 'mdia');
|
|
128
|
+
if (!tkhd || !mdia)
|
|
129
|
+
return null;
|
|
130
|
+
const mdhd = getChild(mdia, 'mdhd');
|
|
131
|
+
const hdlr = getChild(mdia, 'hdlr');
|
|
132
|
+
const minf = getChild(mdia, 'minf');
|
|
133
|
+
if (!mdhd || !hdlr || !minf)
|
|
134
|
+
return null;
|
|
135
|
+
const stbl = getChild(minf, 'stbl');
|
|
136
|
+
if (!stbl)
|
|
137
|
+
return null;
|
|
138
|
+
const stsd = getChild(stbl, 'stsd');
|
|
139
|
+
if (!stsd)
|
|
140
|
+
return null;
|
|
141
|
+
const minfHeader = getChild(minf, 'vmhd') ?? getChild(minf, 'smhd') ?? getChild(minf, 'nmhd') ?? getChild(minf, 'hmhd');
|
|
142
|
+
const dinf = getChild(minf, 'dinf');
|
|
143
|
+
if (!minfHeader || !dinf)
|
|
144
|
+
return null;
|
|
145
|
+
const stsdBytes = serialize(module, stsd);
|
|
146
|
+
const entries = getArray(stsd, 'entries');
|
|
147
|
+
const first = entries[0];
|
|
148
|
+
const codecFourcc = first && typeof first['type'] === 'string' ? first['type'] : 'unkn';
|
|
149
|
+
const codec = first && typeof first['getCodec'] === 'function'
|
|
150
|
+
? String(first['getCodec']())
|
|
151
|
+
: null;
|
|
152
|
+
const stts = getChild(stbl, 'stts');
|
|
153
|
+
const sttsEntries = extractStts(stts);
|
|
154
|
+
const stsz = getChild(stbl, 'stsz');
|
|
155
|
+
const constantSampleSize = stsz ? num(stsz['sample_size']) : 0;
|
|
156
|
+
const sampleCount = stsz ? num(stsz['sample_count']) : 0;
|
|
157
|
+
const sampleSizes = stsz ? numArray(stsz['sample_sizes']) : [];
|
|
158
|
+
const stss = getChild(stbl, 'stss');
|
|
159
|
+
const syncSamples = stss ? numArray(stss['sample_numbers']) : [];
|
|
160
|
+
return {
|
|
161
|
+
trackId: num(tkhd['track_id']),
|
|
162
|
+
handlerType: typeof hdlr['handler'] === 'string' ? hdlr['handler'] : 'unkn',
|
|
163
|
+
codecFourcc,
|
|
164
|
+
codec,
|
|
165
|
+
mediaTimescale: num(mdhd['timescale']),
|
|
166
|
+
sttsEntries,
|
|
167
|
+
sampleCount,
|
|
168
|
+
constantSampleSize,
|
|
169
|
+
sampleSizes,
|
|
170
|
+
hasStss: !!stss,
|
|
171
|
+
syncSamples,
|
|
172
|
+
nalLengthSize: nalLengthSizeFromStsd(stsdBytes),
|
|
173
|
+
tkhd: serialize(module, tkhd),
|
|
174
|
+
mdhd: serialize(module, mdhd),
|
|
175
|
+
hdlr: serialize(module, hdlr),
|
|
176
|
+
minfHeader: serialize(module, minfHeader),
|
|
177
|
+
dinf: serialize(module, dinf),
|
|
178
|
+
stsd: stsdBytes,
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
function extractStts(stts) {
|
|
182
|
+
if (!stts)
|
|
183
|
+
return [];
|
|
184
|
+
const counts = numArray(stts['sample_counts']);
|
|
185
|
+
const deltas = numArray(stts['sample_deltas']);
|
|
186
|
+
const out = [];
|
|
187
|
+
for (let i = 0; i < Math.min(counts.length, deltas.length); i += 1) {
|
|
188
|
+
out.push({ count: counts[i], delta: deltas[i] });
|
|
189
|
+
}
|
|
190
|
+
return out;
|
|
191
|
+
}
|
|
192
|
+
// --- tiny structural accessors over mp4box's parsed objects -----------------
|
|
193
|
+
function getChild(parent, name) {
|
|
194
|
+
const v = parent[name];
|
|
195
|
+
return v && typeof v === 'object' ? v : null;
|
|
196
|
+
}
|
|
197
|
+
function getArray(parent, name) {
|
|
198
|
+
const v = parent[name];
|
|
199
|
+
return Array.isArray(v) ? v : [];
|
|
200
|
+
}
|
|
201
|
+
function num(v) {
|
|
202
|
+
return typeof v === 'number' && Number.isFinite(v) ? v : 0;
|
|
203
|
+
}
|
|
204
|
+
function numArray(v) {
|
|
205
|
+
if (!Array.isArray(v))
|
|
206
|
+
return [];
|
|
207
|
+
return v.map((x) => (typeof x === 'number' ? x : Number(x))).filter((x) => Number.isFinite(x));
|
|
208
|
+
}
|
|
209
|
+
//# sourceMappingURL=mp4box-host.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mp4box-host.js","sourceRoot":"","sources":["../../src/video/mp4box-host.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Untrunc-class moov reconstruction (clean-room TypeScript).
|
|
3
|
+
*
|
|
4
|
+
* The case current remux honestly fails: an MP4/MOV that has ftyp + mdat but
|
|
5
|
+
* NO moov — the index was never written (interrupted recording) or overwritten.
|
|
6
|
+
* A stream-copy remux has no sample table to copy from. This engine rebuilds
|
|
7
|
+
* one from the raw mdat using a healthy REFERENCE clip from the same
|
|
8
|
+
* camera/settings as a template — exactly the strategy untrunc uses, written
|
|
9
|
+
* from scratch (untrunc is GPL-2.0 and used only as an algorithmic reference,
|
|
10
|
+
* never linked or ported).
|
|
11
|
+
*
|
|
12
|
+
* Pipeline:
|
|
13
|
+
* 1. confirm the broken file is missing-moov but has an mdat payload;
|
|
14
|
+
* 2. parse the reference moov with mp4box.js (injectable host) → MoovTemplate
|
|
15
|
+
* of raw codec/header boxes + sample cadence;
|
|
16
|
+
* 3. scan the broken mdat for sample boundaries (length-prefixed H.264/H.265
|
|
17
|
+
* NAL units → access units), reconciled against the reference size model;
|
|
18
|
+
* 4. rebuild stbl (stts/stsc/stsz/stco[/stss]) + moov and splice a faststart
|
|
19
|
+
* ftyp+moov+mdat;
|
|
20
|
+
* 5. VERIFY the output re-parses (diagnoseVideo → not missing-moov). Nothing
|
|
21
|
+
* is claimed as success unless it re-diagnoses clean.
|
|
22
|
+
*
|
|
23
|
+
* Honesty (docs/03 §4): no reference / unparseable reference / codec mismatch /
|
|
24
|
+
* unscannable payload / multi-track (not yet supported) all return outcome
|
|
25
|
+
* 'failed' with a clear reason and ZERO output bytes — never a fake success.
|
|
26
|
+
*
|
|
27
|
+
* Scope realistically delivered: single-track H.264/H.265 video in MP4/MOV
|
|
28
|
+
* (GoPro / DJI / OBS / phone), end to end. Multi-track (video+audio) and audio-
|
|
29
|
+
* only reconstruction need mdat de-interleaving from the reference chunk
|
|
30
|
+
* cadence — see the TODO block at the end of this file.
|
|
31
|
+
*/
|
|
32
|
+
import type { ByteSource } from '../byte-source.js';
|
|
33
|
+
import type { Confidence } from '../types.js';
|
|
34
|
+
import { type VideoContainer, type VideoDamageClass, type VideoDiagnosis } from './diagnose.js';
|
|
35
|
+
import { type MoovTemplate, type MoovTemplateTrack, type SampleScan } from './mp4-rebuild.js';
|
|
36
|
+
import { getMp4Box, parseReferenceMoov, ReferenceParseError, setMp4BoxLoader, resetMp4BoxHost, type Mp4BoxLoader } from './mp4box-host.js';
|
|
37
|
+
export { setMp4BoxLoader, resetMp4BoxHost, getMp4Box, parseReferenceMoov, ReferenceParseError };
|
|
38
|
+
export type { Mp4BoxLoader, MoovTemplate, MoovTemplateTrack };
|
|
39
|
+
export type VideoReconstructOutcome = 'success' | 'partial' | 'failed';
|
|
40
|
+
/** How sample boundaries were determined. */
|
|
41
|
+
export type ReconstructStrategy = 'nal-scan' | 'reference-size-guided';
|
|
42
|
+
export interface VideoReconstructReport {
|
|
43
|
+
outcome: VideoReconstructOutcome;
|
|
44
|
+
/** Damage class of the *broken* input as diagnosed. */
|
|
45
|
+
damageClass: VideoDamageClass;
|
|
46
|
+
container: VideoContainer;
|
|
47
|
+
confidence: Confidence;
|
|
48
|
+
/** Human-readable reason, always set on 'failed' (and on caveats otherwise). */
|
|
49
|
+
reason: string | null;
|
|
50
|
+
/** Did a usable reference template get parsed? */
|
|
51
|
+
usedReference: boolean;
|
|
52
|
+
referenceTracks: number;
|
|
53
|
+
referenceCodec: string | null;
|
|
54
|
+
/** How sample sizes were derived, or null when it never got that far. */
|
|
55
|
+
strategy: ReconstructStrategy | null;
|
|
56
|
+
samplesRecovered: number;
|
|
57
|
+
mdatPayloadBytes: number;
|
|
58
|
+
bytesAccounted: number;
|
|
59
|
+
leftoverBytes: number;
|
|
60
|
+
truncatedTail: boolean;
|
|
61
|
+
/** Sample count differs from the reference (durations may be approximate). */
|
|
62
|
+
sampleCountMismatch: boolean;
|
|
63
|
+
/** damageClass the rebuilt output re-diagnoses as (verification), or null. */
|
|
64
|
+
reDiagnosis: VideoDamageClass | null;
|
|
65
|
+
notes: string[];
|
|
66
|
+
bytesIn: number;
|
|
67
|
+
bytesOut: number;
|
|
68
|
+
}
|
|
69
|
+
export interface ReconstructOptions {
|
|
70
|
+
/** Reuse an existing diagnosis of the broken file instead of re-scanning. */
|
|
71
|
+
diagnosis?: VideoDiagnosis;
|
|
72
|
+
/** Optional per-call mp4box loader override (otherwise the global host). */
|
|
73
|
+
mp4boxLoader?: () => Promise<Mp4BoxLoader>;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Reconstruct a missing moov for `broken` using `reference` as a template.
|
|
77
|
+
* Returns the rebuilt file plus an honest report. On any failure the returned
|
|
78
|
+
* `video` is empty (0 bytes) — never fabricated.
|
|
79
|
+
*/
|
|
80
|
+
export declare function reconstructMoov(broken: ByteSource, reference: ByteSource, opts?: ReconstructOptions): Promise<{
|
|
81
|
+
video: Uint8Array;
|
|
82
|
+
report: VideoReconstructReport;
|
|
83
|
+
}>;
|
|
84
|
+
interface ChosenSamples {
|
|
85
|
+
sizes: number[];
|
|
86
|
+
strategy: ReconstructStrategy;
|
|
87
|
+
truncated: boolean;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Reconcile the NAL scan with the reference size model:
|
|
91
|
+
* - a scan that tiles the payload exactly wins (byte-accurate);
|
|
92
|
+
* - else a reference model that tiles the payload exactly is used;
|
|
93
|
+
* - else a partial scan is used as best-effort (with dropped tail);
|
|
94
|
+
* - else give up (null → honest failure).
|
|
95
|
+
*/
|
|
96
|
+
export declare function chooseSampleSizes(scan: SampleScan | null, track: MoovTemplateTrack, payloadLen: number): ChosenSamples | null;
|
|
97
|
+
//# sourceMappingURL=reconstruct.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reconstruct.d.ts","sourceRoot":"","sources":["../../src/video/reconstruct.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAiB,KAAK,cAAc,EAAE,KAAK,gBAAgB,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/G,OAAO,EAKL,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,UAAU,EAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,SAAS,EACT,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,KAAK,YAAY,EAClB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,SAAS,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,CAAC;AAChG,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,CAAC;AAE9D,MAAM,MAAM,uBAAuB,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEvE,6CAA6C;AAC7C,MAAM,MAAM,mBAAmB,GAAG,UAAU,GAAG,uBAAuB,CAAC;AAEvE,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,uBAAuB,CAAC;IACjC,uDAAuD;IACvD,WAAW,EAAE,gBAAgB,CAAC;IAC9B,SAAS,EAAE,cAAc,CAAC;IAC1B,UAAU,EAAE,UAAU,CAAC;IACvB,gFAAgF;IAChF,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,kDAAkD;IAClD,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,yEAAyE;IACzE,QAAQ,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACrC,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;IACvB,8EAA8E;IAC9E,mBAAmB,EAAE,OAAO,CAAC;IAC7B,8EAA8E;IAC9E,WAAW,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACrC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,6EAA6E;IAC7E,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,4EAA4E;IAC5E,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC;CAC5C;AAID;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,UAAU,EAClB,SAAS,EAAE,UAAU,EACrB,IAAI,GAAE,kBAAuB,GAC5B,OAAO,CAAC;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,sBAAsB,CAAA;CAAE,CAAC,CAmOhE;AAED,UAAU,aAAa;IACrB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,EAAE,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAY7H"}
|