webcodecs-node 0.2.2 → 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/README.md +4 -0
- package/dist/__tests__/AudioData.test.js +2 -1
- package/dist/__tests__/AudioData.test.js.map +1 -1
- package/dist/__tests__/AudioDecoder.test.js +8 -8
- 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__/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 +206 -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__/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/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 +168 -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/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 +5 -1
- package/dist/core/AudioData.d.ts.map +1 -1
- package/dist/core/AudioData.js +69 -13
- 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 +31 -11
- package/dist/core/VideoFrame.d.ts.map +1 -1
- package/dist/core/VideoFrame.js +244 -81
- package/dist/core/VideoFrame.js.map +1 -1
- package/dist/decoders/AudioDecoder.d.ts +14 -12
- package/dist/decoders/AudioDecoder.d.ts.map +1 -1
- package/dist/decoders/AudioDecoder.js +113 -173
- package/dist/decoders/AudioDecoder.js.map +1 -1
- package/dist/decoders/ImageDecoder.d.ts +1 -3
- package/dist/decoders/ImageDecoder.d.ts.map +1 -1
- package/dist/decoders/ImageDecoder.js +39 -192
- package/dist/decoders/ImageDecoder.js.map +1 -1
- package/dist/decoders/VideoDecoder.d.ts +14 -13
- package/dist/decoders/VideoDecoder.d.ts.map +1 -1
- package/dist/decoders/VideoDecoder.js +115 -166
- 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-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-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 +232 -68
- 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 +14 -13
- package/dist/encoders/AudioEncoder.d.ts.map +1 -1
- package/dist/encoders/AudioEncoder.js +138 -228
- package/dist/encoders/AudioEncoder.js.map +1 -1
- package/dist/encoders/VideoEncoder.d.ts +13 -14
- package/dist/encoders/VideoEncoder.d.ts.map +1 -1
- package/dist/encoders/VideoEncoder.js +92 -161
- 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 +17 -0
- package/dist/formats/conversions/frame-converter.d.ts.map +1 -1
- package/dist/formats/conversions/frame-converter.js +144 -10
- package/dist/formats/conversions/frame-converter.js.map +1 -1
- package/dist/formats/conversions/index.d.ts +2 -0
- package/dist/formats/conversions/index.d.ts.map +1 -1
- package/dist/formats/conversions/index.js +4 -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/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/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 +4 -17
- package/dist/mediabunny/FFmpegAudioDecoder.d.ts.map +1 -1
- package/dist/mediabunny/FFmpegAudioDecoder.js +57 -185
- package/dist/mediabunny/FFmpegAudioDecoder.js.map +1 -1
- package/dist/mediabunny/FFmpegAudioEncoder.d.ts +6 -39
- package/dist/mediabunny/FFmpegAudioEncoder.d.ts.map +1 -1
- package/dist/mediabunny/FFmpegAudioEncoder.js +66 -329
- package/dist/mediabunny/FFmpegAudioEncoder.js.map +1 -1
- package/dist/mediabunny/FFmpegVideoDecoder.d.ts +5 -38
- package/dist/mediabunny/FFmpegVideoDecoder.d.ts.map +1 -1
- package/dist/mediabunny/FFmpegVideoDecoder.js +39 -283
- package/dist/mediabunny/FFmpegVideoDecoder.js.map +1 -1
- package/dist/mediabunny/FFmpegVideoEncoder.d.ts +9 -37
- package/dist/mediabunny/FFmpegVideoEncoder.d.ts.map +1 -1
- package/dist/mediabunny/FFmpegVideoEncoder.js +49 -336
- 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 +350 -0
- package/dist/node-av/NodeAvAudioDecoder.js.map +1 -0
- package/dist/node-av/NodeAvAudioEncoder.d.ts +50 -0
- package/dist/node-av/NodeAvAudioEncoder.d.ts.map +1 -0
- package/dist/node-av/NodeAvAudioEncoder.js +506 -0
- package/dist/node-av/NodeAvAudioEncoder.js.map +1 -0
- package/dist/node-av/NodeAvImageDecoder.d.ts +114 -0
- package/dist/node-av/NodeAvImageDecoder.d.ts.map +1 -0
- package/dist/node-av/NodeAvImageDecoder.js +406 -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 +365 -0
- package/dist/node-av/NodeAvVideoDecoder.js.map +1 -0
- package/dist/node-av/NodeAvVideoEncoder.d.ts +56 -0
- package/dist/node-av/NodeAvVideoEncoder.d.ts.map +1 -0
- package/dist/node-av/NodeAvVideoEncoder.js +509 -0
- package/dist/node-av/NodeAvVideoEncoder.js.map +1 -0
- 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/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/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 +6 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +12 -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 +20 -34
|
@@ -1,23 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Mediabunny VideoEncoder adapter using node-av backend
|
|
3
3
|
*
|
|
4
|
-
* Implements Mediabunny's CustomVideoEncoder interface using
|
|
5
|
-
* Supports hardware acceleration via VAAPI,
|
|
4
|
+
* Implements Mediabunny's CustomVideoEncoder interface using node-av native bindings
|
|
5
|
+
* (which wrap FFmpeg's libav* libraries). Supports hardware acceleration via VAAPI,
|
|
6
|
+
* NVENC, QSV, VideoToolbox.
|
|
6
7
|
*/
|
|
7
|
-
import { spawn } from 'child_process';
|
|
8
8
|
import { CustomVideoEncoder, EncodedPacket, } from 'mediabunny';
|
|
9
|
-
import {
|
|
9
|
+
import { NodeAvVideoEncoder } from '../node-av/NodeAvVideoEncoder.js';
|
|
10
10
|
import { extractAvcParameterSetsFromAnnexB, buildAvcDecoderConfig, convertAnnexBToAvcc, } from '../utils/avc.js';
|
|
11
11
|
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
|
|
12
|
+
// Map Mediabunny codec to internal codec name
|
|
21
13
|
const CODEC_NAME_MAP = {
|
|
22
14
|
avc: 'h264',
|
|
23
15
|
hevc: 'hevc',
|
|
@@ -25,35 +17,22 @@ const CODEC_NAME_MAP = {
|
|
|
25
17
|
vp9: 'vp9',
|
|
26
18
|
av1: 'av1',
|
|
27
19
|
};
|
|
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
20
|
export class FFmpegVideoEncoder extends CustomVideoEncoder {
|
|
37
|
-
|
|
38
|
-
accumulatedData = Buffer.alloc(0);
|
|
39
|
-
ivfHeaderParsed = false;
|
|
21
|
+
backend = null;
|
|
40
22
|
frameIndex = 0;
|
|
41
|
-
resolveFlush = null;
|
|
42
|
-
useIvf = false;
|
|
43
|
-
useAnnexB = false;
|
|
44
23
|
codecDescription = null;
|
|
45
24
|
metadataEmitted = false;
|
|
46
|
-
usingHardwareAcceleration = false;
|
|
47
|
-
hwaccelMethod = null;
|
|
48
25
|
bitstreamFormat = 'annexb';
|
|
26
|
+
useAnnexB = false;
|
|
27
|
+
resolveFlush = null;
|
|
28
|
+
pendingPackets = [];
|
|
49
29
|
static supports(codec, _config) {
|
|
50
|
-
return codec in
|
|
30
|
+
return codec in CODEC_NAME_MAP;
|
|
51
31
|
}
|
|
52
32
|
async init() {
|
|
53
|
-
|
|
54
|
-
this.useIvf = format === 'ivf';
|
|
55
|
-
this.useAnnexB = format === 'h264' || format === 'hevc';
|
|
33
|
+
// Determine bitstream format from config
|
|
56
34
|
const configExt = this.config;
|
|
35
|
+
this.useAnnexB = this.codec === 'avc' || this.codec === 'hevc';
|
|
57
36
|
if (this.codec === 'avc' && configExt.avc?.format === 'avc') {
|
|
58
37
|
this.bitstreamFormat = 'mp4';
|
|
59
38
|
}
|
|
@@ -63,131 +42,53 @@ export class FFmpegVideoEncoder extends CustomVideoEncoder {
|
|
|
63
42
|
else {
|
|
64
43
|
this.bitstreamFormat = 'annexb';
|
|
65
44
|
}
|
|
66
|
-
//
|
|
67
|
-
// Default to software encoding for maximum compatibility
|
|
68
|
-
// Hardware encoding requires specific GPU support and can fail on some systems
|
|
45
|
+
// Hardware acceleration preference from config
|
|
69
46
|
const hwPref = this.config.hardwareAcceleration;
|
|
70
|
-
//
|
|
47
|
+
// Create node-av backend
|
|
48
|
+
this.backend = new NodeAvVideoEncoder();
|
|
71
49
|
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'],
|
|
50
|
+
this.backend.startEncoder({
|
|
51
|
+
codec: codecName,
|
|
52
|
+
width: this.config.width,
|
|
53
|
+
height: this.config.height,
|
|
54
|
+
framerate: this.config.framerate ?? 30,
|
|
55
|
+
bitrate: this.config.bitrate,
|
|
56
|
+
inputPixelFormat: 'rgba',
|
|
146
57
|
});
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
58
|
+
// Set hardware acceleration preference on backend config
|
|
59
|
+
if (hwPref) {
|
|
60
|
+
this.backend.config.hardwareAcceleration = hwPref;
|
|
61
|
+
}
|
|
62
|
+
// Listen for encoded frames
|
|
63
|
+
this.backend.on('encodedFrame', (frame) => {
|
|
64
|
+
this.pendingPackets.push(frame);
|
|
65
|
+
this.processPackets();
|
|
155
66
|
});
|
|
156
|
-
this.
|
|
157
|
-
console.error('
|
|
67
|
+
this.backend.on('error', (err) => {
|
|
68
|
+
console.error('[FFmpegVideoEncoder] Backend error:', err.message);
|
|
158
69
|
});
|
|
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
|
-
}
|
|
70
|
+
this.backend.on('close', () => {
|
|
71
|
+
// Process any remaining packets
|
|
72
|
+
this.processPackets();
|
|
169
73
|
if (this.resolveFlush) {
|
|
170
74
|
this.resolveFlush();
|
|
171
75
|
this.resolveFlush = null;
|
|
172
76
|
}
|
|
173
77
|
});
|
|
174
|
-
this.process.stdin?.on('error', () => {
|
|
175
|
-
// Ignore EPIPE errors when closing
|
|
176
|
-
});
|
|
177
78
|
}
|
|
178
79
|
async encode(videoSample, _options) {
|
|
179
|
-
if (!this.
|
|
80
|
+
if (!this.backend?.isHealthy) {
|
|
180
81
|
throw new Error('Encoder not initialized');
|
|
181
82
|
}
|
|
182
83
|
// Get raw RGBA data from VideoSample
|
|
183
84
|
const frameData = await this.getFrameData(videoSample);
|
|
184
|
-
this.
|
|
85
|
+
this.backend.write(frameData);
|
|
185
86
|
}
|
|
186
87
|
async flush() {
|
|
187
88
|
return new Promise((resolve) => {
|
|
188
89
|
this.resolveFlush = resolve;
|
|
189
|
-
if (this.
|
|
190
|
-
this.
|
|
90
|
+
if (this.backend) {
|
|
91
|
+
this.backend.end();
|
|
191
92
|
}
|
|
192
93
|
else {
|
|
193
94
|
resolve();
|
|
@@ -195,9 +96,15 @@ export class FFmpegVideoEncoder extends CustomVideoEncoder {
|
|
|
195
96
|
});
|
|
196
97
|
}
|
|
197
98
|
async close() {
|
|
198
|
-
if (this.
|
|
199
|
-
this.
|
|
200
|
-
this.
|
|
99
|
+
if (this.backend) {
|
|
100
|
+
this.backend.kill();
|
|
101
|
+
this.backend = null;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
processPackets() {
|
|
105
|
+
while (this.pendingPackets.length > 0) {
|
|
106
|
+
const packet = this.pendingPackets.shift();
|
|
107
|
+
this.emitPacket(packet.data, packet.timestamp, packet.keyFrame);
|
|
201
108
|
}
|
|
202
109
|
}
|
|
203
110
|
/**
|
|
@@ -230,92 +137,6 @@ export class FFmpegVideoEncoder extends CustomVideoEncoder {
|
|
|
230
137
|
}
|
|
231
138
|
throw new Error('Cannot extract frame data from VideoSample');
|
|
232
139
|
}
|
|
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
140
|
/**
|
|
320
141
|
* Find all Annex B start codes in buffer
|
|
321
142
|
*/
|
|
@@ -323,7 +144,6 @@ export class FFmpegVideoEncoder extends CustomVideoEncoder {
|
|
|
323
144
|
const codes = [];
|
|
324
145
|
let i = 0;
|
|
325
146
|
while (i < buf.length - 2) {
|
|
326
|
-
// Check for 0x00 0x00 0x01 (3-byte) or 0x00 0x00 0x00 0x01 (4-byte)
|
|
327
147
|
if (buf[i] === 0 && buf[i + 1] === 0) {
|
|
328
148
|
if (buf[i + 2] === 1) {
|
|
329
149
|
codes.push({ pos: i, len: 3 });
|
|
@@ -348,119 +168,12 @@ export class FFmpegVideoEncoder extends CustomVideoEncoder {
|
|
|
348
168
|
*/
|
|
349
169
|
getNalType(firstByte) {
|
|
350
170
|
if (this.codec === 'avc') {
|
|
351
|
-
// H.264: NAL type is in bits 0-4
|
|
352
171
|
return firstByte & 0x1f;
|
|
353
172
|
}
|
|
354
173
|
else {
|
|
355
|
-
// HEVC: NAL type is in bits 1-6
|
|
356
174
|
return (firstByte >> 1) & 0x3f;
|
|
357
175
|
}
|
|
358
176
|
}
|
|
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
177
|
/**
|
|
465
178
|
* Emit an encoded packet via Mediabunny callback
|
|
466
179
|
*/
|
|
@@ -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"}
|