webcodecs-node 0.2.2 → 0.3.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.
Files changed (121) hide show
  1. package/README.md +4 -0
  2. package/dist/__tests__/AudioDecoder.test.js +3 -3
  3. package/dist/__tests__/AudioDecoder.test.js.map +1 -1
  4. package/dist/__tests__/ImageDecoder.wpt.test.d.ts +8 -0
  5. package/dist/__tests__/ImageDecoder.wpt.test.d.ts.map +1 -0
  6. package/dist/__tests__/ImageDecoder.wpt.test.js +135 -0
  7. package/dist/__tests__/ImageDecoder.wpt.test.js.map +1 -0
  8. package/dist/__tests__/NodeAvDecoder.test.d.ts +2 -0
  9. package/dist/__tests__/NodeAvDecoder.test.d.ts.map +1 -0
  10. package/dist/__tests__/NodeAvDecoder.test.js +199 -0
  11. package/dist/__tests__/NodeAvDecoder.test.js.map +1 -0
  12. package/dist/__tests__/NodeAvEncoder.test.d.ts +2 -0
  13. package/dist/__tests__/NodeAvEncoder.test.d.ts.map +1 -0
  14. package/dist/__tests__/NodeAvEncoder.test.js +176 -0
  15. package/dist/__tests__/NodeAvEncoder.test.js.map +1 -0
  16. package/dist/__tests__/VideoFrame.test.js.map +1 -1
  17. package/dist/backends/index.d.ts +3 -0
  18. package/dist/backends/index.d.ts.map +1 -0
  19. package/dist/backends/index.js +2 -0
  20. package/dist/backends/index.js.map +1 -0
  21. package/dist/backends/types.d.ts +165 -0
  22. package/dist/backends/types.d.ts.map +1 -0
  23. package/dist/backends/types.js +25 -0
  24. package/dist/backends/types.js.map +1 -0
  25. package/dist/core/AudioData.d.ts +1 -1
  26. package/dist/core/AudioData.d.ts.map +1 -1
  27. package/dist/core/AudioData.js +13 -9
  28. package/dist/core/AudioData.js.map +1 -1
  29. package/dist/core/VideoFrame.d.ts +25 -10
  30. package/dist/core/VideoFrame.d.ts.map +1 -1
  31. package/dist/core/VideoFrame.js +115 -65
  32. package/dist/core/VideoFrame.js.map +1 -1
  33. package/dist/decoders/AudioDecoder.d.ts +6 -12
  34. package/dist/decoders/AudioDecoder.d.ts.map +1 -1
  35. package/dist/decoders/AudioDecoder.js +57 -147
  36. package/dist/decoders/AudioDecoder.js.map +1 -1
  37. package/dist/decoders/ImageDecoder.d.ts +1 -0
  38. package/dist/decoders/ImageDecoder.d.ts.map +1 -1
  39. package/dist/decoders/ImageDecoder.js +59 -0
  40. package/dist/decoders/ImageDecoder.js.map +1 -1
  41. package/dist/decoders/VideoDecoder.d.ts +6 -13
  42. package/dist/decoders/VideoDecoder.d.ts.map +1 -1
  43. package/dist/decoders/VideoDecoder.js +49 -130
  44. package/dist/decoders/VideoDecoder.js.map +1 -1
  45. package/dist/demos/demo-conversion.js +2 -2
  46. package/dist/demos/demo-conversion.js.map +1 -1
  47. package/dist/demos/demo-four-corners.d.ts +6 -0
  48. package/dist/demos/demo-four-corners.d.ts.map +1 -0
  49. package/dist/demos/demo-four-corners.js +218 -0
  50. package/dist/demos/demo-four-corners.js.map +1 -0
  51. package/dist/demos/demo-samples.js +228 -64
  52. package/dist/demos/demo-samples.js.map +1 -1
  53. package/dist/encoders/AudioEncoder.d.ts +6 -13
  54. package/dist/encoders/AudioEncoder.d.ts.map +1 -1
  55. package/dist/encoders/AudioEncoder.js +81 -213
  56. package/dist/encoders/AudioEncoder.js.map +1 -1
  57. package/dist/encoders/VideoEncoder.d.ts +5 -14
  58. package/dist/encoders/VideoEncoder.d.ts.map +1 -1
  59. package/dist/encoders/VideoEncoder.js +39 -159
  60. package/dist/encoders/VideoEncoder.js.map +1 -1
  61. package/dist/formats/conversions/frame-converter.d.ts +17 -0
  62. package/dist/formats/conversions/frame-converter.d.ts.map +1 -1
  63. package/dist/formats/conversions/frame-converter.js +127 -0
  64. package/dist/formats/conversions/frame-converter.js.map +1 -1
  65. package/dist/formats/conversions/index.d.ts +1 -0
  66. package/dist/formats/conversions/index.d.ts.map +1 -1
  67. package/dist/formats/conversions/index.js +2 -0
  68. package/dist/formats/conversions/index.js.map +1 -1
  69. package/dist/hardware/detection.d.ts +1 -1
  70. package/dist/hardware/detection.d.ts.map +1 -1
  71. package/dist/hardware/detection.js +54 -27
  72. package/dist/hardware/detection.js.map +1 -1
  73. package/dist/mediabunny/FFmpegAudioDecoder.d.ts +2 -16
  74. package/dist/mediabunny/FFmpegAudioDecoder.d.ts.map +1 -1
  75. package/dist/mediabunny/FFmpegAudioDecoder.js +59 -184
  76. package/dist/mediabunny/FFmpegAudioDecoder.js.map +1 -1
  77. package/dist/mediabunny/FFmpegAudioEncoder.d.ts +4 -38
  78. package/dist/mediabunny/FFmpegAudioEncoder.d.ts.map +1 -1
  79. package/dist/mediabunny/FFmpegAudioEncoder.js +64 -328
  80. package/dist/mediabunny/FFmpegAudioEncoder.js.map +1 -1
  81. package/dist/mediabunny/FFmpegVideoDecoder.d.ts +2 -36
  82. package/dist/mediabunny/FFmpegVideoDecoder.d.ts.map +1 -1
  83. package/dist/mediabunny/FFmpegVideoDecoder.js +37 -278
  84. package/dist/mediabunny/FFmpegVideoDecoder.js.map +1 -1
  85. package/dist/mediabunny/FFmpegVideoEncoder.d.ts +6 -35
  86. package/dist/mediabunny/FFmpegVideoEncoder.d.ts.map +1 -1
  87. package/dist/mediabunny/FFmpegVideoEncoder.js +46 -334
  88. package/dist/mediabunny/FFmpegVideoEncoder.js.map +1 -1
  89. package/dist/node-av/HardwarePipeline.d.ts +36 -0
  90. package/dist/node-av/HardwarePipeline.d.ts.map +1 -0
  91. package/dist/node-av/HardwarePipeline.js +243 -0
  92. package/dist/node-av/HardwarePipeline.js.map +1 -0
  93. package/dist/node-av/NodeAvAudioDecoder.d.ts +46 -0
  94. package/dist/node-av/NodeAvAudioDecoder.d.ts.map +1 -0
  95. package/dist/node-av/NodeAvAudioDecoder.js +343 -0
  96. package/dist/node-av/NodeAvAudioDecoder.js.map +1 -0
  97. package/dist/node-av/NodeAvAudioEncoder.d.ts +44 -0
  98. package/dist/node-av/NodeAvAudioEncoder.d.ts.map +1 -0
  99. package/dist/node-av/NodeAvAudioEncoder.js +385 -0
  100. package/dist/node-av/NodeAvAudioEncoder.js.map +1 -0
  101. package/dist/node-av/NodeAvImageDecoder.d.ts +95 -0
  102. package/dist/node-av/NodeAvImageDecoder.d.ts.map +1 -0
  103. package/dist/node-av/NodeAvImageDecoder.js +287 -0
  104. package/dist/node-av/NodeAvImageDecoder.js.map +1 -0
  105. package/dist/node-av/NodeAvVideoDecoder.d.ts +43 -0
  106. package/dist/node-av/NodeAvVideoDecoder.d.ts.map +1 -0
  107. package/dist/node-av/NodeAvVideoDecoder.js +361 -0
  108. package/dist/node-av/NodeAvVideoDecoder.js.map +1 -0
  109. package/dist/node-av/NodeAvVideoEncoder.d.ts +44 -0
  110. package/dist/node-av/NodeAvVideoEncoder.d.ts.map +1 -0
  111. package/dist/node-av/NodeAvVideoEncoder.js +397 -0
  112. package/dist/node-av/NodeAvVideoEncoder.js.map +1 -0
  113. package/dist/utils/event-target.d.ts +42 -0
  114. package/dist/utils/event-target.d.ts.map +1 -0
  115. package/dist/utils/event-target.js +96 -0
  116. package/dist/utils/event-target.js.map +1 -0
  117. package/dist/utils/index.d.ts +1 -0
  118. package/dist/utils/index.d.ts.map +1 -1
  119. package/dist/utils/index.js +2 -0
  120. package/dist/utils/index.js.map +1 -1
  121. package/package.json +14 -6
@@ -1,141 +1,79 @@
1
1
  /**
2
2
  * FFmpeg-backed AudioEncoder for Mediabunny
3
3
  *
4
- * Implements Mediabunny's CustomAudioEncoder interface using FFmpeg child process.
4
+ * Implements Mediabunny's CustomAudioEncoder interface using node-av native bindings.
5
5
  */
6
- import { spawn } from 'child_process';
7
6
  import { CustomAudioEncoder, EncodedPacket, } from 'mediabunny';
7
+ import { NodeAvAudioEncoder } from '../node-av/NodeAvAudioEncoder.js';
8
8
  import { buildAudioSpecificConfig } from '../utils/aac.js';
9
- // Codec mapping: Mediabunny codec -> FFmpeg encoder
10
- const CODEC_MAP = {
9
+ // Map Mediabunny codec to internal codec name
10
+ const CODEC_NAME_MAP = {
11
11
  'aac': 'aac',
12
- 'opus': 'libopus',
13
- 'mp3': 'libmp3lame',
12
+ 'opus': 'opus',
13
+ 'mp3': 'mp3',
14
14
  'flac': 'flac',
15
- 'vorbis': 'libvorbis',
16
- 'pcm-s16': 'pcm_s16le',
17
- 'pcm-s16be': 'pcm_s16be',
18
- 'pcm-s24': 'pcm_s24le',
19
- 'pcm-s24be': 'pcm_s24be',
20
- 'pcm-s32': 'pcm_s32le',
21
- 'pcm-s32be': 'pcm_s32be',
22
- 'pcm-f32': 'pcm_f32le',
23
- 'pcm-f32be': 'pcm_f32be',
24
- 'pcm-f64': 'pcm_f64le',
25
- 'pcm-f64be': 'pcm_f64be',
26
- 'pcm-u8': 'pcm_u8',
27
- 'pcm-s8': 'pcm_s8',
28
- 'ulaw': 'pcm_mulaw',
29
- 'alaw': 'pcm_alaw',
30
- };
31
- // Output container format for each codec
32
- // Using formats that allow easy frame parsing
33
- const FORMAT_MAP = {
34
- 'aac': 'adts',
35
- 'libopus': 'opus', // Use raw opus format (OggS pages with single packets)
36
- 'libmp3lame': 'mp3',
37
- 'flac': 'flac',
38
- 'libvorbis': 'ogg',
39
- 'pcm_s16le': 's16le',
40
- 'pcm_s16be': 's16be',
41
- 'pcm_s24le': 's24le',
42
- 'pcm_s24be': 's24be',
43
- 'pcm_s32le': 's32le',
44
- 'pcm_s32be': 's32be',
45
- 'pcm_f32le': 'f32le',
46
- 'pcm_f32be': 'f32be',
47
- 'pcm_f64le': 'f64le',
48
- 'pcm_f64be': 'f64be',
49
- 'pcm_u8': 'u8',
50
- 'pcm_s8': 's8',
51
- 'pcm_mulaw': 'mulaw',
52
- 'pcm_alaw': 'alaw',
15
+ 'vorbis': 'vorbis',
16
+ 'pcm-s16': 'pcm-s16',
17
+ 'pcm-s16be': 'pcm-s16',
18
+ 'pcm-s24': 'pcm-s16',
19
+ 'pcm-s24be': 'pcm-s16',
20
+ 'pcm-s32': 'pcm-s16',
21
+ 'pcm-s32be': 'pcm-s16',
22
+ 'pcm-f32': 'pcm-f32',
23
+ 'pcm-f32be': 'pcm-f32',
24
+ 'pcm-f64': 'pcm-f32',
25
+ 'pcm-f64be': 'pcm-f32',
26
+ 'pcm-u8': 'pcm-s16',
27
+ 'pcm-s8': 'pcm-s16',
28
+ 'ulaw': 'pcm-s16',
29
+ 'alaw': 'pcm-s16',
53
30
  };
54
31
  export class FFmpegAudioEncoder extends CustomAudioEncoder {
55
- process = null;
56
- accumulatedData = Buffer.alloc(0);
32
+ backend = null;
57
33
  frameIndex = 0;
58
34
  resolveFlush = null;
59
- ffmpegCodec = '';
60
35
  metadataEmitted = false;
61
36
  codecDescription = null;
62
- audioOutputFormat = 'adts';
63
37
  static supports(codec, _config) {
64
- return codec in CODEC_MAP;
38
+ return codec in CODEC_NAME_MAP;
65
39
  }
66
40
  async init() {
67
- this.ffmpegCodec = CODEC_MAP[this.codec] || 'aac';
68
- const format = FORMAT_MAP[this.ffmpegCodec] || 'adts';
69
- const configExt = this.config;
70
- if (this.codec === 'aac' && configExt.aac?.format === 'aac') {
71
- this.audioOutputFormat = 'aac';
72
- }
73
- else {
74
- this.audioOutputFormat = 'adts';
75
- }
76
- const args = [
77
- '-hide_banner',
78
- '-loglevel', 'error',
79
- // Input: raw PCM from pipe
80
- '-f', 'f32le',
81
- '-ar', String(this.config.sampleRate),
82
- '-ac', String(this.config.numberOfChannels),
83
- '-i', 'pipe:0',
84
- // Output encoder
85
- '-c:a', this.ffmpegCodec,
86
- ];
87
- // Add bitrate if specified
88
- if (this.config.bitrate) {
89
- args.push('-b:a', String(this.config.bitrate));
90
- }
91
- // Codec-specific options
92
- if (this.ffmpegCodec === 'libopus') {
93
- args.push('-application', 'audio');
94
- }
95
- // Output format
96
- args.push('-f', format);
97
- args.push('pipe:1');
98
- this.process = spawn('ffmpeg', args, {
99
- stdio: ['pipe', 'pipe', 'pipe'],
41
+ // Create node-av backend
42
+ this.backend = new NodeAvAudioEncoder();
43
+ const codecName = CODEC_NAME_MAP[this.codec] || 'aac';
44
+ this.backend.startEncoder({
45
+ codec: codecName,
46
+ sampleRate: this.config.sampleRate,
47
+ numberOfChannels: this.config.numberOfChannels,
48
+ bitrate: this.config.bitrate,
100
49
  });
101
- this.process.stdout?.on('data', (data) => {
102
- this.accumulatedData = Buffer.concat([this.accumulatedData, data]);
103
- this.parseEncodedFrames();
50
+ // Listen for encoded frames
51
+ this.backend.on('encodedFrame', (frame) => {
52
+ this.emitPacket(frame.data);
104
53
  });
105
- this.process.stderr?.on('data', (data) => {
106
- const msg = data.toString();
107
- if (!msg.includes('Discarding')) {
108
- console.error('FFmpeg audio encoder:', msg);
109
- }
54
+ this.backend.on('error', (err) => {
55
+ console.error('[FFmpegAudioEncoder] Backend error:', err.message);
110
56
  });
111
- this.process.on('close', () => {
112
- // Emit remaining data
113
- if (this.accumulatedData.length > 0) {
114
- this.emitPacket(this.accumulatedData);
115
- this.accumulatedData = Buffer.alloc(0);
116
- }
57
+ this.backend.on('close', () => {
117
58
  if (this.resolveFlush) {
118
59
  this.resolveFlush();
119
60
  this.resolveFlush = null;
120
61
  }
121
62
  });
122
- this.process.stdin?.on('error', () => {
123
- // Ignore EPIPE
124
- });
125
63
  }
126
64
  async encode(audioSample) {
127
- if (!this.process?.stdin?.writable) {
65
+ if (!this.backend?.isHealthy) {
128
66
  throw new Error('Encoder not initialized');
129
67
  }
130
68
  // Get raw PCM data from AudioSample (f32 interleaved)
131
69
  const pcmData = await this.getSampleData(audioSample);
132
- this.process.stdin.write(pcmData);
70
+ this.backend.write(pcmData);
133
71
  }
134
72
  async flush() {
135
73
  return new Promise((resolve) => {
136
74
  this.resolveFlush = resolve;
137
- if (this.process?.stdin) {
138
- this.process.stdin.end();
75
+ if (this.backend) {
76
+ this.backend.end();
139
77
  }
140
78
  else {
141
79
  resolve();
@@ -143,9 +81,9 @@ export class FFmpegAudioEncoder extends CustomAudioEncoder {
143
81
  });
144
82
  }
145
83
  async close() {
146
- if (this.process) {
147
- this.process.kill('SIGTERM');
148
- this.process = null;
84
+ if (this.backend) {
85
+ this.backend.kill();
86
+ this.backend = null;
149
87
  }
150
88
  }
151
89
  /**
@@ -180,174 +118,22 @@ export class FFmpegAudioEncoder extends CustomAudioEncoder {
180
118
  return buffer;
181
119
  }
182
120
  /**
183
- * Parse encoded audio frames from FFmpeg output
184
- */
185
- parseEncodedFrames() {
186
- const minChunkSize = 64;
187
- while (this.accumulatedData.length >= minChunkSize) {
188
- let frameEnd = this.findFrameEnd();
189
- if (frameEnd > 0) {
190
- const frameData = Buffer.from(this.accumulatedData.subarray(0, frameEnd));
191
- this.accumulatedData = this.accumulatedData.subarray(frameEnd);
192
- this.emitPacket(frameData);
193
- }
194
- else {
195
- break;
196
- }
197
- }
198
- }
199
- /**
200
- * Find the end of an audio frame
201
- */
202
- findFrameEnd() {
203
- if (this.ffmpegCodec === 'aac') {
204
- return this.findADTSFrame();
205
- }
206
- else if (this.ffmpegCodec === 'libmp3lame') {
207
- return this.findMP3Frame();
208
- }
209
- else if (this.ffmpegCodec === 'libopus' || this.ffmpegCodec === 'libvorbis') {
210
- return this.findOggPage();
211
- }
212
- else {
213
- return Math.min(this.accumulatedData.length, 4096);
214
- }
215
- }
216
- findADTSFrame() {
217
- if (this.accumulatedData.length < 7)
218
- return 0;
219
- if ((this.accumulatedData[0] !== 0xFF) ||
220
- ((this.accumulatedData[1] & 0xF0) !== 0xF0)) {
221
- for (let i = 1; i < this.accumulatedData.length - 1; i++) {
222
- if (this.accumulatedData[i] === 0xFF &&
223
- (this.accumulatedData[i + 1] & 0xF0) === 0xF0) {
224
- this.accumulatedData = this.accumulatedData.subarray(i);
225
- return 0;
226
- }
227
- }
228
- return 0;
229
- }
230
- const frameLength = ((this.accumulatedData[3] & 0x03) << 11) |
231
- (this.accumulatedData[4] << 3) |
232
- ((this.accumulatedData[5] & 0xE0) >> 5);
233
- if (frameLength > this.accumulatedData.length)
234
- return 0;
235
- return frameLength;
236
- }
237
- findMP3Frame() {
238
- if (this.accumulatedData.length < 4)
239
- return 0;
240
- if (this.accumulatedData[0] !== 0xFF ||
241
- (this.accumulatedData[1] & 0xE0) !== 0xE0) {
242
- for (let i = 1; i < this.accumulatedData.length - 1; i++) {
243
- if (this.accumulatedData[i] === 0xFF &&
244
- (this.accumulatedData[i + 1] & 0xE0) === 0xE0) {
245
- this.accumulatedData = this.accumulatedData.subarray(i);
246
- return 0;
247
- }
248
- }
249
- return 0;
250
- }
251
- const header = this.accumulatedData.readUInt32BE(0);
252
- const bitrateIndex = (header >> 12) & 0x0F;
253
- const samplingRateIndex = (header >> 10) & 0x03;
254
- const padding = (header >> 9) & 0x01;
255
- const bitrates = [0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 0];
256
- const sampleRates = [44100, 48000, 32000, 0];
257
- const bitrate = bitrates[bitrateIndex] * 1000;
258
- const sampleRate = sampleRates[samplingRateIndex];
259
- if (bitrate === 0 || sampleRate === 0)
260
- return 0;
261
- const frameSize = Math.floor((144 * bitrate) / sampleRate) + padding;
262
- if (frameSize > this.accumulatedData.length)
263
- return 0;
264
- return frameSize;
265
- }
266
- /**
267
- * Parse Ogg pages and extract individual Opus packets
268
- * Ogg page structure:
269
- * - 4 bytes: "OggS" magic
270
- * - 1 byte: version
271
- * - 1 byte: header type
272
- * - 8 bytes: granule position
273
- * - 4 bytes: serial number
274
- * - 4 bytes: page sequence number
275
- * - 4 bytes: checksum
276
- * - 1 byte: number of segments
277
- * - N bytes: segment table (one byte per segment)
278
- * - data: concatenated segments
279
- */
280
- findOggPage() {
281
- if (this.accumulatedData.length < 27)
282
- return 0;
283
- if (this.accumulatedData.toString('ascii', 0, 4) !== 'OggS') {
284
- for (let i = 1; i < this.accumulatedData.length - 3; i++) {
285
- if (this.accumulatedData.toString('ascii', i, i + 4) === 'OggS') {
286
- this.accumulatedData = this.accumulatedData.subarray(i);
287
- return 0;
288
- }
289
- }
290
- return this.accumulatedData.length;
291
- }
292
- const numSegments = this.accumulatedData[26];
293
- if (this.accumulatedData.length < 27 + numSegments)
294
- return 0;
295
- // Calculate total page size
296
- let pageDataSize = 0;
297
- for (let i = 0; i < numSegments; i++) {
298
- pageDataSize += this.accumulatedData[27 + i];
299
- }
300
- const headerSize = 27 + numSegments;
301
- const pageSize = headerSize + pageDataSize;
302
- if (pageSize > this.accumulatedData.length)
303
- return 0;
304
- // Skip header pages (OpusHead, OpusTags)
305
- const pageData = this.accumulatedData.subarray(headerSize, pageSize);
306
- if (pageData.length >= 8) {
307
- const magic = pageData.toString('ascii', 0, 8);
308
- if (magic === 'OpusHead' || magic === 'OpusTags') {
309
- // Skip this header page, return the page size to advance past it
310
- this.accumulatedData = this.accumulatedData.subarray(pageSize);
311
- return 0; // Return 0 to continue parsing
312
- }
313
- }
314
- // Extract individual Opus packets from segments
315
- // In Ogg, a packet ends when a segment is < 255 bytes
316
- // Multiple packets can be in one page
317
- this.extractOggPackets(headerSize, numSegments);
318
- // Remove the processed page
319
- this.accumulatedData = this.accumulatedData.subarray(pageSize);
320
- return 0; // We've already emitted packets, return 0 to continue
321
- }
322
- /**
323
- * Extract individual Opus packets from Ogg page segments
121
+ * Get the number of samples per frame based on codec
324
122
  */
325
- extractOggPackets(headerSize, numSegments) {
326
- let dataOffset = headerSize;
327
- let packetData = [];
328
- for (let i = 0; i < numSegments; i++) {
329
- const segmentSize = this.accumulatedData[27 + i];
330
- const segmentData = this.accumulatedData.subarray(dataOffset, dataOffset + segmentSize);
331
- packetData.push(Buffer.from(segmentData));
332
- dataOffset += segmentSize;
333
- // A segment < 255 bytes marks the end of a packet
334
- if (segmentSize < 255) {
335
- if (packetData.length > 0) {
336
- const packet = Buffer.concat(packetData);
337
- // Only emit non-empty packets that aren't headers
338
- if (packet.length > 0 && packet.toString('ascii', 0, 4) !== 'Opus') {
339
- this.emitPacket(packet);
340
- }
341
- packetData = [];
342
- }
343
- }
344
- }
345
- // Handle any remaining data (packet spanning pages)
346
- if (packetData.length > 0) {
347
- const packet = Buffer.concat(packetData);
348
- if (packet.length > 0) {
349
- this.emitPacket(packet);
350
- }
123
+ getFrameSamples() {
124
+ switch (this.codec) {
125
+ case 'opus':
126
+ return 960;
127
+ case 'aac':
128
+ return 1024;
129
+ case 'mp3':
130
+ return 1152;
131
+ case 'vorbis':
132
+ return 1024;
133
+ case 'flac':
134
+ return 4096;
135
+ default:
136
+ return 1024;
351
137
  }
352
138
  }
353
139
  /**
@@ -355,19 +141,13 @@ export class FFmpegAudioEncoder extends CustomAudioEncoder {
355
141
  */
356
142
  emitPacket(data) {
357
143
  const sampleRate = this.config.sampleRate;
358
- // Get frame size based on codec
359
144
  const frameSamples = this.getFrameSamples();
360
145
  const timestampSeconds = this.frameIndex / sampleRate;
361
146
  const durationSeconds = frameSamples / sampleRate;
362
- let payload = data;
363
- if (this.codec === 'aac' && this.audioOutputFormat === 'aac') {
364
- payload = this.stripAdtsHeader(data);
365
- }
366
- const packet = new EncodedPacket(new Uint8Array(payload), 'key', timestampSeconds, durationSeconds);
367
- // Build metadata with decoder config (required by Mediabunny)
147
+ const packet = new EncodedPacket(new Uint8Array(data), 'key', timestampSeconds, durationSeconds);
148
+ // Build metadata with decoder config
368
149
  let meta;
369
150
  if (!this.metadataEmitted) {
370
- // Build codec description based on codec type
371
151
  if (!this.codecDescription) {
372
152
  if (this.codec === 'opus') {
373
153
  this.codecDescription = this.buildOpusDescription();
@@ -389,37 +169,13 @@ export class FFmpegAudioEncoder extends CustomAudioEncoder {
389
169
  this.frameIndex += frameSamples;
390
170
  this.onPacket(packet, meta);
391
171
  }
392
- /**
393
- * Get the number of samples per frame based on codec
394
- */
395
- getFrameSamples() {
396
- switch (this.codec) {
397
- case 'opus':
398
- // Opus typically uses 20ms frames at 48kHz = 960 samples
399
- return 960;
400
- case 'aac':
401
- // AAC uses 1024 samples per frame
402
- return 1024;
403
- case 'mp3':
404
- // MP3 uses 1152 samples per frame
405
- return 1152;
406
- case 'vorbis':
407
- // Vorbis frame size varies, use approximate average
408
- return 1024;
409
- case 'flac':
410
- // FLAC frame size varies, use approximate
411
- return 4096;
412
- default:
413
- return 1024;
414
- }
415
- }
416
172
  /**
417
173
  * Get codec string for the output format
418
174
  */
419
175
  getCodecString() {
420
176
  switch (this.codec) {
421
177
  case 'aac':
422
- return 'mp4a.40.2'; // AAC-LC
178
+ return 'mp4a.40.2';
423
179
  case 'opus':
424
180
  return 'opus';
425
181
  case 'mp3':
@@ -436,32 +192,23 @@ export class FFmpegAudioEncoder extends CustomAudioEncoder {
436
192
  * Build Opus identification header for decoder config description
437
193
  */
438
194
  buildOpusDescription() {
439
- // Opus Identification Header (19 bytes minimum)
440
195
  const header = Buffer.alloc(19);
441
196
  let offset = 0;
442
- // Magic signature "OpusHead"
443
197
  header.write('OpusHead', offset);
444
198
  offset += 8;
445
- // Version (1 byte)
446
199
  header[offset++] = 1;
447
- // Channel count (1 byte)
448
200
  header[offset++] = this.config.numberOfChannels;
449
- // Pre-skip (2 bytes, little-endian)
450
- header.writeUInt16LE(312, offset); // Default pre-skip
201
+ header.writeUInt16LE(312, offset);
451
202
  offset += 2;
452
- // Input sample rate (4 bytes, little-endian)
453
203
  header.writeUInt32LE(this.config.sampleRate, offset);
454
204
  offset += 4;
455
- // Output gain (2 bytes, little-endian)
456
205
  header.writeInt16LE(0, offset);
457
206
  offset += 2;
458
- // Channel mapping family (1 byte)
459
- header[offset++] = 0; // 0 = mono/stereo, no mapping table
207
+ header[offset++] = 0;
460
208
  return new Uint8Array(header);
461
209
  }
462
210
  /**
463
211
  * Build AAC AudioSpecificConfig for decoder config description
464
- * ISO 14496-3 section 1.6.2.1
465
212
  */
466
213
  buildAacDescription() {
467
214
  return buildAudioSpecificConfig({
@@ -469,16 +216,5 @@ export class FFmpegAudioEncoder extends CustomAudioEncoder {
469
216
  channelConfiguration: this.config.numberOfChannels,
470
217
  });
471
218
  }
472
- stripAdtsHeader(frame) {
473
- if (frame.length < 7) {
474
- return frame;
475
- }
476
- const protectionAbsent = frame[1] & 0x01;
477
- const headerLength = protectionAbsent ? 7 : 9;
478
- if (frame.length <= headerLength) {
479
- return Buffer.alloc(0);
480
- }
481
- return frame.subarray(headerLength);
482
- }
483
219
  }
484
220
  //# sourceMappingURL=FFmpegAudioEncoder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FFmpegAudioEncoder.js","sourceRoot":"","sources":["../../src/mediabunny/FFmpegAudioEncoder.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,EAAgB,MAAM,eAAe,CAAC;AACpD,OAAO,EACL,kBAAkB,EAElB,aAAa,GAEd,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAE3D,oDAAoD;AACpD,MAAM,SAAS,GAA+B;IAC5C,KAAK,EAAE,KAAK;IACZ,MAAM,EAAE,SAAS;IACjB,KAAK,EAAE,YAAY;IACnB,MAAM,EAAE,MAAM;IACd,QAAQ,EAAE,WAAW;IACrB,SAAS,EAAE,WAAW;IACtB,WAAW,EAAE,WAAW;IACxB,SAAS,EAAE,WAAW;IACtB,WAAW,EAAE,WAAW;IACxB,SAAS,EAAE,WAAW;IACtB,WAAW,EAAE,WAAW;IACxB,SAAS,EAAE,WAAW;IACtB,WAAW,EAAE,WAAW;IACxB,SAAS,EAAE,WAAW;IACtB,WAAW,EAAE,WAAW;IACxB,QAAQ,EAAE,QAAQ;IAClB,QAAQ,EAAE,QAAQ;IAClB,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,UAAU;CACnB,CAAC;AAEF,yCAAyC;AACzC,8CAA8C;AAC9C,MAAM,UAAU,GAA2B;IACzC,KAAK,EAAE,MAAM;IACb,SAAS,EAAE,MAAM,EAAG,uDAAuD;IAC3E,YAAY,EAAE,KAAK;IACnB,MAAM,EAAE,MAAM;IACd,WAAW,EAAE,KAAK;IAClB,WAAW,EAAE,OAAO;IACpB,WAAW,EAAE,OAAO;IACpB,WAAW,EAAE,OAAO;IACpB,WAAW,EAAE,OAAO;IACpB,WAAW,EAAE,OAAO;IACpB,WAAW,EAAE,OAAO;IACpB,WAAW,EAAE,OAAO;IACpB,WAAW,EAAE,OAAO;IACpB,WAAW,EAAE,OAAO;IACpB,WAAW,EAAE,OAAO;IACpB,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,IAAI;IACd,WAAW,EAAE,OAAO;IACpB,UAAU,EAAE,MAAM;CACnB,CAAC;AAEF,MAAM,OAAO,kBAAmB,SAAQ,kBAAkB;IAChD,OAAO,GAAwB,IAAI,CAAC;IACpC,eAAe,GAAW,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1C,UAAU,GAAG,CAAC,CAAC;IACf,YAAY,GAAwB,IAAI,CAAC;IACzC,WAAW,GAAG,EAAE,CAAC;IACjB,eAAe,GAAG,KAAK,CAAC;IACxB,gBAAgB,GAAsB,IAAI,CAAC;IAC3C,iBAAiB,GAAmB,MAAM,CAAC;IAEnD,MAAM,CAAC,QAAQ,CAAC,KAAiB,EAAE,OAA2B;QAC5D,OAAO,KAAK,IAAI,SAAS,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;QAClD,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,MAAM,CAAC;QACtD,MAAM,SAAS,GAAG,IAAI,CAAC,MAA6B,CAAC;QACrD,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,IAAI,SAAS,CAAC,GAAG,EAAE,MAAM,KAAK,KAAK,EAAE,CAAC;YAC5D,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC;QAClC,CAAC;QAED,MAAM,IAAI,GAAG;YACX,cAAc;YACd,WAAW,EAAE,OAAO;YACpB,2BAA2B;YAC3B,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;YACrC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC;YAC3C,IAAI,EAAE,QAAQ;YACd,iBAAiB;YACjB,MAAM,EAAE,IAAI,CAAC,WAAW;SACzB,CAAC;QAEF,2BAA2B;QAC3B,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QACjD,CAAC;QAED,yBAAyB;QACzB,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACnC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;QACrC,CAAC;QAED,gBAAgB;QAChB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEpB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE;YACnC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;YAC/C,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC,CAAC;YACnE,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;YAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5B,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;gBAChC,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAC5B,sBAAsB;YACtB,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;gBACtC,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACzC,CAAC;YAED,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACtB,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YAC3B,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACnC,eAAe;QACjB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,WAAwB;QACnC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC7C,CAAC;QAED,sDAAsD;QACtD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;QACtD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,KAAK;QACT,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC;YAE5B,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;gBACxB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;YAC3B,CAAC;iBAAM,CAAC;gBACN,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC7B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,aAAa,CAAC,MAAmB;QAC7C,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC;QACxC,MAAM,WAAW,GAAG,MAAM,CAAC,gBAAgB,CAAC;QAC5C,MAAM,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC,gBAAgB;QAChE,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAExC,+DAA+D;QAC/D,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAEnD,IAAI,QAAQ,EAAE,CAAC;YACb,8BAA8B;YAC9B,MAAM,UAAU,GAAG,IAAI,YAAY,CAAC,SAAS,CAAC,CAAC;YAC/C,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;YAE/E,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,WAAW,EAAE,EAAE,EAAE,EAAE,CAAC;gBACxC,MAAM,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;oBAC/C,UAAU,EAAE,EAAE;oBACd,MAAM,EAAE,KAAK;iBACd,CAAC,CAAC;gBAEH,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC;oBAC/C,MAAM,MAAM,GAAG,CAAC,KAAK,GAAG,WAAW,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;oBAC9C,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;gBACnD,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,sBAAsB;YACtB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QAC1D,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,kBAAkB;QACxB,MAAM,YAAY,GAAG,EAAE,CAAC;QAExB,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,IAAI,YAAY,EAAE,CAAC;YACnD,IAAI,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YAEnC,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;gBACjB,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;gBAC1E,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBAC/D,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACN,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,YAAY;QAClB,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC;QAC9B,CAAC;aAAM,IAAI,IAAI,CAAC,WAAW,KAAK,YAAY,EAAE,CAAC;YAC7C,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;QAC7B,CAAC;aAAM,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,KAAK,WAAW,EAAE,CAAC;YAC9E,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAEO,aAAa;QACnB,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC;QAE9C,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;YAClC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;YAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBACzD,IAAI,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,IAAI;oBAChC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;oBAClD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;oBACxD,OAAO,CAAC,CAAC;gBACX,CAAC;YACH,CAAC;YACD,OAAO,CAAC,CAAC;QACX,CAAC;QAED,MAAM,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACxC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC9B,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAE5D,IAAI,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM;YAAE,OAAO,CAAC,CAAC;QAExD,OAAO,WAAW,CAAC;IACrB,CAAC;IAEO,YAAY;QAClB,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC;QAE9C,IAAI,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,IAAI;YAChC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBACzD,IAAI,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,IAAI;oBAChC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;oBAClD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;oBACxD,OAAO,CAAC,CAAC;gBACX,CAAC;YACH,CAAC;YACD,OAAO,CAAC,CAAC;QACX,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACpD,MAAM,YAAY,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;QAC3C,MAAM,iBAAiB,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;QAChD,MAAM,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;QAErC,MAAM,QAAQ,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QACvF,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QAE7C,MAAM,OAAO,GAAG,QAAQ,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;QAC9C,MAAM,UAAU,GAAG,WAAW,CAAC,iBAAiB,CAAC,CAAC;QAElD,IAAI,OAAO,KAAK,CAAC,IAAI,UAAU,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QAEhD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,UAAU,CAAC,GAAG,OAAO,CAAC;QAErE,IAAI,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM;YAAE,OAAO,CAAC,CAAC;QAEtD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;;;;;;;;;;;OAaG;IACK,WAAW;QACjB,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,EAAE;YAAE,OAAO,CAAC,CAAC;QAE/C,IAAI,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;YAC5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBACzD,IAAI,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;oBAChE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;oBACxD,OAAO,CAAC,CAAC;gBACX,CAAC;YACH,CAAC;YACD,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;QACrC,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QAC7C,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,EAAE,GAAG,WAAW;YAAE,OAAO,CAAC,CAAC;QAE7D,4BAA4B;QAC5B,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,YAAY,IAAI,IAAI,CAAC,eAAe,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,UAAU,GAAG,EAAE,GAAG,WAAW,CAAC;QACpC,MAAM,QAAQ,GAAG,UAAU,GAAG,YAAY,CAAC;QAE3C,IAAI,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM;YAAE,OAAO,CAAC,CAAC;QAErD,yCAAyC;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACrE,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/C,IAAI,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;gBACjD,iEAAiE;gBACjE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBAC/D,OAAO,CAAC,CAAC,CAAC,+BAA+B;YAC3C,CAAC;QACH,CAAC;QAED,gDAAgD;QAChD,sDAAsD;QACtD,sCAAsC;QACtC,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAEhD,4BAA4B;QAC5B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC/D,OAAO,CAAC,CAAC,CAAC,sDAAsD;IAClE,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,UAAkB,EAAE,WAAmB;QAC/D,IAAI,UAAU,GAAG,UAAU,CAAC;QAC5B,IAAI,UAAU,GAAa,EAAE,CAAC;QAE9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YACjD,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,GAAG,WAAW,CAAC,CAAC;YACxF,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;YAC1C,UAAU,IAAI,WAAW,CAAC;YAE1B,kDAAkD;YAClD,IAAI,WAAW,GAAG,GAAG,EAAE,CAAC;gBACtB,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC1B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;oBACzC,kDAAkD;oBAClD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;wBACnE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;oBAC1B,CAAC;oBACD,UAAU,GAAG,EAAE,CAAC;gBAClB,CAAC;YACH,CAAC;QACH,CAAC;QAED,oDAAoD;QACpD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACzC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,UAAU,CAAC,IAAY;QAC7B,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;QAE1C,gCAAgC;QAChC,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAE5C,MAAM,gBAAgB,GAAG,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QACtD,MAAM,eAAe,GAAG,YAAY,GAAG,UAAU,CAAC;QAElD,IAAI,OAAO,GAAG,IAAI,CAAC;QACnB,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,IAAI,IAAI,CAAC,iBAAiB,KAAK,KAAK,EAAE,CAAC;YAC7D,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,aAAa,CAC9B,IAAI,UAAU,CAAC,OAAO,CAAC,EACvB,KAAK,EACL,gBAAgB,EAChB,eAAe,CAChB,CAAC;QAEF,8DAA8D;QAC9D,IAAI,IAA2C,CAAC;QAEhD,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC1B,8CAA8C;YAC9C,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAC3B,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;oBAC1B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBACtD,CAAC;qBAAM,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;oBAChC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBACrD,CAAC;YACH,CAAC;YAED,IAAI,GAAG;gBACL,aAAa,EAAE;oBACb,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE;oBAC5B,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU;oBAClC,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB;oBAC9C,WAAW,EAAE,IAAI,CAAC,gBAAgB,IAAI,SAAS;iBAChD;aACF,CAAC;YACF,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC9B,CAAC;QAED,IAAI,CAAC,UAAU,IAAI,YAAY,CAAC;QAChC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED;;OAEG;IACK,eAAe;QACrB,QAAQ,IAAI,CAAC,KAAK,EAAE,CAAC;YACnB,KAAK,MAAM;gBACT,yDAAyD;gBACzD,OAAO,GAAG,CAAC;YACb,KAAK,KAAK;gBACR,kCAAkC;gBAClC,OAAO,IAAI,CAAC;YACd,KAAK,KAAK;gBACR,kCAAkC;gBAClC,OAAO,IAAI,CAAC;YACd,KAAK,QAAQ;gBACX,oDAAoD;gBACpD,OAAO,IAAI,CAAC;YACd,KAAK,MAAM;gBACT,0CAA0C;gBAC1C,OAAO,IAAI,CAAC;YACd;gBACE,OAAO,IAAI,CAAC;QAChB,CAAC;IACH,CAAC;IAED;;OAEG;IACK,cAAc;QACpB,QAAQ,IAAI,CAAC,KAAK,EAAE,CAAC;YACnB,KAAK,KAAK;gBACR,OAAO,WAAW,CAAC,CAAC,SAAS;YAC/B,KAAK,MAAM;gBACT,OAAO,MAAM,CAAC;YAChB,KAAK,KAAK;gBACR,OAAO,KAAK,CAAC;YACf,KAAK,MAAM;gBACT,OAAO,MAAM,CAAC;YAChB,KAAK,QAAQ;gBACX,OAAO,QAAQ,CAAC;YAClB;gBACE,OAAO,IAAI,CAAC,KAAK,CAAC;QACtB,CAAC;IACH,CAAC;IAED;;OAEG;IACK,oBAAoB;QAC1B,gDAAgD;QAChD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAChC,IAAI,MAAM,GAAG,CAAC,CAAC;QAEf,6BAA6B;QAC7B,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACjC,MAAM,IAAI,CAAC,CAAC;QAEZ,mBAAmB;QACnB,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC;QAErB,yBAAyB;QACzB,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC;QAEhD,oCAAoC;QACpC,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,mBAAmB;QACtD,MAAM,IAAI,CAAC,CAAC;QAEZ,6CAA6C;QAC7C,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACrD,MAAM,IAAI,CAAC,CAAC;QAEZ,uCAAuC;QACvC,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QAC/B,MAAM,IAAI,CAAC,CAAC;QAEZ,kCAAkC;QAClC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,oCAAoC;QAE1D,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAED;;;OAGG;IACK,mBAAmB;QACzB,OAAO,wBAAwB,CAAC;YAC9B,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU;YACpC,oBAAoB,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB;SACnD,CAAC,CAAC;IACL,CAAC;IAEO,eAAe,CAAC,KAAa;QACnC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,gBAAgB,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QACzC,MAAM,YAAY,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9C,IAAI,KAAK,CAAC,MAAM,IAAI,YAAY,EAAE,CAAC;YACjC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACzB,CAAC;QACD,OAAO,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IACtC,CAAC;CACF"}
1
+ {"version":3,"file":"FFmpegAudioEncoder.js","sourceRoot":"","sources":["../../src/mediabunny/FFmpegAudioEncoder.ts"],"names":[],"mappings":"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"}
@@ -1,55 +1,21 @@
1
1
  /**
2
2
  * FFmpeg-backed VideoDecoder for Mediabunny
3
3
  *
4
- * Implements Mediabunny's CustomVideoDecoder interface using FFmpeg child process.
4
+ * Implements Mediabunny's CustomVideoDecoder interface using node-av native bindings.
5
5
  * Supports hardware acceleration via VAAPI, CUDA/CUVID, QSV.
6
6
  */
7
7
  import { CustomVideoDecoder, EncodedPacket, VideoCodec } from 'mediabunny';
8
8
  export declare class FFmpegVideoDecoder extends CustomVideoDecoder {
9
- private process;
10
- private accumulatedData;
11
- private frameSize;
9
+ private backend;
12
10
  private frameIndex;
13
- private ivfHeaderSent;
14
11
  private resolveFlush;
15
- private useIvf;
16
- private useAnnexB;
17
- private nalLengthSize;
18
- private spsNal;
19
- private ppsNal;
20
- private paramsSent;
21
12
  private packetTimestamps;
22
13
  private packetDurations;
23
- private usingHardwareAcceleration;
24
- private hwaccelMethod;
25
14
  static supports(codec: VideoCodec, _config: VideoDecoderConfig): boolean;
26
15
  init(): Promise<void>;
27
16
  decode(packet: EncodedPacket): Promise<void>;
28
- /**
29
- * Parse AVCDecoderConfigurationRecord from config.description
30
- * This extracts SPS and PPS NAL units needed for Annex B stream
31
- */
32
- private parseAvcDecoderConfig;
33
- /**
34
- * Convert AVC/AVCC format packet to Annex B and write to FFmpeg
35
- * AVC format: [length][NAL][length][NAL]...
36
- * Annex B: [start code][NAL][start code][NAL]...
37
- */
38
- private writeAnnexBFrame;
39
- /**
40
- * Check if buffer is already in Annex B format
41
- */
42
- private isAnnexBFormat;
43
17
  flush(): Promise<void>;
44
18
  close(): Promise<void>;
45
- /**
46
- * Write IVF file header (32 bytes)
47
- */
48
- private writeIvfHeader;
49
- /**
50
- * Write an IVF frame (12-byte header + data)
51
- */
52
- private writeIvfFrame;
53
19
  /**
54
20
  * Emit a decoded VideoSample via Mediabunny callback
55
21
  */
@@ -1 +1 @@
1
- {"version":3,"file":"FFmpegVideoDecoder.d.ts","sourceRoot":"","sources":["../../src/mediabunny/FFmpegVideoDecoder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,kBAAkB,EAElB,aAAa,EACb,UAAU,EACX,MAAM,YAAY,CAAC;AAyBpB,qBAAa,kBAAmB,SAAQ,kBAAkB;IACxD,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,eAAe,CAA2B;IAClD,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,UAAU,CAAkB;IAEpC,OAAO,CAAC,gBAAgB,CAAgB;IACxC,OAAO,CAAC,eAAe,CAAgB;IACvC,OAAO,CAAC,yBAAyB,CAAS;IAC1C,OAAO,CAAC,aAAa,CAA2C;IAEhE,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO;IAIlE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAgHrB,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBlD;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAyD7B;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IA2CxB;;OAEG;IACH,OAAO,CAAC,cAAc;IAShB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAYtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5B;;OAEG;IACH,OAAO,CAAC,cAAc;IA+BtB;;OAEG;IACH,OAAO,CAAC,aAAa;IAerB;;OAEG;IACH,OAAO,CAAC,UAAU;CA+BnB"}
1
+ {"version":3,"file":"FFmpegVideoDecoder.d.ts","sourceRoot":"","sources":["../../src/mediabunny/FFmpegVideoDecoder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,kBAAkB,EAElB,aAAa,EACb,UAAU,EACX,MAAM,YAAY,CAAC;AAYpB,qBAAa,kBAAmB,SAAQ,kBAAkB;IACxD,OAAO,CAAC,OAAO,CAAmC;IAClD,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,YAAY,CAA6B;IAEjD,OAAO,CAAC,gBAAgB,CAAgB;IACxC,OAAO,CAAC,eAAe,CAAgB;IAEvC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO;IAIlE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAqDrB,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAa5C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAYtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5B;;OAEG;IACH,OAAO,CAAC,UAAU;CA8BnB"}