webcodecs-node 0.5.1 → 0.7.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 +328 -169
- package/dist/backends/types.d.ts +2 -0
- package/dist/backends/types.d.ts.map +1 -1
- package/dist/backends/types.js.map +1 -1
- package/dist/canvas/canvas-utils.d.ts +115 -0
- package/dist/canvas/canvas-utils.d.ts.map +1 -0
- package/dist/canvas/canvas-utils.js +169 -0
- package/dist/canvas/canvas-utils.js.map +1 -0
- package/dist/canvas/frame-loop.d.ts +113 -0
- package/dist/canvas/frame-loop.d.ts.map +1 -0
- package/dist/canvas/frame-loop.js +291 -0
- package/dist/canvas/frame-loop.js.map +1 -0
- package/dist/canvas/gpu-context.d.ts +61 -0
- package/dist/canvas/gpu-context.d.ts.map +1 -0
- package/dist/canvas/gpu-context.js +134 -0
- package/dist/canvas/gpu-context.js.map +1 -0
- package/dist/canvas/index.d.ts +22 -0
- package/dist/canvas/index.d.ts.map +1 -0
- package/dist/canvas/index.js +25 -0
- package/dist/canvas/index.js.map +1 -0
- package/dist/canvas/types.d.ts +101 -0
- package/dist/canvas/types.d.ts.map +1 -0
- package/dist/canvas/types.js +7 -0
- package/dist/canvas/types.js.map +1 -0
- package/dist/codec-utils/formats.d.ts.map +1 -1
- package/dist/codec-utils/formats.js +31 -0
- package/dist/codec-utils/formats.js.map +1 -1
- package/dist/config/ffmpeg-quality.d.ts +14 -0
- package/dist/config/ffmpeg-quality.d.ts.map +1 -0
- package/dist/config/ffmpeg-quality.js +41 -0
- package/dist/config/ffmpeg-quality.js.map +1 -0
- package/dist/containers/Muxer.d.ts.map +1 -1
- package/dist/containers/Muxer.js +4 -1
- package/dist/containers/Muxer.js.map +1 -1
- package/dist/core/AudioData.d.ts +2 -1
- package/dist/core/AudioData.d.ts.map +1 -1
- package/dist/core/AudioData.js.map +1 -1
- package/dist/core/VideoFrame.d.ts +2 -2
- package/dist/core/VideoFrame.d.ts.map +1 -1
- package/dist/core/VideoFrame.js +49 -47
- package/dist/core/VideoFrame.js.map +1 -1
- package/dist/decoders/AudioDecoder.d.ts +1 -0
- package/dist/decoders/AudioDecoder.d.ts.map +1 -1
- package/dist/decoders/AudioDecoder.js +39 -17
- package/dist/decoders/AudioDecoder.js.map +1 -1
- package/dist/decoders/ImageDecoder.d.ts +1 -0
- package/dist/decoders/ImageDecoder.d.ts.map +1 -1
- package/dist/decoders/ImageDecoder.js +40 -3
- package/dist/decoders/ImageDecoder.js.map +1 -1
- package/dist/decoders/VideoDecoder.d.ts +12 -0
- package/dist/decoders/VideoDecoder.d.ts.map +1 -1
- package/dist/decoders/VideoDecoder.js +50 -8
- package/dist/decoders/VideoDecoder.js.map +1 -1
- package/dist/demos/demo-1080p-transcode.js +8 -2
- package/dist/demos/demo-1080p-transcode.js.map +1 -1
- package/dist/demos/demo-audio-visualizer.d.ts +11 -0
- package/dist/demos/demo-audio-visualizer.d.ts.map +1 -0
- package/dist/demos/demo-audio-visualizer.js +281 -0
- package/dist/demos/demo-audio-visualizer.js.map +1 -0
- package/dist/demos/demo-dvd-logo.d.ts +8 -0
- package/dist/demos/demo-dvd-logo.d.ts.map +1 -0
- package/dist/demos/demo-dvd-logo.js +196 -0
- package/dist/demos/demo-dvd-logo.js.map +1 -0
- package/dist/demos/demo-four-corners.js +9 -0
- package/dist/demos/demo-four-corners.js.map +1 -1
- package/dist/demos/demo-streaming.js +6 -0
- package/dist/demos/demo-streaming.js.map +1 -1
- package/dist/demos/demo-webcodecs.js +1 -0
- package/dist/demos/demo-webcodecs.js.map +1 -1
- package/dist/encoders/AudioEncoder.d.ts +3 -0
- package/dist/encoders/AudioEncoder.d.ts.map +1 -1
- package/dist/encoders/AudioEncoder.js +70 -28
- package/dist/encoders/AudioEncoder.js.map +1 -1
- package/dist/encoders/ImageEncoder.d.ts +80 -0
- package/dist/encoders/ImageEncoder.d.ts.map +1 -0
- package/dist/encoders/ImageEncoder.js +156 -0
- package/dist/encoders/ImageEncoder.js.map +1 -0
- package/dist/encoders/VideoEncoder.d.ts +11 -0
- package/dist/encoders/VideoEncoder.d.ts.map +1 -1
- package/dist/encoders/VideoEncoder.js +46 -4
- package/dist/encoders/VideoEncoder.js.map +1 -1
- package/dist/encoders/index.d.ts +1 -0
- package/dist/encoders/index.d.ts.map +1 -1
- package/dist/encoders/index.js +1 -0
- package/dist/encoders/index.js.map +1 -1
- package/dist/formats/color-space.d.ts +88 -0
- package/dist/formats/color-space.d.ts.map +1 -1
- package/dist/formats/color-space.js +55 -1
- package/dist/formats/color-space.js.map +1 -1
- package/dist/formats/pixel-formats.d.ts +17 -1
- package/dist/formats/pixel-formats.d.ts.map +1 -1
- package/dist/formats/pixel-formats.js +74 -4
- package/dist/formats/pixel-formats.js.map +1 -1
- package/dist/hardware/detection.d.ts.map +1 -1
- package/dist/hardware/detection.js +5 -2
- package/dist/hardware/detection.js.map +1 -1
- package/dist/hardware/encoder-args.d.ts.map +1 -1
- package/dist/hardware/encoder-args.js +6 -6
- package/dist/hardware/encoder-args.js.map +1 -1
- package/dist/index.d.ts +11 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -2
- package/dist/index.js.map +1 -1
- package/dist/node-av/NodeAvAudioDecoder.d.ts.map +1 -1
- package/dist/node-av/NodeAvAudioDecoder.js +3 -0
- package/dist/node-av/NodeAvAudioDecoder.js.map +1 -1
- package/dist/node-av/NodeAvAudioEncoder.d.ts +5 -0
- package/dist/node-av/NodeAvAudioEncoder.d.ts.map +1 -1
- package/dist/node-av/NodeAvAudioEncoder.js +102 -9
- package/dist/node-av/NodeAvAudioEncoder.js.map +1 -1
- package/dist/node-av/NodeAvVideoEncoder.d.ts +2 -0
- package/dist/node-av/NodeAvVideoEncoder.d.ts.map +1 -1
- package/dist/node-av/NodeAvVideoEncoder.js +44 -6
- package/dist/node-av/NodeAvVideoEncoder.js.map +1 -1
- package/dist/node-av/WebPImageDecoder.d.ts +54 -0
- package/dist/node-av/WebPImageDecoder.d.ts.map +1 -0
- package/dist/node-av/WebPImageDecoder.js +176 -0
- package/dist/node-av/WebPImageDecoder.js.map +1 -0
- package/dist/polyfills/OffscreenCanvas.d.ts +141 -7
- package/dist/polyfills/OffscreenCanvas.d.ts.map +1 -1
- package/dist/polyfills/OffscreenCanvas.js +217 -17
- package/dist/polyfills/OffscreenCanvas.js.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/native-frame.d.ts +74 -0
- package/dist/types/native-frame.d.ts.map +1 -0
- package/dist/types/native-frame.js +32 -0
- package/dist/types/native-frame.js.map +1 -0
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/type-guards.d.ts +29 -1
- package/dist/utils/type-guards.d.ts.map +1 -1
- package/dist/utils/type-guards.js +47 -2
- package/dist/utils/type-guards.js.map +1 -1
- package/docs/api.md +156 -1
- package/docs/configuration.md +30 -14
- package/examples/README.md +28 -1
- package/examples/canvas-encoding.ts +222 -0
- package/examples/offscreen-canvas.ts +230 -0
- package/package.json +10 -4
|
@@ -5,15 +5,18 @@
|
|
|
5
5
|
import { WebCodecsEventTarget } from '../utils/event-target.js';
|
|
6
6
|
import { AudioData } from '../core/AudioData.js';
|
|
7
7
|
import { EncodedAudioChunk } from '../core/EncodedAudioChunk.js';
|
|
8
|
-
import { DOMException } from '../types/index.js';
|
|
8
|
+
import { DOMException, hasClone } from '../types/index.js';
|
|
9
9
|
import { getAudioEncoderCodec, getAudioFrameSize, AUDIO_ENCODER_CODEC_MAP, } from '../codec-utils/audio-codecs.js';
|
|
10
10
|
import { buildAudioSpecificConfig, stripAdtsHeader } from '../utils/aac.js';
|
|
11
11
|
import { NodeAvAudioEncoder } from '../node-av/NodeAvAudioEncoder.js';
|
|
12
12
|
import { validateNonEmptyString, validatePositiveInteger, validateRequired, } from '../utils/validation.js';
|
|
13
13
|
import { getCodecBase } from '../utils/codec-cache.js';
|
|
14
14
|
import { encodingError, wrapAsWebCodecsError } from '../utils/errors.js';
|
|
15
|
+
import { acquireBuffer, releaseBuffer } from '../utils/buffer-pool.js';
|
|
15
16
|
const DEFAULT_FLUSH_TIMEOUT = 30000;
|
|
16
17
|
const MAX_QUEUE_SIZE = 100; // Prevent unbounded memory growth
|
|
18
|
+
/** Opus always encodes at 48kHz regardless of input */
|
|
19
|
+
const OPUS_ENCODER_SAMPLE_RATE = 48000;
|
|
17
20
|
export class AudioEncoder extends WebCodecsEventTarget {
|
|
18
21
|
_state = 'unconfigured';
|
|
19
22
|
_encodeQueueSize = 0;
|
|
@@ -27,6 +30,9 @@ export class AudioEncoder extends WebCodecsEventTarget {
|
|
|
27
30
|
_bitstreamFormat = 'adts';
|
|
28
31
|
_codecDescription = null;
|
|
29
32
|
_ondequeue = null;
|
|
33
|
+
_flushPromise = null;
|
|
34
|
+
/** Actual encoder sample rate (48kHz for Opus, config.sampleRate otherwise) */
|
|
35
|
+
_encoderSampleRate = 0;
|
|
30
36
|
constructor(init) {
|
|
31
37
|
super();
|
|
32
38
|
if (!init || typeof init.output !== 'function') {
|
|
@@ -53,15 +59,17 @@ export class AudioEncoder extends WebCodecsEventTarget {
|
|
|
53
59
|
}
|
|
54
60
|
/** Fire the dequeue event (both EventTarget and ondequeue handler) */
|
|
55
61
|
_fireDequeueEvent() {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
62
|
+
queueMicrotask(() => {
|
|
63
|
+
this.emit('dequeue');
|
|
64
|
+
if (this._ondequeue) {
|
|
65
|
+
try {
|
|
66
|
+
this._ondequeue(new Event('dequeue'));
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
// Ignore errors in user handler per spec
|
|
70
|
+
}
|
|
63
71
|
}
|
|
64
|
-
}
|
|
72
|
+
});
|
|
65
73
|
}
|
|
66
74
|
_safeOutputCallback(chunk, metadata) {
|
|
67
75
|
try {
|
|
@@ -110,12 +118,20 @@ export class AudioEncoder extends WebCodecsEventTarget {
|
|
|
110
118
|
this._firstChunk = true;
|
|
111
119
|
this._bitstreamFormat = config.format ?? 'adts';
|
|
112
120
|
this._codecDescription = null;
|
|
121
|
+
// Opus always encodes at 48kHz regardless of input sample rate
|
|
122
|
+
const codecBase = getCodecBase(config.codec);
|
|
123
|
+
const isOpus = codecBase === 'opus';
|
|
124
|
+
this._encoderSampleRate = isOpus ? OPUS_ENCODER_SAMPLE_RATE : config.sampleRate;
|
|
113
125
|
this._startEncoder();
|
|
114
126
|
}
|
|
115
127
|
encode(data) {
|
|
116
128
|
if (this._state !== 'configured') {
|
|
117
129
|
throw new DOMException('Encoder is not configured', 'InvalidStateError');
|
|
118
130
|
}
|
|
131
|
+
// Prevent encoding during flush to avoid race conditions
|
|
132
|
+
if (this._flushPromise) {
|
|
133
|
+
throw new DOMException('Cannot encode while flush is pending. Wait for flush() to complete.', 'InvalidStateError');
|
|
134
|
+
}
|
|
119
135
|
if (!(data instanceof AudioData)) {
|
|
120
136
|
throw new TypeError('data must be an AudioData');
|
|
121
137
|
}
|
|
@@ -129,12 +145,13 @@ export class AudioEncoder extends WebCodecsEventTarget {
|
|
|
129
145
|
return;
|
|
130
146
|
}
|
|
131
147
|
this._encodeQueueSize++;
|
|
132
|
-
const nativeFrame = data._native
|
|
148
|
+
const nativeFrame = data._native;
|
|
133
149
|
let writeSuccess = false;
|
|
134
150
|
if (nativeFrame && typeof this._encoder.writeFrame === 'function') {
|
|
135
|
-
const clone =
|
|
151
|
+
const clone = hasClone(nativeFrame) ? nativeFrame.clone() : null;
|
|
136
152
|
const frameForEncode = clone ?? nativeFrame;
|
|
137
153
|
try {
|
|
154
|
+
// Cast to any for node-av Frame type boundary
|
|
138
155
|
writeSuccess = this._encoder.writeFrame(frameForEncode, true);
|
|
139
156
|
}
|
|
140
157
|
catch {
|
|
@@ -160,7 +177,11 @@ export class AudioEncoder extends WebCodecsEventTarget {
|
|
|
160
177
|
if (this._state !== 'configured') {
|
|
161
178
|
throw new DOMException('Encoder is not configured', 'InvalidStateError');
|
|
162
179
|
}
|
|
163
|
-
|
|
180
|
+
// If flush is already pending, return the existing promise
|
|
181
|
+
if (this._flushPromise) {
|
|
182
|
+
return this._flushPromise;
|
|
183
|
+
}
|
|
184
|
+
this._flushPromise = new Promise((resolve, reject) => {
|
|
164
185
|
if (!this._encoder) {
|
|
165
186
|
resolve();
|
|
166
187
|
return;
|
|
@@ -182,6 +203,7 @@ export class AudioEncoder extends WebCodecsEventTarget {
|
|
|
182
203
|
this._frameCount = 0;
|
|
183
204
|
this._firstChunk = true;
|
|
184
205
|
this._encoder = null;
|
|
206
|
+
this._flushPromise = null;
|
|
185
207
|
if (this._config) {
|
|
186
208
|
this._startEncoder();
|
|
187
209
|
}
|
|
@@ -192,6 +214,7 @@ export class AudioEncoder extends WebCodecsEventTarget {
|
|
|
192
214
|
return;
|
|
193
215
|
resolved = true;
|
|
194
216
|
cleanup();
|
|
217
|
+
this._flushPromise = null;
|
|
195
218
|
reject(err);
|
|
196
219
|
};
|
|
197
220
|
timeoutId = setTimeout(() => {
|
|
@@ -201,6 +224,7 @@ export class AudioEncoder extends WebCodecsEventTarget {
|
|
|
201
224
|
this._encoder.once('error', doReject);
|
|
202
225
|
this._encoder.end();
|
|
203
226
|
});
|
|
227
|
+
return this._flushPromise;
|
|
204
228
|
}
|
|
205
229
|
reset() {
|
|
206
230
|
if (this._state === 'closed') {
|
|
@@ -213,6 +237,7 @@ export class AudioEncoder extends WebCodecsEventTarget {
|
|
|
213
237
|
this._frameCount = 0;
|
|
214
238
|
this._firstChunk = true;
|
|
215
239
|
this._codecDescription = null;
|
|
240
|
+
this._flushPromise = null;
|
|
216
241
|
}
|
|
217
242
|
close() {
|
|
218
243
|
if (this._state === 'closed')
|
|
@@ -222,6 +247,7 @@ export class AudioEncoder extends WebCodecsEventTarget {
|
|
|
222
247
|
this._config = null;
|
|
223
248
|
this._encodeQueueSize = 0;
|
|
224
249
|
this._codecDescription = null;
|
|
250
|
+
this._flushPromise = null;
|
|
225
251
|
}
|
|
226
252
|
_startEncoder() {
|
|
227
253
|
if (!this._config)
|
|
@@ -258,10 +284,11 @@ export class AudioEncoder extends WebCodecsEventTarget {
|
|
|
258
284
|
if (!this._config)
|
|
259
285
|
return;
|
|
260
286
|
const samplesPerFrame = getAudioFrameSize(this._ffmpegCodec) || 1024;
|
|
261
|
-
// Use timestamp from backend (in samples) converted to microseconds
|
|
287
|
+
// Use timestamp from backend (in samples at encoder rate) converted to microseconds
|
|
288
|
+
// Use _encoderSampleRate (48kHz for Opus) not config.sampleRate
|
|
262
289
|
// Clamp to non-negative (AAC encoder has priming delay causing negative initial timestamps)
|
|
263
|
-
const timestamp = Math.max(0, (frame.timestamp * 1_000_000) / this.
|
|
264
|
-
const duration = (samplesPerFrame * 1_000_000) / this.
|
|
290
|
+
const timestamp = Math.max(0, (frame.timestamp * 1_000_000) / this._encoderSampleRate);
|
|
291
|
+
const duration = (samplesPerFrame * 1_000_000) / this._encoderSampleRate;
|
|
265
292
|
let payload = frame.data;
|
|
266
293
|
const codecBase = getCodecBase(this._config.codec);
|
|
267
294
|
const isAac = codecBase === 'mp4a' || codecBase === 'aac';
|
|
@@ -287,11 +314,13 @@ export class AudioEncoder extends WebCodecsEventTarget {
|
|
|
287
314
|
duration,
|
|
288
315
|
data: new Uint8Array(payload),
|
|
289
316
|
});
|
|
317
|
+
// decoderConfig uses _encoderSampleRate - the actual rate of the encoded stream
|
|
318
|
+
// (48kHz for Opus regardless of input rate)
|
|
290
319
|
const metadata = this._firstChunk
|
|
291
320
|
? {
|
|
292
321
|
decoderConfig: {
|
|
293
322
|
codec: this._config.codec,
|
|
294
|
-
sampleRate: this.
|
|
323
|
+
sampleRate: this._encoderSampleRate,
|
|
295
324
|
numberOfChannels: this._config.numberOfChannels,
|
|
296
325
|
description: this._codecDescription ?? undefined,
|
|
297
326
|
},
|
|
@@ -311,23 +340,36 @@ export class AudioEncoder extends WebCodecsEventTarget {
|
|
|
311
340
|
const buffer = Buffer.alloc(bufferSize);
|
|
312
341
|
const view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength);
|
|
313
342
|
const isPlanar = format.endsWith('-planar');
|
|
314
|
-
const tempBuffer = new Float32Array(numFrames);
|
|
315
343
|
if (isPlanar) {
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
344
|
+
// Use pooled buffer for temporary Float32 storage
|
|
345
|
+
const tempBytes = acquireBuffer(numFrames * 4);
|
|
346
|
+
const tempBuffer = new Float32Array(tempBytes.buffer, tempBytes.byteOffset, numFrames);
|
|
347
|
+
try {
|
|
348
|
+
for (let ch = 0; ch < numChannels; ch++) {
|
|
349
|
+
data.copyTo(new Uint8Array(tempBuffer.buffer, tempBuffer.byteOffset, tempBuffer.byteLength), {
|
|
350
|
+
planeIndex: ch,
|
|
351
|
+
format: 'f32-planar',
|
|
352
|
+
});
|
|
353
|
+
for (let frame = 0; frame < numFrames; frame++) {
|
|
354
|
+
const offset = (frame * numChannels + ch) * 4;
|
|
355
|
+
view.setFloat32(offset, tempBuffer[frame], true);
|
|
356
|
+
}
|
|
324
357
|
}
|
|
325
358
|
}
|
|
359
|
+
finally {
|
|
360
|
+
releaseBuffer(tempBytes);
|
|
361
|
+
}
|
|
326
362
|
}
|
|
327
363
|
else {
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
364
|
+
// Use pooled buffer for temporary copy
|
|
365
|
+
const srcBuffer = acquireBuffer(bufferSize);
|
|
366
|
+
try {
|
|
367
|
+
data.copyTo(srcBuffer.subarray(0, bufferSize), { planeIndex: 0, format: 'f32' });
|
|
368
|
+
buffer.set(srcBuffer.subarray(0, bufferSize));
|
|
369
|
+
}
|
|
370
|
+
finally {
|
|
371
|
+
releaseBuffer(srcBuffer);
|
|
372
|
+
}
|
|
331
373
|
}
|
|
332
374
|
return buffer;
|
|
333
375
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AudioEncoder.js","sourceRoot":"","sources":["../../src/encoders/AudioEncoder.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AudioEncoder.js","sourceRoot":"","sources":["../../src/encoders/AudioEncoder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ImageEncoder - Encodes VideoFrames to image formats
|
|
3
|
+
*
|
|
4
|
+
* Note: This is not part of the WebCodecs spec but is a useful utility
|
|
5
|
+
* that mirrors the ImageDecoder API for symmetry.
|
|
6
|
+
*
|
|
7
|
+
* Supports encoding to PNG, JPEG, and WebP using skia-canvas.
|
|
8
|
+
*/
|
|
9
|
+
import { VideoFrame } from '../core/VideoFrame.js';
|
|
10
|
+
/**
|
|
11
|
+
* Supported image output types
|
|
12
|
+
*/
|
|
13
|
+
export type ImageEncoderOutputType = 'image/png' | 'image/jpeg' | 'image/webp';
|
|
14
|
+
/**
|
|
15
|
+
* Options for encoding an image
|
|
16
|
+
*/
|
|
17
|
+
export interface ImageEncoderOptions {
|
|
18
|
+
/**
|
|
19
|
+
* Output image format (default: 'image/png')
|
|
20
|
+
*/
|
|
21
|
+
type?: ImageEncoderOutputType;
|
|
22
|
+
/**
|
|
23
|
+
* Quality for lossy formats (0-1, default: 0.92 for JPEG, 0.8 for WebP)
|
|
24
|
+
* Ignored for PNG
|
|
25
|
+
*/
|
|
26
|
+
quality?: number;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Result of encoding an image
|
|
30
|
+
*/
|
|
31
|
+
export interface ImageEncoderResult {
|
|
32
|
+
/**
|
|
33
|
+
* Encoded image data
|
|
34
|
+
*/
|
|
35
|
+
data: ArrayBuffer;
|
|
36
|
+
/**
|
|
37
|
+
* MIME type of the encoded image
|
|
38
|
+
*/
|
|
39
|
+
type: ImageEncoderOutputType;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Static class for encoding VideoFrames to image formats
|
|
43
|
+
*/
|
|
44
|
+
export declare class ImageEncoder {
|
|
45
|
+
/**
|
|
46
|
+
* Check if a given MIME type is supported for encoding
|
|
47
|
+
*/
|
|
48
|
+
static isTypeSupported(type: string): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Encode a VideoFrame to an image format
|
|
51
|
+
*
|
|
52
|
+
* @param frame - The VideoFrame to encode
|
|
53
|
+
* @param options - Encoding options (type, quality)
|
|
54
|
+
* @returns Promise resolving to encoded image data
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* ```typescript
|
|
58
|
+
* const result = await ImageEncoder.encode(frame, {
|
|
59
|
+
* type: 'image/jpeg',
|
|
60
|
+
* quality: 0.85
|
|
61
|
+
* });
|
|
62
|
+
* fs.writeFileSync('output.jpg', Buffer.from(result.data));
|
|
63
|
+
* ```
|
|
64
|
+
*/
|
|
65
|
+
static encode(frame: VideoFrame, options?: ImageEncoderOptions): Promise<ImageEncoderResult>;
|
|
66
|
+
/**
|
|
67
|
+
* Synchronous version of encode
|
|
68
|
+
* Note: May block the event loop for large images
|
|
69
|
+
*/
|
|
70
|
+
static encodeSync(frame: VideoFrame, options?: ImageEncoderOptions): ImageEncoderResult;
|
|
71
|
+
/**
|
|
72
|
+
* Encode multiple frames in batch (useful for animations)
|
|
73
|
+
*/
|
|
74
|
+
static encodeBatch(frames: VideoFrame[], options?: ImageEncoderOptions): Promise<ImageEncoderResult[]>;
|
|
75
|
+
/**
|
|
76
|
+
* Convert MIME type to skia-canvas format string
|
|
77
|
+
*/
|
|
78
|
+
private static _typeToSkiaFormat;
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=ImageEncoder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImageEncoder.d.ts","sourceRoot":"","sources":["../../src/encoders/ImageEncoder.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAKnD;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG,WAAW,GAAG,YAAY,GAAG,YAAY,CAAC;AAE/E;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,IAAI,CAAC,EAAE,sBAAsB,CAAC;IAE9B;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,IAAI,EAAE,WAAW,CAAC;IAElB;;OAEG;IACH,IAAI,EAAE,sBAAsB,CAAC;CAC9B;AAED;;GAEG;AACH,qBAAa,YAAY;IACvB;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI7C;;;;;;;;;;;;;;;OAeG;WACU,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA4DtG;;;OAGG;IACH,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,GAAE,mBAAwB,GAAG,kBAAkB;IAoD3F;;OAEG;WACU,WAAW,CACtB,MAAM,EAAE,UAAU,EAAE,EACpB,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAIhC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,iBAAiB;CAYjC"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ImageEncoder - Encodes VideoFrames to image formats
|
|
3
|
+
*
|
|
4
|
+
* Note: This is not part of the WebCodecs spec but is a useful utility
|
|
5
|
+
* that mirrors the ImageDecoder API for symmetry.
|
|
6
|
+
*
|
|
7
|
+
* Supports encoding to PNG, JPEG, and WebP using skia-canvas.
|
|
8
|
+
*/
|
|
9
|
+
import { Canvas } from 'skia-canvas';
|
|
10
|
+
import { DOMException } from '../types/index.js';
|
|
11
|
+
import { convertFrameFormat } from '../formats/conversions/frame-converter.js';
|
|
12
|
+
/**
|
|
13
|
+
* Static class for encoding VideoFrames to image formats
|
|
14
|
+
*/
|
|
15
|
+
export class ImageEncoder {
|
|
16
|
+
/**
|
|
17
|
+
* Check if a given MIME type is supported for encoding
|
|
18
|
+
*/
|
|
19
|
+
static isTypeSupported(type) {
|
|
20
|
+
return type === 'image/png' || type === 'image/jpeg' || type === 'image/webp';
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Encode a VideoFrame to an image format
|
|
24
|
+
*
|
|
25
|
+
* @param frame - The VideoFrame to encode
|
|
26
|
+
* @param options - Encoding options (type, quality)
|
|
27
|
+
* @returns Promise resolving to encoded image data
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* const result = await ImageEncoder.encode(frame, {
|
|
32
|
+
* type: 'image/jpeg',
|
|
33
|
+
* quality: 0.85
|
|
34
|
+
* });
|
|
35
|
+
* fs.writeFileSync('output.jpg', Buffer.from(result.data));
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
static async encode(frame, options = {}) {
|
|
39
|
+
if (!frame || frame.format === null) {
|
|
40
|
+
throw new DOMException('VideoFrame is closed or invalid', 'InvalidStateError');
|
|
41
|
+
}
|
|
42
|
+
const type = options.type ?? 'image/png';
|
|
43
|
+
if (!ImageEncoder.isTypeSupported(type)) {
|
|
44
|
+
throw new DOMException(`Unsupported image type: ${type}`, 'NotSupportedError');
|
|
45
|
+
}
|
|
46
|
+
// Get quality (default varies by format)
|
|
47
|
+
let quality = options.quality;
|
|
48
|
+
if (quality === undefined) {
|
|
49
|
+
quality = type === 'image/jpeg' ? 0.92 : type === 'image/webp' ? 0.8 : 1.0;
|
|
50
|
+
}
|
|
51
|
+
quality = Math.max(0, Math.min(1, quality));
|
|
52
|
+
// Get frame dimensions and data
|
|
53
|
+
const width = frame.displayWidth;
|
|
54
|
+
const height = frame.displayHeight;
|
|
55
|
+
const format = frame.format;
|
|
56
|
+
// Get pixel data - need RGBA for canvas
|
|
57
|
+
let rgbaData;
|
|
58
|
+
if (format === 'RGBA') {
|
|
59
|
+
// Already RGBA, just get the buffer
|
|
60
|
+
rgbaData = frame._buffer;
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
// Need to convert to RGBA
|
|
64
|
+
const srcBuffer = {
|
|
65
|
+
data: frame._buffer,
|
|
66
|
+
format: format,
|
|
67
|
+
width: frame.codedWidth,
|
|
68
|
+
height: frame.codedHeight,
|
|
69
|
+
};
|
|
70
|
+
rgbaData = new Uint8Array(width * height * 4);
|
|
71
|
+
convertFrameFormat(srcBuffer, rgbaData, 'RGBA', 0, 0, width, height);
|
|
72
|
+
}
|
|
73
|
+
// Create canvas and draw the frame
|
|
74
|
+
const canvas = new Canvas(width, height);
|
|
75
|
+
const ctx = canvas.getContext('2d');
|
|
76
|
+
// Create ImageData and put it on canvas
|
|
77
|
+
const imageData = ctx.createImageData(width, height);
|
|
78
|
+
imageData.data.set(rgbaData);
|
|
79
|
+
ctx.putImageData(imageData, 0, 0);
|
|
80
|
+
// Encode to the requested format
|
|
81
|
+
const skiaFormat = ImageEncoder._typeToSkiaFormat(type);
|
|
82
|
+
const buffer = await canvas.toBuffer(skiaFormat, { quality });
|
|
83
|
+
return {
|
|
84
|
+
data: buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength),
|
|
85
|
+
type,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Synchronous version of encode
|
|
90
|
+
* Note: May block the event loop for large images
|
|
91
|
+
*/
|
|
92
|
+
static encodeSync(frame, options = {}) {
|
|
93
|
+
if (!frame || frame.format === null) {
|
|
94
|
+
throw new DOMException('VideoFrame is closed or invalid', 'InvalidStateError');
|
|
95
|
+
}
|
|
96
|
+
const type = options.type ?? 'image/png';
|
|
97
|
+
if (!ImageEncoder.isTypeSupported(type)) {
|
|
98
|
+
throw new DOMException(`Unsupported image type: ${type}`, 'NotSupportedError');
|
|
99
|
+
}
|
|
100
|
+
let quality = options.quality;
|
|
101
|
+
if (quality === undefined) {
|
|
102
|
+
quality = type === 'image/jpeg' ? 0.92 : type === 'image/webp' ? 0.8 : 1.0;
|
|
103
|
+
}
|
|
104
|
+
quality = Math.max(0, Math.min(1, quality));
|
|
105
|
+
const width = frame.displayWidth;
|
|
106
|
+
const height = frame.displayHeight;
|
|
107
|
+
const format = frame.format;
|
|
108
|
+
let rgbaData;
|
|
109
|
+
if (format === 'RGBA') {
|
|
110
|
+
rgbaData = frame._buffer;
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
const srcBuffer = {
|
|
114
|
+
data: frame._buffer,
|
|
115
|
+
format: format,
|
|
116
|
+
width: frame.codedWidth,
|
|
117
|
+
height: frame.codedHeight,
|
|
118
|
+
};
|
|
119
|
+
rgbaData = new Uint8Array(width * height * 4);
|
|
120
|
+
convertFrameFormat(srcBuffer, rgbaData, 'RGBA', 0, 0, width, height);
|
|
121
|
+
}
|
|
122
|
+
const canvas = new Canvas(width, height);
|
|
123
|
+
const ctx = canvas.getContext('2d');
|
|
124
|
+
const imageData = ctx.createImageData(width, height);
|
|
125
|
+
imageData.data.set(rgbaData);
|
|
126
|
+
ctx.putImageData(imageData, 0, 0);
|
|
127
|
+
const skiaFormat = ImageEncoder._typeToSkiaFormat(type);
|
|
128
|
+
const buffer = canvas.toBufferSync(skiaFormat, { quality });
|
|
129
|
+
return {
|
|
130
|
+
data: buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength),
|
|
131
|
+
type,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Encode multiple frames in batch (useful for animations)
|
|
136
|
+
*/
|
|
137
|
+
static async encodeBatch(frames, options = {}) {
|
|
138
|
+
return Promise.all(frames.map(frame => ImageEncoder.encode(frame, options)));
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Convert MIME type to skia-canvas format string
|
|
142
|
+
*/
|
|
143
|
+
static _typeToSkiaFormat(type) {
|
|
144
|
+
switch (type) {
|
|
145
|
+
case 'image/png':
|
|
146
|
+
return 'png';
|
|
147
|
+
case 'image/jpeg':
|
|
148
|
+
return 'jpeg';
|
|
149
|
+
case 'image/webp':
|
|
150
|
+
return 'webp';
|
|
151
|
+
default:
|
|
152
|
+
return 'png';
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=ImageEncoder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImageEncoder.js","sourceRoot":"","sources":["../../src/encoders/ImageEncoder.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,6 +21,15 @@ export interface VideoEncoderConfig {
|
|
|
21
21
|
bitrateMode?: 'constant' | 'variable' | 'quantizer';
|
|
22
22
|
latencyMode?: 'quality' | 'realtime';
|
|
23
23
|
format?: 'annexb' | 'mp4';
|
|
24
|
+
/**
|
|
25
|
+
* Maximum number of frames that can be queued before encode() throws.
|
|
26
|
+
* If not specified, automatically calculated based on resolution:
|
|
27
|
+
* - 720p and below: 50 frames (~185MB for RGBA)
|
|
28
|
+
* - 1080p: 30 frames (~250MB for RGBA)
|
|
29
|
+
* - 4K: 10 frames (~330MB for RGBA)
|
|
30
|
+
* - 8K: 4 frames (~530MB for RGBA)
|
|
31
|
+
*/
|
|
32
|
+
maxQueueSize?: number;
|
|
24
33
|
}
|
|
25
34
|
export interface VideoEncoderInit {
|
|
26
35
|
output: (chunk: EncodedVideoChunk, metadata?: VideoEncoderOutputMetadata) => void;
|
|
@@ -44,6 +53,7 @@ export interface VideoEncoderEncodeOptions {
|
|
|
44
53
|
export declare class VideoEncoder extends WebCodecsEventTarget {
|
|
45
54
|
private _state;
|
|
46
55
|
private _encodeQueueSize;
|
|
56
|
+
private _maxQueueSize;
|
|
47
57
|
private _config;
|
|
48
58
|
private _outputCallback;
|
|
49
59
|
private _errorCallback;
|
|
@@ -55,6 +65,7 @@ export declare class VideoEncoder extends WebCodecsEventTarget {
|
|
|
55
65
|
private _inputFormat;
|
|
56
66
|
private _hardwarePreference;
|
|
57
67
|
private _ondequeue;
|
|
68
|
+
private _flushPromise;
|
|
58
69
|
constructor(init: VideoEncoderInit);
|
|
59
70
|
get state(): CodecState;
|
|
60
71
|
get encodeQueueSize(): number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VideoEncoder.d.ts","sourceRoot":"","sources":["../../src/encoders/VideoEncoder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAIjE,KAAK,YAAY,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;AAOpD,MAAM,MAAM,UAAU,GAAG,cAAc,GAAG,YAAY,GAAG,QAAQ,CAAC;AAElE,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB,CAAC,EAAE,eAAe,GAAG,iBAAiB,GAAG,iBAAiB,CAAC;IAC/E,KAAK,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,WAAW,CAAC;IACpD,WAAW,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC;IACrC,MAAM,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"VideoEncoder.d.ts","sourceRoot":"","sources":["../../src/encoders/VideoEncoder.ts"],"names":[],"mappings":"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"}
|