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.
Files changed (246) hide show
  1. package/README.md +4 -0
  2. package/dist/__tests__/AudioData.test.js +2 -1
  3. package/dist/__tests__/AudioData.test.js.map +1 -1
  4. package/dist/__tests__/AudioDecoder.test.js +8 -8
  5. package/dist/__tests__/AudioDecoder.test.js.map +1 -1
  6. package/dist/__tests__/AudioEncoder.test.js +3 -3
  7. package/dist/__tests__/AudioEncoder.test.js.map +1 -1
  8. package/dist/__tests__/EncodedChunks.test.js +3 -2
  9. package/dist/__tests__/EncodedChunks.test.js.map +1 -1
  10. package/dist/__tests__/HardwareAcceleration.test.js +2 -1
  11. package/dist/__tests__/HardwareAcceleration.test.js.map +1 -1
  12. package/dist/__tests__/ImageDecoder.test.js +16 -45
  13. package/dist/__tests__/ImageDecoder.test.js.map +1 -1
  14. package/dist/__tests__/ImageDecoder.wpt.test.d.ts +8 -0
  15. package/dist/__tests__/ImageDecoder.wpt.test.d.ts.map +1 -0
  16. package/dist/__tests__/ImageDecoder.wpt.test.js +135 -0
  17. package/dist/__tests__/ImageDecoder.wpt.test.js.map +1 -0
  18. package/dist/__tests__/NodeAvDecoder.test.d.ts +2 -0
  19. package/dist/__tests__/NodeAvDecoder.test.d.ts.map +1 -0
  20. package/dist/__tests__/NodeAvDecoder.test.js +206 -0
  21. package/dist/__tests__/NodeAvDecoder.test.js.map +1 -0
  22. package/dist/__tests__/NodeAvEncoder.test.d.ts +2 -0
  23. package/dist/__tests__/NodeAvEncoder.test.d.ts.map +1 -0
  24. package/dist/__tests__/NodeAvEncoder.test.js +176 -0
  25. package/dist/__tests__/NodeAvEncoder.test.js.map +1 -0
  26. package/dist/__tests__/VideoDecoder.test.js +5 -5
  27. package/dist/__tests__/VideoDecoder.test.js.map +1 -1
  28. package/dist/__tests__/VideoEncoder.test.js +3 -3
  29. package/dist/__tests__/VideoEncoder.test.js.map +1 -1
  30. package/dist/__tests__/VideoFrame.test.js +4 -1
  31. package/dist/__tests__/VideoFrame.test.js.map +1 -1
  32. package/dist/backends/index.d.ts +3 -0
  33. package/dist/backends/index.d.ts.map +1 -0
  34. package/dist/backends/index.js +2 -0
  35. package/dist/backends/index.js.map +1 -0
  36. package/dist/backends/types.d.ts +168 -0
  37. package/dist/backends/types.d.ts.map +1 -0
  38. package/dist/backends/types.js +25 -0
  39. package/dist/backends/types.js.map +1 -0
  40. package/dist/codec-utils/audio-codecs.d.ts +60 -0
  41. package/dist/codec-utils/audio-codecs.d.ts.map +1 -0
  42. package/dist/codec-utils/audio-codecs.js +117 -0
  43. package/dist/codec-utils/audio-codecs.js.map +1 -0
  44. package/dist/codec-utils/formats.d.ts +42 -0
  45. package/dist/codec-utils/formats.d.ts.map +1 -0
  46. package/dist/codec-utils/formats.js +147 -0
  47. package/dist/codec-utils/formats.js.map +1 -0
  48. package/dist/codec-utils/index.d.ts +9 -0
  49. package/dist/codec-utils/index.d.ts.map +1 -0
  50. package/dist/codec-utils/index.js +12 -0
  51. package/dist/codec-utils/index.js.map +1 -0
  52. package/dist/codec-utils/types.d.ts +87 -0
  53. package/dist/codec-utils/types.d.ts.map +1 -0
  54. package/dist/codec-utils/types.js +10 -0
  55. package/dist/codec-utils/types.js.map +1 -0
  56. package/dist/containers/Demuxer.d.ts +114 -0
  57. package/dist/containers/Demuxer.d.ts.map +1 -0
  58. package/dist/containers/Demuxer.js +256 -0
  59. package/dist/containers/Demuxer.js.map +1 -0
  60. package/dist/containers/Muxer.d.ts +142 -0
  61. package/dist/containers/Muxer.d.ts.map +1 -0
  62. package/dist/containers/Muxer.js +295 -0
  63. package/dist/containers/Muxer.js.map +1 -0
  64. package/dist/containers/extract.d.ts +25 -0
  65. package/dist/containers/extract.d.ts.map +1 -0
  66. package/dist/containers/extract.js +64 -0
  67. package/dist/containers/extract.js.map +1 -0
  68. package/dist/containers/index.d.ts +40 -0
  69. package/dist/containers/index.d.ts.map +1 -0
  70. package/dist/containers/index.js +41 -0
  71. package/dist/containers/index.js.map +1 -0
  72. package/dist/containers/transcode.d.ts +138 -0
  73. package/dist/containers/transcode.d.ts.map +1 -0
  74. package/dist/containers/transcode.js +536 -0
  75. package/dist/containers/transcode.js.map +1 -0
  76. package/dist/core/AudioData.d.ts +5 -1
  77. package/dist/core/AudioData.d.ts.map +1 -1
  78. package/dist/core/AudioData.js +69 -13
  79. package/dist/core/AudioData.js.map +1 -1
  80. package/dist/core/EncodedAudioChunk.d.ts +1 -1
  81. package/dist/core/EncodedAudioChunk.d.ts.map +1 -1
  82. package/dist/core/EncodedAudioChunk.js +1 -1
  83. package/dist/core/EncodedAudioChunk.js.map +1 -1
  84. package/dist/core/EncodedVideoChunk.d.ts.map +1 -1
  85. package/dist/core/EncodedVideoChunk.js +3 -19
  86. package/dist/core/EncodedVideoChunk.js.map +1 -1
  87. package/dist/core/VideoFrame.d.ts +31 -11
  88. package/dist/core/VideoFrame.d.ts.map +1 -1
  89. package/dist/core/VideoFrame.js +244 -81
  90. package/dist/core/VideoFrame.js.map +1 -1
  91. package/dist/decoders/AudioDecoder.d.ts +14 -12
  92. package/dist/decoders/AudioDecoder.d.ts.map +1 -1
  93. package/dist/decoders/AudioDecoder.js +113 -173
  94. package/dist/decoders/AudioDecoder.js.map +1 -1
  95. package/dist/decoders/ImageDecoder.d.ts +1 -3
  96. package/dist/decoders/ImageDecoder.d.ts.map +1 -1
  97. package/dist/decoders/ImageDecoder.js +39 -192
  98. package/dist/decoders/ImageDecoder.js.map +1 -1
  99. package/dist/decoders/VideoDecoder.d.ts +14 -13
  100. package/dist/decoders/VideoDecoder.d.ts.map +1 -1
  101. package/dist/decoders/VideoDecoder.js +115 -166
  102. package/dist/decoders/VideoDecoder.js.map +1 -1
  103. package/dist/demos/demo-1080p-transcode.d.ts +8 -0
  104. package/dist/demos/demo-1080p-transcode.d.ts.map +1 -0
  105. package/dist/demos/demo-1080p-transcode.js +188 -0
  106. package/dist/demos/demo-1080p-transcode.js.map +1 -0
  107. package/dist/demos/demo-containers.d.ts +7 -0
  108. package/dist/demos/demo-containers.d.ts.map +1 -0
  109. package/dist/demos/demo-containers.js +140 -0
  110. package/dist/demos/demo-containers.js.map +1 -0
  111. package/dist/demos/demo-conversion.js +2 -2
  112. package/dist/demos/demo-conversion.js.map +1 -1
  113. package/dist/demos/demo-four-corners.d.ts +6 -0
  114. package/dist/demos/demo-four-corners.d.ts.map +1 -0
  115. package/dist/demos/demo-four-corners.js +218 -0
  116. package/dist/demos/demo-four-corners.js.map +1 -0
  117. package/dist/demos/demo-hwaccel-conversion.js +1 -1
  118. package/dist/demos/demo-hwaccel-conversion.js.map +1 -1
  119. package/dist/demos/demo-hwaccel.js +1 -1
  120. package/dist/demos/demo-hwaccel.js.map +1 -1
  121. package/dist/demos/demo-samples.js +232 -68
  122. package/dist/demos/demo-samples.js.map +1 -1
  123. package/dist/demos/demo-streaming.js +6 -6
  124. package/dist/demos/demo-streaming.js.map +1 -1
  125. package/dist/encoders/AudioEncoder.d.ts +14 -13
  126. package/dist/encoders/AudioEncoder.d.ts.map +1 -1
  127. package/dist/encoders/AudioEncoder.js +138 -228
  128. package/dist/encoders/AudioEncoder.js.map +1 -1
  129. package/dist/encoders/VideoEncoder.d.ts +13 -14
  130. package/dist/encoders/VideoEncoder.d.ts.map +1 -1
  131. package/dist/encoders/VideoEncoder.js +92 -161
  132. package/dist/encoders/VideoEncoder.js.map +1 -1
  133. package/dist/ffmpeg/index.d.ts +3 -2
  134. package/dist/ffmpeg/index.d.ts.map +1 -1
  135. package/dist/ffmpeg/index.js +3 -3
  136. package/dist/ffmpeg/index.js.map +1 -1
  137. package/dist/formats/conversions/batch-converter.d.ts +61 -0
  138. package/dist/formats/conversions/batch-converter.d.ts.map +1 -0
  139. package/dist/formats/conversions/batch-converter.js +274 -0
  140. package/dist/formats/conversions/batch-converter.js.map +1 -0
  141. package/dist/formats/conversions/frame-converter.d.ts +17 -0
  142. package/dist/formats/conversions/frame-converter.d.ts.map +1 -1
  143. package/dist/formats/conversions/frame-converter.js +144 -10
  144. package/dist/formats/conversions/frame-converter.js.map +1 -1
  145. package/dist/formats/conversions/index.d.ts +2 -0
  146. package/dist/formats/conversions/index.d.ts.map +1 -1
  147. package/dist/formats/conversions/index.js +4 -0
  148. package/dist/formats/conversions/index.js.map +1 -1
  149. package/dist/hardware/decoder-args.d.ts +2 -7
  150. package/dist/hardware/decoder-args.d.ts.map +1 -1
  151. package/dist/hardware/decoder-args.js +2 -32
  152. package/dist/hardware/decoder-args.js.map +1 -1
  153. package/dist/hardware/detection.d.ts +1 -1
  154. package/dist/hardware/detection.d.ts.map +1 -1
  155. package/dist/hardware/detection.js +54 -27
  156. package/dist/hardware/detection.js.map +1 -1
  157. package/dist/hardware/encoder-args.d.ts +2 -11
  158. package/dist/hardware/encoder-args.d.ts.map +1 -1
  159. package/dist/hardware/encoder-args.js +2 -71
  160. package/dist/hardware/encoder-args.js.map +1 -1
  161. package/dist/hardware/index.d.ts +2 -2
  162. package/dist/hardware/index.d.ts.map +1 -1
  163. package/dist/hardware/index.js +2 -2
  164. package/dist/hardware/index.js.map +1 -1
  165. package/dist/index.d.ts +5 -7
  166. package/dist/index.d.ts.map +1 -1
  167. package/dist/index.js +5 -6
  168. package/dist/index.js.map +1 -1
  169. package/dist/mediabunny/FFmpegAudioDecoder.d.ts +4 -17
  170. package/dist/mediabunny/FFmpegAudioDecoder.d.ts.map +1 -1
  171. package/dist/mediabunny/FFmpegAudioDecoder.js +57 -185
  172. package/dist/mediabunny/FFmpegAudioDecoder.js.map +1 -1
  173. package/dist/mediabunny/FFmpegAudioEncoder.d.ts +6 -39
  174. package/dist/mediabunny/FFmpegAudioEncoder.d.ts.map +1 -1
  175. package/dist/mediabunny/FFmpegAudioEncoder.js +66 -329
  176. package/dist/mediabunny/FFmpegAudioEncoder.js.map +1 -1
  177. package/dist/mediabunny/FFmpegVideoDecoder.d.ts +5 -38
  178. package/dist/mediabunny/FFmpegVideoDecoder.d.ts.map +1 -1
  179. package/dist/mediabunny/FFmpegVideoDecoder.js +39 -283
  180. package/dist/mediabunny/FFmpegVideoDecoder.js.map +1 -1
  181. package/dist/mediabunny/FFmpegVideoEncoder.d.ts +9 -37
  182. package/dist/mediabunny/FFmpegVideoEncoder.d.ts.map +1 -1
  183. package/dist/mediabunny/FFmpegVideoEncoder.js +49 -336
  184. package/dist/mediabunny/FFmpegVideoEncoder.js.map +1 -1
  185. package/dist/node-av/HardwarePipeline.d.ts +36 -0
  186. package/dist/node-av/HardwarePipeline.d.ts.map +1 -0
  187. package/dist/node-av/HardwarePipeline.js +243 -0
  188. package/dist/node-av/HardwarePipeline.js.map +1 -0
  189. package/dist/node-av/NodeAvAudioDecoder.d.ts +46 -0
  190. package/dist/node-av/NodeAvAudioDecoder.d.ts.map +1 -0
  191. package/dist/node-av/NodeAvAudioDecoder.js +350 -0
  192. package/dist/node-av/NodeAvAudioDecoder.js.map +1 -0
  193. package/dist/node-av/NodeAvAudioEncoder.d.ts +50 -0
  194. package/dist/node-av/NodeAvAudioEncoder.d.ts.map +1 -0
  195. package/dist/node-av/NodeAvAudioEncoder.js +506 -0
  196. package/dist/node-av/NodeAvAudioEncoder.js.map +1 -0
  197. package/dist/node-av/NodeAvImageDecoder.d.ts +114 -0
  198. package/dist/node-av/NodeAvImageDecoder.d.ts.map +1 -0
  199. package/dist/node-av/NodeAvImageDecoder.js +406 -0
  200. package/dist/node-av/NodeAvImageDecoder.js.map +1 -0
  201. package/dist/node-av/NodeAvVideoDecoder.d.ts +43 -0
  202. package/dist/node-av/NodeAvVideoDecoder.d.ts.map +1 -0
  203. package/dist/node-av/NodeAvVideoDecoder.js +365 -0
  204. package/dist/node-av/NodeAvVideoDecoder.js.map +1 -0
  205. package/dist/node-av/NodeAvVideoEncoder.d.ts +56 -0
  206. package/dist/node-av/NodeAvVideoEncoder.d.ts.map +1 -0
  207. package/dist/node-av/NodeAvVideoEncoder.js +509 -0
  208. package/dist/node-av/NodeAvVideoEncoder.js.map +1 -0
  209. package/dist/polyfill.d.ts.map +1 -1
  210. package/dist/polyfill.js +11 -9
  211. package/dist/polyfill.js.map +1 -1
  212. package/dist/utils/aac.d.ts.map +1 -1
  213. package/dist/utils/aac.js +6 -0
  214. package/dist/utils/aac.js.map +1 -1
  215. package/dist/utils/buffer-pool.d.ts +109 -0
  216. package/dist/utils/buffer-pool.d.ts.map +1 -0
  217. package/dist/utils/buffer-pool.js +278 -0
  218. package/dist/utils/buffer-pool.js.map +1 -0
  219. package/dist/utils/codec-cache.d.ts +65 -0
  220. package/dist/utils/codec-cache.d.ts.map +1 -0
  221. package/dist/utils/codec-cache.js +116 -0
  222. package/dist/utils/codec-cache.js.map +1 -0
  223. package/dist/utils/errors.d.ts +62 -0
  224. package/dist/utils/errors.d.ts.map +1 -0
  225. package/dist/utils/errors.js +84 -0
  226. package/dist/utils/errors.js.map +1 -0
  227. package/dist/utils/event-target.d.ts +42 -0
  228. package/dist/utils/event-target.d.ts.map +1 -0
  229. package/dist/utils/event-target.js +96 -0
  230. package/dist/utils/event-target.js.map +1 -0
  231. package/dist/utils/hardware-pool.d.ts +88 -0
  232. package/dist/utils/hardware-pool.d.ts.map +1 -0
  233. package/dist/utils/hardware-pool.js +266 -0
  234. package/dist/utils/hardware-pool.js.map +1 -0
  235. package/dist/utils/index.d.ts +6 -0
  236. package/dist/utils/index.d.ts.map +1 -1
  237. package/dist/utils/index.js +12 -0
  238. package/dist/utils/index.js.map +1 -1
  239. package/dist/utils/timeout.d.ts +44 -0
  240. package/dist/utils/timeout.d.ts.map +1 -0
  241. package/dist/utils/timeout.js +73 -0
  242. package/dist/utils/timeout.js.map +1 -0
  243. package/dist/utils/type-guards.d.ts +11 -1
  244. package/dist/utils/type-guards.d.ts.map +1 -1
  245. package/dist/utils/type-guards.js.map +1 -1
  246. package/package.json +20 -34
@@ -1,21 +1,14 @@
1
1
  /**
2
- * FFmpeg-backed VideoDecoder for Mediabunny
2
+ * Mediabunny VideoDecoder adapter using node-av backend
3
3
  *
4
- * Implements Mediabunny's CustomVideoDecoder interface using FFmpeg child process.
5
- * Supports hardware acceleration via VAAPI, CUDA/CUVID, QSV.
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.
6
7
  */
7
- import { spawn } from 'child_process';
8
8
  import { CustomVideoDecoder, VideoSample, } from 'mediabunny';
9
- import { getBestDecoder, } from '../HardwareAcceleration.js';
10
- // Container format for each codec (for decoder input)
11
- const FORMAT_MAP = {
12
- avc: 'h264',
13
- hevc: 'hevc',
14
- vp8: 'ivf',
15
- vp9: 'ivf',
16
- av1: 'ivf',
17
- };
18
- // Map Mediabunny codec to VideoCodecName
9
+ import { NodeAvVideoDecoder } from '../node-av/NodeAvVideoDecoder.js';
10
+ import { toUint8Array } from '../utils/buffer.js';
11
+ // Map Mediabunny codec to internal codec name
19
12
  const CODEC_NAME_MAP = {
20
13
  avc: 'h264',
21
14
  hevc: 'hevc',
@@ -24,255 +17,65 @@ const CODEC_NAME_MAP = {
24
17
  av1: 'av1',
25
18
  };
26
19
  export class FFmpegVideoDecoder extends CustomVideoDecoder {
27
- process = null;
28
- accumulatedData = Buffer.alloc(0);
29
- frameSize = 0;
20
+ backend = null;
30
21
  frameIndex = 0;
31
- ivfHeaderSent = false;
32
22
  resolveFlush = null;
33
- useIvf = false;
34
- useAnnexB = false;
35
- nalLengthSize = 4; // Default AVC NAL length size
36
- spsNal = null;
37
- ppsNal = null;
38
- paramsSent = false;
39
23
  // Track input packet timestamps for output frames
40
24
  packetTimestamps = [];
41
25
  packetDurations = [];
42
- usingHardwareAcceleration = false;
43
- hwaccelMethod = null;
44
26
  static supports(codec, _config) {
45
- return codec in FORMAT_MAP;
27
+ return codec in CODEC_NAME_MAP;
46
28
  }
47
29
  async init() {
48
- const format = FORMAT_MAP[this.codec];
49
- this.useIvf = format === 'ivf';
50
- this.useAnnexB = format === 'h264' || format === 'hevc';
51
30
  const width = this.config.codedWidth ?? 1920;
52
31
  const height = this.config.codedHeight ?? 1080;
53
- this.frameSize = width * height * 4; // RGBA output
54
- // Parse AVC decoder config to get SPS/PPS
55
- if (this.useAnnexB && this.config.description) {
56
- this.parseAvcDecoderConfig(this.config.description);
57
- }
58
- // Determine hardware acceleration preference from config
59
- // Default to 'no-preference' which uses software for better compatibility
60
- // Hardware decoding with pipe input can have issues with format conversion
32
+ // Hardware acceleration preference from config
61
33
  const hwPref = this.config.hardwareAcceleration;
62
- // Try to get hardware-accelerated decoder only if explicitly requested
34
+ // Create node-av backend
35
+ this.backend = new NodeAvVideoDecoder();
63
36
  const codecName = CODEC_NAME_MAP[this.codec];
64
- let hwDecoder = null;
65
- if (hwPref === 'prefer-hardware' && codecName) {
66
- try {
67
- const best = await getBestDecoder(codecName, hwPref);
68
- hwDecoder = best.decoder;
69
- this.usingHardwareAcceleration = best.isHardware;
70
- this.hwaccelMethod = best.hwaccel;
71
- if (best.isHardware) {
72
- console.log(`[FFmpegVideoDecoder] Using hardware decoder: ${best.decoder || best.hwaccel}`);
73
- }
74
- }
75
- catch {
76
- // Fall back to software
77
- }
78
- }
79
- const args = [
80
- '-hide_banner',
81
- '-loglevel', 'error',
82
- ];
83
- // Add hardware acceleration options
84
- if (this.hwaccelMethod === 'vaapi') {
85
- args.push('-hwaccel', 'vaapi');
86
- args.push('-vaapi_device', '/dev/dri/renderD128');
87
- }
88
- else if (this.hwaccelMethod === 'cuda') {
89
- args.push('-hwaccel', 'cuda');
90
- if (hwDecoder) {
91
- args.push('-c:v', hwDecoder);
92
- }
93
- }
94
- else if (this.hwaccelMethod === 'qsv') {
95
- args.push('-hwaccel', 'qsv');
96
- if (hwDecoder) {
97
- args.push('-c:v', hwDecoder);
98
- }
99
- }
100
- // Input from pipe
101
- args.push('-f', format);
102
- args.push('-i', 'pipe:0');
103
- // Output raw video - need hwdownload for hardware frames
104
- // VAAPI outputs nv12, so we need to download and convert to rgba
105
- if (this.hwaccelMethod === 'vaapi') {
106
- args.push('-vf', 'hwdownload,format=nv12,format=rgba');
107
- }
108
- else if (this.hwaccelMethod === 'cuda') {
109
- args.push('-vf', 'hwdownload,format=nv12,format=rgba');
110
- }
111
- else if (this.hwaccelMethod === 'qsv') {
112
- args.push('-vf', 'hwdownload,format=nv12,format=rgba');
113
- }
114
- args.push('-vsync', 'passthrough', '-f', 'rawvideo', '-pix_fmt', 'rgba', 'pipe:1');
115
- this.process = spawn('ffmpeg', args, {
116
- stdio: ['pipe', 'pipe', 'pipe'],
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,
117
49
  });
118
- this.process.stdout?.on('data', (data) => {
119
- this.accumulatedData = Buffer.concat([this.accumulatedData, data]);
120
- // Emit complete frames
121
- while (this.accumulatedData.length >= this.frameSize) {
122
- const frameData = this.accumulatedData.subarray(0, this.frameSize);
123
- this.accumulatedData = this.accumulatedData.subarray(this.frameSize);
124
- this.emitSample(frameData);
125
- }
50
+ // Listen for decoded frames
51
+ this.backend.on('frame', (frameData) => {
52
+ this.emitSample(frameData);
126
53
  });
127
- this.process.stderr?.on('data', (data) => {
128
- console.error('FFmpeg decoder error:', data.toString());
54
+ this.backend.on('error', (err) => {
55
+ console.error('[FFmpegVideoDecoder] Backend error:', err.message);
129
56
  });
130
- this.process.on('close', () => {
57
+ this.backend.on('close', () => {
131
58
  if (this.resolveFlush) {
132
59
  this.resolveFlush();
133
60
  this.resolveFlush = null;
134
61
  }
135
62
  });
136
- this.process.stdin?.on('error', () => {
137
- // Ignore EPIPE errors
138
- });
139
63
  }
140
64
  async decode(packet) {
141
- if (!this.process?.stdin?.writable) {
65
+ if (!this.backend?.isHealthy) {
142
66
  throw new Error('Decoder not initialized');
143
67
  }
144
68
  // Store packet timing info for output frames
145
69
  this.packetTimestamps.push(packet.timestamp);
146
70
  this.packetDurations.push(packet.duration);
147
- if (this.useIvf) {
148
- // Wrap packet data in IVF framing
149
- this.writeIvfFrame(packet.data, this.frameIndex++);
150
- }
151
- else if (this.useAnnexB) {
152
- // Convert AVC/AVCC format to Annex B and write
153
- this.writeAnnexBFrame(packet.data, packet.type === 'key');
154
- this.frameIndex++;
155
- }
156
- else {
157
- // Write raw encoded data
158
- this.process.stdin.write(Buffer.from(packet.data));
159
- }
160
- }
161
- /**
162
- * Parse AVCDecoderConfigurationRecord from config.description
163
- * This extracts SPS and PPS NAL units needed for Annex B stream
164
- */
165
- parseAvcDecoderConfig(description) {
166
- let data;
167
- if (description instanceof ArrayBuffer) {
168
- data = Buffer.from(description);
169
- }
170
- else if (ArrayBuffer.isView(description)) {
171
- data = Buffer.from(description.buffer, description.byteOffset, description.byteLength);
172
- }
173
- else {
174
- return;
175
- }
176
- if (data.length < 7)
177
- return;
178
- // AVCDecoderConfigurationRecord structure:
179
- // configurationVersion (1 byte)
180
- // AVCProfileIndication (1 byte)
181
- // profile_compatibility (1 byte)
182
- // AVCLevelIndication (1 byte)
183
- // lengthSizeMinusOne (1 byte, lower 2 bits) -> NAL length size
184
- // numOfSequenceParameterSets (1 byte, lower 5 bits)
185
- // SPS entries...
186
- // numOfPictureParameterSets (1 byte)
187
- // PPS entries...
188
- this.nalLengthSize = (data[4] & 0x03) + 1;
189
- let offset = 5;
190
- // Parse SPS
191
- const numSps = data[offset] & 0x1f;
192
- offset++;
193
- for (let i = 0; i < numSps; i++) {
194
- if (offset + 2 > data.length)
195
- break;
196
- const spsLength = data.readUInt16BE(offset);
197
- offset += 2;
198
- if (offset + spsLength > data.length)
199
- break;
200
- this.spsNal = data.subarray(offset, offset + spsLength);
201
- offset += spsLength;
202
- }
203
- // Parse PPS
204
- if (offset >= data.length)
205
- return;
206
- const numPps = data[offset];
207
- offset++;
208
- for (let i = 0; i < numPps; i++) {
209
- if (offset + 2 > data.length)
210
- break;
211
- const ppsLength = data.readUInt16BE(offset);
212
- offset += 2;
213
- if (offset + ppsLength > data.length)
214
- break;
215
- this.ppsNal = data.subarray(offset, offset + ppsLength);
216
- offset += ppsLength;
217
- }
218
- }
219
- /**
220
- * Convert AVC/AVCC format packet to Annex B and write to FFmpeg
221
- * AVC format: [length][NAL][length][NAL]...
222
- * Annex B: [start code][NAL][start code][NAL]...
223
- */
224
- writeAnnexBFrame(data, isKeyFrame) {
225
- if (!this.process?.stdin)
226
- return;
227
- const buf = Buffer.from(data);
228
- const startCode = Buffer.from([0x00, 0x00, 0x00, 0x01]);
229
- // For keyframes, prepend SPS and PPS
230
- if (isKeyFrame && !this.paramsSent && this.spsNal && this.ppsNal) {
231
- this.process.stdin.write(startCode);
232
- this.process.stdin.write(this.spsNal);
233
- this.process.stdin.write(startCode);
234
- this.process.stdin.write(this.ppsNal);
235
- this.paramsSent = true;
236
- }
237
- // Check if data is already in Annex B format (starts with 0x00 0x00 0x01)
238
- if (this.isAnnexBFormat(buf)) {
239
- this.process.stdin.write(buf);
240
- return;
241
- }
242
- // Convert AVC format to Annex B
243
- let offset = 0;
244
- while (offset + this.nalLengthSize <= buf.length) {
245
- // Read NAL length
246
- let nalLength = 0;
247
- for (let i = 0; i < this.nalLengthSize; i++) {
248
- nalLength = (nalLength << 8) | buf[offset + i];
249
- }
250
- offset += this.nalLengthSize;
251
- if (offset + nalLength > buf.length) {
252
- console.error('Invalid NAL length in AVC data');
253
- break;
254
- }
255
- // Write start code + NAL data
256
- this.process.stdin.write(startCode);
257
- this.process.stdin.write(buf.subarray(offset, offset + nalLength));
258
- offset += nalLength;
259
- }
260
- }
261
- /**
262
- * Check if buffer is already in Annex B format
263
- */
264
- isAnnexBFormat(buf) {
265
- if (buf.length < 4)
266
- return false;
267
- // Check for 3-byte or 4-byte start code
268
- return ((buf[0] === 0 && buf[1] === 0 && buf[2] === 1) ||
269
- (buf[0] === 0 && buf[1] === 0 && buf[2] === 0 && buf[3] === 1));
71
+ // Write encoded data to backend
72
+ this.backend.write(Buffer.from(packet.data));
270
73
  }
271
74
  async flush() {
272
75
  return new Promise((resolve) => {
273
76
  this.resolveFlush = resolve;
274
- if (this.process?.stdin) {
275
- this.process.stdin.end();
77
+ if (this.backend) {
78
+ this.backend.end();
276
79
  }
277
80
  else {
278
81
  resolve();
@@ -280,56 +83,10 @@ export class FFmpegVideoDecoder extends CustomVideoDecoder {
280
83
  });
281
84
  }
282
85
  async close() {
283
- if (this.process) {
284
- this.process.kill('SIGTERM');
285
- this.process = null;
286
- }
287
- }
288
- /**
289
- * Write IVF file header (32 bytes)
290
- */
291
- writeIvfHeader() {
292
- if (!this.process?.stdin)
293
- return;
294
- const width = this.config.codedWidth ?? 1920;
295
- const height = this.config.codedHeight ?? 1080;
296
- const header = Buffer.alloc(32);
297
- header.write('DKIF', 0);
298
- header.writeUInt16LE(0, 4); // Version
299
- header.writeUInt16LE(32, 6); // Header length
300
- // FourCC based on codec
301
- if (this.codec === 'vp8') {
302
- header.write('VP80', 8);
303
- }
304
- else if (this.codec === 'vp9') {
305
- header.write('VP90', 8);
306
- }
307
- else if (this.codec === 'av1') {
308
- header.write('AV01', 8);
309
- }
310
- header.writeUInt16LE(width, 12);
311
- header.writeUInt16LE(height, 14);
312
- header.writeUInt32LE(30, 16); // Framerate
313
- header.writeUInt32LE(1, 20); // Timebase
314
- header.writeUInt32LE(0, 24); // Frame count (unknown)
315
- header.writeUInt32LE(0, 28); // Unused
316
- this.process.stdin.write(header);
317
- this.ivfHeaderSent = true;
318
- }
319
- /**
320
- * Write an IVF frame (12-byte header + data)
321
- */
322
- writeIvfFrame(data, frameIndex) {
323
- if (!this.process?.stdin)
324
- return;
325
- if (!this.ivfHeaderSent) {
326
- this.writeIvfHeader();
86
+ if (this.backend) {
87
+ this.backend.kill();
88
+ this.backend = null;
327
89
  }
328
- const frameHeader = Buffer.alloc(12);
329
- frameHeader.writeUInt32LE(data.length, 0);
330
- frameHeader.writeBigUInt64LE(BigInt(frameIndex), 4);
331
- this.process.stdin.write(frameHeader);
332
- this.process.stdin.write(Buffer.from(data));
333
90
  }
334
91
  /**
335
92
  * Emit a decoded VideoSample via Mediabunny callback
@@ -350,8 +107,7 @@ export class FFmpegVideoDecoder extends CustomVideoDecoder {
350
107
  timestampSeconds = this.frameIndex / framerate;
351
108
  durationSeconds = 1 / framerate;
352
109
  }
353
- // Create VideoSample from raw pixel data (Uint8Array)
354
- // Mediabunny accepts AllowSharedBufferSource with format/dimensions/timestamp
110
+ // Create VideoSample from raw pixel data
355
111
  const sample = new VideoSample(new Uint8Array(data), {
356
112
  format: 'RGBA',
357
113
  codedWidth: width,
@@ -1 +1 @@
1
- {"version":3,"file":"FFmpegVideoDecoder.js","sourceRoot":"","sources":["../../src/mediabunny/FFmpegVideoDecoder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FFmpegVideoDecoder.js","sourceRoot":"","sources":["../../src/mediabunny/FFmpegVideoDecoder.ts"],"names":[],"mappings":"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"}
@@ -1,23 +1,20 @@
1
1
  /**
2
- * FFmpeg-backed VideoEncoder for Mediabunny
2
+ * Mediabunny VideoEncoder adapter using node-av backend
3
3
  *
4
- * Implements Mediabunny's CustomVideoEncoder interface using FFmpeg child process.
5
- * Supports hardware acceleration via VAAPI, NVENC, QSV, VideoToolbox.
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
8
  import { CustomVideoEncoder, VideoSample, VideoCodec } from 'mediabunny';
8
9
  export declare class FFmpegVideoEncoder extends CustomVideoEncoder {
9
- private process;
10
- private accumulatedData;
11
- private ivfHeaderParsed;
10
+ private backend;
12
11
  private frameIndex;
13
- private resolveFlush;
14
- private useIvf;
15
- private useAnnexB;
16
12
  private codecDescription;
17
13
  private metadataEmitted;
18
- private usingHardwareAcceleration;
19
- private hwaccelMethod;
20
14
  private bitstreamFormat;
15
+ private useAnnexB;
16
+ private resolveFlush;
17
+ private pendingPackets;
21
18
  static supports(codec: VideoCodec, _config: VideoEncoderConfig): boolean;
22
19
  init(): Promise<void>;
23
20
  encode(videoSample: VideoSample, _options: {
@@ -25,20 +22,11 @@ export declare class FFmpegVideoEncoder extends CustomVideoEncoder {
25
22
  }): Promise<void>;
26
23
  flush(): Promise<void>;
27
24
  close(): Promise<void>;
25
+ private processPackets;
28
26
  /**
29
27
  * Extract raw RGBA pixel data from VideoSample
30
28
  */
31
29
  private getFrameData;
32
- /**
33
- * Parse IVF container and emit individual encoded packets
34
- */
35
- private parseIvfFrames;
36
- /**
37
- * Parse H.264/HEVC Annex B bitstream and emit frames
38
- * Annex B uses start codes (0x00 0x00 0x01 or 0x00 0x00 0x00 0x01) to delimit NAL units.
39
- * When AUD (Access Unit Delimiter) is enabled, each frame starts with an AUD NAL.
40
- */
41
- private parseAnnexBFrames;
42
30
  /**
43
31
  * Find all Annex B start codes in buffer
44
32
  */
@@ -47,22 +35,6 @@ export declare class FFmpegVideoEncoder extends CustomVideoEncoder {
47
35
  * Get NAL unit type from first byte after start code
48
36
  */
49
37
  private getNalType;
50
- /**
51
- * Check if this NAL unit starts a new Access Unit (frame)
52
- */
53
- private isAccessUnitStart;
54
- /**
55
- * Emit a complete Annex B frame
56
- */
57
- private emitAnnexBFrame;
58
- /**
59
- * Check if H.264/HEVC Annex B frame is a keyframe
60
- */
61
- private isH264KeyFrame;
62
- /**
63
- * Check if VP8/VP9/AV1 frame is a keyframe
64
- */
65
- private isKeyFrame;
66
38
  /**
67
39
  * Emit an encoded packet via Mediabunny callback
68
40
  */
@@ -1 +1 @@
1
- {"version":3,"file":"FFmpegVideoEncoder.d.ts","sourceRoot":"","sources":["../../src/mediabunny/FFmpegVideoEncoder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,kBAAkB,EAClB,WAAW,EAEX,UAAU,EACX,MAAM,YAAY,CAAC;AA6CpB,qBAAa,kBAAmB,SAAQ,kBAAkB;IACxD,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,eAAe,CAA2B;IAClD,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,gBAAgB,CAA2B;IACnD,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,yBAAyB,CAAS;IAC1C,OAAO,CAAC,aAAa,CAA2C;IAChE,OAAO,CAAC,eAAe,CAA8B;IAErD,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO;IAIlE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA6IrB,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;;OAEG;YACW,YAAY;IAkC1B;;OAEG;IACH,OAAO,CAAC,cAAc;IAiCtB;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IA6DzB;;OAEG;IACH,OAAO,CAAC,cAAc;IAwBtB;;OAEG;IACH,OAAO,CAAC,UAAU;IAUlB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAwCzB;;OAEG;IACH,OAAO,CAAC,eAAe;IAKvB;;OAEG;IACH,OAAO,CAAC,cAAc;IA2BtB;;OAEG;IACH,OAAO,CAAC,UAAU;IAsBlB;;OAEG;IACH,OAAO,CAAC,UAAU;IA0ClB;;OAEG;IACH,OAAO,CAAC,cAAc;IAsBtB,OAAO,CAAC,qBAAqB;IAsB7B,OAAO,CAAC,kBAAkB;CAU3B"}
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"}