webcodecs-node 0.7.1 → 0.7.5
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 +94 -12
- package/dist/config/ffmpeg-quality.d.ts +10 -1
- package/dist/config/ffmpeg-quality.d.ts.map +1 -1
- package/dist/config/ffmpeg-quality.js +12 -38
- package/dist/config/ffmpeg-quality.js.map +1 -1
- package/dist/config/webcodecs-config.d.ts +58 -0
- package/dist/config/webcodecs-config.d.ts.map +1 -0
- package/dist/config/webcodecs-config.js +187 -0
- package/dist/config/webcodecs-config.js.map +1 -0
- package/dist/containers/Demuxer.d.ts +3 -1
- package/dist/containers/Demuxer.d.ts.map +1 -1
- package/dist/containers/Demuxer.js +26 -19
- package/dist/containers/Demuxer.js.map +1 -1
- package/dist/containers/FFmpegMuxer.d.ts +42 -0
- package/dist/containers/FFmpegMuxer.d.ts.map +1 -0
- package/dist/containers/FFmpegMuxer.js +311 -0
- package/dist/containers/FFmpegMuxer.js.map +1 -0
- package/dist/containers/FFmpegSpawnMuxer.d.ts +42 -0
- package/dist/containers/FFmpegSpawnMuxer.d.ts.map +1 -0
- package/dist/containers/FFmpegSpawnMuxer.js +311 -0
- package/dist/containers/FFmpegSpawnMuxer.js.map +1 -0
- package/dist/containers/FallbackMuxer.d.ts +42 -0
- package/dist/containers/FallbackMuxer.d.ts.map +1 -0
- package/dist/containers/FallbackMuxer.js +311 -0
- package/dist/containers/FallbackMuxer.js.map +1 -0
- package/dist/containers/Muxer.d.ts +75 -107
- package/dist/containers/Muxer.d.ts.map +1 -1
- package/dist/containers/Muxer.js +184 -243
- package/dist/containers/Muxer.js.map +1 -1
- package/dist/containers/MuxerWithFallback.d.ts +110 -0
- package/dist/containers/MuxerWithFallback.d.ts.map +1 -0
- package/dist/containers/MuxerWithFallback.js +239 -0
- package/dist/containers/MuxerWithFallback.js.map +1 -0
- package/dist/containers/NodeAvMuxer.d.ts +118 -0
- package/dist/containers/NodeAvMuxer.d.ts.map +1 -0
- package/dist/containers/NodeAvMuxer.js +338 -0
- package/dist/containers/NodeAvMuxer.js.map +1 -0
- package/dist/containers/extract.d.ts.map +1 -1
- package/dist/containers/extract.js +3 -1
- package/dist/containers/extract.js.map +1 -1
- package/dist/containers/index.d.ts +20 -14
- package/dist/containers/index.d.ts.map +1 -1
- package/dist/containers/index.js +21 -14
- package/dist/containers/index.js.map +1 -1
- package/dist/containers/muxer-types.d.ts +117 -0
- package/dist/containers/muxer-types.d.ts.map +1 -0
- package/dist/containers/muxer-types.js +45 -0
- package/dist/containers/muxer-types.js.map +1 -0
- package/dist/containers/transcode.d.ts.map +1 -1
- package/dist/containers/transcode.js +171 -150
- package/dist/containers/transcode.js.map +1 -1
- package/dist/core/VideoFrame.d.ts +19 -0
- package/dist/core/VideoFrame.d.ts.map +1 -1
- package/dist/core/VideoFrame.js +11 -0
- package/dist/core/VideoFrame.js.map +1 -1
- package/dist/decoders/VideoDecoder.d.ts +1 -0
- package/dist/decoders/VideoDecoder.d.ts.map +1 -1
- package/dist/decoders/VideoDecoder.js +6 -4
- package/dist/decoders/VideoDecoder.js.map +1 -1
- package/dist/demos/demo-audio-visualizer-mediabunny.d.ts +10 -0
- package/dist/demos/demo-audio-visualizer-mediabunny.d.ts.map +1 -0
- package/dist/demos/demo-audio-visualizer-mediabunny.js +357 -0
- package/dist/demos/demo-audio-visualizer-mediabunny.js.map +1 -0
- package/dist/demos/demo-audio-visualizer-nodeav.d.ts +10 -0
- package/dist/demos/demo-audio-visualizer-nodeav.d.ts.map +1 -0
- package/dist/demos/demo-audio-visualizer-nodeav.js +318 -0
- package/dist/demos/demo-audio-visualizer-nodeav.js.map +1 -0
- package/dist/demos/demo-muxer-fallback.d.ts +8 -0
- package/dist/demos/demo-muxer-fallback.d.ts.map +1 -0
- package/dist/demos/demo-muxer-fallback.js +165 -0
- package/dist/demos/demo-muxer-fallback.js.map +1 -0
- package/dist/encoders/AudioEncoder.d.ts +2 -0
- package/dist/encoders/AudioEncoder.d.ts.map +1 -1
- package/dist/encoders/AudioEncoder.js +7 -4
- package/dist/encoders/AudioEncoder.js.map +1 -1
- package/dist/hardware/decoder-args.d.ts.map +1 -1
- package/dist/hardware/decoder-args.js +35 -14
- package/dist/hardware/decoder-args.js.map +1 -1
- package/dist/hardware/detection.d.ts.map +1 -1
- package/dist/hardware/detection.js +39 -0
- package/dist/hardware/detection.js.map +1 -1
- package/dist/hardware/encoder-args.d.ts.map +1 -1
- package/dist/hardware/encoder-args.js +43 -5
- package/dist/hardware/encoder-args.js.map +1 -1
- package/dist/hardware/types.d.ts.map +1 -1
- package/dist/hardware/types.js +30 -28
- package/dist/hardware/types.js.map +1 -1
- package/dist/node-av/NodeAvVideoEncoder.d.ts +5 -0
- package/dist/node-av/NodeAvVideoEncoder.d.ts.map +1 -1
- package/dist/node-av/NodeAvVideoEncoder.js +76 -23
- package/dist/node-av/NodeAvVideoEncoder.js.map +1 -1
- package/dist/utils/avc.d.ts +2 -0
- package/dist/utils/avc.d.ts.map +1 -1
- package/dist/utils/avc.js +36 -8
- package/dist/utils/avc.js.map +1 -1
- package/dist/utils/codec-validation.d.ts.map +1 -1
- package/dist/utils/codec-validation.js +12 -6
- package/dist/utils/codec-validation.js.map +1 -1
- package/dist/utils/hevc.d.ts +2 -0
- package/dist/utils/hevc.d.ts.map +1 -1
- package/dist/utils/hevc.js +42 -8
- package/dist/utils/hevc.js.map +1 -1
- package/docs/api.md +52 -2
- package/docs/configuration.md +10 -7
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Demuxer.js","sourceRoot":"","sources":["../../src/containers/Demuxer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAA8B,MAAM,8BAA8B,CAAC;AAC7F,OAAO,EAAE,iBAAiB,EAA8B,MAAM,8BAA8B,CAAC;AAC7F,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAoCpE;;GAEG;AACH,SAAS,eAAe,CAAC,OAAe,EAAE,SAAyB;IACjE,0BAA0B;IAC1B,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,EAAE,EAAE,mBAAmB;YAC1B,8CAA8C;YAC9C,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBACvC,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gBAC7B,MAAM,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gBACjC,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gBAC3B,OAAO,QAAQ,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;YAC3I,CAAC;YACD,OAAO,aAAa,CAAC,CAAC,6BAA6B;QACrD,KAAK,GAAG,EAAE,mBAAmB;YAC3B,OAAO,iBAAiB,CAAC;QAC3B,KAAK,GAAG,EAAE,kBAAkB;YAC1B,OAAO,KAAK,CAAC;QACf,KAAK,GAAG,EAAE,kBAAkB;YAC1B,OAAO,eAAe,CAAC;QACzB,KAAK,GAAG,EAAE,kBAAkB;YAC1B,OAAO,eAAe,CAAC;QACzB;YACE,OAAO,WAAW,OAAO,EAAE,CAAC;IAChC,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,OAAe;IACtC,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,KAAK,EAAE,kBAAkB;YAC5B,OAAO,WAAW,CAAC;QACrB,KAAK,KAAK,EAAE,kBAAkB;YAC5B,OAAO,KAAK,CAAC;QACf,KAAK,KAAK,EAAE,mBAAmB;YAC7B,OAAO,MAAM,CAAC;QAChB,KAAK,KAAK,EAAE,qBAAqB;YAC/B,OAAO,QAAQ,CAAC;QAClB,KAAK,KAAK,EAAE,mBAAmB;YAC7B,OAAO,MAAM,CAAC;QAChB;YACE,OAAO,WAAW,OAAO,EAAE,CAAC;IAChC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,OAAO;IACV,OAAO,GAAyB,IAAI,CAAC;IACrC,IAAI,CAAS;IACb,YAAY,GAA6B,IAAI,CAAC;IAC9C,YAAY,GAA6B,IAAI,CAAC;IAC9C,iBAAiB,GAAW,CAAC,CAAC,CAAC;IAC/B,iBAAiB,GAAW,CAAC,CAAC,CAAC;IAC/B,cAAc,GAAwC,IAAI,CAAC;IAC3D,cAAc,GAAwC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"Demuxer.js","sourceRoot":"","sources":["../../src/containers/Demuxer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FFmpeg Muxer - FFmpeg subprocess-based muxer
|
|
3
|
+
*
|
|
4
|
+
* This muxer accumulates encoded chunks in memory and uses FFmpeg
|
|
5
|
+
* to mux them when close() is called. Used as a fallback when
|
|
6
|
+
* the node-av muxer fails.
|
|
7
|
+
*/
|
|
8
|
+
import type { EncodedVideoChunk } from '../core/EncodedVideoChunk.js';
|
|
9
|
+
import type { EncodedAudioChunk } from '../core/EncodedAudioChunk.js';
|
|
10
|
+
import type { IMuxer, MuxerConfig, VideoTrackConfig, AudioTrackConfig } from './muxer-types.js';
|
|
11
|
+
/**
|
|
12
|
+
* FFmpeg-based muxer that uses subprocess for muxing
|
|
13
|
+
*
|
|
14
|
+
* This muxer accumulates chunks and uses FFmpeg to create the final
|
|
15
|
+
* output file. It's more battle-tested but slower (~130ms due to
|
|
16
|
+
* process spawn) than the native node-av muxer (~5ms).
|
|
17
|
+
*/
|
|
18
|
+
export declare class FFmpegMuxer implements IMuxer {
|
|
19
|
+
private config;
|
|
20
|
+
private videoConfig;
|
|
21
|
+
private audioConfig;
|
|
22
|
+
private videoChunks;
|
|
23
|
+
private audioChunks;
|
|
24
|
+
private _videoChunkCount;
|
|
25
|
+
private _audioChunkCount;
|
|
26
|
+
private isOpen;
|
|
27
|
+
private tempDir;
|
|
28
|
+
constructor(config: MuxerConfig);
|
|
29
|
+
open(timeout?: number): Promise<void>;
|
|
30
|
+
addVideoTrack(config: VideoTrackConfig): Promise<number>;
|
|
31
|
+
addAudioTrack(config: AudioTrackConfig): Promise<number>;
|
|
32
|
+
writeVideoChunk(chunk: EncodedVideoChunk): Promise<void>;
|
|
33
|
+
writeAudioChunk(chunk: EncodedAudioChunk): Promise<void>;
|
|
34
|
+
close(timeout?: number): Promise<void>;
|
|
35
|
+
private muxWithFFmpeg;
|
|
36
|
+
private writeVideoToFile;
|
|
37
|
+
private writeAudioToFile;
|
|
38
|
+
private spawnFFmpeg;
|
|
39
|
+
get videoChunkCount(): number;
|
|
40
|
+
get audioChunkCount(): number;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=FFmpegMuxer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FFmpegMuxer.d.ts","sourceRoot":"","sources":["../../src/containers/FFmpegMuxer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,KAAK,EACV,MAAM,EACN,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,kBAAkB,CAAC;AAwK1B;;;;;;GAMG;AACH,qBAAa,WAAY,YAAW,MAAM;IACxC,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,WAAW,CAAiC;IACpD,OAAO,CAAC,WAAW,CAAiC;IACpD,OAAO,CAAC,WAAW,CAA2B;IAC9C,OAAO,CAAC,WAAW,CAA2B;IAC9C,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAuB;gBAE1B,MAAM,EAAE,WAAW;IAIzB,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUrC,aAAa,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;IAQxD,aAAa,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;IAQxD,eAAe,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAYxD,eAAe,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAYxD,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAgB9B,aAAa;YA4Cb,gBAAgB;YAgChB,gBAAgB;IA0B9B,OAAO,CAAC,WAAW;IAoCnB,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED,IAAI,eAAe,IAAI,MAAM,CAE5B;CACF"}
|
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FFmpeg Muxer - FFmpeg subprocess-based muxer
|
|
3
|
+
*
|
|
4
|
+
* This muxer accumulates encoded chunks in memory and uses FFmpeg
|
|
5
|
+
* to mux them when close() is called. Used as a fallback when
|
|
6
|
+
* the node-av muxer fails.
|
|
7
|
+
*/
|
|
8
|
+
import * as fs from 'fs';
|
|
9
|
+
import * as path from 'path';
|
|
10
|
+
import * as os from 'os';
|
|
11
|
+
import { spawn } from 'child_process';
|
|
12
|
+
import { randomBytes } from 'crypto';
|
|
13
|
+
import { MuxerError } from './muxer-types.js';
|
|
14
|
+
/**
|
|
15
|
+
* Convert AVCC format (length-prefixed NALUs) to Annex B (start code prefixed)
|
|
16
|
+
* This is needed because FFmpeg expects Annex B format for raw H.264 input
|
|
17
|
+
*/
|
|
18
|
+
function avccToAnnexB(avccData, nalLengthSize = 4) {
|
|
19
|
+
const START_CODE = new Uint8Array([0, 0, 0, 1]);
|
|
20
|
+
const chunks = [];
|
|
21
|
+
let offset = 0;
|
|
22
|
+
while (offset < avccData.length) {
|
|
23
|
+
// Read NAL unit length
|
|
24
|
+
let nalLength = 0;
|
|
25
|
+
for (let i = 0; i < nalLengthSize; i++) {
|
|
26
|
+
nalLength = (nalLength << 8) | avccData[offset + i];
|
|
27
|
+
}
|
|
28
|
+
offset += nalLengthSize;
|
|
29
|
+
if (nalLength <= 0 || offset + nalLength > avccData.length) {
|
|
30
|
+
break;
|
|
31
|
+
}
|
|
32
|
+
// Add start code + NAL unit
|
|
33
|
+
chunks.push(START_CODE);
|
|
34
|
+
chunks.push(avccData.slice(offset, offset + nalLength));
|
|
35
|
+
offset += nalLength;
|
|
36
|
+
}
|
|
37
|
+
// Concatenate all chunks
|
|
38
|
+
const totalLength = chunks.reduce((sum, chunk) => sum + chunk.length, 0);
|
|
39
|
+
const result = new Uint8Array(totalLength);
|
|
40
|
+
let writeOffset = 0;
|
|
41
|
+
for (const chunk of chunks) {
|
|
42
|
+
result.set(chunk, writeOffset);
|
|
43
|
+
writeOffset += chunk.length;
|
|
44
|
+
}
|
|
45
|
+
return result;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Parse AVCC extradata (SPS/PPS) to Annex B format
|
|
49
|
+
*/
|
|
50
|
+
function parseAvccExtradata(extradata) {
|
|
51
|
+
const START_CODE = new Uint8Array([0, 0, 0, 1]);
|
|
52
|
+
const chunks = [];
|
|
53
|
+
// AVCC format:
|
|
54
|
+
// configurationVersion (1 byte) = 1
|
|
55
|
+
// AVCProfileIndication (1 byte)
|
|
56
|
+
// profile_compatibility (1 byte)
|
|
57
|
+
// AVCLevelIndication (1 byte)
|
|
58
|
+
// lengthSizeMinusOne (6 bits reserved + 2 bits) -> NAL length size = (value & 0x03) + 1
|
|
59
|
+
// numOfSequenceParameterSets (3 bits reserved + 5 bits)
|
|
60
|
+
// SPS entries...
|
|
61
|
+
// numOfPictureParameterSets (1 byte)
|
|
62
|
+
// PPS entries...
|
|
63
|
+
if (extradata.length < 7 || extradata[0] !== 1) {
|
|
64
|
+
// Not valid AVCC, return as-is (might already be Annex B)
|
|
65
|
+
return { annexBHeader: extradata, nalLengthSize: 4 };
|
|
66
|
+
}
|
|
67
|
+
const nalLengthSize = (extradata[4] & 0x03) + 1;
|
|
68
|
+
let offset = 5;
|
|
69
|
+
// Parse SPS
|
|
70
|
+
const numSPS = extradata[offset] & 0x1f;
|
|
71
|
+
offset++;
|
|
72
|
+
for (let i = 0; i < numSPS; i++) {
|
|
73
|
+
const spsLength = (extradata[offset] << 8) | extradata[offset + 1];
|
|
74
|
+
offset += 2;
|
|
75
|
+
chunks.push(START_CODE);
|
|
76
|
+
chunks.push(extradata.slice(offset, offset + spsLength));
|
|
77
|
+
offset += spsLength;
|
|
78
|
+
}
|
|
79
|
+
// Parse PPS
|
|
80
|
+
const numPPS = extradata[offset];
|
|
81
|
+
offset++;
|
|
82
|
+
for (let i = 0; i < numPPS; i++) {
|
|
83
|
+
const ppsLength = (extradata[offset] << 8) | extradata[offset + 1];
|
|
84
|
+
offset += 2;
|
|
85
|
+
chunks.push(START_CODE);
|
|
86
|
+
chunks.push(extradata.slice(offset, offset + ppsLength));
|
|
87
|
+
offset += ppsLength;
|
|
88
|
+
}
|
|
89
|
+
// Concatenate
|
|
90
|
+
const totalLength = chunks.reduce((sum, chunk) => sum + chunk.length, 0);
|
|
91
|
+
const annexBHeader = new Uint8Array(totalLength);
|
|
92
|
+
let writeOffset = 0;
|
|
93
|
+
for (const chunk of chunks) {
|
|
94
|
+
annexBHeader.set(chunk, writeOffset);
|
|
95
|
+
writeOffset += chunk.length;
|
|
96
|
+
}
|
|
97
|
+
return { annexBHeader, nalLengthSize };
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Add ADTS header to raw AAC frame
|
|
101
|
+
*/
|
|
102
|
+
function addAdtsHeader(aacFrame, sampleRate, channels) {
|
|
103
|
+
const sampleRateIndex = [
|
|
104
|
+
96000, 88200, 64000, 48000, 44100, 32000, 24000, 22050, 16000, 12000, 11025,
|
|
105
|
+
8000, 7350,
|
|
106
|
+
].indexOf(sampleRate);
|
|
107
|
+
if (sampleRateIndex === -1) {
|
|
108
|
+
// Unsupported sample rate, return raw frame
|
|
109
|
+
return aacFrame;
|
|
110
|
+
}
|
|
111
|
+
const frameLength = aacFrame.length + 7; // ADTS header is 7 bytes
|
|
112
|
+
const header = new Uint8Array(7);
|
|
113
|
+
// Syncword (12 bits) = 0xFFF
|
|
114
|
+
header[0] = 0xff;
|
|
115
|
+
header[1] = 0xf1; // MPEG-4, Layer 0, no CRC
|
|
116
|
+
// Profile (2 bits) = AAC-LC (1), shifted left 6
|
|
117
|
+
// Sample rate index (4 bits), shifted left 2
|
|
118
|
+
// Private bit (1 bit) = 0
|
|
119
|
+
// Channel config (3 bits, upper 1 bit)
|
|
120
|
+
header[2] = ((1 << 6) | (sampleRateIndex << 2) | (channels >> 2)) & 0xff;
|
|
121
|
+
// Channel config (lower 2 bits), shifted left 6
|
|
122
|
+
// Original/copy (1 bit) = 0
|
|
123
|
+
// Home (1 bit) = 0
|
|
124
|
+
// Copyright ID (1 bit) = 0
|
|
125
|
+
// Copyright start (1 bit) = 0
|
|
126
|
+
// Frame length (13 bits, upper 2 bits)
|
|
127
|
+
header[3] = (((channels & 0x03) << 6) | (frameLength >> 11)) & 0xff;
|
|
128
|
+
// Frame length (middle 8 bits)
|
|
129
|
+
header[4] = (frameLength >> 3) & 0xff;
|
|
130
|
+
// Frame length (lower 3 bits), shifted left 5
|
|
131
|
+
// Buffer fullness (11 bits, upper 5 bits) = 0x7FF (VBR)
|
|
132
|
+
header[5] = (((frameLength & 0x07) << 5) | 0x1f) & 0xff;
|
|
133
|
+
// Buffer fullness (lower 6 bits), shifted left 2
|
|
134
|
+
// Number of AAC frames - 1 (2 bits) = 0
|
|
135
|
+
header[6] = 0xfc;
|
|
136
|
+
// Combine header and frame
|
|
137
|
+
const result = new Uint8Array(frameLength);
|
|
138
|
+
result.set(header);
|
|
139
|
+
result.set(aacFrame, 7);
|
|
140
|
+
return result;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* FFmpeg-based muxer that uses subprocess for muxing
|
|
144
|
+
*
|
|
145
|
+
* This muxer accumulates chunks and uses FFmpeg to create the final
|
|
146
|
+
* output file. It's more battle-tested but slower (~130ms due to
|
|
147
|
+
* process spawn) than the native node-av muxer (~5ms).
|
|
148
|
+
*/
|
|
149
|
+
export class FFmpegMuxer {
|
|
150
|
+
config;
|
|
151
|
+
videoConfig = null;
|
|
152
|
+
audioConfig = null;
|
|
153
|
+
videoChunks = [];
|
|
154
|
+
audioChunks = [];
|
|
155
|
+
_videoChunkCount = 0;
|
|
156
|
+
_audioChunkCount = 0;
|
|
157
|
+
isOpen = false;
|
|
158
|
+
tempDir = null;
|
|
159
|
+
constructor(config) {
|
|
160
|
+
this.config = config;
|
|
161
|
+
}
|
|
162
|
+
async open(timeout) {
|
|
163
|
+
// Create temp directory for intermediate files
|
|
164
|
+
this.tempDir = path.join(os.tmpdir(), `ffmpeg-mux-${randomBytes(8).toString('hex')}`);
|
|
165
|
+
fs.mkdirSync(this.tempDir, { recursive: true });
|
|
166
|
+
this.isOpen = true;
|
|
167
|
+
}
|
|
168
|
+
async addVideoTrack(config) {
|
|
169
|
+
if (!this.isOpen) {
|
|
170
|
+
throw new MuxerError('Muxer not opened', 'ffmpeg-spawn', 'addTrack');
|
|
171
|
+
}
|
|
172
|
+
this.videoConfig = config;
|
|
173
|
+
return 0;
|
|
174
|
+
}
|
|
175
|
+
async addAudioTrack(config) {
|
|
176
|
+
if (!this.isOpen) {
|
|
177
|
+
throw new MuxerError('Muxer not opened', 'ffmpeg-spawn', 'addTrack');
|
|
178
|
+
}
|
|
179
|
+
this.audioConfig = config;
|
|
180
|
+
return this.videoConfig ? 1 : 0;
|
|
181
|
+
}
|
|
182
|
+
async writeVideoChunk(chunk) {
|
|
183
|
+
if (!this.isOpen || !this.videoConfig) {
|
|
184
|
+
throw new MuxerError('Video track not configured', 'ffmpeg-spawn', 'write');
|
|
185
|
+
}
|
|
186
|
+
this.videoChunks.push(chunk);
|
|
187
|
+
this._videoChunkCount++;
|
|
188
|
+
}
|
|
189
|
+
async writeAudioChunk(chunk) {
|
|
190
|
+
if (!this.isOpen || !this.audioConfig) {
|
|
191
|
+
throw new MuxerError('Audio track not configured', 'ffmpeg-spawn', 'write');
|
|
192
|
+
}
|
|
193
|
+
this.audioChunks.push(chunk);
|
|
194
|
+
this._audioChunkCount++;
|
|
195
|
+
}
|
|
196
|
+
async close(timeout) {
|
|
197
|
+
if (!this.isOpen || !this.tempDir) {
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
try {
|
|
201
|
+
await this.muxWithFFmpeg();
|
|
202
|
+
}
|
|
203
|
+
finally {
|
|
204
|
+
// Clean up temp directory
|
|
205
|
+
if (this.tempDir && fs.existsSync(this.tempDir)) {
|
|
206
|
+
fs.rmSync(this.tempDir, { recursive: true, force: true });
|
|
207
|
+
}
|
|
208
|
+
this.isOpen = false;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
async muxWithFFmpeg() {
|
|
212
|
+
if (!this.tempDir)
|
|
213
|
+
return;
|
|
214
|
+
const ffmpegArgs = ['-y'];
|
|
215
|
+
const inputFiles = [];
|
|
216
|
+
// Write video to temp file
|
|
217
|
+
if (this.videoConfig && this.videoChunks.length > 0) {
|
|
218
|
+
const videoPath = path.join(this.tempDir, 'video.h264');
|
|
219
|
+
await this.writeVideoToFile(videoPath);
|
|
220
|
+
inputFiles.push(videoPath);
|
|
221
|
+
const framerate = this.videoConfig.framerate || 30;
|
|
222
|
+
ffmpegArgs.push('-f', 'h264', '-r', String(framerate), '-i', videoPath);
|
|
223
|
+
}
|
|
224
|
+
// Write audio to temp file
|
|
225
|
+
if (this.audioConfig && this.audioChunks.length > 0) {
|
|
226
|
+
const audioPath = path.join(this.tempDir, 'audio.aac');
|
|
227
|
+
await this.writeAudioToFile(audioPath);
|
|
228
|
+
inputFiles.push(audioPath);
|
|
229
|
+
ffmpegArgs.push('-f', 'aac', '-i', audioPath);
|
|
230
|
+
}
|
|
231
|
+
if (inputFiles.length === 0) {
|
|
232
|
+
throw new MuxerError('No tracks to mux', 'ffmpeg-spawn', 'close');
|
|
233
|
+
}
|
|
234
|
+
// Output options
|
|
235
|
+
ffmpegArgs.push('-c:v', 'copy', '-c:a', 'copy', '-movflags', '+faststart', this.config.path);
|
|
236
|
+
// Spawn FFmpeg
|
|
237
|
+
await this.spawnFFmpeg(ffmpegArgs);
|
|
238
|
+
}
|
|
239
|
+
async writeVideoToFile(filePath) {
|
|
240
|
+
if (!this.videoConfig)
|
|
241
|
+
return;
|
|
242
|
+
const chunks = [];
|
|
243
|
+
// Parse extradata to get NAL length size and write SPS/PPS header
|
|
244
|
+
let nalLengthSize = 4;
|
|
245
|
+
if (this.videoConfig.description) {
|
|
246
|
+
const { annexBHeader, nalLengthSize: nls } = parseAvccExtradata(this.videoConfig.description);
|
|
247
|
+
nalLengthSize = nls;
|
|
248
|
+
chunks.push(annexBHeader);
|
|
249
|
+
}
|
|
250
|
+
// Convert each chunk from AVCC to Annex B
|
|
251
|
+
for (const chunk of this.videoChunks) {
|
|
252
|
+
const annexBData = avccToAnnexB(chunk._buffer, nalLengthSize);
|
|
253
|
+
chunks.push(annexBData);
|
|
254
|
+
}
|
|
255
|
+
// Write to file
|
|
256
|
+
const totalLength = chunks.reduce((sum, c) => sum + c.length, 0);
|
|
257
|
+
const buffer = Buffer.alloc(totalLength);
|
|
258
|
+
let offset = 0;
|
|
259
|
+
for (const chunk of chunks) {
|
|
260
|
+
Buffer.from(chunk).copy(buffer, offset);
|
|
261
|
+
offset += chunk.length;
|
|
262
|
+
}
|
|
263
|
+
fs.writeFileSync(filePath, buffer);
|
|
264
|
+
}
|
|
265
|
+
async writeAudioToFile(filePath) {
|
|
266
|
+
if (!this.audioConfig)
|
|
267
|
+
return;
|
|
268
|
+
const chunks = [];
|
|
269
|
+
// Add ADTS headers to each AAC frame
|
|
270
|
+
for (const chunk of this.audioChunks) {
|
|
271
|
+
const adtsFrame = addAdtsHeader(chunk._rawData, this.audioConfig.sampleRate, this.audioConfig.numberOfChannels);
|
|
272
|
+
chunks.push(adtsFrame);
|
|
273
|
+
}
|
|
274
|
+
// Write to file
|
|
275
|
+
const totalLength = chunks.reduce((sum, c) => sum + c.length, 0);
|
|
276
|
+
const buffer = Buffer.alloc(totalLength);
|
|
277
|
+
let offset = 0;
|
|
278
|
+
for (const chunk of chunks) {
|
|
279
|
+
Buffer.from(chunk).copy(buffer, offset);
|
|
280
|
+
offset += chunk.length;
|
|
281
|
+
}
|
|
282
|
+
fs.writeFileSync(filePath, buffer);
|
|
283
|
+
}
|
|
284
|
+
spawnFFmpeg(args) {
|
|
285
|
+
return new Promise((resolve, reject) => {
|
|
286
|
+
const ffmpeg = spawn('ffmpeg', args);
|
|
287
|
+
let stderr = '';
|
|
288
|
+
ffmpeg.stderr.on('data', (data) => {
|
|
289
|
+
stderr += data.toString();
|
|
290
|
+
});
|
|
291
|
+
ffmpeg.on('error', (err) => {
|
|
292
|
+
reject(new MuxerError(`FFmpeg spawn error: ${err.message}`, 'ffmpeg-spawn', 'close', err));
|
|
293
|
+
});
|
|
294
|
+
ffmpeg.on('close', (code) => {
|
|
295
|
+
if (code === 0) {
|
|
296
|
+
resolve();
|
|
297
|
+
}
|
|
298
|
+
else {
|
|
299
|
+
reject(new MuxerError(`FFmpeg exited with code ${code}: ${stderr.slice(-500)}`, 'ffmpeg-spawn', 'close'));
|
|
300
|
+
}
|
|
301
|
+
});
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
get videoChunkCount() {
|
|
305
|
+
return this._videoChunkCount;
|
|
306
|
+
}
|
|
307
|
+
get audioChunkCount() {
|
|
308
|
+
return this._audioChunkCount;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
//# sourceMappingURL=FFmpegMuxer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FFmpegMuxer.js","sourceRoot":"","sources":["../../src/containers/FFmpegMuxer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FFmpeg Spawn Muxer - Fallback muxer using FFmpeg subprocess
|
|
3
|
+
*
|
|
4
|
+
* This muxer accumulates encoded chunks in memory and uses FFmpeg
|
|
5
|
+
* to mux them when close() is called. It serves as a fallback when
|
|
6
|
+
* the node-av muxer fails.
|
|
7
|
+
*/
|
|
8
|
+
import type { EncodedVideoChunk } from '../core/EncodedVideoChunk.js';
|
|
9
|
+
import type { EncodedAudioChunk } from '../core/EncodedAudioChunk.js';
|
|
10
|
+
import type { IMuxer, MuxerConfig, VideoTrackConfig, AudioTrackConfig } from './muxer-types.js';
|
|
11
|
+
/**
|
|
12
|
+
* FFmpeg-based muxer that uses subprocess for muxing
|
|
13
|
+
*
|
|
14
|
+
* This is a fallback muxer that accumulates chunks and uses FFmpeg
|
|
15
|
+
* to create the final output file. It's more battle-tested but slower
|
|
16
|
+
* than the native node-av muxer.
|
|
17
|
+
*/
|
|
18
|
+
export declare class FFmpegSpawnMuxer implements IMuxer {
|
|
19
|
+
private config;
|
|
20
|
+
private videoConfig;
|
|
21
|
+
private audioConfig;
|
|
22
|
+
private videoChunks;
|
|
23
|
+
private audioChunks;
|
|
24
|
+
private _videoChunkCount;
|
|
25
|
+
private _audioChunkCount;
|
|
26
|
+
private isOpen;
|
|
27
|
+
private tempDir;
|
|
28
|
+
constructor(config: MuxerConfig);
|
|
29
|
+
open(timeout?: number): Promise<void>;
|
|
30
|
+
addVideoTrack(config: VideoTrackConfig): Promise<number>;
|
|
31
|
+
addAudioTrack(config: AudioTrackConfig): Promise<number>;
|
|
32
|
+
writeVideoChunk(chunk: EncodedVideoChunk): Promise<void>;
|
|
33
|
+
writeAudioChunk(chunk: EncodedAudioChunk): Promise<void>;
|
|
34
|
+
close(timeout?: number): Promise<void>;
|
|
35
|
+
private muxWithFFmpeg;
|
|
36
|
+
private writeVideoToFile;
|
|
37
|
+
private writeAudioToFile;
|
|
38
|
+
private spawnFFmpeg;
|
|
39
|
+
get videoChunkCount(): number;
|
|
40
|
+
get audioChunkCount(): number;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=FFmpegSpawnMuxer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FFmpegSpawnMuxer.d.ts","sourceRoot":"","sources":["../../src/containers/FFmpegSpawnMuxer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,KAAK,EACV,MAAM,EACN,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,kBAAkB,CAAC;AAwK1B;;;;;;GAMG;AACH,qBAAa,gBAAiB,YAAW,MAAM;IAC7C,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,WAAW,CAAiC;IACpD,OAAO,CAAC,WAAW,CAAiC;IACpD,OAAO,CAAC,WAAW,CAA2B;IAC9C,OAAO,CAAC,WAAW,CAA2B;IAC9C,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAuB;gBAE1B,MAAM,EAAE,WAAW;IAIzB,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUrC,aAAa,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;IAQxD,aAAa,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;IAQxD,eAAe,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAYxD,eAAe,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAYxD,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAgB9B,aAAa;YA4Cb,gBAAgB;YAgChB,gBAAgB;IA0B9B,OAAO,CAAC,WAAW;IAoCnB,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED,IAAI,eAAe,IAAI,MAAM,CAE5B;CACF"}
|