@bendyline/squisq-video-react 1.1.0 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +171 -19
- package/dist/index.js +921 -21
- package/dist/index.js.map +1 -1
- package/dist/workers/encode.worker.d.ts +2 -13
- package/dist/workers/encode.worker.js +255 -303
- package/dist/workers/encode.worker.js.map +1 -1
- package/package.json +4 -4
- package/dist/VideoExportButton.d.ts +0 -28
- package/dist/VideoExportButton.d.ts.map +0 -1
- package/dist/VideoExportButton.js +0 -18
- package/dist/VideoExportButton.js.map +0 -1
- package/dist/VideoExportModal.d.ts +0 -26
- package/dist/VideoExportModal.d.ts.map +0 -1
- package/dist/VideoExportModal.js +0 -164
- package/dist/VideoExportModal.js.map +0 -1
- package/dist/hooks/useFrameCapture.d.ts +0 -27
- package/dist/hooks/useFrameCapture.d.ts.map +0 -1
- package/dist/hooks/useFrameCapture.js +0 -211
- package/dist/hooks/useFrameCapture.js.map +0 -1
- package/dist/hooks/useVideoExport.d.ts +0 -75
- package/dist/hooks/useVideoExport.d.ts.map +0 -1
- package/dist/hooks/useVideoExport.js +0 -266
- package/dist/hooks/useVideoExport.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/mainThreadEncoder.d.ts +0 -44
- package/dist/mainThreadEncoder.d.ts.map +0 -1
- package/dist/mainThreadEncoder.js +0 -123
- package/dist/mainThreadEncoder.js.map +0 -1
- package/dist/mp4Mux.d.ts +0 -22
- package/dist/mp4Mux.d.ts.map +0 -1
- package/dist/mp4Mux.js +0 -32
- package/dist/mp4Mux.js.map +0 -1
- package/dist/workerEncoder.d.ts +0 -17
- package/dist/workerEncoder.d.ts.map +0 -1
- package/dist/workerEncoder.js +0 -103
- package/dist/workerEncoder.js.map +0 -1
- package/dist/workers/encode.worker.d.ts.map +0 -1
- package/dist/workers/workerTypes.d.ts +0 -63
- package/dist/workers/workerTypes.d.ts.map +0 -1
- package/dist/workers/workerTypes.js +0 -8
- package/dist/workers/workerTypes.js.map +0 -1
package/dist/workerEncoder.js
DELETED
|
@@ -1,103 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"workerEncoder.js","sourceRoot":"","sources":["../src/workerEncoder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"encode.worker.d.ts","sourceRoot":"","sources":["../../src/workers/encode.worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Worker Message Protocol
|
|
3
|
-
*
|
|
4
|
-
* Defines the message types exchanged between the main thread and
|
|
5
|
-
* the video encoding Web Worker.
|
|
6
|
-
*/
|
|
7
|
-
import type { VideoQuality } from '@bendyline/squisq-video';
|
|
8
|
-
/** Initialize the encoder with video parameters. */
|
|
9
|
-
export interface InitMessage {
|
|
10
|
-
type: 'init';
|
|
11
|
-
width: number;
|
|
12
|
-
height: number;
|
|
13
|
-
fps: number;
|
|
14
|
-
quality: VideoQuality;
|
|
15
|
-
}
|
|
16
|
-
/** Send a single video frame to the encoder. */
|
|
17
|
-
export interface FrameMessage {
|
|
18
|
-
type: 'frame';
|
|
19
|
-
/** Frame bitmap — transferred (zero-copy) from main thread */
|
|
20
|
-
bitmap: ImageBitmap;
|
|
21
|
-
/** Frame index (0-based) */
|
|
22
|
-
frameIndex: number;
|
|
23
|
-
/** Timestamp in microseconds */
|
|
24
|
-
timestamp: number;
|
|
25
|
-
}
|
|
26
|
-
/** Signal that all frames have been sent; finalize the video. */
|
|
27
|
-
export interface FinalizeMessage {
|
|
28
|
-
type: 'finalize';
|
|
29
|
-
}
|
|
30
|
-
/** Cancel the export and clean up resources. */
|
|
31
|
-
export interface CancelMessage {
|
|
32
|
-
type: 'cancel';
|
|
33
|
-
}
|
|
34
|
-
export type MainToWorkerMessage = InitMessage | FrameMessage | FinalizeMessage | CancelMessage;
|
|
35
|
-
/** Encoder backend detection result, sent after init. */
|
|
36
|
-
export interface CapabilitiesMessage {
|
|
37
|
-
type: 'capabilities';
|
|
38
|
-
/** Which encoder backend the worker selected */
|
|
39
|
-
backend: 'webcodecs' | 'ffmpeg-wasm';
|
|
40
|
-
}
|
|
41
|
-
/** Progress update during encoding. */
|
|
42
|
-
export interface ProgressMessage {
|
|
43
|
-
type: 'progress';
|
|
44
|
-
/** 0–100 completion percentage */
|
|
45
|
-
percent: number;
|
|
46
|
-
/** Human-readable phase description */
|
|
47
|
-
phase: string;
|
|
48
|
-
}
|
|
49
|
-
/** Encoding complete — MP4 data returned. */
|
|
50
|
-
export interface CompleteMessage {
|
|
51
|
-
type: 'complete';
|
|
52
|
-
/** MP4 file data — transferred (zero-copy) back to main thread */
|
|
53
|
-
data: ArrayBuffer;
|
|
54
|
-
/** File size in bytes */
|
|
55
|
-
size: number;
|
|
56
|
-
}
|
|
57
|
-
/** An error occurred during encoding. */
|
|
58
|
-
export interface ErrorMessage {
|
|
59
|
-
type: 'error';
|
|
60
|
-
message: string;
|
|
61
|
-
}
|
|
62
|
-
export type WorkerToMainMessage = CapabilitiesMessage | ProgressMessage | CompleteMessage | ErrorMessage;
|
|
63
|
-
//# sourceMappingURL=workerTypes.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"workerTypes.d.ts","sourceRoot":"","sources":["../../src/workers/workerTypes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAI5D,oDAAoD;AACpD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,YAAY,CAAC;CACvB;AAED,gDAAgD;AAChD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,8DAA8D;IAC9D,MAAM,EAAE,WAAW,CAAC;IACpB,4BAA4B;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,iEAAiE;AACjE,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,gDAAgD;AAChD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,QAAQ,CAAC;CAChB;AAED,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAAG,YAAY,GAAG,eAAe,GAAG,aAAa,CAAC;AAI/F,yDAAyD;AACzD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,cAAc,CAAC;IACrB,gDAAgD;IAChD,OAAO,EAAE,WAAW,GAAG,aAAa,CAAC;CACtC;AAED,uCAAuC;AACvC,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,UAAU,CAAC;IACjB,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,6CAA6C;AAC7C,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,UAAU,CAAC;IACjB,kEAAkE;IAClE,IAAI,EAAE,WAAW,CAAC;IAClB,yBAAyB;IACzB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,yCAAyC;AACzC,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,mBAAmB,GAC3B,mBAAmB,GACnB,eAAe,GACf,eAAe,GACf,YAAY,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"workerTypes.js","sourceRoot":"","sources":["../../src/workers/workerTypes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|