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,23 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* FFmpeg-backed VideoEncoder for Mediabunny
|
|
3
3
|
*
|
|
4
|
-
* Implements Mediabunny's CustomVideoEncoder interface using
|
|
4
|
+
* Implements Mediabunny's CustomVideoEncoder interface using node-av native bindings.
|
|
5
5
|
* Supports hardware acceleration via VAAPI, NVENC, QSV, VideoToolbox.
|
|
6
6
|
*/
|
|
7
|
-
import { spawn } from 'child_process';
|
|
8
7
|
import { CustomVideoEncoder, EncodedPacket, } from 'mediabunny';
|
|
9
|
-
import {
|
|
8
|
+
import { NodeAvVideoEncoder } from '../node-av/NodeAvVideoEncoder.js';
|
|
10
9
|
import { extractAvcParameterSetsFromAnnexB, buildAvcDecoderConfig, convertAnnexBToAvcc, } from '../utils/avc.js';
|
|
11
10
|
import { extractHevcParameterSetsFromAnnexB, buildHvccDecoderConfig, convertAnnexBToHvcc, } from '../utils/hevc.js';
|
|
12
|
-
//
|
|
13
|
-
const CODEC_MAP = {
|
|
14
|
-
avc: 'libx264',
|
|
15
|
-
hevc: 'libx265',
|
|
16
|
-
vp8: 'libvpx',
|
|
17
|
-
vp9: 'libvpx-vp9',
|
|
18
|
-
av1: 'libaom-av1',
|
|
19
|
-
};
|
|
20
|
-
// Map Mediabunny codec to VideoCodecName
|
|
11
|
+
// Map Mediabunny codec to internal codec name
|
|
21
12
|
const CODEC_NAME_MAP = {
|
|
22
13
|
avc: 'h264',
|
|
23
14
|
hevc: 'hevc',
|
|
@@ -25,35 +16,22 @@ const CODEC_NAME_MAP = {
|
|
|
25
16
|
vp9: 'vp9',
|
|
26
17
|
av1: 'av1',
|
|
27
18
|
};
|
|
28
|
-
// Container format for each codec
|
|
29
|
-
const FORMAT_MAP = {
|
|
30
|
-
avc: 'h264',
|
|
31
|
-
hevc: 'hevc',
|
|
32
|
-
vp8: 'ivf',
|
|
33
|
-
vp9: 'ivf',
|
|
34
|
-
av1: 'ivf',
|
|
35
|
-
};
|
|
36
19
|
export class FFmpegVideoEncoder extends CustomVideoEncoder {
|
|
37
|
-
|
|
38
|
-
accumulatedData = Buffer.alloc(0);
|
|
39
|
-
ivfHeaderParsed = false;
|
|
20
|
+
backend = null;
|
|
40
21
|
frameIndex = 0;
|
|
41
|
-
resolveFlush = null;
|
|
42
|
-
useIvf = false;
|
|
43
|
-
useAnnexB = false;
|
|
44
22
|
codecDescription = null;
|
|
45
23
|
metadataEmitted = false;
|
|
46
|
-
usingHardwareAcceleration = false;
|
|
47
|
-
hwaccelMethod = null;
|
|
48
24
|
bitstreamFormat = 'annexb';
|
|
25
|
+
useAnnexB = false;
|
|
26
|
+
resolveFlush = null;
|
|
27
|
+
pendingPackets = [];
|
|
49
28
|
static supports(codec, _config) {
|
|
50
|
-
return codec in
|
|
29
|
+
return codec in CODEC_NAME_MAP;
|
|
51
30
|
}
|
|
52
31
|
async init() {
|
|
53
|
-
|
|
54
|
-
this.useIvf = format === 'ivf';
|
|
55
|
-
this.useAnnexB = format === 'h264' || format === 'hevc';
|
|
32
|
+
// Determine bitstream format from config
|
|
56
33
|
const configExt = this.config;
|
|
34
|
+
this.useAnnexB = this.codec === 'avc' || this.codec === 'hevc';
|
|
57
35
|
if (this.codec === 'avc' && configExt.avc?.format === 'avc') {
|
|
58
36
|
this.bitstreamFormat = 'mp4';
|
|
59
37
|
}
|
|
@@ -63,131 +41,53 @@ export class FFmpegVideoEncoder extends CustomVideoEncoder {
|
|
|
63
41
|
else {
|
|
64
42
|
this.bitstreamFormat = 'annexb';
|
|
65
43
|
}
|
|
66
|
-
//
|
|
67
|
-
// Default to software encoding for maximum compatibility
|
|
68
|
-
// Hardware encoding requires specific GPU support and can fail on some systems
|
|
44
|
+
// Hardware acceleration preference from config
|
|
69
45
|
const hwPref = this.config.hardwareAcceleration;
|
|
70
|
-
//
|
|
46
|
+
// Create node-av backend
|
|
47
|
+
this.backend = new NodeAvVideoEncoder();
|
|
71
48
|
const codecName = CODEC_NAME_MAP[this.codec];
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
if (best.isHardware) {
|
|
80
|
-
console.log(`[FFmpegVideoEncoder] Using hardware encoder: ${ffmpegCodec} (${best.hwaccel})`);
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
catch {
|
|
84
|
-
// Fall back to software
|
|
85
|
-
ffmpegCodec = CODEC_MAP[this.codec];
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
else {
|
|
89
|
-
ffmpegCodec = CODEC_MAP[this.codec];
|
|
90
|
-
}
|
|
91
|
-
const args = [
|
|
92
|
-
'-hide_banner',
|
|
93
|
-
'-loglevel', 'error',
|
|
94
|
-
];
|
|
95
|
-
// Add hardware acceleration input options
|
|
96
|
-
if (this.hwaccelMethod === 'vaapi') {
|
|
97
|
-
args.push('-vaapi_device', '/dev/dri/renderD128');
|
|
98
|
-
}
|
|
99
|
-
else if (this.hwaccelMethod === 'cuda' || this.hwaccelMethod === 'nvenc') {
|
|
100
|
-
// NVENC can accept regular input, no special input args needed
|
|
101
|
-
}
|
|
102
|
-
else if (this.hwaccelMethod === 'qsv') {
|
|
103
|
-
args.push('-hwaccel', 'qsv');
|
|
104
|
-
}
|
|
105
|
-
// Input: raw video from pipe
|
|
106
|
-
args.push('-f', 'rawvideo', '-pix_fmt', 'rgba', '-s', `${this.config.width}x${this.config.height}`, '-r', String(this.config.framerate ?? 30), '-i', 'pipe:0');
|
|
107
|
-
// Add video filter for hardware upload if needed
|
|
108
|
-
if (this.hwaccelMethod === 'vaapi') {
|
|
109
|
-
args.push('-vf', 'format=nv12,hwupload');
|
|
110
|
-
}
|
|
111
|
-
// Encoder settings
|
|
112
|
-
args.push('-c:v', ffmpegCodec);
|
|
113
|
-
if (this.config.bitrate) {
|
|
114
|
-
args.push('-b:v', String(this.config.bitrate));
|
|
115
|
-
}
|
|
116
|
-
// Add codec-specific options based on encoder type
|
|
117
|
-
if (ffmpegCodec.includes('nvenc')) {
|
|
118
|
-
// NVENC-specific options
|
|
119
|
-
args.push('-preset', 'p4'); // Balanced preset
|
|
120
|
-
args.push('-rc', 'vbr');
|
|
121
|
-
}
|
|
122
|
-
else if (ffmpegCodec.includes('qsv')) {
|
|
123
|
-
// QSV-specific options
|
|
124
|
-
args.push('-preset', 'medium');
|
|
125
|
-
}
|
|
126
|
-
else if (ffmpegCodec.includes('vaapi')) {
|
|
127
|
-
// VAAPI-specific options
|
|
128
|
-
args.push('-rc_mode', 'VBR');
|
|
129
|
-
}
|
|
130
|
-
else if (ffmpegCodec === 'libx264') {
|
|
131
|
-
// Software x264 options
|
|
132
|
-
// aud=1: Access Unit Delimiters for reliable frame parsing
|
|
133
|
-
// bframes=0: Disable B-frames for immediate output
|
|
134
|
-
// rc-lookahead=0: No lookahead buffering
|
|
135
|
-
args.push('-x264-params', 'aud=1:bframes=0:rc-lookahead=0');
|
|
136
|
-
args.push('-tune', 'zerolatency');
|
|
137
|
-
}
|
|
138
|
-
else if (ffmpegCodec === 'libx265') {
|
|
139
|
-
args.push('-x265-params', 'aud=1:bframes=0:rc-lookahead=0');
|
|
140
|
-
}
|
|
141
|
-
// Output format
|
|
142
|
-
args.push('-f', format);
|
|
143
|
-
args.push('pipe:1');
|
|
144
|
-
this.process = spawn('ffmpeg', args, {
|
|
145
|
-
stdio: ['pipe', 'pipe', 'pipe'],
|
|
49
|
+
this.backend.startEncoder({
|
|
50
|
+
codec: codecName,
|
|
51
|
+
width: this.config.width,
|
|
52
|
+
height: this.config.height,
|
|
53
|
+
framerate: this.config.framerate ?? 30,
|
|
54
|
+
bitrate: this.config.bitrate,
|
|
55
|
+
inputPixelFormat: 'rgba',
|
|
146
56
|
});
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
57
|
+
// Set hardware acceleration preference on backend config
|
|
58
|
+
if (hwPref) {
|
|
59
|
+
this.backend.config.hardwareAcceleration = hwPref;
|
|
60
|
+
}
|
|
61
|
+
// Listen for encoded frames
|
|
62
|
+
this.backend.on('encodedFrame', (frame) => {
|
|
63
|
+
this.pendingPackets.push(frame);
|
|
64
|
+
this.processPackets();
|
|
155
65
|
});
|
|
156
|
-
this.
|
|
157
|
-
console.error('
|
|
66
|
+
this.backend.on('error', (err) => {
|
|
67
|
+
console.error('[FFmpegVideoEncoder] Backend error:', err.message);
|
|
158
68
|
});
|
|
159
|
-
this.
|
|
160
|
-
//
|
|
161
|
-
|
|
162
|
-
this.emitAnnexBFrame(this.accumulatedData);
|
|
163
|
-
this.accumulatedData = Buffer.alloc(0);
|
|
164
|
-
}
|
|
165
|
-
else if (!this.useIvf && !this.useAnnexB && this.accumulatedData.length > 0) {
|
|
166
|
-
this.emitPacket(this.accumulatedData, this.frameIndex++, true);
|
|
167
|
-
this.accumulatedData = Buffer.alloc(0);
|
|
168
|
-
}
|
|
69
|
+
this.backend.on('close', () => {
|
|
70
|
+
// Process any remaining packets
|
|
71
|
+
this.processPackets();
|
|
169
72
|
if (this.resolveFlush) {
|
|
170
73
|
this.resolveFlush();
|
|
171
74
|
this.resolveFlush = null;
|
|
172
75
|
}
|
|
173
76
|
});
|
|
174
|
-
this.process.stdin?.on('error', () => {
|
|
175
|
-
// Ignore EPIPE errors when closing
|
|
176
|
-
});
|
|
177
77
|
}
|
|
178
78
|
async encode(videoSample, _options) {
|
|
179
|
-
if (!this.
|
|
79
|
+
if (!this.backend?.isHealthy) {
|
|
180
80
|
throw new Error('Encoder not initialized');
|
|
181
81
|
}
|
|
182
82
|
// Get raw RGBA data from VideoSample
|
|
183
83
|
const frameData = await this.getFrameData(videoSample);
|
|
184
|
-
this.
|
|
84
|
+
this.backend.write(frameData);
|
|
185
85
|
}
|
|
186
86
|
async flush() {
|
|
187
87
|
return new Promise((resolve) => {
|
|
188
88
|
this.resolveFlush = resolve;
|
|
189
|
-
if (this.
|
|
190
|
-
this.
|
|
89
|
+
if (this.backend) {
|
|
90
|
+
this.backend.end();
|
|
191
91
|
}
|
|
192
92
|
else {
|
|
193
93
|
resolve();
|
|
@@ -195,9 +95,15 @@ export class FFmpegVideoEncoder extends CustomVideoEncoder {
|
|
|
195
95
|
});
|
|
196
96
|
}
|
|
197
97
|
async close() {
|
|
198
|
-
if (this.
|
|
199
|
-
this.
|
|
200
|
-
this.
|
|
98
|
+
if (this.backend) {
|
|
99
|
+
this.backend.kill();
|
|
100
|
+
this.backend = null;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
processPackets() {
|
|
104
|
+
while (this.pendingPackets.length > 0) {
|
|
105
|
+
const packet = this.pendingPackets.shift();
|
|
106
|
+
this.emitPacket(packet.data, packet.timestamp, packet.keyFrame);
|
|
201
107
|
}
|
|
202
108
|
}
|
|
203
109
|
/**
|
|
@@ -230,92 +136,6 @@ export class FFmpegVideoEncoder extends CustomVideoEncoder {
|
|
|
230
136
|
}
|
|
231
137
|
throw new Error('Cannot extract frame data from VideoSample');
|
|
232
138
|
}
|
|
233
|
-
/**
|
|
234
|
-
* Parse IVF container and emit individual encoded packets
|
|
235
|
-
*/
|
|
236
|
-
parseIvfFrames() {
|
|
237
|
-
// Skip 32-byte IVF file header
|
|
238
|
-
if (!this.ivfHeaderParsed) {
|
|
239
|
-
if (this.accumulatedData.length < 32) {
|
|
240
|
-
return;
|
|
241
|
-
}
|
|
242
|
-
const signature = this.accumulatedData.subarray(0, 4).toString();
|
|
243
|
-
if (signature !== 'DKIF') {
|
|
244
|
-
console.error('Invalid IVF signature:', signature);
|
|
245
|
-
return;
|
|
246
|
-
}
|
|
247
|
-
this.accumulatedData = this.accumulatedData.subarray(32);
|
|
248
|
-
this.ivfHeaderParsed = true;
|
|
249
|
-
}
|
|
250
|
-
// Parse frames: 4-byte size + 8-byte timestamp + data
|
|
251
|
-
while (this.accumulatedData.length >= 12) {
|
|
252
|
-
const frameSize = this.accumulatedData.readUInt32LE(0);
|
|
253
|
-
const timestamp = Number(this.accumulatedData.readBigUInt64LE(4));
|
|
254
|
-
const totalFrameSize = 12 + frameSize;
|
|
255
|
-
if (this.accumulatedData.length < totalFrameSize) {
|
|
256
|
-
return;
|
|
257
|
-
}
|
|
258
|
-
const frameData = Buffer.from(this.accumulatedData.subarray(12, totalFrameSize));
|
|
259
|
-
this.accumulatedData = this.accumulatedData.subarray(totalFrameSize);
|
|
260
|
-
const isKeyFrame = this.isKeyFrame(frameData);
|
|
261
|
-
this.emitPacket(frameData, timestamp, isKeyFrame);
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
/**
|
|
265
|
-
* Parse H.264/HEVC Annex B bitstream and emit frames
|
|
266
|
-
* Annex B uses start codes (0x00 0x00 0x01 or 0x00 0x00 0x00 0x01) to delimit NAL units.
|
|
267
|
-
* When AUD (Access Unit Delimiter) is enabled, each frame starts with an AUD NAL.
|
|
268
|
-
*/
|
|
269
|
-
parseAnnexBFrames() {
|
|
270
|
-
// Find all AUD positions (frame boundaries)
|
|
271
|
-
const audPositions = [];
|
|
272
|
-
let i = 0;
|
|
273
|
-
while (i < this.accumulatedData.length - 4) {
|
|
274
|
-
// Check for start code
|
|
275
|
-
if (this.accumulatedData[i] === 0 && this.accumulatedData[i + 1] === 0) {
|
|
276
|
-
let startCodeLen = 0;
|
|
277
|
-
let nalStart = 0;
|
|
278
|
-
if (this.accumulatedData[i + 2] === 1) {
|
|
279
|
-
startCodeLen = 3;
|
|
280
|
-
nalStart = i + 3;
|
|
281
|
-
}
|
|
282
|
-
else if (this.accumulatedData[i + 2] === 0 &&
|
|
283
|
-
i + 3 < this.accumulatedData.length &&
|
|
284
|
-
this.accumulatedData[i + 3] === 1) {
|
|
285
|
-
startCodeLen = 4;
|
|
286
|
-
nalStart = i + 4;
|
|
287
|
-
}
|
|
288
|
-
if (startCodeLen > 0 && nalStart < this.accumulatedData.length) {
|
|
289
|
-
const nalType = this.getNalType(this.accumulatedData[nalStart]);
|
|
290
|
-
// AUD = type 9 for H.264, type 35 for HEVC
|
|
291
|
-
const isAud = (this.codec === 'avc' && nalType === 9) ||
|
|
292
|
-
(this.codec === 'hevc' && nalType === 35);
|
|
293
|
-
if (isAud) {
|
|
294
|
-
audPositions.push(i);
|
|
295
|
-
}
|
|
296
|
-
i += startCodeLen;
|
|
297
|
-
}
|
|
298
|
-
else {
|
|
299
|
-
i++;
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
else {
|
|
303
|
-
i++;
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
// Need at least 2 AUDs to have a complete frame
|
|
307
|
-
if (audPositions.length < 2) {
|
|
308
|
-
return;
|
|
309
|
-
}
|
|
310
|
-
// Emit all complete frames (all except the last AUD's frame which is incomplete)
|
|
311
|
-
for (let j = 0; j < audPositions.length - 1; j++) {
|
|
312
|
-
const frameData = this.accumulatedData.subarray(audPositions[j], audPositions[j + 1]);
|
|
313
|
-
this.emitAnnexBFrame(Buffer.from(frameData));
|
|
314
|
-
}
|
|
315
|
-
// Keep the last incomplete frame
|
|
316
|
-
const lastAudPos = audPositions[audPositions.length - 1];
|
|
317
|
-
this.accumulatedData = Buffer.from(this.accumulatedData.subarray(lastAudPos));
|
|
318
|
-
}
|
|
319
139
|
/**
|
|
320
140
|
* Find all Annex B start codes in buffer
|
|
321
141
|
*/
|
|
@@ -323,7 +143,6 @@ export class FFmpegVideoEncoder extends CustomVideoEncoder {
|
|
|
323
143
|
const codes = [];
|
|
324
144
|
let i = 0;
|
|
325
145
|
while (i < buf.length - 2) {
|
|
326
|
-
// Check for 0x00 0x00 0x01 (3-byte) or 0x00 0x00 0x00 0x01 (4-byte)
|
|
327
146
|
if (buf[i] === 0 && buf[i + 1] === 0) {
|
|
328
147
|
if (buf[i + 2] === 1) {
|
|
329
148
|
codes.push({ pos: i, len: 3 });
|
|
@@ -348,119 +167,12 @@ export class FFmpegVideoEncoder extends CustomVideoEncoder {
|
|
|
348
167
|
*/
|
|
349
168
|
getNalType(firstByte) {
|
|
350
169
|
if (this.codec === 'avc') {
|
|
351
|
-
// H.264: NAL type is in bits 0-4
|
|
352
170
|
return firstByte & 0x1f;
|
|
353
171
|
}
|
|
354
172
|
else {
|
|
355
|
-
// HEVC: NAL type is in bits 1-6
|
|
356
173
|
return (firstByte >> 1) & 0x3f;
|
|
357
174
|
}
|
|
358
175
|
}
|
|
359
|
-
/**
|
|
360
|
-
* Check if this NAL unit starts a new Access Unit (frame)
|
|
361
|
-
*/
|
|
362
|
-
isAccessUnitStart(nalType, buf, nalStart) {
|
|
363
|
-
if (this.codec === 'avc') {
|
|
364
|
-
// H.264 NAL types:
|
|
365
|
-
// 1-5: VCL (coded slice)
|
|
366
|
-
// 6: SEI
|
|
367
|
-
// 7: SPS
|
|
368
|
-
// 8: PPS
|
|
369
|
-
// 9: AUD (Access Unit Delimiter)
|
|
370
|
-
// AUD always starts a new AU
|
|
371
|
-
if (nalType === 9)
|
|
372
|
-
return true;
|
|
373
|
-
// SPS starts a new AU (typically followed by PPS and IDR)
|
|
374
|
-
if (nalType === 7)
|
|
375
|
-
return true;
|
|
376
|
-
// For VCL NALs (1-5), check first_mb_in_slice
|
|
377
|
-
// If it's 0, it's the first slice of a new frame
|
|
378
|
-
if (nalType >= 1 && nalType <= 5 && nalStart + 1 < buf.length) {
|
|
379
|
-
// first_mb_in_slice is the first value in slice header (exp-golomb coded)
|
|
380
|
-
// If the byte after NAL header has high bit set, first_mb_in_slice could be 0
|
|
381
|
-
// Simplified: check if this looks like start of frame
|
|
382
|
-
const sliceHeader = buf[nalStart + 1];
|
|
383
|
-
// first_mb_in_slice = 0 encodes as 1 (unary), so high bit = 1
|
|
384
|
-
if (sliceHeader & 0x80)
|
|
385
|
-
return true;
|
|
386
|
-
}
|
|
387
|
-
}
|
|
388
|
-
else {
|
|
389
|
-
// HEVC NAL types:
|
|
390
|
-
// 0-9, 16-21: VCL
|
|
391
|
-
// 32: VPS
|
|
392
|
-
// 33: SPS
|
|
393
|
-
// 34: PPS
|
|
394
|
-
// 35: AUD
|
|
395
|
-
if (nalType === 35)
|
|
396
|
-
return true; // AUD
|
|
397
|
-
if (nalType === 32)
|
|
398
|
-
return true; // VPS
|
|
399
|
-
}
|
|
400
|
-
return false;
|
|
401
|
-
}
|
|
402
|
-
/**
|
|
403
|
-
* Emit a complete Annex B frame
|
|
404
|
-
*/
|
|
405
|
-
emitAnnexBFrame(data) {
|
|
406
|
-
const isKey = this.isH264KeyFrame(data);
|
|
407
|
-
this.emitPacket(data, this.frameIndex, isKey);
|
|
408
|
-
}
|
|
409
|
-
/**
|
|
410
|
-
* Check if H.264/HEVC Annex B frame is a keyframe
|
|
411
|
-
*/
|
|
412
|
-
isH264KeyFrame(data) {
|
|
413
|
-
// Find first VCL NAL and check its type
|
|
414
|
-
const startCodes = this.findStartCodes(data);
|
|
415
|
-
for (const sc of startCodes) {
|
|
416
|
-
const nalStart = sc.pos + sc.len;
|
|
417
|
-
if (nalStart >= data.length)
|
|
418
|
-
continue;
|
|
419
|
-
const nalType = this.getNalType(data[nalStart]);
|
|
420
|
-
if (this.codec === 'avc') {
|
|
421
|
-
// H.264: type 5 = IDR (keyframe)
|
|
422
|
-
if (nalType === 5)
|
|
423
|
-
return true;
|
|
424
|
-
// type 1 = non-IDR (not keyframe)
|
|
425
|
-
if (nalType === 1)
|
|
426
|
-
return false;
|
|
427
|
-
}
|
|
428
|
-
else {
|
|
429
|
-
// HEVC: types 16-21 are IDR/CRA (keyframes)
|
|
430
|
-
if (nalType >= 16 && nalType <= 21)
|
|
431
|
-
return true;
|
|
432
|
-
// types 0-9 are non-IDR
|
|
433
|
-
if (nalType >= 0 && nalType <= 9)
|
|
434
|
-
return false;
|
|
435
|
-
}
|
|
436
|
-
}
|
|
437
|
-
// Default to keyframe for first frame
|
|
438
|
-
return this.frameIndex === 0;
|
|
439
|
-
}
|
|
440
|
-
/**
|
|
441
|
-
* Check if VP8/VP9/AV1 frame is a keyframe
|
|
442
|
-
*/
|
|
443
|
-
isKeyFrame(data) {
|
|
444
|
-
if (data.length === 0)
|
|
445
|
-
return false;
|
|
446
|
-
if (this.codec === 'vp9') {
|
|
447
|
-
// VP9: bit 2 of first byte (0 = keyframe)
|
|
448
|
-
return (data[0] & 0x04) === 0;
|
|
449
|
-
}
|
|
450
|
-
else if (this.codec === 'vp8') {
|
|
451
|
-
// VP8: bit 0 of first byte (0 = keyframe)
|
|
452
|
-
return (data[0] & 0x01) === 0;
|
|
453
|
-
}
|
|
454
|
-
else if (this.codec === 'av1') {
|
|
455
|
-
// AV1: more complex, assume first frame is key
|
|
456
|
-
return this.frameIndex === 0;
|
|
457
|
-
}
|
|
458
|
-
// For H.264/HEVC, use dedicated method
|
|
459
|
-
if (this.codec === 'avc' || this.codec === 'hevc') {
|
|
460
|
-
return this.isH264KeyFrame(data);
|
|
461
|
-
}
|
|
462
|
-
return this.frameIndex === 0;
|
|
463
|
-
}
|
|
464
176
|
/**
|
|
465
177
|
* Emit an encoded packet via Mediabunny callback
|
|
466
178
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FFmpegVideoEncoder.js","sourceRoot":"","sources":["../../src/mediabunny/FFmpegVideoEncoder.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FFmpegVideoEncoder.js","sourceRoot":"","sources":["../../src/mediabunny/FFmpegVideoEncoder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HardwarePipeline - Intelligent filter chain selection for hardware video processing
|
|
3
|
+
*
|
|
4
|
+
* Automatically detects hardware capabilities and builds optimal filter chains
|
|
5
|
+
* for format conversion, preferring GPU-side operations when possible.
|
|
6
|
+
*/
|
|
7
|
+
import { HardwareContext } from 'node-av/api';
|
|
8
|
+
export type HardwareType = 'cuda' | 'vaapi' | 'qsv' | 'videotoolbox' | 'drm' | 'v4l2m2m' | 'software';
|
|
9
|
+
/**
|
|
10
|
+
* Mark a filter chain as failed (discovered during actual processing)
|
|
11
|
+
*/
|
|
12
|
+
export declare function markFilterChainFailed(hwType: string, outputFormat: string, isHardwareFrame: boolean): void;
|
|
13
|
+
/**
|
|
14
|
+
* Select the best filter chain for the given hardware and output format.
|
|
15
|
+
* Uses probing to verify the chain works on this specific hardware/driver.
|
|
16
|
+
* If a chain fails during actual processing, call getNextFilterChain() to try the next one.
|
|
17
|
+
*/
|
|
18
|
+
export declare function selectBestFilterChain(hardware: HardwareContext | null, outputFormat: string, isHardwareFrame: boolean): string;
|
|
19
|
+
/**
|
|
20
|
+
* Move to the next filter chain after the current one failed.
|
|
21
|
+
* Returns the next chain to try, or null if all chains have been exhausted.
|
|
22
|
+
*/
|
|
23
|
+
export declare function getNextFilterChain(hardware: HardwareContext | null, outputFormat: string, isHardwareFrame: boolean): string | null;
|
|
24
|
+
/**
|
|
25
|
+
* Get human-readable description of the selected pipeline
|
|
26
|
+
*/
|
|
27
|
+
export declare function describePipeline(filterChain: string, hwType: string): string;
|
|
28
|
+
/**
|
|
29
|
+
* Clear the filter chain cache (useful for testing or after hardware changes)
|
|
30
|
+
*/
|
|
31
|
+
export declare function clearPipelineCache(): void;
|
|
32
|
+
/**
|
|
33
|
+
* Get current cache status for debugging
|
|
34
|
+
*/
|
|
35
|
+
export declare function getPipelineCacheStatus(): Record<string, Record<string, string | null>>;
|
|
36
|
+
//# sourceMappingURL=HardwarePipeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HardwarePipeline.d.ts","sourceRoot":"","sources":["../../src/node-av/HardwarePipeline.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAa,eAAe,EAAE,MAAM,aAAa,CAAC;AAMzD,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,cAAc,GAAG,KAAK,GAAG,SAAS,GAAG,UAAU,CAAC;AAkFtG;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,GAAG,IAAI,CAW1G;AAuFD;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,eAAe,GAAG,IAAI,EAChC,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,OAAO,GACvB,MAAM,CAqBR;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,eAAe,GAAG,IAAI,EAChC,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,OAAO,GACvB,MAAM,GAAG,IAAI,CAoBf;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAwB5E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,CAStF"}
|