webcodecs-node 0.3.0 → 0.5.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/dist/__tests__/AudioData.test.js +2 -1
- package/dist/__tests__/AudioData.test.js.map +1 -1
- package/dist/__tests__/AudioDecoder.test.js +5 -5
- package/dist/__tests__/AudioDecoder.test.js.map +1 -1
- package/dist/__tests__/AudioEncoder.test.js +3 -3
- package/dist/__tests__/AudioEncoder.test.js.map +1 -1
- package/dist/__tests__/EncodedChunks.test.js +3 -2
- package/dist/__tests__/EncodedChunks.test.js.map +1 -1
- package/dist/__tests__/HardwareAcceleration.test.js +2 -1
- package/dist/__tests__/HardwareAcceleration.test.js.map +1 -1
- package/dist/__tests__/ImageDecoder.test.js +16 -45
- package/dist/__tests__/ImageDecoder.test.js.map +1 -1
- package/dist/__tests__/NodeAvDecoder.test.js +12 -5
- package/dist/__tests__/NodeAvDecoder.test.js.map +1 -1
- package/dist/__tests__/VideoDecoder.test.js +5 -5
- package/dist/__tests__/VideoDecoder.test.js.map +1 -1
- package/dist/__tests__/VideoEncoder.test.js +3 -3
- package/dist/__tests__/VideoEncoder.test.js.map +1 -1
- package/dist/__tests__/VideoFrame.test.js +4 -1
- package/dist/__tests__/VideoFrame.test.js.map +1 -1
- package/dist/backends/types.d.ts +6 -3
- package/dist/backends/types.d.ts.map +1 -1
- package/dist/backends/types.js +2 -2
- package/dist/backends/types.js.map +1 -1
- package/dist/codec-utils/audio-codecs.d.ts +60 -0
- package/dist/codec-utils/audio-codecs.d.ts.map +1 -0
- package/dist/codec-utils/audio-codecs.js +117 -0
- package/dist/codec-utils/audio-codecs.js.map +1 -0
- package/dist/codec-utils/formats.d.ts +42 -0
- package/dist/codec-utils/formats.d.ts.map +1 -0
- package/dist/codec-utils/formats.js +147 -0
- package/dist/codec-utils/formats.js.map +1 -0
- package/dist/codec-utils/index.d.ts +9 -0
- package/dist/codec-utils/index.d.ts.map +1 -0
- package/dist/codec-utils/index.js +12 -0
- package/dist/codec-utils/index.js.map +1 -0
- package/dist/codec-utils/types.d.ts +87 -0
- package/dist/codec-utils/types.d.ts.map +1 -0
- package/dist/codec-utils/types.js +10 -0
- package/dist/codec-utils/types.js.map +1 -0
- package/dist/containers/Demuxer.d.ts +114 -0
- package/dist/containers/Demuxer.d.ts.map +1 -0
- package/dist/containers/Demuxer.js +256 -0
- package/dist/containers/Demuxer.js.map +1 -0
- package/dist/containers/Muxer.d.ts +142 -0
- package/dist/containers/Muxer.d.ts.map +1 -0
- package/dist/containers/Muxer.js +295 -0
- package/dist/containers/Muxer.js.map +1 -0
- package/dist/containers/extract.d.ts +25 -0
- package/dist/containers/extract.d.ts.map +1 -0
- package/dist/containers/extract.js +64 -0
- package/dist/containers/extract.js.map +1 -0
- package/dist/containers/index.d.ts +40 -0
- package/dist/containers/index.d.ts.map +1 -0
- package/dist/containers/index.js +41 -0
- package/dist/containers/index.js.map +1 -0
- package/dist/containers/transcode.d.ts +138 -0
- package/dist/containers/transcode.d.ts.map +1 -0
- package/dist/containers/transcode.js +536 -0
- package/dist/containers/transcode.js.map +1 -0
- package/dist/core/AudioData.d.ts +4 -0
- package/dist/core/AudioData.d.ts.map +1 -1
- package/dist/core/AudioData.js +56 -4
- package/dist/core/AudioData.js.map +1 -1
- package/dist/core/EncodedAudioChunk.d.ts +1 -1
- package/dist/core/EncodedAudioChunk.d.ts.map +1 -1
- package/dist/core/EncodedAudioChunk.js +1 -1
- package/dist/core/EncodedAudioChunk.js.map +1 -1
- package/dist/core/EncodedVideoChunk.d.ts.map +1 -1
- package/dist/core/EncodedVideoChunk.js +3 -19
- package/dist/core/EncodedVideoChunk.js.map +1 -1
- package/dist/core/VideoFrame.d.ts +6 -1
- package/dist/core/VideoFrame.d.ts.map +1 -1
- package/dist/core/VideoFrame.js +130 -17
- package/dist/core/VideoFrame.js.map +1 -1
- package/dist/decoders/AudioDecoder.d.ts +8 -0
- package/dist/decoders/AudioDecoder.d.ts.map +1 -1
- package/dist/decoders/AudioDecoder.js +62 -32
- package/dist/decoders/AudioDecoder.js.map +1 -1
- package/dist/decoders/ImageDecoder.d.ts +0 -3
- package/dist/decoders/ImageDecoder.d.ts.map +1 -1
- package/dist/decoders/ImageDecoder.js +13 -225
- package/dist/decoders/ImageDecoder.js.map +1 -1
- package/dist/decoders/VideoDecoder.d.ts +8 -0
- package/dist/decoders/VideoDecoder.d.ts.map +1 -1
- package/dist/decoders/VideoDecoder.js +76 -46
- package/dist/decoders/VideoDecoder.js.map +1 -1
- package/dist/demos/demo-1080p-transcode.d.ts +8 -0
- package/dist/demos/demo-1080p-transcode.d.ts.map +1 -0
- package/dist/demos/demo-1080p-transcode.js +188 -0
- package/dist/demos/demo-1080p-transcode.js.map +1 -0
- package/dist/demos/demo-containers.d.ts +7 -0
- package/dist/demos/demo-containers.d.ts.map +1 -0
- package/dist/demos/demo-containers.js +140 -0
- package/dist/demos/demo-containers.js.map +1 -0
- package/dist/demos/demo-four-corners.js +4 -4
- package/dist/demos/demo-four-corners.js.map +1 -1
- package/dist/demos/demo-hwaccel-conversion.js +1 -1
- package/dist/demos/demo-hwaccel-conversion.js.map +1 -1
- package/dist/demos/demo-hwaccel.js +1 -1
- package/dist/demos/demo-hwaccel.js.map +1 -1
- package/dist/demos/demo-samples.js +4 -4
- package/dist/demos/demo-samples.js.map +1 -1
- package/dist/demos/demo-streaming.js +6 -6
- package/dist/demos/demo-streaming.js.map +1 -1
- package/dist/encoders/AudioEncoder.d.ts +8 -0
- package/dist/encoders/AudioEncoder.d.ts.map +1 -1
- package/dist/encoders/AudioEncoder.js +68 -26
- package/dist/encoders/AudioEncoder.js.map +1 -1
- package/dist/encoders/VideoEncoder.d.ts +8 -0
- package/dist/encoders/VideoEncoder.d.ts.map +1 -1
- package/dist/encoders/VideoEncoder.js +64 -13
- package/dist/encoders/VideoEncoder.js.map +1 -1
- package/dist/ffmpeg/index.d.ts +3 -2
- package/dist/ffmpeg/index.d.ts.map +1 -1
- package/dist/ffmpeg/index.js +3 -3
- package/dist/ffmpeg/index.js.map +1 -1
- package/dist/formats/conversions/batch-converter.d.ts +61 -0
- package/dist/formats/conversions/batch-converter.d.ts.map +1 -0
- package/dist/formats/conversions/batch-converter.js +274 -0
- package/dist/formats/conversions/batch-converter.js.map +1 -0
- package/dist/formats/conversions/frame-converter.d.ts.map +1 -1
- package/dist/formats/conversions/frame-converter.js +17 -10
- 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/decoder-args.d.ts +2 -7
- package/dist/hardware/decoder-args.d.ts.map +1 -1
- package/dist/hardware/decoder-args.js +2 -32
- package/dist/hardware/decoder-args.js.map +1 -1
- package/dist/hardware/encoder-args.d.ts +2 -11
- package/dist/hardware/encoder-args.d.ts.map +1 -1
- package/dist/hardware/encoder-args.js +2 -71
- package/dist/hardware/encoder-args.js.map +1 -1
- package/dist/hardware/index.d.ts +2 -2
- package/dist/hardware/index.d.ts.map +1 -1
- package/dist/hardware/index.js +2 -2
- package/dist/hardware/index.js.map +1 -1
- package/dist/index.d.ts +5 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -6
- package/dist/index.js.map +1 -1
- package/dist/mediabunny/FFmpegAudioDecoder.d.ts +3 -2
- package/dist/mediabunny/FFmpegAudioDecoder.d.ts.map +1 -1
- package/dist/mediabunny/FFmpegAudioDecoder.js +5 -8
- package/dist/mediabunny/FFmpegAudioDecoder.js.map +1 -1
- package/dist/mediabunny/FFmpegAudioEncoder.d.ts +3 -2
- package/dist/mediabunny/FFmpegAudioEncoder.d.ts.map +1 -1
- package/dist/mediabunny/FFmpegAudioEncoder.js +3 -2
- package/dist/mediabunny/FFmpegAudioEncoder.js.map +1 -1
- package/dist/mediabunny/FFmpegVideoDecoder.d.ts +4 -3
- package/dist/mediabunny/FFmpegVideoDecoder.d.ts.map +1 -1
- package/dist/mediabunny/FFmpegVideoDecoder.js +6 -9
- package/dist/mediabunny/FFmpegVideoDecoder.js.map +1 -1
- package/dist/mediabunny/FFmpegVideoEncoder.d.ts +4 -3
- package/dist/mediabunny/FFmpegVideoEncoder.d.ts.map +1 -1
- package/dist/mediabunny/FFmpegVideoEncoder.js +4 -3
- package/dist/mediabunny/FFmpegVideoEncoder.js.map +1 -1
- package/dist/node-av/NodeAvAudioDecoder.d.ts +2 -2
- package/dist/node-av/NodeAvAudioDecoder.d.ts.map +1 -1
- package/dist/node-av/NodeAvAudioDecoder.js +63 -56
- package/dist/node-av/NodeAvAudioDecoder.js.map +1 -1
- package/dist/node-av/NodeAvAudioEncoder.d.ts +6 -0
- package/dist/node-av/NodeAvAudioEncoder.d.ts.map +1 -1
- package/dist/node-av/NodeAvAudioEncoder.js +166 -45
- package/dist/node-av/NodeAvAudioEncoder.js.map +1 -1
- package/dist/node-av/NodeAvImageDecoder.d.ts +28 -9
- package/dist/node-av/NodeAvImageDecoder.d.ts.map +1 -1
- package/dist/node-av/NodeAvImageDecoder.js +156 -37
- package/dist/node-av/NodeAvImageDecoder.js.map +1 -1
- package/dist/node-av/NodeAvVideoDecoder.d.ts +1 -1
- package/dist/node-av/NodeAvVideoDecoder.d.ts.map +1 -1
- package/dist/node-av/NodeAvVideoDecoder.js +20 -16
- package/dist/node-av/NodeAvVideoDecoder.js.map +1 -1
- package/dist/node-av/NodeAvVideoEncoder.d.ts +12 -0
- package/dist/node-av/NodeAvVideoEncoder.d.ts.map +1 -1
- package/dist/node-av/NodeAvVideoEncoder.js +175 -63
- package/dist/node-av/NodeAvVideoEncoder.js.map +1 -1
- package/dist/polyfill.d.ts.map +1 -1
- package/dist/polyfill.js +11 -9
- package/dist/polyfill.js.map +1 -1
- package/dist/utils/aac.d.ts.map +1 -1
- package/dist/utils/aac.js +6 -0
- package/dist/utils/aac.js.map +1 -1
- package/dist/utils/buffer-pool.d.ts +109 -0
- package/dist/utils/buffer-pool.d.ts.map +1 -0
- package/dist/utils/buffer-pool.js +278 -0
- package/dist/utils/buffer-pool.js.map +1 -0
- package/dist/utils/codec-cache.d.ts +65 -0
- package/dist/utils/codec-cache.d.ts.map +1 -0
- package/dist/utils/codec-cache.js +116 -0
- package/dist/utils/codec-cache.js.map +1 -0
- package/dist/utils/errors.d.ts +62 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +84 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/hardware-pool.d.ts +88 -0
- package/dist/utils/hardware-pool.d.ts.map +1 -0
- package/dist/utils/hardware-pool.js +266 -0
- package/dist/utils/hardware-pool.js.map +1 -0
- package/dist/utils/index.d.ts +5 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +10 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/timeout.d.ts +44 -0
- package/dist/utils/timeout.d.ts.map +1 -0
- package/dist/utils/timeout.js +73 -0
- package/dist/utils/timeout.js.map +1 -0
- package/dist/utils/type-guards.d.ts +11 -1
- package/dist/utils/type-guards.d.ts.map +1 -1
- package/dist/utils/type-guards.js.map +1 -1
- package/package.json +13 -35
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
import { EventEmitter } from 'events';
|
|
8
8
|
import { Decoder, FilterAPI } from 'node-av/api';
|
|
9
9
|
import { FormatContext, Packet, Rational } from 'node-av/lib';
|
|
10
|
-
import { AVMEDIA_TYPE_AUDIO, AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_FLTP, AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S16P, AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_S32P, AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_U8P, AV_CODEC_ID_AAC, AV_CODEC_ID_OPUS, AV_CODEC_ID_MP3, AV_CODEC_ID_FLAC, AV_CODEC_ID_VORBIS, AV_CODEC_ID_PCM_S16LE, AV_CODEC_ID_PCM_F32LE, AV_CHANNEL_ORDER_NATIVE, AV_CH_LAYOUT_MONO, AV_CH_LAYOUT_STEREO, AV_CH_LAYOUT_5POINT1, AV_CH_LAYOUT_7POINT1, } from 'node-av/constants';
|
|
11
|
-
import { wrapAacFrameWithAdts } from '../utils/aac.js';
|
|
10
|
+
import { AVMEDIA_TYPE_AUDIO, AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_FLTP, AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S16P, AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_S32P, AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_U8P, AV_CODEC_ID_AAC, AV_CODEC_ID_OPUS, AV_CODEC_ID_MP3, AV_CODEC_ID_FLAC, AV_CODEC_ID_VORBIS, AV_CODEC_ID_PCM_S16LE, AV_CODEC_ID_PCM_S24LE, AV_CODEC_ID_PCM_S32LE, AV_CODEC_ID_PCM_F32LE, AV_CODEC_ID_PCM_U8, AV_CODEC_ID_PCM_MULAW, AV_CODEC_ID_PCM_ALAW, AV_CHANNEL_ORDER_NATIVE, AV_CH_LAYOUT_MONO, AV_CH_LAYOUT_STEREO, AV_CH_LAYOUT_5POINT1, AV_CH_LAYOUT_7POINT1, } from 'node-av/constants';
|
|
12
11
|
import { createLogger } from '../utils/logger.js';
|
|
12
|
+
import { toUint8Array } from '../utils/buffer.js';
|
|
13
13
|
const logger = createLogger('NodeAvAudioDecoder');
|
|
14
14
|
/** Default sample rate for audio decoding */
|
|
15
15
|
const DEFAULT_SAMPLE_RATE = 48000;
|
|
@@ -31,7 +31,6 @@ export class NodeAvAudioDecoder extends EventEmitter {
|
|
|
31
31
|
packetTimeBase = new Rational(1, DEFAULT_SAMPLE_RATE);
|
|
32
32
|
outputSampleFormat = AV_SAMPLE_FMT_FLT;
|
|
33
33
|
filterDescription = null;
|
|
34
|
-
aacConfig = null;
|
|
35
34
|
outputFormat = 'f32';
|
|
36
35
|
get isHealthy() {
|
|
37
36
|
return !this.shuttingDown;
|
|
@@ -41,18 +40,13 @@ export class NodeAvAudioDecoder extends EventEmitter {
|
|
|
41
40
|
this.packetTimeBase = new Rational(1, config.sampleRate);
|
|
42
41
|
this.outputFormat = this.parseOutputFormat(config);
|
|
43
42
|
this.outputSampleFormat = mapSampleFormat(this.outputFormat);
|
|
44
|
-
this.aacConfig = this.parseAacDescription(config);
|
|
45
43
|
}
|
|
46
44
|
write(data) {
|
|
47
45
|
if (!this.config || this.shuttingDown) {
|
|
48
46
|
return false;
|
|
49
47
|
}
|
|
50
|
-
//
|
|
51
|
-
|
|
52
|
-
if (this.aacConfig) {
|
|
53
|
-
dataToWrite = Buffer.from(wrapAacFrameWithAdts(new Uint8Array(data), this.aacConfig));
|
|
54
|
-
}
|
|
55
|
-
this.queue.push(dataToWrite);
|
|
48
|
+
// Pass raw data directly - extradata is set on the decoder context
|
|
49
|
+
this.queue.push(Buffer.from(data));
|
|
56
50
|
void this.processQueue();
|
|
57
51
|
return true;
|
|
58
52
|
}
|
|
@@ -113,15 +107,8 @@ export class NodeAvAudioDecoder extends EventEmitter {
|
|
|
113
107
|
params.channelLayout = this.getChannelLayout(this.config.numberOfChannels);
|
|
114
108
|
params.channels = this.config.numberOfChannels;
|
|
115
109
|
// Set extradata if we have description (e.g., AudioSpecificConfig for AAC)
|
|
116
|
-
if (this.config.description
|
|
117
|
-
const
|
|
118
|
-
let bytes;
|
|
119
|
-
if (desc instanceof ArrayBuffer) {
|
|
120
|
-
bytes = new Uint8Array(desc);
|
|
121
|
-
}
|
|
122
|
-
else {
|
|
123
|
-
bytes = new Uint8Array(desc.buffer, desc.byteOffset, desc.byteLength);
|
|
124
|
-
}
|
|
110
|
+
if (this.config.description) {
|
|
111
|
+
const bytes = toUint8Array(this.config.description);
|
|
125
112
|
params.extradata = Buffer.from(bytes);
|
|
126
113
|
}
|
|
127
114
|
this.decoder = await Decoder.create(this.stream, {
|
|
@@ -130,8 +117,8 @@ export class NodeAvAudioDecoder extends EventEmitter {
|
|
|
130
117
|
logger.info(`Created decoder for codec: ${this.config.codec}`);
|
|
131
118
|
}
|
|
132
119
|
parseOutputFormat(config) {
|
|
133
|
-
|
|
134
|
-
return
|
|
120
|
+
const defaultFormat = 'f32';
|
|
121
|
+
return config.outputFormat ?? defaultFormat;
|
|
135
122
|
}
|
|
136
123
|
async decodeBuffer(buffer) {
|
|
137
124
|
await this.ensureDecoder();
|
|
@@ -158,16 +145,27 @@ export class NodeAvAudioDecoder extends EventEmitter {
|
|
|
158
145
|
while (frame) {
|
|
159
146
|
const nbSamples = frame.nbSamples;
|
|
160
147
|
if (nbSamples > 0) {
|
|
161
|
-
const
|
|
162
|
-
|
|
163
|
-
if (converted) {
|
|
148
|
+
const passthrough = this.canPassThrough(frame);
|
|
149
|
+
if (passthrough) {
|
|
164
150
|
this.emit('frame', {
|
|
165
|
-
|
|
151
|
+
nativeFrame: frame,
|
|
166
152
|
numberOfFrames: nbSamples,
|
|
167
153
|
timestamp: this.frameIndex,
|
|
168
154
|
});
|
|
169
155
|
this.frameIndex += nbSamples;
|
|
170
156
|
}
|
|
157
|
+
else {
|
|
158
|
+
const converted = await this.toOutputBuffer(frame);
|
|
159
|
+
frame.unref();
|
|
160
|
+
if (converted) {
|
|
161
|
+
this.emit('frame', {
|
|
162
|
+
data: converted,
|
|
163
|
+
numberOfFrames: nbSamples,
|
|
164
|
+
timestamp: this.frameIndex,
|
|
165
|
+
});
|
|
166
|
+
this.frameIndex += nbSamples;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
171
169
|
}
|
|
172
170
|
else {
|
|
173
171
|
frame.unref();
|
|
@@ -175,14 +173,24 @@ export class NodeAvAudioDecoder extends EventEmitter {
|
|
|
175
173
|
frame = await this.decoder.receive();
|
|
176
174
|
}
|
|
177
175
|
}
|
|
176
|
+
canPassThrough(frame) {
|
|
177
|
+
return frame.format === this.outputSampleFormat;
|
|
178
|
+
}
|
|
178
179
|
async toOutputBuffer(frame) {
|
|
179
|
-
const outputFormatName = sampleFormatToFFmpegName(this.outputSampleFormat);
|
|
180
180
|
const frameFormat = frame.format;
|
|
181
|
+
const frameChannels = frame.channels || this.config?.numberOfChannels || 2;
|
|
182
|
+
const nbSamples = frame.nbSamples;
|
|
181
183
|
// If frame already matches requested format, just export
|
|
182
184
|
if (frameFormat === this.outputSampleFormat) {
|
|
183
185
|
return frame.toBuffer();
|
|
184
186
|
}
|
|
185
|
-
//
|
|
187
|
+
// For multi-channel audio (>2 channels), the filter has issues with channel layouts
|
|
188
|
+
// Convert manually from planar float to interleaved float if needed
|
|
189
|
+
if (frameChannels > 2 && frameFormat === AV_SAMPLE_FMT_FLTP && this.outputSampleFormat === AV_SAMPLE_FMT_FLT) {
|
|
190
|
+
return this.convertPlanarToInterleaved(frame, nbSamples, frameChannels);
|
|
191
|
+
}
|
|
192
|
+
// For stereo/mono, use filter for conversion
|
|
193
|
+
const outputFormatName = sampleFormatToFFmpegName(this.outputSampleFormat);
|
|
186
194
|
const description = `aformat=sample_fmts=${outputFormatName}`;
|
|
187
195
|
if (!this.filter || this.filterDescription !== description) {
|
|
188
196
|
this.filter?.close();
|
|
@@ -201,36 +209,25 @@ export class NodeAvAudioDecoder extends EventEmitter {
|
|
|
201
209
|
filtered.unref();
|
|
202
210
|
return buffer;
|
|
203
211
|
}
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
const
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
212
|
+
convertPlanarToInterleaved(frame, nbSamples, numChannels) {
|
|
213
|
+
// Get planar buffer from frame - each channel is stored separately
|
|
214
|
+
const planarBuffer = frame.toBuffer();
|
|
215
|
+
const bytesPerSample = 4; // float32
|
|
216
|
+
const planeSize = nbSamples * bytesPerSample;
|
|
217
|
+
// Create interleaved output
|
|
218
|
+
const outputSize = nbSamples * numChannels * bytesPerSample;
|
|
219
|
+
const output = Buffer.alloc(outputSize);
|
|
220
|
+
// Convert from planar (LLLLLLLL RRRRRRRR ...) to interleaved (LRLRLRLR ...)
|
|
221
|
+
const inputView = new Float32Array(planarBuffer.buffer, planarBuffer.byteOffset, planarBuffer.byteLength / 4);
|
|
222
|
+
const outputView = new Float32Array(output.buffer, output.byteOffset, output.byteLength / 4);
|
|
223
|
+
for (let s = 0; s < nbSamples; s++) {
|
|
224
|
+
for (let ch = 0; ch < numChannels; ch++) {
|
|
225
|
+
const srcIdx = ch * nbSamples + s;
|
|
226
|
+
const dstIdx = s * numChannels + ch;
|
|
227
|
+
outputView[dstIdx] = inputView[srcIdx];
|
|
228
|
+
}
|
|
220
229
|
}
|
|
221
|
-
|
|
222
|
-
// First 5 bits: audioObjectType
|
|
223
|
-
// Next 4 bits: samplingFrequencyIndex
|
|
224
|
-
// Next 4 bits: channelConfiguration
|
|
225
|
-
const audioObjectType = (bytes[0] >> 3) & 0x1f;
|
|
226
|
-
const samplingFrequencyIndex = ((bytes[0] & 0x07) << 1) | ((bytes[1] >> 7) & 0x01);
|
|
227
|
-
const channelConfiguration = (bytes[1] >> 3) & 0x0f;
|
|
228
|
-
return {
|
|
229
|
-
audioObjectType,
|
|
230
|
-
samplingFrequencyIndex,
|
|
231
|
-
samplingRate: config.sampleRate,
|
|
232
|
-
channelConfiguration,
|
|
233
|
-
};
|
|
230
|
+
return output;
|
|
234
231
|
}
|
|
235
232
|
getChannelLayout(numChannels) {
|
|
236
233
|
// Standard channel layouts as ChannelLayout objects
|
|
@@ -291,8 +288,18 @@ function mapCodecId(codec) {
|
|
|
291
288
|
return AV_CODEC_ID_VORBIS;
|
|
292
289
|
case 'pcm-s16':
|
|
293
290
|
return AV_CODEC_ID_PCM_S16LE;
|
|
291
|
+
case 'pcm-s24':
|
|
292
|
+
return AV_CODEC_ID_PCM_S24LE;
|
|
293
|
+
case 'pcm-s32':
|
|
294
|
+
return AV_CODEC_ID_PCM_S32LE;
|
|
294
295
|
case 'pcm-f32':
|
|
295
296
|
return AV_CODEC_ID_PCM_F32LE;
|
|
297
|
+
case 'pcm-u8':
|
|
298
|
+
return AV_CODEC_ID_PCM_U8;
|
|
299
|
+
case 'ulaw':
|
|
300
|
+
return AV_CODEC_ID_PCM_MULAW;
|
|
301
|
+
case 'alaw':
|
|
302
|
+
return AV_CODEC_ID_PCM_ALAW;
|
|
296
303
|
default:
|
|
297
304
|
return null;
|
|
298
305
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NodeAvAudioDecoder.js","sourceRoot":"","sources":["../../src/node-av/NodeAvAudioDecoder.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"NodeAvAudioDecoder.js","sourceRoot":"","sources":["../../src/node-av/NodeAvAudioDecoder.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* using FFmpeg's libav* libraries via node-av.
|
|
6
6
|
*/
|
|
7
7
|
import { EventEmitter } from 'events';
|
|
8
|
+
import { Frame } from 'node-av/lib';
|
|
8
9
|
import type { AudioEncoderBackend, AudioEncoderBackendConfig } from '../backends/types.js';
|
|
9
10
|
/**
|
|
10
11
|
* NodeAV-backed audio encoder implementing AudioEncoderBackend interface
|
|
@@ -25,11 +26,13 @@ export declare class NodeAvAudioEncoder extends EventEmitter implements AudioEnc
|
|
|
25
26
|
get isHealthy(): boolean;
|
|
26
27
|
startEncoder(config: AudioEncoderBackendConfig): void;
|
|
27
28
|
write(data: Buffer | Uint8Array): boolean;
|
|
29
|
+
writeFrame(frame: Frame, owned?: boolean): boolean;
|
|
28
30
|
end(): void;
|
|
29
31
|
kill(): void;
|
|
30
32
|
shutdown(): Promise<void>;
|
|
31
33
|
private processQueue;
|
|
32
34
|
private ensureEncoder;
|
|
35
|
+
private encodeFrame;
|
|
33
36
|
private extractCodecDescription;
|
|
34
37
|
private getEncoderCodec;
|
|
35
38
|
private buildEncoderOptions;
|
|
@@ -37,8 +40,11 @@ export declare class NodeAvAudioEncoder extends EventEmitter implements AudioEnc
|
|
|
37
40
|
private encodeBuffer;
|
|
38
41
|
private convertToPlanar;
|
|
39
42
|
private convertToS16Interleaved;
|
|
43
|
+
private convertToS32Interleaved;
|
|
40
44
|
private convertToS16Planar;
|
|
45
|
+
private convertToU8Interleaved;
|
|
41
46
|
private finish;
|
|
47
|
+
private drainPackets;
|
|
42
48
|
private cleanup;
|
|
43
49
|
}
|
|
44
50
|
//# sourceMappingURL=NodeAvAudioEncoder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NodeAvAudioEncoder.d.ts","sourceRoot":"","sources":["../../src/node-av/NodeAvAudioEncoder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"NodeAvAudioEncoder.d.ts","sourceRoot":"","sources":["../../src/node-av/NodeAvAudioEncoder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGtC,OAAO,EAAE,KAAK,EAAY,MAAM,aAAa,CAAC;AAkB9C,OAAO,KAAK,EACV,mBAAmB,EACnB,yBAAyB,EAE1B,MAAM,sBAAsB,CAAC;AAQ9B;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,YAAa,YAAW,mBAAmB;IACjF,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,MAAM,CAA0C;IACxD,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,KAAK,CAAkE;IAC/E,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,iBAAiB,CAA8B;IACvD,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,YAAY,CAAqC;IACzD,OAAO,CAAC,mBAAmB,CAAsC;IACjE,OAAO,CAAC,QAAQ,CAA+C;IAC/D,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,UAAU,CAAQ;IAE1B,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,YAAY,CAAC,MAAM,EAAE,yBAAyB,GAAG,IAAI;IAOrD,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO;IAUzC,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,GAAE,OAAc,GAAG,OAAO;IAsBxD,GAAG,IAAI,IAAI;IAMX,IAAI,IAAI,IAAI;IAMN,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;YAIjB,YAAY;YA+BZ,aAAa;YAmBb,WAAW;IAwCzB,OAAO,CAAC,uBAAuB;IA2C/B,OAAO,CAAC,eAAe;IAkCvB,OAAO,CAAC,mBAAmB;IAiE3B,OAAO,CAAC,gBAAgB;YAiBV,YAAY;IAkE1B,OAAO,CAAC,eAAe;IAmBvB,OAAO,CAAC,uBAAuB;IAgB/B,OAAO,CAAC,uBAAuB;IAe/B,OAAO,CAAC,kBAAkB;IAqB1B,OAAO,CAAC,sBAAsB;YAehB,MAAM;YAmBN,YAAY;IAyB1B,OAAO,CAAC,OAAO;CAKhB"}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
import { EventEmitter } from 'events';
|
|
8
8
|
import { Encoder } from 'node-av/api';
|
|
9
9
|
import { Frame, Rational } from 'node-av/lib';
|
|
10
|
-
import { AV_SAMPLE_FMT_FLTP, AV_SAMPLE_FMT_S16P, AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_FLT, AV_PKT_FLAG_KEY, AV_CHANNEL_ORDER_NATIVE, AV_CH_LAYOUT_MONO, AV_CH_LAYOUT_STEREO, AV_CH_LAYOUT_5POINT1, AV_CH_LAYOUT_7POINT1, } from 'node-av/constants';
|
|
10
|
+
import { AV_SAMPLE_FMT_FLTP, AV_SAMPLE_FMT_S16P, AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_S32, AV_PKT_FLAG_KEY, AV_CHANNEL_ORDER_NATIVE, AV_CH_LAYOUT_MONO, AV_CH_LAYOUT_STEREO, AV_CH_LAYOUT_5POINT1, AV_CH_LAYOUT_7POINT1, } from 'node-av/constants';
|
|
11
11
|
import { createLogger } from '../utils/logger.js';
|
|
12
12
|
const logger = createLogger('NodeAvAudioEncoder');
|
|
13
13
|
/** Default sample rate for Opus codec */
|
|
@@ -41,10 +41,37 @@ export class NodeAvAudioEncoder extends EventEmitter {
|
|
|
41
41
|
if (!this.config || this.shuttingDown) {
|
|
42
42
|
return false;
|
|
43
43
|
}
|
|
44
|
-
this.queue.push(Buffer.from(data));
|
|
44
|
+
this.queue.push({ buffer: Buffer.from(data), owned: true });
|
|
45
45
|
void this.processQueue();
|
|
46
46
|
return true;
|
|
47
47
|
}
|
|
48
|
+
writeFrame(frame, owned = true) {
|
|
49
|
+
if (!this.config || this.shuttingDown) {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
try {
|
|
53
|
+
const buf = frame.toBuffer();
|
|
54
|
+
if (owned) {
|
|
55
|
+
try {
|
|
56
|
+
frame.unref();
|
|
57
|
+
}
|
|
58
|
+
catch { /* ignore */ }
|
|
59
|
+
}
|
|
60
|
+
this.queue.push({ buffer: Buffer.from(buf), owned: true });
|
|
61
|
+
void this.processQueue();
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
catch (err) {
|
|
65
|
+
if (owned) {
|
|
66
|
+
try {
|
|
67
|
+
frame.unref();
|
|
68
|
+
}
|
|
69
|
+
catch { /* ignore */ }
|
|
70
|
+
}
|
|
71
|
+
this.emit('error', err instanceof Error ? err : new Error(String(err)));
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
48
75
|
end() {
|
|
49
76
|
if (this.shuttingDown)
|
|
50
77
|
return;
|
|
@@ -69,10 +96,15 @@ export class NodeAvAudioEncoder extends EventEmitter {
|
|
|
69
96
|
this.processing = true;
|
|
70
97
|
try {
|
|
71
98
|
while (this.queue.length > 0) {
|
|
72
|
-
const
|
|
99
|
+
const item = this.queue.shift();
|
|
73
100
|
// Emit frameAccepted when frame starts processing (for dequeue event)
|
|
74
101
|
setImmediate(() => this.emit('frameAccepted'));
|
|
75
|
-
|
|
102
|
+
if (item.frame) {
|
|
103
|
+
await this.encodeFrame(item.frame, item.owned ?? true);
|
|
104
|
+
}
|
|
105
|
+
else if (item.buffer) {
|
|
106
|
+
await this.encodeBuffer(item.buffer);
|
|
107
|
+
}
|
|
76
108
|
}
|
|
77
109
|
}
|
|
78
110
|
catch (err) {
|
|
@@ -98,6 +130,47 @@ export class NodeAvAudioEncoder extends EventEmitter {
|
|
|
98
130
|
// Extract codec description (extradata) for codecs that require it
|
|
99
131
|
this.extractCodecDescription();
|
|
100
132
|
}
|
|
133
|
+
async encodeFrame(inputFrame, owned) {
|
|
134
|
+
try {
|
|
135
|
+
await this.ensureEncoder();
|
|
136
|
+
if (!this.encoder || !this.config) {
|
|
137
|
+
throw new Error('Encoder not initialized');
|
|
138
|
+
}
|
|
139
|
+
const matchesFormat = inputFrame.format === this.encoderSampleFormat;
|
|
140
|
+
const matchesRate = Number(inputFrame.sampleRate ?? this.config.sampleRate) === this.config.sampleRate;
|
|
141
|
+
if (matchesFormat && matchesRate) {
|
|
142
|
+
inputFrame.pts = BigInt(this.frameIndex);
|
|
143
|
+
const nbSamples = inputFrame.nbSamples ?? 0;
|
|
144
|
+
try {
|
|
145
|
+
await this.encoder.encode(inputFrame);
|
|
146
|
+
if (owned) {
|
|
147
|
+
inputFrame.unref();
|
|
148
|
+
}
|
|
149
|
+
await this.drainPackets();
|
|
150
|
+
this.frameIndex += nbSamples;
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
catch (err) {
|
|
154
|
+
// Fallback to buffer path if direct encode fails
|
|
155
|
+
logger.debug(`Direct frame encode failed, falling back to buffer: ${err instanceof Error ? err.message : err}`);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
const buffer = inputFrame.toBuffer();
|
|
159
|
+
if (owned) {
|
|
160
|
+
inputFrame.unref();
|
|
161
|
+
}
|
|
162
|
+
await this.encodeBuffer(buffer);
|
|
163
|
+
}
|
|
164
|
+
catch (err) {
|
|
165
|
+
if (owned) {
|
|
166
|
+
try {
|
|
167
|
+
inputFrame.unref();
|
|
168
|
+
}
|
|
169
|
+
catch { /* ignore */ }
|
|
170
|
+
}
|
|
171
|
+
throw err;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
101
174
|
extractCodecDescription() {
|
|
102
175
|
if (!this.encoder || !this.config)
|
|
103
176
|
return;
|
|
@@ -111,7 +184,19 @@ export class NodeAvAudioEncoder extends EventEmitter {
|
|
|
111
184
|
const extraData = ctx.extraData;
|
|
112
185
|
if (!extraData || extraData.length === 0)
|
|
113
186
|
return;
|
|
114
|
-
if (codecBase === '
|
|
187
|
+
if (codecBase === 'mp4a' || codecBase === 'aac') {
|
|
188
|
+
// AAC: extradata contains AudioSpecificConfig (including PCE if needed)
|
|
189
|
+
// This is the proper description for MP4 muxing and decoding
|
|
190
|
+
this.codecDescription = Buffer.from(extraData);
|
|
191
|
+
logger.debug(`AAC description from extradata: ${this.codecDescription.length} bytes`);
|
|
192
|
+
}
|
|
193
|
+
else if (codecBase === 'opus') {
|
|
194
|
+
// Opus: extradata contains OpusHead structure
|
|
195
|
+
// Required for multi-channel Opus decoding
|
|
196
|
+
this.codecDescription = Buffer.from(extraData);
|
|
197
|
+
logger.debug(`Opus description from extradata: ${this.codecDescription.length} bytes`);
|
|
198
|
+
}
|
|
199
|
+
else if (codecBase === 'flac') {
|
|
115
200
|
// FLAC description: 'fLaC' magic + STREAMINFO block
|
|
116
201
|
// The extradata from FFmpeg is just the STREAMINFO, we need to prepend magic
|
|
117
202
|
const magic = Buffer.from('fLaC');
|
|
@@ -148,6 +233,16 @@ export class NodeAvAudioEncoder extends EventEmitter {
|
|
|
148
233
|
return 'libvorbis';
|
|
149
234
|
case 'pcm-s16':
|
|
150
235
|
return 'pcm_s16le';
|
|
236
|
+
case 'pcm-s24':
|
|
237
|
+
return 'pcm_s24le';
|
|
238
|
+
case 'pcm-s32':
|
|
239
|
+
return 'pcm_s32le';
|
|
240
|
+
case 'pcm-u8':
|
|
241
|
+
return 'pcm_u8';
|
|
242
|
+
case 'ulaw':
|
|
243
|
+
return 'pcm_mulaw';
|
|
244
|
+
case 'alaw':
|
|
245
|
+
return 'pcm_alaw';
|
|
151
246
|
case 'pcm-f32':
|
|
152
247
|
return 'pcm_f32le';
|
|
153
248
|
default:
|
|
@@ -181,6 +276,15 @@ export class NodeAvAudioEncoder extends EventEmitter {
|
|
|
181
276
|
// flac encoder requires interleaved s16 or s32
|
|
182
277
|
sampleFormat = AV_SAMPLE_FMT_S16;
|
|
183
278
|
}
|
|
279
|
+
else if (codecBase === 'pcm-s24' || codecBase === 'pcm-s32') {
|
|
280
|
+
sampleFormat = AV_SAMPLE_FMT_S32;
|
|
281
|
+
}
|
|
282
|
+
else if (codecBase === 'pcm-u8') {
|
|
283
|
+
sampleFormat = AV_SAMPLE_FMT_U8;
|
|
284
|
+
}
|
|
285
|
+
else if (codecBase === 'ulaw' || codecBase === 'alaw') {
|
|
286
|
+
sampleFormat = AV_SAMPLE_FMT_S16;
|
|
287
|
+
}
|
|
184
288
|
else {
|
|
185
289
|
// Most codecs work with float planar (aac, etc.)
|
|
186
290
|
sampleFormat = AV_SAMPLE_FMT_FLTP;
|
|
@@ -256,6 +360,15 @@ export class NodeAvAudioEncoder extends EventEmitter {
|
|
|
256
360
|
audioData = Buffer.from(this.convertToS16Planar(buffer, samplesPerChannel, this.config.numberOfChannels));
|
|
257
361
|
frameFormat = AV_SAMPLE_FMT_S16P;
|
|
258
362
|
}
|
|
363
|
+
else if (this.encoderSampleFormat === AV_SAMPLE_FMT_S32) {
|
|
364
|
+
// Encoder needs interleaved s32 - convert from f32 interleaved to s32 interleaved
|
|
365
|
+
audioData = Buffer.from(this.convertToS32Interleaved(buffer, samplesPerChannel, this.config.numberOfChannels));
|
|
366
|
+
frameFormat = AV_SAMPLE_FMT_S32;
|
|
367
|
+
}
|
|
368
|
+
else if (this.encoderSampleFormat === AV_SAMPLE_FMT_U8) {
|
|
369
|
+
audioData = Buffer.from(this.convertToU8Interleaved(buffer, samplesPerChannel, this.config.numberOfChannels));
|
|
370
|
+
frameFormat = AV_SAMPLE_FMT_U8;
|
|
371
|
+
}
|
|
259
372
|
else {
|
|
260
373
|
// Default: encoder needs planar float - convert from f32 interleaved to f32 planar
|
|
261
374
|
audioData = Buffer.from(this.convertToPlanar(buffer, samplesPerChannel, this.config.numberOfChannels));
|
|
@@ -274,26 +387,7 @@ export class NodeAvAudioEncoder extends EventEmitter {
|
|
|
274
387
|
// Try to extract codec description after first encode (some codecs like FLAC
|
|
275
388
|
// don't populate extradata until after encoding starts)
|
|
276
389
|
this.extractCodecDescription();
|
|
277
|
-
|
|
278
|
-
while (packet) {
|
|
279
|
-
if (packet.data) {
|
|
280
|
-
const timestamp = packet.pts !== undefined ? Number(packet.pts) : this.frameIndex;
|
|
281
|
-
const keyFrame = (packet.flags & AV_PKT_FLAG_KEY) === AV_PKT_FLAG_KEY || packet.isKeyframe;
|
|
282
|
-
const frameData = {
|
|
283
|
-
data: Buffer.from(packet.data),
|
|
284
|
-
timestamp,
|
|
285
|
-
keyFrame,
|
|
286
|
-
};
|
|
287
|
-
// Include codec description on the first frame
|
|
288
|
-
if (this.firstFrame && this.codecDescription) {
|
|
289
|
-
frameData.description = this.codecDescription;
|
|
290
|
-
this.firstFrame = false;
|
|
291
|
-
}
|
|
292
|
-
this.emit('encodedFrame', frameData);
|
|
293
|
-
}
|
|
294
|
-
packet.unref();
|
|
295
|
-
packet = await this.encoder.receive();
|
|
296
|
-
}
|
|
390
|
+
await this.drainPackets();
|
|
297
391
|
this.frameIndex += samplesPerChannel;
|
|
298
392
|
}
|
|
299
393
|
convertToPlanar(data, samplesPerChannel, numChannels) {
|
|
@@ -323,6 +417,17 @@ export class NodeAvAudioEncoder extends EventEmitter {
|
|
|
323
417
|
}
|
|
324
418
|
return result;
|
|
325
419
|
}
|
|
420
|
+
convertToS32Interleaved(data, samplesPerChannel, numChannels) {
|
|
421
|
+
const totalSamples = samplesPerChannel * numChannels;
|
|
422
|
+
const result = new Uint8Array(totalSamples * 4); // 4 bytes per s32 sample
|
|
423
|
+
const input = new Float32Array(data.buffer, data.byteOffset, data.byteLength / 4);
|
|
424
|
+
const output = new Int32Array(result.buffer);
|
|
425
|
+
for (let i = 0; i < totalSamples; i++) {
|
|
426
|
+
const clamped = Math.max(-1.0, Math.min(1.0, input[i]));
|
|
427
|
+
output[i] = Math.round(clamped * 2147483647);
|
|
428
|
+
}
|
|
429
|
+
return result;
|
|
430
|
+
}
|
|
326
431
|
convertToS16Planar(data, samplesPerChannel, numChannels) {
|
|
327
432
|
const bytesPerSample = 2; // s16
|
|
328
433
|
const planeSize = samplesPerChannel * bytesPerSample;
|
|
@@ -340,6 +445,17 @@ export class NodeAvAudioEncoder extends EventEmitter {
|
|
|
340
445
|
}
|
|
341
446
|
return result;
|
|
342
447
|
}
|
|
448
|
+
convertToU8Interleaved(data, samplesPerChannel, numChannels) {
|
|
449
|
+
const totalSamples = samplesPerChannel * numChannels;
|
|
450
|
+
const result = new Uint8Array(totalSamples);
|
|
451
|
+
const input = new Float32Array(data.buffer, data.byteOffset, data.byteLength / 4);
|
|
452
|
+
for (let i = 0; i < totalSamples; i++) {
|
|
453
|
+
const clamped = Math.max(-1.0, Math.min(1.0, input[i]));
|
|
454
|
+
const u8 = Math.round((clamped + 1) * 127.5); // map [-1,1] to [0,255]
|
|
455
|
+
result[i] = u8;
|
|
456
|
+
}
|
|
457
|
+
return result;
|
|
458
|
+
}
|
|
343
459
|
async finish() {
|
|
344
460
|
await this.processQueue();
|
|
345
461
|
if (this.processingPromise) {
|
|
@@ -348,26 +464,7 @@ export class NodeAvAudioEncoder extends EventEmitter {
|
|
|
348
464
|
if (this.encoder) {
|
|
349
465
|
try {
|
|
350
466
|
await this.encoder.flush();
|
|
351
|
-
|
|
352
|
-
while (packet) {
|
|
353
|
-
if (packet.data) {
|
|
354
|
-
const timestamp = packet.pts !== undefined ? Number(packet.pts) : this.frameIndex;
|
|
355
|
-
const keyFrame = (packet.flags & AV_PKT_FLAG_KEY) === AV_PKT_FLAG_KEY || packet.isKeyframe;
|
|
356
|
-
const frameData = {
|
|
357
|
-
data: Buffer.from(packet.data),
|
|
358
|
-
timestamp,
|
|
359
|
-
keyFrame,
|
|
360
|
-
};
|
|
361
|
-
// Include codec description on the first frame
|
|
362
|
-
if (this.firstFrame && this.codecDescription) {
|
|
363
|
-
frameData.description = this.codecDescription;
|
|
364
|
-
this.firstFrame = false;
|
|
365
|
-
}
|
|
366
|
-
this.emit('encodedFrame', frameData);
|
|
367
|
-
}
|
|
368
|
-
packet.unref();
|
|
369
|
-
packet = await this.encoder.receive();
|
|
370
|
-
}
|
|
467
|
+
await this.drainPackets();
|
|
371
468
|
}
|
|
372
469
|
catch (err) {
|
|
373
470
|
this.emit('error', err instanceof Error ? err : new Error(String(err)));
|
|
@@ -376,6 +473,30 @@ export class NodeAvAudioEncoder extends EventEmitter {
|
|
|
376
473
|
this.emit('close', 0);
|
|
377
474
|
this.cleanup();
|
|
378
475
|
}
|
|
476
|
+
async drainPackets() {
|
|
477
|
+
if (!this.encoder)
|
|
478
|
+
return;
|
|
479
|
+
let packet = await this.encoder.receive();
|
|
480
|
+
while (packet) {
|
|
481
|
+
if (packet.data) {
|
|
482
|
+
const timestamp = packet.pts !== undefined ? Number(packet.pts) : this.frameIndex;
|
|
483
|
+
const keyFrame = (packet.flags & AV_PKT_FLAG_KEY) === AV_PKT_FLAG_KEY || packet.isKeyframe;
|
|
484
|
+
const frameData = {
|
|
485
|
+
data: Buffer.from(packet.data),
|
|
486
|
+
timestamp,
|
|
487
|
+
keyFrame,
|
|
488
|
+
};
|
|
489
|
+
// Include codec description on the first frame
|
|
490
|
+
if (this.firstFrame && this.codecDescription) {
|
|
491
|
+
frameData.description = this.codecDescription;
|
|
492
|
+
this.firstFrame = false;
|
|
493
|
+
}
|
|
494
|
+
this.emit('encodedFrame', frameData);
|
|
495
|
+
}
|
|
496
|
+
packet.unref();
|
|
497
|
+
packet = await this.encoder.receive();
|
|
498
|
+
}
|
|
499
|
+
}
|
|
379
500
|
cleanup() {
|
|
380
501
|
this.encoder?.close();
|
|
381
502
|
this.encoder = null;
|