@adonis-agora/media 0.20.0 → 0.22.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/CHANGELOG.md +49 -0
- package/dist/providers/media_provider.d.ts.map +1 -1
- package/dist/providers/media_provider.js +7 -0
- package/dist/providers/media_provider.js.map +1 -1
- package/dist/src/define_config.d.ts +22 -3
- package/dist/src/define_config.d.ts.map +1 -1
- package/dist/src/define_config.js +2 -2
- package/dist/src/define_config.js.map +1 -1
- package/dist/src/delivery.d.ts +46 -1
- package/dist/src/delivery.d.ts.map +1 -1
- package/dist/src/delivery.js +17 -1
- package/dist/src/delivery.js.map +1 -1
- package/dist/src/delivery_signing.d.ts +70 -0
- package/dist/src/delivery_signing.d.ts.map +1 -0
- package/dist/src/delivery_signing.js +82 -0
- package/dist/src/delivery_signing.js.map +1 -0
- package/dist/src/errors.d.ts +44 -1
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/errors.js +70 -2
- package/dist/src/errors.js.map +1 -1
- package/dist/src/image_processor.d.ts +57 -1
- package/dist/src/image_processor.d.ts.map +1 -1
- package/dist/src/image_processor.js +16 -1
- package/dist/src/image_processor.js.map +1 -1
- package/dist/src/index.d.ts +10 -5
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +5 -3
- package/dist/src/index.js.map +1 -1
- package/dist/src/media_collection.d.ts +27 -0
- package/dist/src/media_collection.d.ts.map +1 -1
- package/dist/src/media_collection.js +26 -1
- package/dist/src/media_collection.js.map +1 -1
- package/dist/src/media_library.d.ts +111 -2
- package/dist/src/media_library.d.ts.map +1 -1
- package/dist/src/media_library.js +361 -16
- package/dist/src/media_library.js.map +1 -1
- package/dist/src/media_manager.d.ts +8 -1
- package/dist/src/media_manager.d.ts.map +1 -1
- package/dist/src/media_manager.js +5 -0
- package/dist/src/media_manager.js.map +1 -1
- package/dist/src/processors/sharp.d.ts +7 -2
- package/dist/src/processors/sharp.d.ts.map +1 -1
- package/dist/src/processors/sharp.js +105 -6
- package/dist/src/processors/sharp.js.map +1 -1
- package/dist/src/responsive_image.d.ts +88 -0
- package/dist/src/responsive_image.d.ts.map +1 -0
- package/dist/src/responsive_image.js +109 -0
- package/dist/src/responsive_image.js.map +1 -0
- package/dist/src/testing/fake_image_processor.d.ts +3 -2
- package/dist/src/testing/fake_image_processor.d.ts.map +1 -1
- package/dist/src/testing/fake_image_processor.js +2 -2
- package/dist/src/testing/fake_image_processor.js.map +1 -1
- package/dist/src/transformers/factory.d.ts +39 -0
- package/dist/src/transformers/factory.d.ts.map +1 -1
- package/dist/src/transformers/factory.js +20 -0
- package/dist/src/transformers/factory.js.map +1 -1
- package/dist/src/transformers/ffmpeg.d.ts +104 -0
- package/dist/src/transformers/ffmpeg.d.ts.map +1 -0
- package/dist/src/transformers/ffmpeg.js +207 -0
- package/dist/src/transformers/ffmpeg.js.map +1 -0
- package/dist/src/transformers/hls.d.ts +4 -1
- package/dist/src/transformers/hls.d.ts.map +1 -1
- package/dist/src/transformers/hls.js.map +1 -1
- package/dist/src/transformers/placeholder.d.ts +8 -0
- package/dist/src/transformers/placeholder.d.ts.map +1 -1
- package/dist/src/transformers/placeholder.js +7 -3
- package/dist/src/transformers/placeholder.js.map +1 -1
- package/dist/src/transformers/probe.d.ts +1 -1
- package/dist/src/transformers/probe.d.ts.map +1 -1
- package/package.json +3 -3
|
@@ -11,8 +11,8 @@ const CONTENT_TYPE = {
|
|
|
11
11
|
*/
|
|
12
12
|
export class FakeImageProcessor {
|
|
13
13
|
calls = [];
|
|
14
|
-
async convert(input, preset) {
|
|
15
|
-
this.calls.push({ inputSize: input.byteLength, preset });
|
|
14
|
+
async convert(input, preset, options) {
|
|
15
|
+
this.calls.push({ inputSize: input.byteLength, preset, ...(options ? { options } : {}) });
|
|
16
16
|
const format = preset.format ?? 'webp';
|
|
17
17
|
const data = Buffer.from(`fake:${preset.name}:${preset.width ?? ''}x${preset.height ?? ''}`);
|
|
18
18
|
return { data, format, contentType: CONTENT_TYPE[format] ?? 'application/octet-stream' };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fake_image_processor.js","sourceRoot":"","sources":["../../../src/testing/fake_image_processor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fake_image_processor.js","sourceRoot":"","sources":["../../../src/testing/fake_image_processor.ts"],"names":[],"mappings":"AAOA,MAAM,YAAY,GAA2B;IAC3C,IAAI,EAAE,YAAY;IAClB,GAAG,EAAE,WAAW;IAChB,IAAI,EAAE,YAAY;IAClB,IAAI,EAAE,YAAY;CACnB,CAAC;AAEF;;;;GAIG;AACH,MAAM,OAAO,kBAAkB;IACpB,KAAK,GACZ,EAAE,CAAC;IAEL,KAAK,CAAC,OAAO,CACX,KAAa,EACb,MAAwB,EACxB,OAAwB;QAExB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC1F,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC;QACvC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,KAAK,IAAI,EAAE,IAAI,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC,CAAC;QAC7F,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,MAAM,CAAC,IAAI,0BAA0B,EAAE,CAAC;IAC3F,CAAC;CACF"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ffmpegHlsEngine, ffprobeEngine } from './ffmpeg.js';
|
|
1
2
|
import { HlsTransformer, type HlsTransformerOptions } from './hls.js';
|
|
2
3
|
import { PlaceholderTransformer, type PlaceholderTransformerOptions } from './placeholder.js';
|
|
3
4
|
import { MetadataProbeTransformer, type MetadataProbeTransformerOptions } from './probe.js';
|
|
@@ -33,4 +34,42 @@ export declare const transformers: {
|
|
|
33
34
|
*/
|
|
34
35
|
placeholder<Name extends string = 'placeholder'>(options?: PlaceholderTransformerOptions<Name>): PlaceholderTransformer<Name>;
|
|
35
36
|
};
|
|
37
|
+
/**
|
|
38
|
+
* Alternative engines for the built-in transformers, plugged in through their `engine` option.
|
|
39
|
+
* The ffmpeg ones spawn the system `ffmpeg` / `ffprobe` binaries (nothing bundled, nothing to
|
|
40
|
+
* install from npm) and, unlike the default mediabunny engine, can **transcode** — an
|
|
41
|
+
* adaptive-bitrate ladder instead of a single stream copy:
|
|
42
|
+
*
|
|
43
|
+
* ```ts
|
|
44
|
+
* transformers.hls({ engine: engines.ffmpegHls({ ladder: engines.ladders.standard }) })
|
|
45
|
+
* transformers.probe({ engine: engines.ffprobe() })
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
export declare const engines: {
|
|
49
|
+
/** HLS via system ffmpeg: remux by default, or encode `ladder` into a multi-rendition package. */
|
|
50
|
+
ffmpegHls: typeof ffmpegHlsEngine;
|
|
51
|
+
/** Metadata probe via system ffprobe. */
|
|
52
|
+
ffprobe: typeof ffprobeEngine;
|
|
53
|
+
/** Ready-made ladders for {@link ffmpegHlsEngine}: `standard` (360/720/1080p), `compact` (360/720p). */
|
|
54
|
+
ladders: {
|
|
55
|
+
standard: ({
|
|
56
|
+
height: number;
|
|
57
|
+
videoBitrate: string;
|
|
58
|
+
audioBitrate: string;
|
|
59
|
+
} | {
|
|
60
|
+
audioBitrate?: never;
|
|
61
|
+
height: number;
|
|
62
|
+
videoBitrate: string;
|
|
63
|
+
})[];
|
|
64
|
+
compact: ({
|
|
65
|
+
height: number;
|
|
66
|
+
videoBitrate: string;
|
|
67
|
+
audioBitrate: string;
|
|
68
|
+
} | {
|
|
69
|
+
audioBitrate?: never;
|
|
70
|
+
height: number;
|
|
71
|
+
videoBitrate: string;
|
|
72
|
+
})[];
|
|
73
|
+
};
|
|
74
|
+
};
|
|
36
75
|
//# sourceMappingURL=factory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/transformers/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,KAAK,6BAA6B,EAAE,MAAM,kBAAkB,CAAC;AAC9F,OAAO,EAAE,wBAAwB,EAAE,KAAK,+BAA+B,EAAE,MAAM,YAAY,CAAC;AAE5F;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,YAAY;IACvB,+FAA+F;IAC/F,GAAG,CAAC,IAAI,SAAS,MAAM,GAAG,KAAK,YAAW,qBAAqB,CAAC,IAAI,CAAC;IAGrE,+FAA+F;IAC/F,KAAK,CAAC,IAAI,SAAS,MAAM,GAAG,OAAO,YAAW,+BAA+B,CAAC,IAAI,CAAC;IAGnF;;;OAGG;IACH,WAAW,CAAC,IAAI,SAAS,MAAM,GAAG,aAAa,YACpC,6BAA6B,CAAC,IAAI,CAAC;CAI/C,CAAC"}
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/transformers/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,aAAa,EAAW,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,KAAK,6BAA6B,EAAE,MAAM,kBAAkB,CAAC;AAC9F,OAAO,EAAE,wBAAwB,EAAE,KAAK,+BAA+B,EAAE,MAAM,YAAY,CAAC;AAE5F;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,YAAY;IACvB,+FAA+F;IAC/F,GAAG,CAAC,IAAI,SAAS,MAAM,GAAG,KAAK,YAAW,qBAAqB,CAAC,IAAI,CAAC;IAGrE,+FAA+F;IAC/F,KAAK,CAAC,IAAI,SAAS,MAAM,GAAG,OAAO,YAAW,+BAA+B,CAAC,IAAI,CAAC;IAGnF;;;OAGG;IACH,WAAW,CAAC,IAAI,SAAS,MAAM,GAAG,aAAa,YACpC,6BAA6B,CAAC,IAAI,CAAC;CAI/C,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,OAAO;IAClB,kGAAkG;;IAElG,yCAAyC;;IAEzC,wGAAwG;;;;;;;;;;;;;;;;;;;;;CAEzG,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ffmpegHlsEngine, ffprobeEngine, ladders } from './ffmpeg.js';
|
|
1
2
|
import { HlsTransformer } from './hls.js';
|
|
2
3
|
import { PlaceholderTransformer } from './placeholder.js';
|
|
3
4
|
import { MetadataProbeTransformer } from './probe.js';
|
|
@@ -39,4 +40,23 @@ export const transformers = {
|
|
|
39
40
|
return new PlaceholderTransformer(options);
|
|
40
41
|
},
|
|
41
42
|
};
|
|
43
|
+
/**
|
|
44
|
+
* Alternative engines for the built-in transformers, plugged in through their `engine` option.
|
|
45
|
+
* The ffmpeg ones spawn the system `ffmpeg` / `ffprobe` binaries (nothing bundled, nothing to
|
|
46
|
+
* install from npm) and, unlike the default mediabunny engine, can **transcode** — an
|
|
47
|
+
* adaptive-bitrate ladder instead of a single stream copy:
|
|
48
|
+
*
|
|
49
|
+
* ```ts
|
|
50
|
+
* transformers.hls({ engine: engines.ffmpegHls({ ladder: engines.ladders.standard }) })
|
|
51
|
+
* transformers.probe({ engine: engines.ffprobe() })
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
export const engines = {
|
|
55
|
+
/** HLS via system ffmpeg: remux by default, or encode `ladder` into a multi-rendition package. */
|
|
56
|
+
ffmpegHls: ffmpegHlsEngine,
|
|
57
|
+
/** Metadata probe via system ffprobe. */
|
|
58
|
+
ffprobe: ffprobeEngine,
|
|
59
|
+
/** Ready-made ladders for {@link ffmpegHlsEngine}: `standard` (360/720/1080p), `compact` (360/720p). */
|
|
60
|
+
ladders,
|
|
61
|
+
};
|
|
42
62
|
//# sourceMappingURL=factory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../../src/transformers/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAA8B,MAAM,UAAU,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAsC,MAAM,kBAAkB,CAAC;AAC9F,OAAO,EAAE,wBAAwB,EAAwC,MAAM,YAAY,CAAC;AAE5F;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,+FAA+F;IAC/F,GAAG,CAA8B,OAAO,GAAgC,EAAE;QACxE,OAAO,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IACD,+FAA+F;IAC/F,KAAK,CAAgC,OAAO,GAA0C,EAAE;QACtF,OAAO,IAAI,wBAAwB,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC;IACD;;;OAGG;IACH,WAAW,CACT,OAAO,GAAwC,EAAE;QAEjD,OAAO,IAAI,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;CACF,CAAC"}
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../../src/transformers/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,cAAc,EAA8B,MAAM,UAAU,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAsC,MAAM,kBAAkB,CAAC;AAC9F,OAAO,EAAE,wBAAwB,EAAwC,MAAM,YAAY,CAAC;AAE5F;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,+FAA+F;IAC/F,GAAG,CAA8B,OAAO,GAAgC,EAAE;QACxE,OAAO,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IACD,+FAA+F;IAC/F,KAAK,CAAgC,OAAO,GAA0C,EAAE;QACtF,OAAO,IAAI,wBAAwB,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC;IACD;;;OAGG;IACH,WAAW,CACT,OAAO,GAAwC,EAAE;QAEjD,OAAO,IAAI,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;CACF,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,kGAAkG;IAClG,SAAS,EAAE,eAAe;IAC1B,yCAAyC;IACzC,OAAO,EAAE,aAAa;IACtB,wGAAwG;IACxG,OAAO;CACR,CAAC"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import type { HlsRemuxEngine } from './hls.js';
|
|
2
|
+
import type { MediaProbeEngine } from './probe.js';
|
|
3
|
+
/**
|
|
4
|
+
* Engines backed by the system `ffmpeg` / `ffprobe` binaries — the alternative to the default
|
|
5
|
+
* mediabunny engines for hosts that have ffmpeg installed. What ffmpeg buys over mediabunny is
|
|
6
|
+
* **encoding**: mediabunny can only stream-copy in Node (no WebCodecs), while ffmpeg can transcode
|
|
7
|
+
* any source it decodes into an adaptive-bitrate ladder.
|
|
8
|
+
*
|
|
9
|
+
* Plug them into the existing transformers through their `engine` seam:
|
|
10
|
+
*
|
|
11
|
+
* ```ts
|
|
12
|
+
* import { engines, transformers } from '@adonis-agora/media'
|
|
13
|
+
*
|
|
14
|
+
* transformers: [
|
|
15
|
+
* transformers.hls({ engine: engines.ffmpegHls({ ladder: engines.ladders.standard }) }),
|
|
16
|
+
* transformers.probe({ engine: engines.ffprobe() }),
|
|
17
|
+
* ]
|
|
18
|
+
* ```
|
|
19
|
+
*
|
|
20
|
+
* No npm dependency: the binaries are spawned, never bundled. A missing binary surfaces as
|
|
21
|
+
* {@link TransformerRuntimeMissingError}; a failing run as {@link FfmpegFailedError} carrying the
|
|
22
|
+
* tail of ffmpeg's stderr.
|
|
23
|
+
*/
|
|
24
|
+
/** One rung of an adaptive-bitrate ladder. */
|
|
25
|
+
export interface FfmpegRendition {
|
|
26
|
+
/** Output height in px; the width follows the source aspect ratio (rounded to even). */
|
|
27
|
+
height: number;
|
|
28
|
+
/** Target video bitrate, ffmpeg syntax (`'2800k'`, `'5M'`). Caps peak rate at 1.5× this. */
|
|
29
|
+
videoBitrate: string;
|
|
30
|
+
/** Audio bitrate, ffmpeg syntax. Default `'128k'`. */
|
|
31
|
+
audioBitrate?: string;
|
|
32
|
+
}
|
|
33
|
+
export interface FfmpegBinaryOptions {
|
|
34
|
+
/** Path or name of the `ffmpeg` binary. Default `'ffmpeg'` (resolved on `PATH`). */
|
|
35
|
+
ffmpegPath?: string;
|
|
36
|
+
/** Path or name of the `ffprobe` binary. Default `'ffprobe'` (resolved on `PATH`). */
|
|
37
|
+
ffprobePath?: string;
|
|
38
|
+
}
|
|
39
|
+
export interface FfmpegHlsEngineOptions extends FfmpegBinaryOptions {
|
|
40
|
+
/**
|
|
41
|
+
* Renditions to encode. Omit for **remux** (stream copy, no re-encode — fast, but the source must
|
|
42
|
+
* already be MPEG-TS compatible, e.g. h264/aac). With a ladder, every rendition is transcoded to
|
|
43
|
+
* h264/aac and listed in the master playlist. Rungs taller than the source are dropped (never
|
|
44
|
+
* upscale); if every rung is taller, the smallest one is kept at the source height.
|
|
45
|
+
*/
|
|
46
|
+
ladder?: FfmpegRendition[];
|
|
47
|
+
/** x264 preset when transcoding. Default `'veryfast'`. */
|
|
48
|
+
preset?: string;
|
|
49
|
+
/** Extra ffmpeg arguments, inserted right before the HLS muxer options. */
|
|
50
|
+
extraArgs?: string[];
|
|
51
|
+
}
|
|
52
|
+
/** Ready-made ladders. */
|
|
53
|
+
export declare const ladders: {
|
|
54
|
+
/** 360p / 720p / 1080p — a sane default for course videos. */
|
|
55
|
+
standard: ({
|
|
56
|
+
height: number;
|
|
57
|
+
videoBitrate: string;
|
|
58
|
+
audioBitrate: string;
|
|
59
|
+
} | {
|
|
60
|
+
audioBitrate?: never;
|
|
61
|
+
height: number;
|
|
62
|
+
videoBitrate: string;
|
|
63
|
+
})[];
|
|
64
|
+
/** 360p / 720p — lighter on storage and encode time. */
|
|
65
|
+
compact: ({
|
|
66
|
+
height: number;
|
|
67
|
+
videoBitrate: string;
|
|
68
|
+
audioBitrate: string;
|
|
69
|
+
} | {
|
|
70
|
+
audioBitrate?: never;
|
|
71
|
+
height: number;
|
|
72
|
+
videoBitrate: string;
|
|
73
|
+
})[];
|
|
74
|
+
};
|
|
75
|
+
/** The rungs actually encoded for a source of `sourceHeight` px: never upscale, never empty. */
|
|
76
|
+
export declare function effectiveLadder(ladder: FfmpegRendition[], sourceHeight: number | undefined): FfmpegRendition[];
|
|
77
|
+
/**
|
|
78
|
+
* Build the ffmpeg argument list for one HLS run. Exported for tests and for anyone wrapping the
|
|
79
|
+
* engine; `renditions` empty means remux.
|
|
80
|
+
*/
|
|
81
|
+
export declare function buildHlsArgs(input: {
|
|
82
|
+
sourcePath: string;
|
|
83
|
+
outputDir: string;
|
|
84
|
+
entryName: string;
|
|
85
|
+
targetDuration: number;
|
|
86
|
+
hasAudio: boolean;
|
|
87
|
+
renditions: FfmpegRendition[];
|
|
88
|
+
preset: string;
|
|
89
|
+
extraArgs: string[];
|
|
90
|
+
}): string[];
|
|
91
|
+
/**
|
|
92
|
+
* {@link HlsRemuxEngine} backed by the system ffmpeg: remux by default, or an adaptive-bitrate
|
|
93
|
+
* ladder when `ladder` is set. The output is the same shape the mediabunny engine produces — a
|
|
94
|
+
* master playlist at `entryName` plus per-rendition playlists and MPEG-TS segments — so delivery
|
|
95
|
+
* (`MediaHlsDeliveryHandler`, playlist rewriting) works unchanged.
|
|
96
|
+
*/
|
|
97
|
+
export declare function ffmpegHlsEngine(options?: FfmpegHlsEngineOptions): HlsRemuxEngine;
|
|
98
|
+
/**
|
|
99
|
+
* {@link MediaProbeEngine} backed by the system ffprobe. Differences from the mediabunny probe:
|
|
100
|
+
* `format` is ffprobe's `format_name` (e.g. `'mov,mp4,m4a,3gp,3g2,mj2'`), and `mimeType` is not
|
|
101
|
+
* reported — ffprobe has no MIME/codecs-string notion; the record's own `mimeType` still applies.
|
|
102
|
+
*/
|
|
103
|
+
export declare function ffprobeEngine(options?: Pick<FfmpegBinaryOptions, 'ffprobePath'>): MediaProbeEngine;
|
|
104
|
+
//# sourceMappingURL=ffmpeg.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ffmpeg.d.ts","sourceRoot":"","sources":["../../../src/transformers/ffmpeg.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAoC,MAAM,UAAU,CAAC;AACjF,OAAO,KAAK,EAAE,gBAAgB,EAAqB,MAAM,YAAY,CAAC;AAEtE;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,8CAA8C;AAC9C,MAAM,WAAW,eAAe;IAC9B,wFAAwF;IACxF,MAAM,EAAE,MAAM,CAAC;IACf,4FAA4F;IAC5F,YAAY,EAAE,MAAM,CAAC;IACrB,sDAAsD;IACtD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,oFAAoF;IACpF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sFAAsF;IACtF,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,sBAAuB,SAAQ,mBAAmB;IACjE;;;;;OAKG;IACH,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;IAC3B,0DAA0D;IAC1D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAMD,0BAA0B;AAC1B,eAAO,MAAM,OAAO;IAClB,8DAA8D;;;;;;;;;;IAM9D,wDAAwD;;;;;;;;;;CAKb,CAAC;AA0G9C,gGAAgG;AAChG,wBAAgB,eAAe,CAC7B,MAAM,EAAE,eAAe,EAAE,EACzB,YAAY,EAAE,MAAM,GAAG,SAAS,GAC/B,eAAe,EAAE,CAOnB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB,GAAG,MAAM,EAAE,CAgEX;AAWD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,GAAE,sBAA2B,GAAG,cAAc,CAqDpF;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,OAAO,GAAE,IAAI,CAAC,mBAAmB,EAAE,aAAa,CAAM,GACrD,gBAAgB,CAOlB"}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { FfmpegFailedError, HlsSourceUnsupportedError, TransformerRuntimeMissingError, } from '../errors.js';
|
|
4
|
+
/** The rendition name ffmpeg's `%v` expands to; playlist `playlist-0.m3u8`, segments `segment-0-3.ts`. */
|
|
5
|
+
const PLAYLIST_PATTERN = 'playlist-%v.m3u8';
|
|
6
|
+
const SEGMENT_PATTERN = 'segment-%v-%d.ts';
|
|
7
|
+
/** Ready-made ladders. */
|
|
8
|
+
export const ladders = {
|
|
9
|
+
/** 360p / 720p / 1080p — a sane default for course videos. */
|
|
10
|
+
standard: [
|
|
11
|
+
{ height: 360, videoBitrate: '800k', audioBitrate: '96k' },
|
|
12
|
+
{ height: 720, videoBitrate: '2800k' },
|
|
13
|
+
{ height: 1080, videoBitrate: '5000k' },
|
|
14
|
+
],
|
|
15
|
+
/** 360p / 720p — lighter on storage and encode time. */
|
|
16
|
+
compact: [
|
|
17
|
+
{ height: 360, videoBitrate: '800k', audioBitrate: '96k' },
|
|
18
|
+
{ height: 720, videoBitrate: '2800k' },
|
|
19
|
+
],
|
|
20
|
+
};
|
|
21
|
+
/** Run a binary to completion, collecting stdout and the tail of stderr. */
|
|
22
|
+
function run(binary, args, transformerName) {
|
|
23
|
+
return new Promise((resolve, reject) => {
|
|
24
|
+
const child = spawn(binary, args, { stdio: ['ignore', 'pipe', 'pipe'] });
|
|
25
|
+
const out = [];
|
|
26
|
+
let err = '';
|
|
27
|
+
child.stdout.on('data', (chunk) => out.push(chunk));
|
|
28
|
+
child.stderr.on('data', (chunk) => {
|
|
29
|
+
// ffmpeg is chatty on stderr; only the end explains a failure.
|
|
30
|
+
err = (err + chunk.toString()).slice(-4000);
|
|
31
|
+
});
|
|
32
|
+
child.on('error', (error) => {
|
|
33
|
+
if (error.code === 'ENOENT') {
|
|
34
|
+
reject(new TransformerRuntimeMissingError(transformerName, `the '${binary}' binary`, 'Install ffmpeg on the host (e.g. `apt-get install ffmpeg`, `apk add ffmpeg`) or point `ffmpegPath`/`ffprobePath` at it.'));
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
reject(error);
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
child.on('close', (code) => {
|
|
41
|
+
if (code === 0)
|
|
42
|
+
resolve({ stdout: Buffer.concat(out).toString(), stderr: err });
|
|
43
|
+
else
|
|
44
|
+
reject(new FfmpegFailedError(binary, code, err));
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
async function probeSource(ffprobePath, sourcePath, transformerName) {
|
|
49
|
+
const { stdout } = await run(ffprobePath, ['-v', 'error', '-print_format', 'json', '-show_format', '-show_streams', sourcePath], transformerName);
|
|
50
|
+
let parsed;
|
|
51
|
+
try {
|
|
52
|
+
parsed = JSON.parse(stdout);
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
throw new FfmpegFailedError(ffprobePath, 0, `unparseable ffprobe output: ${stdout.slice(0, 200)}`);
|
|
56
|
+
}
|
|
57
|
+
const streams = parsed.streams ?? [];
|
|
58
|
+
const video = streams.find((s) => s.codec_type === 'video');
|
|
59
|
+
const audio = streams.find((s) => s.codec_type === 'audio');
|
|
60
|
+
const summary = { hasVideo: Boolean(video), hasAudio: Boolean(audio) };
|
|
61
|
+
if (parsed.format?.format_name)
|
|
62
|
+
summary.format = parsed.format.format_name;
|
|
63
|
+
const duration = Number(parsed.format?.duration);
|
|
64
|
+
if (Number.isFinite(duration))
|
|
65
|
+
summary.durationSeconds = duration;
|
|
66
|
+
if (video) {
|
|
67
|
+
// Phone videos store landscape frames plus a rotation; report the size as displayed.
|
|
68
|
+
const rotation = Math.abs(Number(video.side_data_list?.find((d) => d.rotation !== undefined)?.rotation ??
|
|
69
|
+
video.tags?.rotate ??
|
|
70
|
+
0));
|
|
71
|
+
const swap = rotation === 90 || rotation === 270;
|
|
72
|
+
if (video.width !== undefined && video.height !== undefined) {
|
|
73
|
+
summary.width = swap ? video.height : video.width;
|
|
74
|
+
summary.height = swap ? video.width : video.height;
|
|
75
|
+
}
|
|
76
|
+
summary.videoCodec = video.codec_name ?? null;
|
|
77
|
+
}
|
|
78
|
+
if (audio) {
|
|
79
|
+
summary.audioCodec = audio.codec_name ?? null;
|
|
80
|
+
const sampleRate = Number(audio.sample_rate);
|
|
81
|
+
if (Number.isFinite(sampleRate))
|
|
82
|
+
summary.audioSampleRate = sampleRate;
|
|
83
|
+
if (audio.channels !== undefined)
|
|
84
|
+
summary.audioChannels = audio.channels;
|
|
85
|
+
}
|
|
86
|
+
return summary;
|
|
87
|
+
}
|
|
88
|
+
/** The rungs actually encoded for a source of `sourceHeight` px: never upscale, never empty. */
|
|
89
|
+
export function effectiveLadder(ladder, sourceHeight) {
|
|
90
|
+
const sorted = [...ladder].sort((a, b) => a.height - b.height);
|
|
91
|
+
if (!sourceHeight)
|
|
92
|
+
return sorted;
|
|
93
|
+
const fitting = sorted.filter((r) => r.height <= sourceHeight);
|
|
94
|
+
if (fitting.length > 0)
|
|
95
|
+
return fitting;
|
|
96
|
+
const smallest = sorted[0];
|
|
97
|
+
return smallest ? [{ ...smallest, height: sourceHeight - (sourceHeight % 2) }] : [];
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Build the ffmpeg argument list for one HLS run. Exported for tests and for anyone wrapping the
|
|
101
|
+
* engine; `renditions` empty means remux.
|
|
102
|
+
*/
|
|
103
|
+
export function buildHlsArgs(input) {
|
|
104
|
+
const { sourcePath, outputDir, entryName, targetDuration, hasAudio, renditions, preset } = input;
|
|
105
|
+
const args = ['-hide_banner', '-y', '-i', sourcePath];
|
|
106
|
+
const streamMap = [];
|
|
107
|
+
if (renditions.length === 0) {
|
|
108
|
+
args.push('-map', '0:v:0');
|
|
109
|
+
if (hasAudio)
|
|
110
|
+
args.push('-map', '0:a:0');
|
|
111
|
+
args.push('-c', 'copy');
|
|
112
|
+
streamMap.push(hasAudio ? 'v:0,a:0' : 'v:0');
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
const n = renditions.length;
|
|
116
|
+
const splits = renditions.map((_, i) => `[v${i}]`).join('');
|
|
117
|
+
const scales = renditions.map((r, i) => `[v${i}]scale=-2:${r.height}[v${i}o]`).join(';');
|
|
118
|
+
args.push('-filter_complex', `[0:v:0]split=${n}${splits};${scales}`);
|
|
119
|
+
renditions.forEach((r, i) => {
|
|
120
|
+
const peak = `${Math.round(parseBitrate(r.videoBitrate) * 1.5)}`;
|
|
121
|
+
args.push('-map', `[v${i}o]`, `-c:v:${i}`, 'libx264', `-b:v:${i}`, r.videoBitrate, `-maxrate:v:${i}`, peak, `-bufsize:v:${i}`, `${Number(peak) * 2}`);
|
|
122
|
+
if (hasAudio) {
|
|
123
|
+
args.push('-map', '0:a:0', `-c:a:${i}`, 'aac', `-b:a:${i}`, r.audioBitrate ?? '128k');
|
|
124
|
+
}
|
|
125
|
+
streamMap.push(hasAudio ? `v:${i},a:${i}` : `v:${i}`);
|
|
126
|
+
});
|
|
127
|
+
// Segment boundaries must land on keyframes for every rendition to switch cleanly.
|
|
128
|
+
args.push('-preset', preset, '-pix_fmt', 'yuv420p', '-sc_threshold', '0', '-force_key_frames', `expr:gte(t,n_forced*${targetDuration})`);
|
|
129
|
+
}
|
|
130
|
+
args.push(...input.extraArgs, '-f', 'hls', '-hls_time', String(targetDuration), '-hls_playlist_type', 'vod', '-hls_segment_filename', join(outputDir, SEGMENT_PATTERN), '-master_pl_name', entryName, '-var_stream_map', streamMap.join(' '), join(outputDir, PLAYLIST_PATTERN));
|
|
131
|
+
return args;
|
|
132
|
+
}
|
|
133
|
+
/** `'2800k'` → 2_800_000. Plain numbers pass through. */
|
|
134
|
+
function parseBitrate(value) {
|
|
135
|
+
const match = /^(\d+(?:\.\d+)?)([kKmM]?)$/.exec(value.trim());
|
|
136
|
+
if (!match)
|
|
137
|
+
throw new Error(`Invalid bitrate "${value}" (expected e.g. '800k', '5M', '128000')`);
|
|
138
|
+
const n = Number(match[1]);
|
|
139
|
+
const unit = match[2]?.toLowerCase();
|
|
140
|
+
return unit === 'k' ? n * 1_000 : unit === 'm' ? n * 1_000_000 : n;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* {@link HlsRemuxEngine} backed by the system ffmpeg: remux by default, or an adaptive-bitrate
|
|
144
|
+
* ladder when `ladder` is set. The output is the same shape the mediabunny engine produces — a
|
|
145
|
+
* master playlist at `entryName` plus per-rendition playlists and MPEG-TS segments — so delivery
|
|
146
|
+
* (`MediaHlsDeliveryHandler`, playlist rewriting) works unchanged.
|
|
147
|
+
*/
|
|
148
|
+
export function ffmpegHlsEngine(options = {}) {
|
|
149
|
+
const ffmpegPath = options.ffmpegPath ?? 'ffmpeg';
|
|
150
|
+
const ffprobePath = options.ffprobePath ?? 'ffprobe';
|
|
151
|
+
// Validate the ladder while the config is in hand — a bad rung would otherwise fail deep inside
|
|
152
|
+
// libx264 with a cryptic error on the first transcode.
|
|
153
|
+
for (const r of options.ladder ?? []) {
|
|
154
|
+
if (!Number.isInteger(r.height) || r.height <= 0 || r.height % 2 !== 0) {
|
|
155
|
+
throw new Error(`Invalid rendition height ${r.height} (expected a positive even integer — h264 needs even dimensions)`);
|
|
156
|
+
}
|
|
157
|
+
parseBitrate(r.videoBitrate);
|
|
158
|
+
if (r.audioBitrate !== undefined)
|
|
159
|
+
parseBitrate(r.audioBitrate);
|
|
160
|
+
}
|
|
161
|
+
return {
|
|
162
|
+
async remux(request) {
|
|
163
|
+
const summary = await probeSource(ffprobePath, request.sourcePath, 'hls');
|
|
164
|
+
// Same definitive signal the mediabunny engine gives for an unusable source, so callers
|
|
165
|
+
// branch on one error regardless of engine (and don't retry an audio-only file forever).
|
|
166
|
+
if (!summary.hasVideo) {
|
|
167
|
+
throw new HlsSourceUnsupportedError('the source has no video stream', 'HLS packaging needs a video track; this file is audio-only or not a video.');
|
|
168
|
+
}
|
|
169
|
+
const renditions = options.ladder ? effectiveLadder(options.ladder, summary.height) : [];
|
|
170
|
+
await run(ffmpegPath, buildHlsArgs({
|
|
171
|
+
sourcePath: request.sourcePath,
|
|
172
|
+
outputDir: request.outputDir,
|
|
173
|
+
entryName: request.entryName,
|
|
174
|
+
targetDuration: request.targetDuration,
|
|
175
|
+
hasAudio: summary.hasAudio,
|
|
176
|
+
renditions,
|
|
177
|
+
preset: options.preset ?? 'veryfast',
|
|
178
|
+
extraArgs: options.extraArgs ?? [],
|
|
179
|
+
}), 'hls');
|
|
180
|
+
const result = {};
|
|
181
|
+
if (summary.durationSeconds !== undefined)
|
|
182
|
+
result.durationSeconds = summary.durationSeconds;
|
|
183
|
+
if (summary.width !== undefined)
|
|
184
|
+
result.width = summary.width;
|
|
185
|
+
if (summary.height !== undefined)
|
|
186
|
+
result.height = summary.height;
|
|
187
|
+
result.videoCodec = renditions.length > 0 ? 'h264' : (summary.videoCodec ?? null);
|
|
188
|
+
if (summary.hasAudio)
|
|
189
|
+
result.audioCodec = renditions.length > 0 ? 'aac' : (summary.audioCodec ?? null);
|
|
190
|
+
return result;
|
|
191
|
+
},
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* {@link MediaProbeEngine} backed by the system ffprobe. Differences from the mediabunny probe:
|
|
196
|
+
* `format` is ffprobe's `format_name` (e.g. `'mov,mp4,m4a,3gp,3g2,mj2'`), and `mimeType` is not
|
|
197
|
+
* reported — ffprobe has no MIME/codecs-string notion; the record's own `mimeType` still applies.
|
|
198
|
+
*/
|
|
199
|
+
export function ffprobeEngine(options = {}) {
|
|
200
|
+
const ffprobePath = options.ffprobePath ?? 'ffprobe';
|
|
201
|
+
return {
|
|
202
|
+
async probe(sourcePath) {
|
|
203
|
+
return probeSource(ffprobePath, sourcePath, 'probe');
|
|
204
|
+
},
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=ffmpeg.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ffmpeg.js","sourceRoot":"","sources":["../../../src/transformers/ffmpeg.ts"],"names":[],"mappings":"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"}
|
|
@@ -66,7 +66,10 @@ export interface HlsTransformerOptions<Name extends string = 'hls'> {
|
|
|
66
66
|
targetDuration?: number;
|
|
67
67
|
/** WebCodecs implementation for the re-encode fallback (see {@link WebCodecsProvider}). */
|
|
68
68
|
webcodecs?: WebCodecsProvider;
|
|
69
|
-
/**
|
|
69
|
+
/**
|
|
70
|
+
* Replace the mediabunny engine — e.g. `engines.ffmpegHls({ ladder })` to transcode an
|
|
71
|
+
* adaptive-bitrate ladder with the system ffmpeg, or your own {@link HlsRemuxEngine}.
|
|
72
|
+
*/
|
|
70
73
|
engine?: HlsRemuxEngine;
|
|
71
74
|
}
|
|
72
75
|
/** File name of the entry (master) playlist an {@link HlsTransformer} produces. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hls.d.ts","sourceRoot":"","sources":["../../../src/transformers/hls.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAI1F;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAEvE,gGAAgG;AAChG,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAAC;AAEhE;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAC3C,QAAQ,CAAC,EAAE,iBAAiB,GAC3B,OAAO,CAAC,gBAAgB,CAAC,CAI3B;AAED,kDAAkD;AAClD,MAAM,WAAW,eAAe;IAC9B,qCAAqC;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,6FAA6F;IAC7F,SAAS,EAAE,MAAM,CAAC;IAClB,mEAAmE;IACnE,SAAS,EAAE,MAAM,CAAC;IAClB,gDAAgD;IAChD,cAAc,EAAE,MAAM,CAAC;IACvB,yEAAyE;IACzE,SAAS,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;CAC3C;AAED,sGAAsG;AACtG,MAAM,WAAW,eAAe;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;CAC3D;AAED,MAAM,WAAW,qBAAqB,CAAC,IAAI,SAAS,MAAM,GAAG,KAAK;IAChE,sDAAsD;IACtD,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,2DAA2D;IAC3D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,2FAA2F;IAC3F,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B
|
|
1
|
+
{"version":3,"file":"hls.d.ts","sourceRoot":"","sources":["../../../src/transformers/hls.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAI1F;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAEvE,gGAAgG;AAChG,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAAC;AAEhE;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAC3C,QAAQ,CAAC,EAAE,iBAAiB,GAC3B,OAAO,CAAC,gBAAgB,CAAC,CAI3B;AAED,kDAAkD;AAClD,MAAM,WAAW,eAAe;IAC9B,qCAAqC;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,6FAA6F;IAC7F,SAAS,EAAE,MAAM,CAAC;IAClB,mEAAmE;IACnE,SAAS,EAAE,MAAM,CAAC;IAClB,gDAAgD;IAChD,cAAc,EAAE,MAAM,CAAC;IACvB,yEAAyE;IACzE,SAAS,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;CAC3C;AAED,sGAAsG;AACtG,MAAM,WAAW,eAAe;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;CAC3D;AAED,MAAM,WAAW,qBAAqB,CAAC,IAAI,SAAS,MAAM,GAAG,KAAK;IAChE,sDAAsD;IACtD,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,2DAA2D;IAC3D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,2FAA2F;IAC3F,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B;;;OAGG;IACH,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB;AAED,mFAAmF;AACnF,eAAO,MAAM,kBAAkB,eAAe,CAAC;AAE/C;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,cAAc,CAAC,IAAI,SAAS,MAAM,GAAG,KAAK,CAAE,YAAW,WAAW;IAC7E,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgC;IAC1D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6B;IAEpD,YAAY,OAAO,GAAE,qBAAqB,CAAC,IAAI,CAAM,EAMpD;IAEK,SAAS,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,eAAe,CAAC,CA6CrE;CACF;AAED,iGAAiG;AACjG,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAElF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hls.js","sourceRoot":"","sources":["../../../src/transformers/hls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAqBlD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,QAA4B;IAE5B,IAAK,UAAsC,CAAC,YAAY,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IACxF,IAAI,QAAQ,IAAI,CAAC,MAAM,QAAQ,EAAE,CAAC,CAAC,YAAY,KAAK,SAAS;QAAE,OAAO,UAAU,CAAC;IACjF,OAAO,QAAQ,CAAC;AAClB,CAAC;
|
|
1
|
+
{"version":3,"file":"hls.js","sourceRoot":"","sources":["../../../src/transformers/hls.ts"],"names":[],"mappings":"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"}
|
|
@@ -82,4 +82,12 @@ export declare class PlaceholderTransformer<Name extends string = 'placeholder'>
|
|
|
82
82
|
* ```
|
|
83
83
|
*/
|
|
84
84
|
export declare function placeholderOf(record: MediaRecord): ImagePlaceholder | null;
|
|
85
|
+
/**
|
|
86
|
+
* sharp-backed {@link PlaceholderEngine}, importing the optional peer on first use.
|
|
87
|
+
*
|
|
88
|
+
* @internal `importSharp` is the seam tests use to simulate a host without the peer.
|
|
89
|
+
*/
|
|
90
|
+
export declare function loadSharpPlaceholderEngine(transformerName: string, importSharp?: () => Promise<{
|
|
91
|
+
default: typeof import('sharp').default;
|
|
92
|
+
}>): Promise<PlaceholderEngine>;
|
|
85
93
|
//# sourceMappingURL=placeholder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"placeholder.d.ts","sourceRoot":"","sources":["../../../src/transformers/placeholder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAE1F,qFAAqF;AACrF,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB,mGAAmG;IACnG,KAAK,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;CACrF;AAED,MAAM,WAAW,6BAA6B,CAAC,IAAI,SAAS,MAAM,GAAG,aAAa;IAChF,8DAA8D;IAC9D,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ;;;;;OAKG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,iGAAiG;IACjG,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,MAAM,CAAC,EAAE,iBAAiB,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,sBAAsB,CAAC,IAAI,SAAS,MAAM,GAAG,aAAa,CAAE,YAAW,WAAW;IAC7F,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgC;IAEvD,YAAY,OAAO,GAAE,6BAA6B,CAAC,IAAI,CAAM,EAK5D;IAEK,SAAS,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,eAAe,CAAC,CAQrE;CACF;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,WAAW,GAAG,gBAAgB,GAAG,IAAI,CAmB1E"}
|
|
1
|
+
{"version":3,"file":"placeholder.d.ts","sourceRoot":"","sources":["../../../src/transformers/placeholder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAE1F,qFAAqF;AACrF,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB,mGAAmG;IACnG,KAAK,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;CACrF;AAED,MAAM,WAAW,6BAA6B,CAAC,IAAI,SAAS,MAAM,GAAG,aAAa;IAChF,8DAA8D;IAC9D,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ;;;;;OAKG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,iGAAiG;IACjG,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,MAAM,CAAC,EAAE,iBAAiB,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,sBAAsB,CAAC,IAAI,SAAS,MAAM,GAAG,aAAa,CAAE,YAAW,WAAW;IAC7F,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgC;IAEvD,YAAY,OAAO,GAAE,6BAA6B,CAAC,IAAI,CAAM,EAK5D;IAEK,SAAS,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,eAAe,CAAC,CAQrE;CACF;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,WAAW,GAAG,gBAAgB,GAAG,IAAI,CAmB1E;AAED;;;;GAIG;AACH,wBAAsB,0BAA0B,CAC9C,eAAe,EAAE,MAAM,EACvB,WAAW,GAAE,MAAM,OAAO,CAAC;IAAE,OAAO,EAAE,cAAc,OAAO,EAAE,OAAO,CAAA;CAAE,CAAyB,GAC9F,OAAO,CAAC,iBAAiB,CAAC,CA8C5B"}
|
|
@@ -67,11 +67,15 @@ export function placeholderOf(record) {
|
|
|
67
67
|
}
|
|
68
68
|
return null;
|
|
69
69
|
}
|
|
70
|
-
/**
|
|
71
|
-
|
|
70
|
+
/**
|
|
71
|
+
* sharp-backed {@link PlaceholderEngine}, importing the optional peer on first use.
|
|
72
|
+
*
|
|
73
|
+
* @internal `importSharp` is the seam tests use to simulate a host without the peer.
|
|
74
|
+
*/
|
|
75
|
+
export async function loadSharpPlaceholderEngine(transformerName, importSharp = () => import('sharp')) {
|
|
72
76
|
let sharp;
|
|
73
77
|
try {
|
|
74
|
-
sharp = (await
|
|
78
|
+
sharp = (await importSharp()).default;
|
|
75
79
|
}
|
|
76
80
|
catch (error) {
|
|
77
81
|
// Only a missing `sharp` itself — a broken install missing a transitive dep must surface as is.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"placeholder.js","sourceRoot":"","sources":["../../../src/transformers/placeholder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,MAAM,cAAc,CAAC;AAqD9D;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,OAAO,sBAAsB;IACxB,IAAI,CAAO;IACX,KAAK,CAAU;IACP,OAAO,CAAqB;IAC5B,MAAM,CAAgC;IAEvD,YAAY,OAAO,GAAwC,EAAE;QAC3D,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAK,aAAsB,CAAC;QACpD,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC;QACnC,IAAI,CAAC,OAAO,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;QAC5E,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,OAA2B;QACzC,6FAA6F;QAC7F,6FAA6F;QAC7F,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;QACpC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;QAC5F,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5E,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,OAAO,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAClF,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,WAAW,EAAE,EAAE,CAAC;IACtC,CAAC;CACF;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAAC,MAAmB;IAC/C,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;QAC3D,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;QAC7B,IACE,IAAI;YACJ,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ;YAChC,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ;YAC9B,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;YAC3B,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAC5B,CAAC;YACD,OAAO;gBACL,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,KAAK,EAAE,IAAI,CAAC,KAAe;gBAC3B,MAAM,EAAE,IAAI,CAAC,MAAgB;gBAC7B,KAAK,EAAE,IAAI,CAAC,KAAK;aAClB,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"placeholder.js","sourceRoot":"","sources":["../../../src/transformers/placeholder.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,7 +30,7 @@ export interface MetadataProbeTransformerOptions<Name extends string = 'probe'>
|
|
|
30
30
|
* remote disk that read is a download. Opt in for collections of small files.
|
|
31
31
|
*/
|
|
32
32
|
eager?: boolean;
|
|
33
|
-
/** Replace the mediabunny engine (
|
|
33
|
+
/** Replace the mediabunny engine — e.g. `engines.ffprobe()`, or your own {@link MediaProbeEngine}. */
|
|
34
34
|
engine?: MediaProbeEngine;
|
|
35
35
|
}
|
|
36
36
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"probe.d.ts","sourceRoot":"","sources":["../../../src/transformers/probe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAK1F,wFAAwF;AACxF,MAAM,WAAW,iBAAiB;IAChC,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACvD;AAED,MAAM,WAAW,+BAA+B,CAAC,IAAI,SAAS,MAAM,GAAG,OAAO;IAC5E,wDAAwD;IACxD,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,
|
|
1
|
+
{"version":3,"file":"probe.d.ts","sourceRoot":"","sources":["../../../src/transformers/probe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAK1F,wFAAwF;AACxF,MAAM,WAAW,iBAAiB;IAChC,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACvD;AAED,MAAM,WAAW,+BAA+B,CAAC,IAAI,SAAS,MAAM,GAAG,OAAO;IAC5E,wDAAwD;IACxD,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,sGAAsG;IACtG,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC3B;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,wBAAwB,CAAC,IAAI,SAAS,MAAM,GAAG,OAAO,CAAE,YAAW,WAAW;IACzF,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA+B;IAEtD,YAAY,OAAO,GAAE,+BAA+B,CAAC,IAAI,CAAM,EAI9D;IAEK,SAAS,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,eAAe,CAAC,CAIrE;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@adonis-agora/media",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.22.0",
|
|
4
4
|
"description": "Media-library for AdonisJS — owner collections (MIME whitelist, single-file replace, ordering), image conversions (eager/lazy), pluggable content transformers (HLS video via mediabunny, metadata probe, image blur-up placeholder), and column attachments, all on top of @adonisjs/drive. Pluggable MediaStore (in-memory + Lucid) and ImageProcessor (sharp). Part of the Agora ecosystem.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -147,12 +147,12 @@
|
|
|
147
147
|
},
|
|
148
148
|
"devDependencies": {
|
|
149
149
|
"@adonis-agora/media-dashboard": "9.0.0",
|
|
150
|
-
"@adonis-agora/media-react": "0.
|
|
150
|
+
"@adonis-agora/media-react": "0.7.0",
|
|
151
151
|
"@adonisjs/assembler": "8.6.0",
|
|
152
152
|
"@adonisjs/core": "7.6.0",
|
|
153
153
|
"@adonisjs/drive": "4.0.0",
|
|
154
154
|
"@adonisjs/lucid": "22.4.2",
|
|
155
|
-
"@aws-sdk/client-s3": "3.
|
|
155
|
+
"@aws-sdk/client-s3": "3.1153.0",
|
|
156
156
|
"@smithy/util-stream": "4.8.2",
|
|
157
157
|
"@tanstack/intent": "0.5.6",
|
|
158
158
|
"@types/better-sqlite3": "9.6.0",
|