webcodecs-node 0.5.0 → 0.5.1
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/package.json +1 -1
- package/dist/AudioData.d.ts +0 -6
- package/dist/AudioData.d.ts.map +0 -1
- package/dist/AudioData.js +0 -6
- package/dist/AudioData.js.map +0 -1
- package/dist/AudioDecoder.d.ts +0 -6
- package/dist/AudioDecoder.d.ts.map +0 -1
- package/dist/AudioDecoder.js +0 -6
- package/dist/AudioDecoder.js.map +0 -1
- package/dist/AudioEncoder.d.ts +0 -6
- package/dist/AudioEncoder.d.ts.map +0 -1
- package/dist/AudioEncoder.js +0 -6
- package/dist/AudioEncoder.js.map +0 -1
- package/dist/EncodedAudioChunk.d.ts +0 -6
- package/dist/EncodedAudioChunk.d.ts.map +0 -1
- package/dist/EncodedAudioChunk.js +0 -6
- package/dist/EncodedAudioChunk.js.map +0 -1
- package/dist/EncodedVideoChunk.d.ts +0 -6
- package/dist/EncodedVideoChunk.d.ts.map +0 -1
- package/dist/EncodedVideoChunk.js +0 -6
- package/dist/EncodedVideoChunk.js.map +0 -1
- package/dist/FFmpegProcess.d.ts +0 -6
- package/dist/FFmpegProcess.d.ts.map +0 -1
- package/dist/FFmpegProcess.js +0 -6
- package/dist/FFmpegProcess.js.map +0 -1
- package/dist/HardwareAcceleration.d.ts +0 -6
- package/dist/HardwareAcceleration.d.ts.map +0 -1
- package/dist/HardwareAcceleration.js +0 -6
- package/dist/HardwareAcceleration.js.map +0 -1
- package/dist/ImageDecoder.d.ts +0 -6
- package/dist/ImageDecoder.d.ts.map +0 -1
- package/dist/ImageDecoder.js +0 -6
- package/dist/ImageDecoder.js.map +0 -1
- package/dist/Logger.d.ts +0 -6
- package/dist/Logger.d.ts.map +0 -1
- package/dist/Logger.js +0 -6
- package/dist/Logger.js.map +0 -1
- package/dist/MediaCapabilities.d.ts +0 -9
- package/dist/MediaCapabilities.d.ts.map +0 -1
- package/dist/MediaCapabilities.js +0 -8
- package/dist/MediaCapabilities.js.map +0 -1
- package/dist/VideoDecoder.d.ts +0 -6
- package/dist/VideoDecoder.d.ts.map +0 -1
- package/dist/VideoDecoder.js +0 -6
- package/dist/VideoDecoder.js.map +0 -1
- package/dist/VideoEncoder.d.ts +0 -6
- package/dist/VideoEncoder.d.ts.map +0 -1
- package/dist/VideoEncoder.js +0 -6
- package/dist/VideoEncoder.js.map +0 -1
- package/dist/VideoFrame.d.ts +0 -10
- package/dist/VideoFrame.d.ts.map +0 -1
- package/dist/VideoFrame.js +0 -9
- package/dist/VideoFrame.js.map +0 -1
- package/dist/__tests__/AudioData.test.d.ts +0 -5
- package/dist/__tests__/AudioData.test.d.ts.map +0 -1
- package/dist/__tests__/AudioData.test.js +0 -180
- package/dist/__tests__/AudioData.test.js.map +0 -1
- package/dist/__tests__/AudioDecoder.test.d.ts +0 -5
- package/dist/__tests__/AudioDecoder.test.d.ts.map +0 -1
- package/dist/__tests__/AudioDecoder.test.js +0 -733
- package/dist/__tests__/AudioDecoder.test.js.map +0 -1
- package/dist/__tests__/AudioEncoder.test.d.ts +0 -5
- package/dist/__tests__/AudioEncoder.test.d.ts.map +0 -1
- package/dist/__tests__/AudioEncoder.test.js +0 -247
- package/dist/__tests__/AudioEncoder.test.js.map +0 -1
- package/dist/__tests__/EncodedChunks.test.d.ts +0 -5
- package/dist/__tests__/EncodedChunks.test.d.ts.map +0 -1
- package/dist/__tests__/EncodedChunks.test.js +0 -100
- package/dist/__tests__/EncodedChunks.test.js.map +0 -1
- package/dist/__tests__/HardwareAcceleration.test.d.ts +0 -5
- package/dist/__tests__/HardwareAcceleration.test.d.ts.map +0 -1
- package/dist/__tests__/HardwareAcceleration.test.js +0 -85
- package/dist/__tests__/HardwareAcceleration.test.js.map +0 -1
- package/dist/__tests__/ImageDecoder.test.d.ts +0 -5
- package/dist/__tests__/ImageDecoder.test.d.ts.map +0 -1
- package/dist/__tests__/ImageDecoder.test.js +0 -558
- package/dist/__tests__/ImageDecoder.test.js.map +0 -1
- package/dist/__tests__/ImageDecoder.wpt.test.d.ts +0 -8
- package/dist/__tests__/ImageDecoder.wpt.test.d.ts.map +0 -1
- package/dist/__tests__/ImageDecoder.wpt.test.js +0 -135
- package/dist/__tests__/ImageDecoder.wpt.test.js.map +0 -1
- package/dist/__tests__/MediaCapabilities.test.d.ts +0 -5
- package/dist/__tests__/MediaCapabilities.test.d.ts.map +0 -1
- package/dist/__tests__/MediaCapabilities.test.js +0 -346
- package/dist/__tests__/MediaCapabilities.test.js.map +0 -1
- package/dist/__tests__/NodeAvDecoder.test.d.ts +0 -2
- package/dist/__tests__/NodeAvDecoder.test.d.ts.map +0 -1
- package/dist/__tests__/NodeAvDecoder.test.js +0 -206
- package/dist/__tests__/NodeAvDecoder.test.js.map +0 -1
- package/dist/__tests__/NodeAvEncoder.test.d.ts +0 -2
- package/dist/__tests__/NodeAvEncoder.test.d.ts.map +0 -1
- package/dist/__tests__/NodeAvEncoder.test.js +0 -176
- package/dist/__tests__/NodeAvEncoder.test.js.map +0 -1
- package/dist/__tests__/VideoDecoder.test.d.ts +0 -5
- package/dist/__tests__/VideoDecoder.test.d.ts.map +0 -1
- package/dist/__tests__/VideoDecoder.test.js +0 -675
- package/dist/__tests__/VideoDecoder.test.js.map +0 -1
- package/dist/__tests__/VideoEncoder.test.d.ts +0 -5
- package/dist/__tests__/VideoEncoder.test.d.ts.map +0 -1
- package/dist/__tests__/VideoEncoder.test.js +0 -468
- package/dist/__tests__/VideoEncoder.test.js.map +0 -1
- package/dist/__tests__/VideoFrame.test.d.ts +0 -5
- package/dist/__tests__/VideoFrame.test.d.ts.map +0 -1
- package/dist/__tests__/VideoFrame.test.js +0 -246
- package/dist/__tests__/VideoFrame.test.js.map +0 -1
- package/dist/__tests__/aac-utils.test.d.ts +0 -2
- package/dist/__tests__/aac-utils.test.d.ts.map +0 -1
- package/dist/__tests__/aac-utils.test.js +0 -37
- package/dist/__tests__/aac-utils.test.js.map +0 -1
- package/dist/__tests__/avc-utils.test.d.ts +0 -2
- package/dist/__tests__/avc-utils.test.d.ts.map +0 -1
- package/dist/__tests__/avc-utils.test.js +0 -63
- package/dist/__tests__/avc-utils.test.js.map +0 -1
- package/dist/__tests__/hevc-utils.test.d.ts +0 -2
- package/dist/__tests__/hevc-utils.test.d.ts.map +0 -1
- package/dist/__tests__/hevc-utils.test.js +0 -78
- package/dist/__tests__/hevc-utils.test.js.map +0 -1
- package/dist/demos/demo-conversion.d.ts +0 -13
- package/dist/demos/demo-conversion.d.ts.map +0 -1
- package/dist/demos/demo-conversion.js +0 -301
- package/dist/demos/demo-conversion.js.map +0 -1
- package/dist/demos/demo-hwaccel-conversion.d.ts +0 -8
- package/dist/demos/demo-hwaccel-conversion.d.ts.map +0 -1
- package/dist/demos/demo-hwaccel-conversion.js +0 -161
- package/dist/demos/demo-hwaccel-conversion.js.map +0 -1
- package/dist/demos/demo-mediabunny.d.ts +0 -7
- package/dist/demos/demo-mediabunny.d.ts.map +0 -1
- package/dist/demos/demo-mediabunny.js +0 -78
- package/dist/demos/demo-mediabunny.js.map +0 -1
- package/dist/ffmpeg/FFmpegProcess.d.ts +0 -111
- package/dist/ffmpeg/FFmpegProcess.d.ts.map +0 -1
- package/dist/ffmpeg/FFmpegProcess.js +0 -543
- package/dist/ffmpeg/FFmpegProcess.js.map +0 -1
- package/dist/ffmpeg/audio-codecs.d.ts +0 -59
- package/dist/ffmpeg/audio-codecs.d.ts.map +0 -1
- package/dist/ffmpeg/audio-codecs.js +0 -99
- package/dist/ffmpeg/audio-codecs.js.map +0 -1
- package/dist/ffmpeg/formats.d.ts +0 -42
- package/dist/ffmpeg/formats.d.ts.map +0 -1
- package/dist/ffmpeg/formats.js +0 -147
- package/dist/ffmpeg/formats.js.map +0 -1
- package/dist/ffmpeg/index.d.ts +0 -10
- package/dist/ffmpeg/index.d.ts.map +0 -1
- package/dist/ffmpeg/index.js +0 -13
- package/dist/ffmpeg/index.js.map +0 -1
- package/dist/ffmpeg/parsers/annexb.d.ts +0 -88
- package/dist/ffmpeg/parsers/annexb.d.ts.map +0 -1
- package/dist/ffmpeg/parsers/annexb.js +0 -201
- package/dist/ffmpeg/parsers/annexb.js.map +0 -1
- package/dist/ffmpeg/parsers/index.d.ts +0 -6
- package/dist/ffmpeg/parsers/index.d.ts.map +0 -1
- package/dist/ffmpeg/parsers/index.js +0 -8
- package/dist/ffmpeg/parsers/index.js.map +0 -1
- package/dist/ffmpeg/parsers/ivf.d.ts +0 -54
- package/dist/ffmpeg/parsers/ivf.d.ts.map +0 -1
- package/dist/ffmpeg/parsers/ivf.js +0 -109
- package/dist/ffmpeg/parsers/ivf.js.map +0 -1
- package/dist/ffmpeg/types.d.ts +0 -85
- package/dist/ffmpeg/types.d.ts.map +0 -1
- package/dist/ffmpeg/types.js +0 -8
- package/dist/ffmpeg/types.js.map +0 -1
- package/dist/mediabunny/FFmpegAudioDecoder.d.ts +0 -24
- package/dist/mediabunny/FFmpegAudioDecoder.d.ts.map +0 -1
- package/dist/mediabunny/FFmpegAudioDecoder.js +0 -126
- package/dist/mediabunny/FFmpegAudioDecoder.js.map +0 -1
- package/dist/mediabunny/FFmpegAudioEncoder.d.ts +0 -44
- package/dist/mediabunny/FFmpegAudioEncoder.d.ts.map +0 -1
- package/dist/mediabunny/FFmpegAudioEncoder.js +0 -221
- package/dist/mediabunny/FFmpegAudioEncoder.js.map +0 -1
- package/dist/mediabunny/FFmpegVideoDecoder.d.ts +0 -25
- package/dist/mediabunny/FFmpegVideoDecoder.d.ts.map +0 -1
- package/dist/mediabunny/FFmpegVideoDecoder.js +0 -122
- package/dist/mediabunny/FFmpegVideoDecoder.js.map +0 -1
- package/dist/mediabunny/FFmpegVideoEncoder.d.ts +0 -49
- package/dist/mediabunny/FFmpegVideoEncoder.d.ts.map +0 -1
- package/dist/mediabunny/FFmpegVideoEncoder.js +0 -264
- package/dist/mediabunny/FFmpegVideoEncoder.js.map +0 -1
- package/dist/mediabunny/index.d.ts +0 -21
- package/dist/mediabunny/index.d.ts.map +0 -1
- package/dist/mediabunny/index.js +0 -33
- package/dist/mediabunny/index.js.map +0 -1
- package/dist/types.d.ts +0 -6
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -6
- package/dist/types.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FFmpegAudioDecoder.js","sourceRoot":"","sources":["../../src/mediabunny/FFmpegAudioDecoder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Mediabunny AudioEncoder adapter using node-av backend
|
|
3
|
-
*
|
|
4
|
-
* Implements Mediabunny's CustomAudioEncoder interface using node-av native bindings
|
|
5
|
-
* (which wrap FFmpeg's libav* libraries).
|
|
6
|
-
*/
|
|
7
|
-
import { CustomAudioEncoder, AudioSample, AudioCodec } from 'mediabunny';
|
|
8
|
-
export declare class FFmpegAudioEncoder extends CustomAudioEncoder {
|
|
9
|
-
private backend;
|
|
10
|
-
private frameIndex;
|
|
11
|
-
private resolveFlush;
|
|
12
|
-
private metadataEmitted;
|
|
13
|
-
private codecDescription;
|
|
14
|
-
static supports(codec: AudioCodec, _config: AudioEncoderConfig): boolean;
|
|
15
|
-
init(): Promise<void>;
|
|
16
|
-
encode(audioSample: AudioSample): Promise<void>;
|
|
17
|
-
flush(): Promise<void>;
|
|
18
|
-
close(): Promise<void>;
|
|
19
|
-
/**
|
|
20
|
-
* Extract raw PCM data from AudioSample
|
|
21
|
-
*/
|
|
22
|
-
private getSampleData;
|
|
23
|
-
/**
|
|
24
|
-
* Get the number of samples per frame based on codec
|
|
25
|
-
*/
|
|
26
|
-
private getFrameSamples;
|
|
27
|
-
/**
|
|
28
|
-
* Emit an encoded packet via Mediabunny callback
|
|
29
|
-
*/
|
|
30
|
-
private emitPacket;
|
|
31
|
-
/**
|
|
32
|
-
* Get codec string for the output format
|
|
33
|
-
*/
|
|
34
|
-
private getCodecString;
|
|
35
|
-
/**
|
|
36
|
-
* Build Opus identification header for decoder config description
|
|
37
|
-
*/
|
|
38
|
-
private buildOpusDescription;
|
|
39
|
-
/**
|
|
40
|
-
* Build AAC AudioSpecificConfig for decoder config description
|
|
41
|
-
*/
|
|
42
|
-
private buildAacDescription;
|
|
43
|
-
}
|
|
44
|
-
//# sourceMappingURL=FFmpegAudioEncoder.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FFmpegAudioEncoder.d.ts","sourceRoot":"","sources":["../../src/mediabunny/FFmpegAudioEncoder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,kBAAkB,EAClB,WAAW,EAEX,UAAU,EACX,MAAM,YAAY,CAAC;AA2BpB,qBAAa,kBAAmB,SAAQ,kBAAkB;IACxD,OAAO,CAAC,OAAO,CAAmC;IAClD,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,gBAAgB,CAA2B;IAEnD,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO;IAIlE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA6BrB,MAAM,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAU/C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAYtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5B;;OAEG;YACW,aAAa;IAiC3B;;OAEG;IACH,OAAO,CAAC,eAAe;IAiBvB;;OAEG;IACH,OAAO,CAAC,UAAU;IAyClB;;OAEG;IACH,OAAO,CAAC,cAAc;IAiBtB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAmB5B;;OAEG;IACH,OAAO,CAAC,mBAAmB;CAM5B"}
|
|
@@ -1,221 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Mediabunny AudioEncoder adapter using node-av backend
|
|
3
|
-
*
|
|
4
|
-
* Implements Mediabunny's CustomAudioEncoder interface using node-av native bindings
|
|
5
|
-
* (which wrap FFmpeg's libav* libraries).
|
|
6
|
-
*/
|
|
7
|
-
import { CustomAudioEncoder, EncodedPacket, } from 'mediabunny';
|
|
8
|
-
import { NodeAvAudioEncoder } from '../node-av/NodeAvAudioEncoder.js';
|
|
9
|
-
import { buildAudioSpecificConfig } from '../utils/aac.js';
|
|
10
|
-
// Map Mediabunny codec to internal codec name
|
|
11
|
-
const CODEC_NAME_MAP = {
|
|
12
|
-
'aac': 'aac',
|
|
13
|
-
'opus': 'opus',
|
|
14
|
-
'mp3': 'mp3',
|
|
15
|
-
'flac': 'flac',
|
|
16
|
-
'vorbis': 'vorbis',
|
|
17
|
-
'pcm-s16': 'pcm-s16',
|
|
18
|
-
'pcm-s16be': 'pcm-s16',
|
|
19
|
-
'pcm-s24': 'pcm-s16',
|
|
20
|
-
'pcm-s24be': 'pcm-s16',
|
|
21
|
-
'pcm-s32': 'pcm-s16',
|
|
22
|
-
'pcm-s32be': 'pcm-s16',
|
|
23
|
-
'pcm-f32': 'pcm-f32',
|
|
24
|
-
'pcm-f32be': 'pcm-f32',
|
|
25
|
-
'pcm-f64': 'pcm-f32',
|
|
26
|
-
'pcm-f64be': 'pcm-f32',
|
|
27
|
-
'pcm-u8': 'pcm-s16',
|
|
28
|
-
'pcm-s8': 'pcm-s16',
|
|
29
|
-
'ulaw': 'pcm-s16',
|
|
30
|
-
'alaw': 'pcm-s16',
|
|
31
|
-
};
|
|
32
|
-
export class FFmpegAudioEncoder extends CustomAudioEncoder {
|
|
33
|
-
backend = null;
|
|
34
|
-
frameIndex = 0;
|
|
35
|
-
resolveFlush = null;
|
|
36
|
-
metadataEmitted = false;
|
|
37
|
-
codecDescription = null;
|
|
38
|
-
static supports(codec, _config) {
|
|
39
|
-
return codec in CODEC_NAME_MAP;
|
|
40
|
-
}
|
|
41
|
-
async init() {
|
|
42
|
-
// Create node-av backend
|
|
43
|
-
this.backend = new NodeAvAudioEncoder();
|
|
44
|
-
const codecName = CODEC_NAME_MAP[this.codec] || 'aac';
|
|
45
|
-
this.backend.startEncoder({
|
|
46
|
-
codec: codecName,
|
|
47
|
-
sampleRate: this.config.sampleRate,
|
|
48
|
-
numberOfChannels: this.config.numberOfChannels,
|
|
49
|
-
bitrate: this.config.bitrate,
|
|
50
|
-
});
|
|
51
|
-
// Listen for encoded frames
|
|
52
|
-
this.backend.on('encodedFrame', (frame) => {
|
|
53
|
-
this.emitPacket(frame.data);
|
|
54
|
-
});
|
|
55
|
-
this.backend.on('error', (err) => {
|
|
56
|
-
console.error('[FFmpegAudioEncoder] Backend error:', err.message);
|
|
57
|
-
});
|
|
58
|
-
this.backend.on('close', () => {
|
|
59
|
-
if (this.resolveFlush) {
|
|
60
|
-
this.resolveFlush();
|
|
61
|
-
this.resolveFlush = null;
|
|
62
|
-
}
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
async encode(audioSample) {
|
|
66
|
-
if (!this.backend?.isHealthy) {
|
|
67
|
-
throw new Error('Encoder not initialized');
|
|
68
|
-
}
|
|
69
|
-
// Get raw PCM data from AudioSample (f32 interleaved)
|
|
70
|
-
const pcmData = await this.getSampleData(audioSample);
|
|
71
|
-
this.backend.write(pcmData);
|
|
72
|
-
}
|
|
73
|
-
async flush() {
|
|
74
|
-
return new Promise((resolve) => {
|
|
75
|
-
this.resolveFlush = resolve;
|
|
76
|
-
if (this.backend) {
|
|
77
|
-
this.backend.end();
|
|
78
|
-
}
|
|
79
|
-
else {
|
|
80
|
-
resolve();
|
|
81
|
-
}
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
async close() {
|
|
85
|
-
if (this.backend) {
|
|
86
|
-
this.backend.kill();
|
|
87
|
-
this.backend = null;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* Extract raw PCM data from AudioSample
|
|
92
|
-
*/
|
|
93
|
-
async getSampleData(sample) {
|
|
94
|
-
const numFrames = sample.numberOfFrames;
|
|
95
|
-
const numChannels = sample.numberOfChannels;
|
|
96
|
-
const bufferSize = numFrames * numChannels * 4; // f32 = 4 bytes
|
|
97
|
-
const buffer = Buffer.alloc(bufferSize);
|
|
98
|
-
// Copy data from sample (convert to f32 interleaved if needed)
|
|
99
|
-
const isPlanar = sample.format.endsWith('-planar');
|
|
100
|
-
if (isPlanar) {
|
|
101
|
-
// Planar: interleave channels
|
|
102
|
-
const tempBuffer = new Float32Array(numFrames);
|
|
103
|
-
const view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength);
|
|
104
|
-
for (let ch = 0; ch < numChannels; ch++) {
|
|
105
|
-
sample.copyTo(new Uint8Array(tempBuffer.buffer), {
|
|
106
|
-
planeIndex: ch,
|
|
107
|
-
format: 'f32',
|
|
108
|
-
});
|
|
109
|
-
for (let frame = 0; frame < numFrames; frame++) {
|
|
110
|
-
const offset = (frame * numChannels + ch) * 4;
|
|
111
|
-
view.setFloat32(offset, tempBuffer[frame], true);
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
else {
|
|
116
|
-
// Already interleaved
|
|
117
|
-
sample.copyTo(buffer, { planeIndex: 0, format: 'f32' });
|
|
118
|
-
}
|
|
119
|
-
return buffer;
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* Get the number of samples per frame based on codec
|
|
123
|
-
*/
|
|
124
|
-
getFrameSamples() {
|
|
125
|
-
switch (this.codec) {
|
|
126
|
-
case 'opus':
|
|
127
|
-
return 960;
|
|
128
|
-
case 'aac':
|
|
129
|
-
return 1024;
|
|
130
|
-
case 'mp3':
|
|
131
|
-
return 1152;
|
|
132
|
-
case 'vorbis':
|
|
133
|
-
return 1024;
|
|
134
|
-
case 'flac':
|
|
135
|
-
return 4096;
|
|
136
|
-
default:
|
|
137
|
-
return 1024;
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
/**
|
|
141
|
-
* Emit an encoded packet via Mediabunny callback
|
|
142
|
-
*/
|
|
143
|
-
emitPacket(data) {
|
|
144
|
-
const sampleRate = this.config.sampleRate;
|
|
145
|
-
const frameSamples = this.getFrameSamples();
|
|
146
|
-
const timestampSeconds = this.frameIndex / sampleRate;
|
|
147
|
-
const durationSeconds = frameSamples / sampleRate;
|
|
148
|
-
const packet = new EncodedPacket(new Uint8Array(data), 'key', timestampSeconds, durationSeconds);
|
|
149
|
-
// Build metadata with decoder config
|
|
150
|
-
let meta;
|
|
151
|
-
if (!this.metadataEmitted) {
|
|
152
|
-
if (!this.codecDescription) {
|
|
153
|
-
if (this.codec === 'opus') {
|
|
154
|
-
this.codecDescription = this.buildOpusDescription();
|
|
155
|
-
}
|
|
156
|
-
else if (this.codec === 'aac') {
|
|
157
|
-
this.codecDescription = this.buildAacDescription();
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
meta = {
|
|
161
|
-
decoderConfig: {
|
|
162
|
-
codec: this.getCodecString(),
|
|
163
|
-
sampleRate: this.config.sampleRate,
|
|
164
|
-
numberOfChannels: this.config.numberOfChannels,
|
|
165
|
-
description: this.codecDescription ?? undefined,
|
|
166
|
-
},
|
|
167
|
-
};
|
|
168
|
-
this.metadataEmitted = true;
|
|
169
|
-
}
|
|
170
|
-
this.frameIndex += frameSamples;
|
|
171
|
-
this.onPacket(packet, meta);
|
|
172
|
-
}
|
|
173
|
-
/**
|
|
174
|
-
* Get codec string for the output format
|
|
175
|
-
*/
|
|
176
|
-
getCodecString() {
|
|
177
|
-
switch (this.codec) {
|
|
178
|
-
case 'aac':
|
|
179
|
-
return 'mp4a.40.2';
|
|
180
|
-
case 'opus':
|
|
181
|
-
return 'opus';
|
|
182
|
-
case 'mp3':
|
|
183
|
-
return 'mp3';
|
|
184
|
-
case 'flac':
|
|
185
|
-
return 'flac';
|
|
186
|
-
case 'vorbis':
|
|
187
|
-
return 'vorbis';
|
|
188
|
-
default:
|
|
189
|
-
return this.codec;
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
/**
|
|
193
|
-
* Build Opus identification header for decoder config description
|
|
194
|
-
*/
|
|
195
|
-
buildOpusDescription() {
|
|
196
|
-
const header = Buffer.alloc(19);
|
|
197
|
-
let offset = 0;
|
|
198
|
-
header.write('OpusHead', offset);
|
|
199
|
-
offset += 8;
|
|
200
|
-
header[offset++] = 1;
|
|
201
|
-
header[offset++] = this.config.numberOfChannels;
|
|
202
|
-
header.writeUInt16LE(312, offset);
|
|
203
|
-
offset += 2;
|
|
204
|
-
header.writeUInt32LE(this.config.sampleRate, offset);
|
|
205
|
-
offset += 4;
|
|
206
|
-
header.writeInt16LE(0, offset);
|
|
207
|
-
offset += 2;
|
|
208
|
-
header[offset++] = 0;
|
|
209
|
-
return new Uint8Array(header);
|
|
210
|
-
}
|
|
211
|
-
/**
|
|
212
|
-
* Build AAC AudioSpecificConfig for decoder config description
|
|
213
|
-
*/
|
|
214
|
-
buildAacDescription() {
|
|
215
|
-
return buildAudioSpecificConfig({
|
|
216
|
-
samplingRate: this.config.sampleRate,
|
|
217
|
-
channelConfiguration: this.config.numberOfChannels,
|
|
218
|
-
});
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
//# sourceMappingURL=FFmpegAudioEncoder.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FFmpegAudioEncoder.js","sourceRoot":"","sources":["../../src/mediabunny/FFmpegAudioEncoder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Mediabunny VideoDecoder adapter using node-av backend
|
|
3
|
-
*
|
|
4
|
-
* Implements Mediabunny's CustomVideoDecoder interface using node-av native bindings
|
|
5
|
-
* (which wrap FFmpeg's libav* libraries). Supports hardware acceleration via VAAPI,
|
|
6
|
-
* CUDA/CUVID, QSV.
|
|
7
|
-
*/
|
|
8
|
-
import { CustomVideoDecoder, EncodedPacket, VideoCodec } from 'mediabunny';
|
|
9
|
-
export declare class FFmpegVideoDecoder extends CustomVideoDecoder {
|
|
10
|
-
private backend;
|
|
11
|
-
private frameIndex;
|
|
12
|
-
private resolveFlush;
|
|
13
|
-
private packetTimestamps;
|
|
14
|
-
private packetDurations;
|
|
15
|
-
static supports(codec: VideoCodec, _config: VideoDecoderConfig): boolean;
|
|
16
|
-
init(): Promise<void>;
|
|
17
|
-
decode(packet: EncodedPacket): Promise<void>;
|
|
18
|
-
flush(): Promise<void>;
|
|
19
|
-
close(): Promise<void>;
|
|
20
|
-
/**
|
|
21
|
-
* Emit a decoded VideoSample via Mediabunny callback
|
|
22
|
-
*/
|
|
23
|
-
private emitSample;
|
|
24
|
-
}
|
|
25
|
-
//# sourceMappingURL=FFmpegVideoDecoder.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FFmpegVideoDecoder.d.ts","sourceRoot":"","sources":["../../src/mediabunny/FFmpegVideoDecoder.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,kBAAkB,EAElB,aAAa,EACb,UAAU,EACX,MAAM,YAAY,CAAC;AAapB,qBAAa,kBAAmB,SAAQ,kBAAkB;IACxD,OAAO,CAAC,OAAO,CAAmC;IAClD,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,YAAY,CAA6B;IAEjD,OAAO,CAAC,gBAAgB,CAAgB;IACxC,OAAO,CAAC,eAAe,CAAgB;IAEvC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO;IAIlE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA6CrB,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAa5C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAYtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5B;;OAEG;IACH,OAAO,CAAC,UAAU;CA8BnB"}
|
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Mediabunny VideoDecoder adapter using node-av backend
|
|
3
|
-
*
|
|
4
|
-
* Implements Mediabunny's CustomVideoDecoder interface using node-av native bindings
|
|
5
|
-
* (which wrap FFmpeg's libav* libraries). Supports hardware acceleration via VAAPI,
|
|
6
|
-
* CUDA/CUVID, QSV.
|
|
7
|
-
*/
|
|
8
|
-
import { CustomVideoDecoder, VideoSample, } from 'mediabunny';
|
|
9
|
-
import { NodeAvVideoDecoder } from '../node-av/NodeAvVideoDecoder.js';
|
|
10
|
-
import { toUint8Array } from '../utils/buffer.js';
|
|
11
|
-
// Map Mediabunny codec to internal codec name
|
|
12
|
-
const CODEC_NAME_MAP = {
|
|
13
|
-
avc: 'h264',
|
|
14
|
-
hevc: 'hevc',
|
|
15
|
-
vp8: 'vp8',
|
|
16
|
-
vp9: 'vp9',
|
|
17
|
-
av1: 'av1',
|
|
18
|
-
};
|
|
19
|
-
export class FFmpegVideoDecoder extends CustomVideoDecoder {
|
|
20
|
-
backend = null;
|
|
21
|
-
frameIndex = 0;
|
|
22
|
-
resolveFlush = null;
|
|
23
|
-
// Track input packet timestamps for output frames
|
|
24
|
-
packetTimestamps = [];
|
|
25
|
-
packetDurations = [];
|
|
26
|
-
static supports(codec, _config) {
|
|
27
|
-
return codec in CODEC_NAME_MAP;
|
|
28
|
-
}
|
|
29
|
-
async init() {
|
|
30
|
-
const width = this.config.codedWidth ?? 1920;
|
|
31
|
-
const height = this.config.codedHeight ?? 1080;
|
|
32
|
-
// Hardware acceleration preference from config
|
|
33
|
-
const hwPref = this.config.hardwareAcceleration;
|
|
34
|
-
// Create node-av backend
|
|
35
|
-
this.backend = new NodeAvVideoDecoder();
|
|
36
|
-
const codecName = CODEC_NAME_MAP[this.codec];
|
|
37
|
-
// Convert description to Buffer if present
|
|
38
|
-
let description;
|
|
39
|
-
if (this.config.description) {
|
|
40
|
-
description = Buffer.from(toUint8Array(this.config.description));
|
|
41
|
-
}
|
|
42
|
-
this.backend.startDecoder({
|
|
43
|
-
codec: codecName,
|
|
44
|
-
width,
|
|
45
|
-
height,
|
|
46
|
-
description,
|
|
47
|
-
outputPixelFormat: 'rgba',
|
|
48
|
-
hardwareAcceleration: hwPref,
|
|
49
|
-
});
|
|
50
|
-
// Listen for decoded frames
|
|
51
|
-
this.backend.on('frame', (frameData) => {
|
|
52
|
-
this.emitSample(frameData);
|
|
53
|
-
});
|
|
54
|
-
this.backend.on('error', (err) => {
|
|
55
|
-
console.error('[FFmpegVideoDecoder] Backend error:', err.message);
|
|
56
|
-
});
|
|
57
|
-
this.backend.on('close', () => {
|
|
58
|
-
if (this.resolveFlush) {
|
|
59
|
-
this.resolveFlush();
|
|
60
|
-
this.resolveFlush = null;
|
|
61
|
-
}
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
async decode(packet) {
|
|
65
|
-
if (!this.backend?.isHealthy) {
|
|
66
|
-
throw new Error('Decoder not initialized');
|
|
67
|
-
}
|
|
68
|
-
// Store packet timing info for output frames
|
|
69
|
-
this.packetTimestamps.push(packet.timestamp);
|
|
70
|
-
this.packetDurations.push(packet.duration);
|
|
71
|
-
// Write encoded data to backend
|
|
72
|
-
this.backend.write(Buffer.from(packet.data));
|
|
73
|
-
}
|
|
74
|
-
async flush() {
|
|
75
|
-
return new Promise((resolve) => {
|
|
76
|
-
this.resolveFlush = resolve;
|
|
77
|
-
if (this.backend) {
|
|
78
|
-
this.backend.end();
|
|
79
|
-
}
|
|
80
|
-
else {
|
|
81
|
-
resolve();
|
|
82
|
-
}
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
async close() {
|
|
86
|
-
if (this.backend) {
|
|
87
|
-
this.backend.kill();
|
|
88
|
-
this.backend = null;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Emit a decoded VideoSample via Mediabunny callback
|
|
93
|
-
*/
|
|
94
|
-
emitSample(data) {
|
|
95
|
-
const width = this.config.codedWidth ?? 1920;
|
|
96
|
-
const height = this.config.codedHeight ?? 1080;
|
|
97
|
-
// Use stored timestamp from input packet, or calculate from frame index
|
|
98
|
-
let timestampSeconds;
|
|
99
|
-
let durationSeconds;
|
|
100
|
-
if (this.packetTimestamps.length > 0) {
|
|
101
|
-
timestampSeconds = this.packetTimestamps.shift();
|
|
102
|
-
durationSeconds = this.packetDurations.shift() ?? (1 / 30);
|
|
103
|
-
}
|
|
104
|
-
else {
|
|
105
|
-
// Fallback to calculated timestamp
|
|
106
|
-
const framerate = 30;
|
|
107
|
-
timestampSeconds = this.frameIndex / framerate;
|
|
108
|
-
durationSeconds = 1 / framerate;
|
|
109
|
-
}
|
|
110
|
-
// Create VideoSample from raw pixel data
|
|
111
|
-
const sample = new VideoSample(new Uint8Array(data), {
|
|
112
|
-
format: 'RGBA',
|
|
113
|
-
codedWidth: width,
|
|
114
|
-
codedHeight: height,
|
|
115
|
-
timestamp: timestampSeconds,
|
|
116
|
-
duration: durationSeconds,
|
|
117
|
-
});
|
|
118
|
-
this.frameIndex++;
|
|
119
|
-
this.onSample(sample);
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
//# sourceMappingURL=FFmpegVideoDecoder.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FFmpegVideoDecoder.js","sourceRoot":"","sources":["../../src/mediabunny/FFmpegVideoDecoder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Mediabunny VideoEncoder adapter using node-av backend
|
|
3
|
-
*
|
|
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.
|
|
7
|
-
*/
|
|
8
|
-
import { CustomVideoEncoder, VideoSample, VideoCodec } from 'mediabunny';
|
|
9
|
-
export declare class FFmpegVideoEncoder extends CustomVideoEncoder {
|
|
10
|
-
private backend;
|
|
11
|
-
private frameIndex;
|
|
12
|
-
private codecDescription;
|
|
13
|
-
private metadataEmitted;
|
|
14
|
-
private bitstreamFormat;
|
|
15
|
-
private useAnnexB;
|
|
16
|
-
private resolveFlush;
|
|
17
|
-
private pendingPackets;
|
|
18
|
-
static supports(codec: VideoCodec, _config: VideoEncoderConfig): boolean;
|
|
19
|
-
init(): Promise<void>;
|
|
20
|
-
encode(videoSample: VideoSample, _options: {
|
|
21
|
-
keyFrame?: boolean;
|
|
22
|
-
}): Promise<void>;
|
|
23
|
-
flush(): Promise<void>;
|
|
24
|
-
close(): Promise<void>;
|
|
25
|
-
private processPackets;
|
|
26
|
-
/**
|
|
27
|
-
* Extract raw RGBA pixel data from VideoSample
|
|
28
|
-
*/
|
|
29
|
-
private getFrameData;
|
|
30
|
-
/**
|
|
31
|
-
* Find all Annex B start codes in buffer
|
|
32
|
-
*/
|
|
33
|
-
private findStartCodes;
|
|
34
|
-
/**
|
|
35
|
-
* Get NAL unit type from first byte after start code
|
|
36
|
-
*/
|
|
37
|
-
private getNalType;
|
|
38
|
-
/**
|
|
39
|
-
* Emit an encoded packet via Mediabunny callback
|
|
40
|
-
*/
|
|
41
|
-
private emitPacket;
|
|
42
|
-
/**
|
|
43
|
-
* Get codec string for the output format
|
|
44
|
-
*/
|
|
45
|
-
private getCodecString;
|
|
46
|
-
private buildCodecDescription;
|
|
47
|
-
private convertAnnexBFrame;
|
|
48
|
-
}
|
|
49
|
-
//# sourceMappingURL=FFmpegVideoEncoder.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FFmpegVideoEncoder.d.ts","sourceRoot":"","sources":["../../src/mediabunny/FFmpegVideoEncoder.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,kBAAkB,EAClB,WAAW,EAEX,UAAU,EACX,MAAM,YAAY,CAAC;AAsBpB,qBAAa,kBAAmB,SAAQ,kBAAkB;IACxD,OAAO,CAAC,OAAO,CAAmC;IAClD,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,gBAAgB,CAA2B;IACnD,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,eAAe,CAA8B;IACrD,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,cAAc,CAAqE;IAE3F,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO;IAIlE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAsDrB,MAAM,CAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAUjF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAYtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5B,OAAO,CAAC,cAAc;IAOtB;;OAEG;YACW,YAAY;IAkC1B;;OAEG;IACH,OAAO,CAAC,cAAc;IAuBtB;;OAEG;IACH,OAAO,CAAC,UAAU;IAQlB;;OAEG;IACH,OAAO,CAAC,UAAU;IA0ClB;;OAEG;IACH,OAAO,CAAC,cAAc;IAsBtB,OAAO,CAAC,qBAAqB;IAsB7B,OAAO,CAAC,kBAAkB;CAU3B"}
|