@bendyline/squisq-video-react 1.0.5 → 1.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.
@@ -0,0 +1,28 @@
1
+ // src/mp4Mux.ts
2
+ import { Muxer, ArrayBufferTarget } from "mp4-muxer";
3
+ function createMp4Muxer(options) {
4
+ const target = new ArrayBufferTarget();
5
+ const muxer = new Muxer({
6
+ target,
7
+ video: {
8
+ codec: "avc",
9
+ width: options.width,
10
+ height: options.height
11
+ },
12
+ fastStart: "in-memory"
13
+ });
14
+ return {
15
+ addVideoChunk(chunk, meta) {
16
+ muxer.addVideoChunk(chunk, meta);
17
+ },
18
+ finalize() {
19
+ muxer.finalize();
20
+ return target.buffer;
21
+ }
22
+ };
23
+ }
24
+
25
+ export {
26
+ createMp4Muxer
27
+ };
28
+ //# sourceMappingURL=chunk-LZYWP4HB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/mp4Mux.ts"],"sourcesContent":["/**\n * mp4Mux — Thin wrapper around mp4-muxer for WebCodecs encoding.\n *\n * Creates a Muxer instance configured for H.264 video, accumulates\n * encoded chunks, and produces a final MP4 ArrayBuffer.\n */\n\nimport { Muxer, ArrayBufferTarget } from 'mp4-muxer';\n\nexport interface Mp4MuxerOptions {\n width: number;\n height: number;\n fps: number;\n}\n\nexport interface Mp4MuxerHandle {\n /** Add an encoded video chunk to the muxer. */\n addVideoChunk(chunk: EncodedVideoChunk, meta?: EncodedVideoChunkMetadata): void;\n /** Finalize and return the MP4 as an ArrayBuffer. */\n finalize(): ArrayBuffer;\n}\n\n/**\n * Create an MP4 muxer configured for H.264 video.\n */\nexport function createMp4Muxer(options: Mp4MuxerOptions): Mp4MuxerHandle {\n const target = new ArrayBufferTarget();\n\n const muxer = new Muxer({\n target,\n video: {\n codec: 'avc',\n width: options.width,\n height: options.height,\n },\n fastStart: 'in-memory',\n });\n\n return {\n addVideoChunk(chunk: EncodedVideoChunk, meta?: EncodedVideoChunkMetadata) {\n muxer.addVideoChunk(chunk, meta);\n },\n\n finalize(): ArrayBuffer {\n muxer.finalize();\n return target.buffer;\n },\n };\n}\n"],"mappings":";AAOA,SAAS,OAAO,yBAAyB;AAkBlC,SAAS,eAAe,SAA0C;AACvE,QAAM,SAAS,IAAI,kBAAkB;AAErC,QAAM,QAAQ,IAAI,MAAM;AAAA,IACtB;AAAA,IACA,OAAO;AAAA,MACL,OAAO;AAAA,MACP,OAAO,QAAQ;AAAA,MACf,QAAQ,QAAQ;AAAA,IAClB;AAAA,IACA,WAAW;AAAA,EACb,CAAC;AAED,SAAO;AAAA,IACL,cAAc,OAA0B,MAAkC;AACxE,YAAM,cAAc,OAAO,IAAI;AAAA,IACjC;AAAA,IAEA,WAAwB;AACtB,YAAM,SAAS;AACf,aAAO,OAAO;AAAA,IAChB;AAAA,EACF;AACF;","names":[]}
@@ -52,8 +52,8 @@ export interface VideoExportResult {
52
52
  phase: string;
53
53
  /** Video duration detected from the doc (seconds) */
54
54
  duration: number;
55
- /** Encoder backend ('webcodecs' when active, null when idle) */
56
- backend: 'webcodecs' | null;
55
+ /** Encoder backend ('webcodecs' when WebCodecs H.264 active, 'ffmpeg-wasm' when worker fallback active, null when idle) */
56
+ backend: 'webcodecs' | 'ffmpeg-wasm' | null;
57
57
  /** Blob download URL (populated when state === 'complete') */
58
58
  downloadUrl: string | null;
59
59
  /** File size in bytes (populated when state === 'complete') */
@@ -1 +1 @@
1
- {"version":3,"file":"useVideoExport.d.ts","sourceRoot":"","sources":["../../src/hooks/useVideoExport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAM3D,MAAM,MAAM,gBAAgB,GACxB,MAAM,GACN,WAAW,GACX,WAAW,GACX,UAAU,GACV,UAAU,GACV,OAAO,CAAC;AAEZ,MAAM,WAAW,iBAAiB;IAChC,kDAAkD;IAClD,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,sCAAsC;IACtC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B;;;OAGG;IACH,MAAM,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAClC;;;OAGG;IACH,KAAK,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACjC,mFAAmF;IACnF,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,2DAA2D;IAC3D,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,kFAAkF;IAClF,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,2BAA2B;IAC3B,KAAK,EAAE,gBAAgB,CAAC;IACxB,gCAAgC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,sDAAsD;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,qDAAqD;IACrD,QAAQ,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IAC5B,8DAA8D;IAC9D,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,+DAA+D;IAC/D,QAAQ,EAAE,MAAM,CAAC;IACjB,uDAAuD;IACvD,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,kBAAkB,EAAE,MAAM,CAAC;IAC3B,yBAAyB;IACzB,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,iBAAiB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,mCAAmC;IACnC,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,+DAA+D;IAC/D,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAID,wBAAgB,cAAc,IAAI,iBAAiB,CA0PlD"}
1
+ {"version":3,"file":"useVideoExport.d.ts","sourceRoot":"","sources":["../../src/hooks/useVideoExport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAY3D,MAAM,MAAM,gBAAgB,GACxB,MAAM,GACN,WAAW,GACX,WAAW,GACX,UAAU,GACV,UAAU,GACV,OAAO,CAAC;AAEZ,MAAM,WAAW,iBAAiB;IAChC,kDAAkD;IAClD,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,sCAAsC;IACtC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B;;;OAGG;IACH,MAAM,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAClC;;;OAGG;IACH,KAAK,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACjC,mFAAmF;IACnF,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,2DAA2D;IAC3D,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,kFAAkF;IAClF,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,2BAA2B;IAC3B,KAAK,EAAE,gBAAgB,CAAC;IACxB,gCAAgC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,sDAAsD;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,qDAAqD;IACrD,QAAQ,EAAE,MAAM,CAAC;IACjB,2HAA2H;IAC3H,OAAO,EAAE,WAAW,GAAG,aAAa,GAAG,IAAI,CAAC;IAC5C,8DAA8D;IAC9D,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,+DAA+D;IAC/D,QAAQ,EAAE,MAAM,CAAC;IACjB,uDAAuD;IACvD,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,kBAAkB,EAAE,MAAM,CAAC;IAC3B,yBAAyB;IACzB,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,iBAAiB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,mCAAmC;IACnC,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,+DAA+D;IAC/D,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAID,wBAAgB,cAAc,IAAI,iBAAiB,CAsRlD"}
@@ -16,7 +16,8 @@
16
16
  */
17
17
  import { useState, useRef, useCallback, useEffect } from 'react';
18
18
  import { resolveDimensions } from '@bendyline/squisq-video';
19
- import { createEncoder, supportsWebCodecs } from '../mainThreadEncoder.js';
19
+ import { createEncoder, supportsWebCodecs, supportsWebCodecsH264, } from '../mainThreadEncoder.js';
20
+ import { createWorkerEncoder } from '../workerEncoder.js';
20
21
  import { useFrameCapture } from './useFrameCapture.js';
21
22
  // ── Hook ───────────────────────────────────────────────────────────
22
23
  export function useVideoExport() {
@@ -103,9 +104,12 @@ export function useVideoExport() {
103
104
  const { width, height } = resolveDimensions({ orientation });
104
105
  try {
105
106
  // ── Check browser support ─────────────────────────────────
106
- if (!supportsWebCodecs()) {
107
- throw new Error('WebCodecs is not available in this browser. ' +
108
- 'Video export requires Chrome 94+, Edge 94+, or another Chromium-based browser.');
107
+ const webCodecsAvailable = supportsWebCodecs();
108
+ const sharedArrayBufferAvailable = typeof SharedArrayBuffer !== 'undefined';
109
+ if (!webCodecsAvailable && !sharedArrayBufferAvailable) {
110
+ throw new Error('No video encoder available. WebCodecs requires Chrome 94+ / Edge 94+, ' +
111
+ 'and the ffmpeg.wasm fallback requires SharedArrayBuffer ' +
112
+ '(Cross-Origin-Isolation headers).');
109
113
  }
110
114
  // ── Step 1: Prepare ───────────────────────────────────────
111
115
  setState('preparing');
@@ -144,9 +148,30 @@ export function useVideoExport() {
144
148
  // ── Step 2: Create encoder ────────────────────────────────
145
149
  setPhase('Starting encoder…');
146
150
  setProgress(5);
147
- const encoder = createEncoder({ width, height, fps, quality });
151
+ // Prefer main-thread WebCodecs (fast), but probe whether H.264
152
+ // is actually supported. Linux Chromium has VideoEncoder but
153
+ // no proprietary H.264 codec — fall back to the worker, which
154
+ // loads ffmpeg.wasm in that case.
155
+ const canUseWebCodecs = webCodecsAvailable && (await supportsWebCodecsH264({ width, height, fps, quality }));
156
+ let encoder;
157
+ if (canUseWebCodecs) {
158
+ encoder = createEncoder({ width, height, fps, quality });
159
+ setBackend('webcodecs');
160
+ }
161
+ else if (sharedArrayBufferAvailable) {
162
+ const workerEncoder = createWorkerEncoder({ width, height, fps, quality });
163
+ encoder = workerEncoder;
164
+ const selectedBackend = await workerEncoder.ready;
165
+ setBackend(selectedBackend);
166
+ setPhase(selectedBackend === 'ffmpeg-wasm'
167
+ ? 'Starting encoder (ffmpeg.wasm)…'
168
+ : 'Starting encoder…');
169
+ }
170
+ else {
171
+ throw new Error('WebCodecs H.264 is unavailable in this browser and the ffmpeg.wasm ' +
172
+ 'fallback requires SharedArrayBuffer (Cross-Origin-Isolation headers).');
173
+ }
148
174
  encoderRef.current = encoder;
149
- setBackend('webcodecs');
150
175
  if (cancelledRef.current)
151
176
  return;
152
177
  // ── Step 3: Capture frames and encode ─────────────────────
@@ -1 +1 @@
1
- {"version":3,"file":"useVideoExport.js","sourceRoot":"","sources":["../../src/hooks/useVideoExport.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useVideoExport.js","sourceRoot":"","sources":["../../src/hooks/useVideoExport.ts"],"names":[],"mappings":"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"}
@@ -28,6 +28,13 @@ export interface MainThreadEncoder {
28
28
  * Check whether the browser supports WebCodecs video encoding.
29
29
  */
30
30
  export declare function supportsWebCodecs(): boolean;
31
+ /**
32
+ * Probe whether the WebCodecs encoder actually supports the H.264 profile
33
+ * we use. The `VideoEncoder` global can exist while the specific codec is
34
+ * unavailable — this is the case on Linux Chromium, which ships without
35
+ * the proprietary H.264 encoder.
36
+ */
37
+ export declare function supportsWebCodecsH264(config: EncoderConfig): Promise<boolean>;
31
38
  /**
32
39
  * Create a main-thread WebCodecs encoder.
33
40
  *
@@ -1 +1 @@
1
- {"version":3,"file":"mainThreadEncoder.d.ts","sourceRoot":"","sources":["../src/mainThreadEncoder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;CACtC;AAED,MAAM,WAAW,iBAAiB;IAChC,kEAAkE;IAClE,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3D,8EAA8E;IAC9E,QAAQ,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;IACjC,oEAAoE;IACpE,KAAK,IAAI,IAAI,CAAC;CACf;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAeD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,iBAAiB,CAuEtE"}
1
+ {"version":3,"file":"mainThreadEncoder.d.ts","sourceRoot":"","sources":["../src/mainThreadEncoder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;CACtC;AAED,MAAM,WAAW,iBAAiB;IAChC,kEAAkE;IAClE,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3D,8EAA8E;IAC9E,QAAQ,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;IACjC,oEAAoE;IACpE,KAAK,IAAI,IAAI,CAAC;CACf;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAcnF;AAeD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,iBAAiB,CAuEtE"}
@@ -17,6 +17,29 @@ import { createMp4Muxer } from './mp4Mux.js';
17
17
  export function supportsWebCodecs() {
18
18
  return typeof VideoEncoder !== 'undefined' && typeof VideoFrame !== 'undefined';
19
19
  }
20
+ /**
21
+ * Probe whether the WebCodecs encoder actually supports the H.264 profile
22
+ * we use. The `VideoEncoder` global can exist while the specific codec is
23
+ * unavailable — this is the case on Linux Chromium, which ships without
24
+ * the proprietary H.264 encoder.
25
+ */
26
+ export async function supportsWebCodecsH264(config) {
27
+ if (!supportsWebCodecs())
28
+ return false;
29
+ try {
30
+ const support = await VideoEncoder.isConfigSupported({
31
+ codec: 'avc1.640028',
32
+ width: config.width,
33
+ height: config.height,
34
+ bitrate: bitrateForQuality(config.quality, config.width, config.height),
35
+ framerate: config.fps,
36
+ });
37
+ return support.supported === true;
38
+ }
39
+ catch {
40
+ return false;
41
+ }
42
+ }
20
43
  function bitrateForQuality(quality, width, height) {
21
44
  const pixels = width * height;
22
45
  const baseBitrate = pixels * 4; // ~4 bits per pixel baseline
@@ -1 +1 @@
1
- {"version":3,"file":"mainThreadEncoder.js","sourceRoot":"","sources":["../src/mainThreadEncoder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mainThreadEncoder.js","sourceRoot":"","sources":["../src/mainThreadEncoder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Worker-backed video encoder.
3
+ *
4
+ * Spawns `workers/encode.worker.ts` and exposes the same shape as
5
+ * `MainThreadEncoder` so `useVideoExport` can treat both backends
6
+ * uniformly. Used as a fallback when WebCodecs H.264 isn't supported
7
+ * (typical on Linux Chromium): the worker auto-selects its ffmpeg.wasm
8
+ * path in that case.
9
+ */
10
+ import type { MainThreadEncoder, EncoderConfig } from './mainThreadEncoder.js';
11
+ /** Resolves once the worker has reported which backend it picked. */
12
+ export interface WorkerEncoder extends MainThreadEncoder {
13
+ /** Backend the worker selected ('webcodecs' or 'ffmpeg-wasm'). */
14
+ readonly ready: Promise<'webcodecs' | 'ffmpeg-wasm'>;
15
+ }
16
+ export declare function createWorkerEncoder(config: EncoderConfig): WorkerEncoder;
17
+ //# sourceMappingURL=workerEncoder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workerEncoder.d.ts","sourceRoot":"","sources":["../src/workerEncoder.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAG/E,qEAAqE;AACrE,MAAM,WAAW,aAAc,SAAQ,iBAAiB;IACtD,kEAAkE;IAClE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,WAAW,GAAG,aAAa,CAAC,CAAC;CACtD;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa,CAuGxE"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Worker-backed video encoder.
3
+ *
4
+ * Spawns `workers/encode.worker.ts` and exposes the same shape as
5
+ * `MainThreadEncoder` so `useVideoExport` can treat both backends
6
+ * uniformly. Used as a fallback when WebCodecs H.264 isn't supported
7
+ * (typical on Linux Chromium): the worker auto-selects its ffmpeg.wasm
8
+ * path in that case.
9
+ */
10
+ export function createWorkerEncoder(config) {
11
+ if (!config.fps || config.fps <= 0 || !config.width || !config.height) {
12
+ throw new Error(`Invalid encoder config: fps=${config.fps}, width=${config.width}, height=${config.height}`);
13
+ }
14
+ const worker = new Worker(new URL('./workers/encode.worker.js', import.meta.url), {
15
+ type: 'module',
16
+ });
17
+ let closed = false;
18
+ let fatalError = null;
19
+ let finalizeResolve = null;
20
+ let finalizeReject = null;
21
+ let readyResolve = null;
22
+ let readyReject = null;
23
+ const ready = new Promise((resolve, reject) => {
24
+ readyResolve = resolve;
25
+ readyReject = reject;
26
+ });
27
+ const frameDuration = 1000000 / config.fps; // microseconds per frame
28
+ function post(msg, transfer) {
29
+ worker.postMessage(msg, transfer ?? []);
30
+ }
31
+ worker.onmessage = (event) => {
32
+ const msg = event.data;
33
+ switch (msg.type) {
34
+ case 'capabilities':
35
+ readyResolve?.(msg.backend);
36
+ readyResolve = readyReject = null;
37
+ break;
38
+ case 'complete':
39
+ finalizeResolve?.(msg.data);
40
+ finalizeResolve = finalizeReject = null;
41
+ worker.terminate();
42
+ break;
43
+ case 'error': {
44
+ const err = new Error(msg.message);
45
+ fatalError = err;
46
+ readyReject?.(err);
47
+ finalizeReject?.(err);
48
+ readyResolve = readyReject = null;
49
+ finalizeResolve = finalizeReject = null;
50
+ worker.terminate();
51
+ break;
52
+ }
53
+ // 'progress' is informational; ignored at this layer
54
+ }
55
+ };
56
+ worker.onerror = (event) => {
57
+ const err = new Error(event.message || 'Worker error');
58
+ fatalError = err;
59
+ readyReject?.(err);
60
+ finalizeReject?.(err);
61
+ readyResolve = readyReject = null;
62
+ finalizeResolve = finalizeReject = null;
63
+ worker.terminate();
64
+ };
65
+ post({
66
+ type: 'init',
67
+ width: config.width,
68
+ height: config.height,
69
+ fps: config.fps,
70
+ quality: config.quality,
71
+ });
72
+ return {
73
+ ready,
74
+ encodeFrame(bitmap, frameIndex) {
75
+ if (closed || fatalError) {
76
+ bitmap.close();
77
+ return;
78
+ }
79
+ const timestamp = Math.round(frameIndex * frameDuration);
80
+ post({ type: 'frame', bitmap, frameIndex, timestamp }, [bitmap]);
81
+ },
82
+ async finalize() {
83
+ if (closed)
84
+ throw new Error('Encoder already closed');
85
+ if (fatalError)
86
+ throw fatalError;
87
+ closed = true;
88
+ return new Promise((resolve, reject) => {
89
+ finalizeResolve = resolve;
90
+ finalizeReject = reject;
91
+ post({ type: 'finalize' });
92
+ });
93
+ },
94
+ close() {
95
+ if (closed)
96
+ return;
97
+ closed = true;
98
+ post({ type: 'cancel' });
99
+ worker.terminate();
100
+ },
101
+ };
102
+ }
103
+ //# sourceMappingURL=workerEncoder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workerEncoder.js","sourceRoot":"","sources":["../src/workerEncoder.ts"],"names":[],"mappings":"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"}
@@ -40,6 +40,29 @@ function hasWebCodecs() {
40
40
  function hasSharedArrayBuffer() {
41
41
  return typeof SharedArrayBuffer !== 'undefined';
42
42
  }
43
+ /**
44
+ * Check whether the browser's WebCodecs implementation actually supports
45
+ * the H.264 Baseline profile we use. Linux Chromium ships without the
46
+ * proprietary H.264 encoder, so `VideoEncoder` exists but `configure()`
47
+ * for `avc1.*` fails asynchronously.
48
+ */
49
+ async function supportsWebCodecsH264(config) {
50
+ if (!hasWebCodecs())
51
+ return false;
52
+ try {
53
+ const support = await VideoEncoder.isConfigSupported({
54
+ codec: 'avc1.42001f',
55
+ width: config.width,
56
+ height: config.height,
57
+ bitrate: bitrateForQuality(config.quality, config.width, config.height),
58
+ framerate: config.fps,
59
+ });
60
+ return support.supported === true;
61
+ }
62
+ catch {
63
+ return false;
64
+ }
65
+ }
43
66
  // ── WebCodecs Backend ──────────────────────────────────────────────
44
67
  function initWebCodecs(config) {
45
68
  muxer = createMp4Muxer({
@@ -260,7 +283,7 @@ self.onmessage = async (event) => {
260
283
  cancelled = false;
261
284
  totalFramesReceived = 0;
262
285
  _totalFramesEncoded = 0;
263
- if (hasWebCodecs()) {
286
+ if (await supportsWebCodecsH264(msg)) {
264
287
  backend = 'webcodecs';
265
288
  initWebCodecs(msg);
266
289
  }
@@ -270,8 +293,8 @@ self.onmessage = async (event) => {
270
293
  }
271
294
  else {
272
295
  postError('No video encoding support available. ' +
273
- 'WebCodecs requires Chrome 94+ or Edge 94+. ' +
274
- 'ffmpeg.wasm requires SharedArrayBuffer (Cross-Origin-Isolation headers).');
296
+ 'WebCodecs H.264 is unavailable (typical on Linux Chromium without proprietary codecs) ' +
297
+ 'and ffmpeg.wasm requires SharedArrayBuffer (Cross-Origin-Isolation headers).');
275
298
  return;
276
299
  }
277
300
  post({ type: 'capabilities', backend });
@@ -1 +1 @@
1
- {"version":3,"file":"encode.worker.js","sourceRoot":"","sources":["../../src/workers/encode.worker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"encode.worker.js","sourceRoot":"","sources":["../../src/workers/encode.worker.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bendyline/squisq-video-react",
3
- "version": "1.0.5",
3
+ "version": "1.1.0",
4
4
  "description": "React components for browser-based video export of Squisq documents via WebCodecs",
5
5
  "license": "MIT",
6
6
  "author": "Bendyline",
@@ -37,6 +37,7 @@
37
37
  ],
38
38
  "scripts": {
39
39
  "build": "tsup",
40
+ "dev": "concurrently -n js,dts -c blue,gray -r \"tsup --watch --no-dts --no-clean\" \"tsup --watch --dts-only --no-clean\"",
40
41
  "typecheck": "tsc --noEmit"
41
42
  },
42
43
  "peerDependencies": {
@@ -44,9 +45,11 @@
44
45
  "react-dom": "^18.0.0 || ^19.0.0"
45
46
  },
46
47
  "dependencies": {
47
- "@bendyline/squisq": "1.3.0",
48
- "@bendyline/squisq-video": "1.0.5",
49
- "@bendyline/squisq-react": "1.2.0",
48
+ "@bendyline/squisq": "1.4.0",
49
+ "@bendyline/squisq-video": "1.1.0",
50
+ "@bendyline/squisq-react": "1.3.0",
51
+ "@ffmpeg/ffmpeg": "0.12.15",
52
+ "@ffmpeg/util": "0.12.2",
50
53
  "html2canvas": "1.4.1",
51
54
  "mp4-muxer": "5.2.2"
52
55
  },
@@ -21,7 +21,13 @@ import type { MediaProvider } from '@bendyline/squisq/schemas';
21
21
  import type { VideoQuality, VideoOrientation } from '@bendyline/squisq-video';
22
22
  import { resolveDimensions } from '@bendyline/squisq-video';
23
23
  import type { CaptionMode } from '@bendyline/squisq-react';
24
- import { createEncoder, supportsWebCodecs, type MainThreadEncoder } from '../mainThreadEncoder.js';
24
+ import {
25
+ createEncoder,
26
+ supportsWebCodecs,
27
+ supportsWebCodecsH264,
28
+ type MainThreadEncoder,
29
+ } from '../mainThreadEncoder.js';
30
+ import { createWorkerEncoder } from '../workerEncoder.js';
25
31
  import { useFrameCapture } from './useFrameCapture.js';
26
32
 
27
33
  // ── Types ──────────────────────────────────────────────────────────
@@ -68,8 +74,8 @@ export interface VideoExportResult {
68
74
  phase: string;
69
75
  /** Video duration detected from the doc (seconds) */
70
76
  duration: number;
71
- /** Encoder backend ('webcodecs' when active, null when idle) */
72
- backend: 'webcodecs' | null;
77
+ /** Encoder backend ('webcodecs' when WebCodecs H.264 active, 'ffmpeg-wasm' when worker fallback active, null when idle) */
78
+ backend: 'webcodecs' | 'ffmpeg-wasm' | null;
73
79
  /** Blob download URL (populated when state === 'complete') */
74
80
  downloadUrl: string | null;
75
81
  /** File size in bytes (populated when state === 'complete') */
@@ -95,7 +101,7 @@ export function useVideoExport(): VideoExportResult {
95
101
  const [progress, setProgress] = useState(0);
96
102
  const [phase, setPhase] = useState('');
97
103
  const [duration, setDuration] = useState(0);
98
- const [backend, setBackend] = useState<'webcodecs' | null>(null);
104
+ const [backend, setBackend] = useState<'webcodecs' | 'ffmpeg-wasm' | null>(null);
99
105
  const [downloadUrl, setDownloadUrl] = useState<string | null>(null);
100
106
  const [fileSize, setFileSize] = useState(0);
101
107
  const [error, setError] = useState<string | null>(null);
@@ -181,10 +187,13 @@ export function useVideoExport(): VideoExportResult {
181
187
 
182
188
  try {
183
189
  // ── Check browser support ─────────────────────────────────
184
- if (!supportsWebCodecs()) {
190
+ const webCodecsAvailable = supportsWebCodecs();
191
+ const sharedArrayBufferAvailable = typeof SharedArrayBuffer !== 'undefined';
192
+ if (!webCodecsAvailable && !sharedArrayBufferAvailable) {
185
193
  throw new Error(
186
- 'WebCodecs is not available in this browser. ' +
187
- 'Video export requires Chrome 94+, Edge 94+, or another Chromium-based browser.',
194
+ 'No video encoder available. WebCodecs requires Chrome 94+ / Edge 94+, ' +
195
+ 'and the ffmpeg.wasm fallback requires SharedArrayBuffer ' +
196
+ '(Cross-Origin-Isolation headers).',
188
197
  );
189
198
  }
190
199
 
@@ -234,9 +243,34 @@ export function useVideoExport(): VideoExportResult {
234
243
  setPhase('Starting encoder…');
235
244
  setProgress(5);
236
245
 
237
- const encoder = createEncoder({ width, height, fps, quality });
246
+ // Prefer main-thread WebCodecs (fast), but probe whether H.264
247
+ // is actually supported. Linux Chromium has VideoEncoder but
248
+ // no proprietary H.264 codec — fall back to the worker, which
249
+ // loads ffmpeg.wasm in that case.
250
+ const canUseWebCodecs =
251
+ webCodecsAvailable && (await supportsWebCodecsH264({ width, height, fps, quality }));
252
+
253
+ let encoder: MainThreadEncoder;
254
+ if (canUseWebCodecs) {
255
+ encoder = createEncoder({ width, height, fps, quality });
256
+ setBackend('webcodecs');
257
+ } else if (sharedArrayBufferAvailable) {
258
+ const workerEncoder = createWorkerEncoder({ width, height, fps, quality });
259
+ encoder = workerEncoder;
260
+ const selectedBackend = await workerEncoder.ready;
261
+ setBackend(selectedBackend);
262
+ setPhase(
263
+ selectedBackend === 'ffmpeg-wasm'
264
+ ? 'Starting encoder (ffmpeg.wasm)…'
265
+ : 'Starting encoder…',
266
+ );
267
+ } else {
268
+ throw new Error(
269
+ 'WebCodecs H.264 is unavailable in this browser and the ffmpeg.wasm ' +
270
+ 'fallback requires SharedArrayBuffer (Cross-Origin-Isolation headers).',
271
+ );
272
+ }
238
273
  encoderRef.current = encoder;
239
- setBackend('webcodecs');
240
274
 
241
275
  if (cancelledRef.current) return;
242
276
 
@@ -36,6 +36,28 @@ export function supportsWebCodecs(): boolean {
36
36
  return typeof VideoEncoder !== 'undefined' && typeof VideoFrame !== 'undefined';
37
37
  }
38
38
 
39
+ /**
40
+ * Probe whether the WebCodecs encoder actually supports the H.264 profile
41
+ * we use. The `VideoEncoder` global can exist while the specific codec is
42
+ * unavailable — this is the case on Linux Chromium, which ships without
43
+ * the proprietary H.264 encoder.
44
+ */
45
+ export async function supportsWebCodecsH264(config: EncoderConfig): Promise<boolean> {
46
+ if (!supportsWebCodecs()) return false;
47
+ try {
48
+ const support = await VideoEncoder.isConfigSupported({
49
+ codec: 'avc1.640028',
50
+ width: config.width,
51
+ height: config.height,
52
+ bitrate: bitrateForQuality(config.quality, config.width, config.height),
53
+ framerate: config.fps,
54
+ });
55
+ return support.supported === true;
56
+ } catch {
57
+ return false;
58
+ }
59
+ }
60
+
39
61
  function bitrateForQuality(quality: string, width: number, height: number): number {
40
62
  const pixels = width * height;
41
63
  const baseBitrate = pixels * 4; // ~4 bits per pixel baseline
@@ -0,0 +1,123 @@
1
+ /**
2
+ * Worker-backed video encoder.
3
+ *
4
+ * Spawns `workers/encode.worker.ts` and exposes the same shape as
5
+ * `MainThreadEncoder` so `useVideoExport` can treat both backends
6
+ * uniformly. Used as a fallback when WebCodecs H.264 isn't supported
7
+ * (typical on Linux Chromium): the worker auto-selects its ffmpeg.wasm
8
+ * path in that case.
9
+ */
10
+
11
+ import type { MainThreadEncoder, EncoderConfig } from './mainThreadEncoder.js';
12
+ import type { MainToWorkerMessage, WorkerToMainMessage } from './workers/workerTypes.js';
13
+
14
+ /** Resolves once the worker has reported which backend it picked. */
15
+ export interface WorkerEncoder extends MainThreadEncoder {
16
+ /** Backend the worker selected ('webcodecs' or 'ffmpeg-wasm'). */
17
+ readonly ready: Promise<'webcodecs' | 'ffmpeg-wasm'>;
18
+ }
19
+
20
+ export function createWorkerEncoder(config: EncoderConfig): WorkerEncoder {
21
+ if (!config.fps || config.fps <= 0 || !config.width || !config.height) {
22
+ throw new Error(
23
+ `Invalid encoder config: fps=${config.fps}, width=${config.width}, height=${config.height}`,
24
+ );
25
+ }
26
+
27
+ const worker = new Worker(new URL('./workers/encode.worker.js', import.meta.url), {
28
+ type: 'module',
29
+ });
30
+
31
+ let closed = false;
32
+ let fatalError: Error | null = null;
33
+ let finalizeResolve: ((buffer: ArrayBuffer) => void) | null = null;
34
+ let finalizeReject: ((err: Error) => void) | null = null;
35
+ let readyResolve: ((backend: 'webcodecs' | 'ffmpeg-wasm') => void) | null = null;
36
+ let readyReject: ((err: Error) => void) | null = null;
37
+
38
+ const ready = new Promise<'webcodecs' | 'ffmpeg-wasm'>((resolve, reject) => {
39
+ readyResolve = resolve;
40
+ readyReject = reject;
41
+ });
42
+
43
+ const frameDuration = 1_000_000 / config.fps; // microseconds per frame
44
+
45
+ function post(msg: MainToWorkerMessage, transfer?: Transferable[]) {
46
+ worker.postMessage(msg, transfer ?? []);
47
+ }
48
+
49
+ worker.onmessage = (event: MessageEvent<WorkerToMainMessage>) => {
50
+ const msg = event.data;
51
+ switch (msg.type) {
52
+ case 'capabilities':
53
+ readyResolve?.(msg.backend);
54
+ readyResolve = readyReject = null;
55
+ break;
56
+ case 'complete':
57
+ finalizeResolve?.(msg.data);
58
+ finalizeResolve = finalizeReject = null;
59
+ worker.terminate();
60
+ break;
61
+ case 'error': {
62
+ const err = new Error(msg.message);
63
+ fatalError = err;
64
+ readyReject?.(err);
65
+ finalizeReject?.(err);
66
+ readyResolve = readyReject = null;
67
+ finalizeResolve = finalizeReject = null;
68
+ worker.terminate();
69
+ break;
70
+ }
71
+ // 'progress' is informational; ignored at this layer
72
+ }
73
+ };
74
+
75
+ worker.onerror = (event) => {
76
+ const err = new Error(event.message || 'Worker error');
77
+ fatalError = err;
78
+ readyReject?.(err);
79
+ finalizeReject?.(err);
80
+ readyResolve = readyReject = null;
81
+ finalizeResolve = finalizeReject = null;
82
+ worker.terminate();
83
+ };
84
+
85
+ post({
86
+ type: 'init',
87
+ width: config.width,
88
+ height: config.height,
89
+ fps: config.fps,
90
+ quality: config.quality,
91
+ });
92
+
93
+ return {
94
+ ready,
95
+
96
+ encodeFrame(bitmap: ImageBitmap, frameIndex: number) {
97
+ if (closed || fatalError) {
98
+ bitmap.close();
99
+ return;
100
+ }
101
+ const timestamp = Math.round(frameIndex * frameDuration);
102
+ post({ type: 'frame', bitmap, frameIndex, timestamp }, [bitmap]);
103
+ },
104
+
105
+ async finalize(): Promise<ArrayBuffer> {
106
+ if (closed) throw new Error('Encoder already closed');
107
+ if (fatalError) throw fatalError;
108
+ closed = true;
109
+ return new Promise<ArrayBuffer>((resolve, reject) => {
110
+ finalizeResolve = resolve;
111
+ finalizeReject = reject;
112
+ post({ type: 'finalize' });
113
+ });
114
+ },
115
+
116
+ close() {
117
+ if (closed) return;
118
+ closed = true;
119
+ post({ type: 'cancel' });
120
+ worker.terminate();
121
+ },
122
+ };
123
+ }
@@ -60,6 +60,28 @@ function hasSharedArrayBuffer(): boolean {
60
60
  return typeof SharedArrayBuffer !== 'undefined';
61
61
  }
62
62
 
63
+ /**
64
+ * Check whether the browser's WebCodecs implementation actually supports
65
+ * the H.264 Baseline profile we use. Linux Chromium ships without the
66
+ * proprietary H.264 encoder, so `VideoEncoder` exists but `configure()`
67
+ * for `avc1.*` fails asynchronously.
68
+ */
69
+ async function supportsWebCodecsH264(config: InitMessage): Promise<boolean> {
70
+ if (!hasWebCodecs()) return false;
71
+ try {
72
+ const support = await VideoEncoder.isConfigSupported({
73
+ codec: 'avc1.42001f',
74
+ width: config.width,
75
+ height: config.height,
76
+ bitrate: bitrateForQuality(config.quality, config.width, config.height),
77
+ framerate: config.fps,
78
+ });
79
+ return support.supported === true;
80
+ } catch {
81
+ return false;
82
+ }
83
+ }
84
+
63
85
  // ── WebCodecs Backend ──────────────────────────────────────────────
64
86
 
65
87
  function initWebCodecs(config: InitMessage) {
@@ -326,7 +348,7 @@ self.onmessage = async (event: MessageEvent<MainToWorkerMessage>) => {
326
348
  totalFramesReceived = 0;
327
349
  _totalFramesEncoded = 0;
328
350
 
329
- if (hasWebCodecs()) {
351
+ if (await supportsWebCodecsH264(msg)) {
330
352
  backend = 'webcodecs';
331
353
  initWebCodecs(msg);
332
354
  } else if (hasSharedArrayBuffer()) {
@@ -335,8 +357,8 @@ self.onmessage = async (event: MessageEvent<MainToWorkerMessage>) => {
335
357
  } else {
336
358
  postError(
337
359
  'No video encoding support available. ' +
338
- 'WebCodecs requires Chrome 94+ or Edge 94+. ' +
339
- 'ffmpeg.wasm requires SharedArrayBuffer (Cross-Origin-Isolation headers).',
360
+ 'WebCodecs H.264 is unavailable (typical on Linux Chromium without proprietary codecs) ' +
361
+ 'and ffmpeg.wasm requires SharedArrayBuffer (Cross-Origin-Isolation headers).',
340
362
  );
341
363
  return;
342
364
  }