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.
- package/README.md +4 -0
- package/dist/__tests__/AudioDecoder.test.js +3 -3
- package/dist/__tests__/AudioDecoder.test.js.map +1 -1
- package/dist/__tests__/ImageDecoder.wpt.test.d.ts +8 -0
- package/dist/__tests__/ImageDecoder.wpt.test.d.ts.map +1 -0
- package/dist/__tests__/ImageDecoder.wpt.test.js +135 -0
- package/dist/__tests__/ImageDecoder.wpt.test.js.map +1 -0
- package/dist/__tests__/NodeAvDecoder.test.d.ts +2 -0
- package/dist/__tests__/NodeAvDecoder.test.d.ts.map +1 -0
- package/dist/__tests__/NodeAvDecoder.test.js +199 -0
- package/dist/__tests__/NodeAvDecoder.test.js.map +1 -0
- package/dist/__tests__/NodeAvEncoder.test.d.ts +2 -0
- package/dist/__tests__/NodeAvEncoder.test.d.ts.map +1 -0
- package/dist/__tests__/NodeAvEncoder.test.js +176 -0
- package/dist/__tests__/NodeAvEncoder.test.js.map +1 -0
- package/dist/__tests__/VideoFrame.test.js.map +1 -1
- package/dist/backends/index.d.ts +3 -0
- package/dist/backends/index.d.ts.map +1 -0
- package/dist/backends/index.js +2 -0
- package/dist/backends/index.js.map +1 -0
- package/dist/backends/types.d.ts +165 -0
- package/dist/backends/types.d.ts.map +1 -0
- package/dist/backends/types.js +25 -0
- package/dist/backends/types.js.map +1 -0
- package/dist/core/AudioData.d.ts +1 -1
- package/dist/core/AudioData.d.ts.map +1 -1
- package/dist/core/AudioData.js +13 -9
- package/dist/core/AudioData.js.map +1 -1
- package/dist/core/VideoFrame.d.ts +25 -10
- package/dist/core/VideoFrame.d.ts.map +1 -1
- package/dist/core/VideoFrame.js +115 -65
- package/dist/core/VideoFrame.js.map +1 -1
- package/dist/decoders/AudioDecoder.d.ts +6 -12
- package/dist/decoders/AudioDecoder.d.ts.map +1 -1
- package/dist/decoders/AudioDecoder.js +57 -147
- 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 +59 -0
- package/dist/decoders/ImageDecoder.js.map +1 -1
- package/dist/decoders/VideoDecoder.d.ts +6 -13
- package/dist/decoders/VideoDecoder.d.ts.map +1 -1
- package/dist/decoders/VideoDecoder.js +49 -130
- package/dist/decoders/VideoDecoder.js.map +1 -1
- package/dist/demos/demo-conversion.js +2 -2
- package/dist/demos/demo-conversion.js.map +1 -1
- package/dist/demos/demo-four-corners.d.ts +6 -0
- package/dist/demos/demo-four-corners.d.ts.map +1 -0
- package/dist/demos/demo-four-corners.js +218 -0
- package/dist/demos/demo-four-corners.js.map +1 -0
- package/dist/demos/demo-samples.js +228 -64
- package/dist/demos/demo-samples.js.map +1 -1
- package/dist/encoders/AudioEncoder.d.ts +6 -13
- package/dist/encoders/AudioEncoder.d.ts.map +1 -1
- package/dist/encoders/AudioEncoder.js +81 -213
- package/dist/encoders/AudioEncoder.js.map +1 -1
- package/dist/encoders/VideoEncoder.d.ts +5 -14
- package/dist/encoders/VideoEncoder.d.ts.map +1 -1
- package/dist/encoders/VideoEncoder.js +39 -159
- package/dist/encoders/VideoEncoder.js.map +1 -1
- package/dist/formats/conversions/frame-converter.d.ts +17 -0
- package/dist/formats/conversions/frame-converter.d.ts.map +1 -1
- package/dist/formats/conversions/frame-converter.js +127 -0
- package/dist/formats/conversions/frame-converter.js.map +1 -1
- package/dist/formats/conversions/index.d.ts +1 -0
- package/dist/formats/conversions/index.d.ts.map +1 -1
- package/dist/formats/conversions/index.js +2 -0
- package/dist/formats/conversions/index.js.map +1 -1
- package/dist/hardware/detection.d.ts +1 -1
- package/dist/hardware/detection.d.ts.map +1 -1
- package/dist/hardware/detection.js +54 -27
- package/dist/hardware/detection.js.map +1 -1
- package/dist/mediabunny/FFmpegAudioDecoder.d.ts +2 -16
- package/dist/mediabunny/FFmpegAudioDecoder.d.ts.map +1 -1
- package/dist/mediabunny/FFmpegAudioDecoder.js +59 -184
- package/dist/mediabunny/FFmpegAudioDecoder.js.map +1 -1
- package/dist/mediabunny/FFmpegAudioEncoder.d.ts +4 -38
- package/dist/mediabunny/FFmpegAudioEncoder.d.ts.map +1 -1
- package/dist/mediabunny/FFmpegAudioEncoder.js +64 -328
- package/dist/mediabunny/FFmpegAudioEncoder.js.map +1 -1
- package/dist/mediabunny/FFmpegVideoDecoder.d.ts +2 -36
- package/dist/mediabunny/FFmpegVideoDecoder.d.ts.map +1 -1
- package/dist/mediabunny/FFmpegVideoDecoder.js +37 -278
- package/dist/mediabunny/FFmpegVideoDecoder.js.map +1 -1
- package/dist/mediabunny/FFmpegVideoEncoder.d.ts +6 -35
- package/dist/mediabunny/FFmpegVideoEncoder.d.ts.map +1 -1
- package/dist/mediabunny/FFmpegVideoEncoder.js +46 -334
- package/dist/mediabunny/FFmpegVideoEncoder.js.map +1 -1
- package/dist/node-av/HardwarePipeline.d.ts +36 -0
- package/dist/node-av/HardwarePipeline.d.ts.map +1 -0
- package/dist/node-av/HardwarePipeline.js +243 -0
- package/dist/node-av/HardwarePipeline.js.map +1 -0
- package/dist/node-av/NodeAvAudioDecoder.d.ts +46 -0
- package/dist/node-av/NodeAvAudioDecoder.d.ts.map +1 -0
- package/dist/node-av/NodeAvAudioDecoder.js +343 -0
- package/dist/node-av/NodeAvAudioDecoder.js.map +1 -0
- package/dist/node-av/NodeAvAudioEncoder.d.ts +44 -0
- package/dist/node-av/NodeAvAudioEncoder.d.ts.map +1 -0
- package/dist/node-av/NodeAvAudioEncoder.js +385 -0
- package/dist/node-av/NodeAvAudioEncoder.js.map +1 -0
- package/dist/node-av/NodeAvImageDecoder.d.ts +95 -0
- package/dist/node-av/NodeAvImageDecoder.d.ts.map +1 -0
- package/dist/node-av/NodeAvImageDecoder.js +287 -0
- package/dist/node-av/NodeAvImageDecoder.js.map +1 -0
- package/dist/node-av/NodeAvVideoDecoder.d.ts +43 -0
- package/dist/node-av/NodeAvVideoDecoder.d.ts.map +1 -0
- package/dist/node-av/NodeAvVideoDecoder.js +361 -0
- package/dist/node-av/NodeAvVideoDecoder.js.map +1 -0
- package/dist/node-av/NodeAvVideoEncoder.d.ts +44 -0
- package/dist/node-av/NodeAvVideoEncoder.d.ts.map +1 -0
- package/dist/node-av/NodeAvVideoEncoder.js +397 -0
- package/dist/node-av/NodeAvVideoEncoder.js.map +1 -0
- package/dist/utils/event-target.d.ts +42 -0
- package/dist/utils/event-target.d.ts.map +1 -0
- package/dist/utils/event-target.js +96 -0
- package/dist/utils/event-target.js.map +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -1
- 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
|
|
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
|
-
//
|
|
10
|
-
const
|
|
9
|
+
// Map Mediabunny codec to internal codec name
|
|
10
|
+
const CODEC_NAME_MAP = {
|
|
11
11
|
'aac': 'aac',
|
|
12
|
-
'opus': '
|
|
13
|
-
'mp3': '
|
|
12
|
+
'opus': 'opus',
|
|
13
|
+
'mp3': 'mp3',
|
|
14
14
|
'flac': 'flac',
|
|
15
|
-
'vorbis': '
|
|
16
|
-
'pcm-s16': '
|
|
17
|
-
'pcm-s16be': '
|
|
18
|
-
'pcm-s24': '
|
|
19
|
-
'pcm-s24be': '
|
|
20
|
-
'pcm-s32': '
|
|
21
|
-
'pcm-s32be': '
|
|
22
|
-
'pcm-f32': '
|
|
23
|
-
'pcm-f32be': '
|
|
24
|
-
'pcm-f64': '
|
|
25
|
-
'pcm-f64be': '
|
|
26
|
-
'pcm-u8': '
|
|
27
|
-
'pcm-s8': '
|
|
28
|
-
'ulaw': '
|
|
29
|
-
'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
|
-
|
|
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
|
|
38
|
+
return codec in CODEC_NAME_MAP;
|
|
65
39
|
}
|
|
66
40
|
async init() {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
const
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
this.
|
|
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
|
-
|
|
102
|
-
|
|
103
|
-
this.
|
|
50
|
+
// Listen for encoded frames
|
|
51
|
+
this.backend.on('encodedFrame', (frame) => {
|
|
52
|
+
this.emitPacket(frame.data);
|
|
104
53
|
});
|
|
105
|
-
this.
|
|
106
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
138
|
-
this.
|
|
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.
|
|
147
|
-
this.
|
|
148
|
-
this.
|
|
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
|
-
*
|
|
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
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
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
|
-
|
|
363
|
-
|
|
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';
|
|
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
|
-
|
|
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
|
-
|
|
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":"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"}
|
|
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
|
|
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
|
|
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;
|
|
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"}
|