webcodecs-node 0.3.0 → 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 (214) hide show
  1. package/dist/__tests__/AudioData.test.js +2 -1
  2. package/dist/__tests__/AudioData.test.js.map +1 -1
  3. package/dist/__tests__/AudioDecoder.test.js +5 -5
  4. package/dist/__tests__/AudioDecoder.test.js.map +1 -1
  5. package/dist/__tests__/AudioEncoder.test.js +3 -3
  6. package/dist/__tests__/AudioEncoder.test.js.map +1 -1
  7. package/dist/__tests__/EncodedChunks.test.js +3 -2
  8. package/dist/__tests__/EncodedChunks.test.js.map +1 -1
  9. package/dist/__tests__/HardwareAcceleration.test.js +2 -1
  10. package/dist/__tests__/HardwareAcceleration.test.js.map +1 -1
  11. package/dist/__tests__/ImageDecoder.test.js +16 -45
  12. package/dist/__tests__/ImageDecoder.test.js.map +1 -1
  13. package/dist/__tests__/NodeAvDecoder.test.js +12 -5
  14. package/dist/__tests__/NodeAvDecoder.test.js.map +1 -1
  15. package/dist/__tests__/VideoDecoder.test.js +5 -5
  16. package/dist/__tests__/VideoDecoder.test.js.map +1 -1
  17. package/dist/__tests__/VideoEncoder.test.js +3 -3
  18. package/dist/__tests__/VideoEncoder.test.js.map +1 -1
  19. package/dist/__tests__/VideoFrame.test.js +4 -1
  20. package/dist/__tests__/VideoFrame.test.js.map +1 -1
  21. package/dist/backends/types.d.ts +6 -3
  22. package/dist/backends/types.d.ts.map +1 -1
  23. package/dist/backends/types.js +2 -2
  24. package/dist/backends/types.js.map +1 -1
  25. package/dist/codec-utils/audio-codecs.d.ts +60 -0
  26. package/dist/codec-utils/audio-codecs.d.ts.map +1 -0
  27. package/dist/codec-utils/audio-codecs.js +117 -0
  28. package/dist/codec-utils/audio-codecs.js.map +1 -0
  29. package/dist/codec-utils/formats.d.ts +42 -0
  30. package/dist/codec-utils/formats.d.ts.map +1 -0
  31. package/dist/codec-utils/formats.js +147 -0
  32. package/dist/codec-utils/formats.js.map +1 -0
  33. package/dist/codec-utils/index.d.ts +9 -0
  34. package/dist/codec-utils/index.d.ts.map +1 -0
  35. package/dist/codec-utils/index.js +12 -0
  36. package/dist/codec-utils/index.js.map +1 -0
  37. package/dist/codec-utils/types.d.ts +87 -0
  38. package/dist/codec-utils/types.d.ts.map +1 -0
  39. package/dist/codec-utils/types.js +10 -0
  40. package/dist/codec-utils/types.js.map +1 -0
  41. package/dist/containers/Demuxer.d.ts +114 -0
  42. package/dist/containers/Demuxer.d.ts.map +1 -0
  43. package/dist/containers/Demuxer.js +256 -0
  44. package/dist/containers/Demuxer.js.map +1 -0
  45. package/dist/containers/Muxer.d.ts +142 -0
  46. package/dist/containers/Muxer.d.ts.map +1 -0
  47. package/dist/containers/Muxer.js +295 -0
  48. package/dist/containers/Muxer.js.map +1 -0
  49. package/dist/containers/extract.d.ts +25 -0
  50. package/dist/containers/extract.d.ts.map +1 -0
  51. package/dist/containers/extract.js +64 -0
  52. package/dist/containers/extract.js.map +1 -0
  53. package/dist/containers/index.d.ts +40 -0
  54. package/dist/containers/index.d.ts.map +1 -0
  55. package/dist/containers/index.js +41 -0
  56. package/dist/containers/index.js.map +1 -0
  57. package/dist/containers/transcode.d.ts +138 -0
  58. package/dist/containers/transcode.d.ts.map +1 -0
  59. package/dist/containers/transcode.js +536 -0
  60. package/dist/containers/transcode.js.map +1 -0
  61. package/dist/core/AudioData.d.ts +4 -0
  62. package/dist/core/AudioData.d.ts.map +1 -1
  63. package/dist/core/AudioData.js +56 -4
  64. package/dist/core/AudioData.js.map +1 -1
  65. package/dist/core/EncodedAudioChunk.d.ts +1 -1
  66. package/dist/core/EncodedAudioChunk.d.ts.map +1 -1
  67. package/dist/core/EncodedAudioChunk.js +1 -1
  68. package/dist/core/EncodedAudioChunk.js.map +1 -1
  69. package/dist/core/EncodedVideoChunk.d.ts.map +1 -1
  70. package/dist/core/EncodedVideoChunk.js +3 -19
  71. package/dist/core/EncodedVideoChunk.js.map +1 -1
  72. package/dist/core/VideoFrame.d.ts +6 -1
  73. package/dist/core/VideoFrame.d.ts.map +1 -1
  74. package/dist/core/VideoFrame.js +130 -17
  75. package/dist/core/VideoFrame.js.map +1 -1
  76. package/dist/decoders/AudioDecoder.d.ts +8 -0
  77. package/dist/decoders/AudioDecoder.d.ts.map +1 -1
  78. package/dist/decoders/AudioDecoder.js +62 -32
  79. package/dist/decoders/AudioDecoder.js.map +1 -1
  80. package/dist/decoders/ImageDecoder.d.ts +0 -3
  81. package/dist/decoders/ImageDecoder.d.ts.map +1 -1
  82. package/dist/decoders/ImageDecoder.js +13 -225
  83. package/dist/decoders/ImageDecoder.js.map +1 -1
  84. package/dist/decoders/VideoDecoder.d.ts +8 -0
  85. package/dist/decoders/VideoDecoder.d.ts.map +1 -1
  86. package/dist/decoders/VideoDecoder.js +76 -46
  87. package/dist/decoders/VideoDecoder.js.map +1 -1
  88. package/dist/demos/demo-1080p-transcode.d.ts +8 -0
  89. package/dist/demos/demo-1080p-transcode.d.ts.map +1 -0
  90. package/dist/demos/demo-1080p-transcode.js +188 -0
  91. package/dist/demos/demo-1080p-transcode.js.map +1 -0
  92. package/dist/demos/demo-containers.d.ts +7 -0
  93. package/dist/demos/demo-containers.d.ts.map +1 -0
  94. package/dist/demos/demo-containers.js +140 -0
  95. package/dist/demos/demo-containers.js.map +1 -0
  96. package/dist/demos/demo-four-corners.js +4 -4
  97. package/dist/demos/demo-four-corners.js.map +1 -1
  98. package/dist/demos/demo-hwaccel-conversion.js +1 -1
  99. package/dist/demos/demo-hwaccel-conversion.js.map +1 -1
  100. package/dist/demos/demo-hwaccel.js +1 -1
  101. package/dist/demos/demo-hwaccel.js.map +1 -1
  102. package/dist/demos/demo-samples.js +4 -4
  103. package/dist/demos/demo-samples.js.map +1 -1
  104. package/dist/demos/demo-streaming.js +6 -6
  105. package/dist/demos/demo-streaming.js.map +1 -1
  106. package/dist/encoders/AudioEncoder.d.ts +8 -0
  107. package/dist/encoders/AudioEncoder.d.ts.map +1 -1
  108. package/dist/encoders/AudioEncoder.js +68 -26
  109. package/dist/encoders/AudioEncoder.js.map +1 -1
  110. package/dist/encoders/VideoEncoder.d.ts +8 -0
  111. package/dist/encoders/VideoEncoder.d.ts.map +1 -1
  112. package/dist/encoders/VideoEncoder.js +64 -13
  113. package/dist/encoders/VideoEncoder.js.map +1 -1
  114. package/dist/ffmpeg/index.d.ts +3 -2
  115. package/dist/ffmpeg/index.d.ts.map +1 -1
  116. package/dist/ffmpeg/index.js +3 -3
  117. package/dist/ffmpeg/index.js.map +1 -1
  118. package/dist/formats/conversions/batch-converter.d.ts +61 -0
  119. package/dist/formats/conversions/batch-converter.d.ts.map +1 -0
  120. package/dist/formats/conversions/batch-converter.js +274 -0
  121. package/dist/formats/conversions/batch-converter.js.map +1 -0
  122. package/dist/formats/conversions/frame-converter.d.ts.map +1 -1
  123. package/dist/formats/conversions/frame-converter.js +17 -10
  124. package/dist/formats/conversions/frame-converter.js.map +1 -1
  125. package/dist/formats/conversions/index.d.ts +1 -0
  126. package/dist/formats/conversions/index.d.ts.map +1 -1
  127. package/dist/formats/conversions/index.js +2 -0
  128. package/dist/formats/conversions/index.js.map +1 -1
  129. package/dist/hardware/decoder-args.d.ts +2 -7
  130. package/dist/hardware/decoder-args.d.ts.map +1 -1
  131. package/dist/hardware/decoder-args.js +2 -32
  132. package/dist/hardware/decoder-args.js.map +1 -1
  133. package/dist/hardware/encoder-args.d.ts +2 -11
  134. package/dist/hardware/encoder-args.d.ts.map +1 -1
  135. package/dist/hardware/encoder-args.js +2 -71
  136. package/dist/hardware/encoder-args.js.map +1 -1
  137. package/dist/hardware/index.d.ts +2 -2
  138. package/dist/hardware/index.d.ts.map +1 -1
  139. package/dist/hardware/index.js +2 -2
  140. package/dist/hardware/index.js.map +1 -1
  141. package/dist/index.d.ts +5 -7
  142. package/dist/index.d.ts.map +1 -1
  143. package/dist/index.js +5 -6
  144. package/dist/index.js.map +1 -1
  145. package/dist/mediabunny/FFmpegAudioDecoder.d.ts +3 -2
  146. package/dist/mediabunny/FFmpegAudioDecoder.d.ts.map +1 -1
  147. package/dist/mediabunny/FFmpegAudioDecoder.js +5 -8
  148. package/dist/mediabunny/FFmpegAudioDecoder.js.map +1 -1
  149. package/dist/mediabunny/FFmpegAudioEncoder.d.ts +3 -2
  150. package/dist/mediabunny/FFmpegAudioEncoder.d.ts.map +1 -1
  151. package/dist/mediabunny/FFmpegAudioEncoder.js +3 -2
  152. package/dist/mediabunny/FFmpegAudioEncoder.js.map +1 -1
  153. package/dist/mediabunny/FFmpegVideoDecoder.d.ts +4 -3
  154. package/dist/mediabunny/FFmpegVideoDecoder.d.ts.map +1 -1
  155. package/dist/mediabunny/FFmpegVideoDecoder.js +6 -9
  156. package/dist/mediabunny/FFmpegVideoDecoder.js.map +1 -1
  157. package/dist/mediabunny/FFmpegVideoEncoder.d.ts +4 -3
  158. package/dist/mediabunny/FFmpegVideoEncoder.d.ts.map +1 -1
  159. package/dist/mediabunny/FFmpegVideoEncoder.js +4 -3
  160. package/dist/mediabunny/FFmpegVideoEncoder.js.map +1 -1
  161. package/dist/node-av/NodeAvAudioDecoder.d.ts +2 -2
  162. package/dist/node-av/NodeAvAudioDecoder.d.ts.map +1 -1
  163. package/dist/node-av/NodeAvAudioDecoder.js +63 -56
  164. package/dist/node-av/NodeAvAudioDecoder.js.map +1 -1
  165. package/dist/node-av/NodeAvAudioEncoder.d.ts +6 -0
  166. package/dist/node-av/NodeAvAudioEncoder.d.ts.map +1 -1
  167. package/dist/node-av/NodeAvAudioEncoder.js +166 -45
  168. package/dist/node-av/NodeAvAudioEncoder.js.map +1 -1
  169. package/dist/node-av/NodeAvImageDecoder.d.ts +28 -9
  170. package/dist/node-av/NodeAvImageDecoder.d.ts.map +1 -1
  171. package/dist/node-av/NodeAvImageDecoder.js +156 -37
  172. package/dist/node-av/NodeAvImageDecoder.js.map +1 -1
  173. package/dist/node-av/NodeAvVideoDecoder.d.ts +1 -1
  174. package/dist/node-av/NodeAvVideoDecoder.d.ts.map +1 -1
  175. package/dist/node-av/NodeAvVideoDecoder.js +20 -16
  176. package/dist/node-av/NodeAvVideoDecoder.js.map +1 -1
  177. package/dist/node-av/NodeAvVideoEncoder.d.ts +12 -0
  178. package/dist/node-av/NodeAvVideoEncoder.d.ts.map +1 -1
  179. package/dist/node-av/NodeAvVideoEncoder.js +175 -63
  180. package/dist/node-av/NodeAvVideoEncoder.js.map +1 -1
  181. package/dist/polyfill.d.ts.map +1 -1
  182. package/dist/polyfill.js +11 -9
  183. package/dist/polyfill.js.map +1 -1
  184. package/dist/utils/aac.d.ts.map +1 -1
  185. package/dist/utils/aac.js +6 -0
  186. package/dist/utils/aac.js.map +1 -1
  187. package/dist/utils/buffer-pool.d.ts +109 -0
  188. package/dist/utils/buffer-pool.d.ts.map +1 -0
  189. package/dist/utils/buffer-pool.js +278 -0
  190. package/dist/utils/buffer-pool.js.map +1 -0
  191. package/dist/utils/codec-cache.d.ts +65 -0
  192. package/dist/utils/codec-cache.d.ts.map +1 -0
  193. package/dist/utils/codec-cache.js +116 -0
  194. package/dist/utils/codec-cache.js.map +1 -0
  195. package/dist/utils/errors.d.ts +62 -0
  196. package/dist/utils/errors.d.ts.map +1 -0
  197. package/dist/utils/errors.js +84 -0
  198. package/dist/utils/errors.js.map +1 -0
  199. package/dist/utils/hardware-pool.d.ts +88 -0
  200. package/dist/utils/hardware-pool.d.ts.map +1 -0
  201. package/dist/utils/hardware-pool.js +266 -0
  202. package/dist/utils/hardware-pool.js.map +1 -0
  203. package/dist/utils/index.d.ts +5 -0
  204. package/dist/utils/index.d.ts.map +1 -1
  205. package/dist/utils/index.js +10 -0
  206. package/dist/utils/index.js.map +1 -1
  207. package/dist/utils/timeout.d.ts +44 -0
  208. package/dist/utils/timeout.d.ts.map +1 -0
  209. package/dist/utils/timeout.js +73 -0
  210. package/dist/utils/timeout.js.map +1 -0
  211. package/dist/utils/type-guards.d.ts +11 -1
  212. package/dist/utils/type-guards.d.ts.map +1 -1
  213. package/dist/utils/type-guards.js.map +1 -1
  214. package/package.json +13 -35
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Codec format mappings
3
+ *
4
+ * Converts between WebCodecs formats and libav formats used by node-av.
5
+ */
6
+ /**
7
+ * Map WebCodecs pixel format to libav pixel format
8
+ */
9
+ export declare function pixelFormatToFFmpeg(format: string): string;
10
+ /**
11
+ * Map libav pixel format to WebCodecs pixel format
12
+ */
13
+ export declare function ffmpegToPixelFormat(format: string): string;
14
+ /**
15
+ * Map WebCodecs codec string to libav encoder codec
16
+ */
17
+ export declare function webCodecToFFmpegCodec(webCodec: string): string;
18
+ /**
19
+ * Map WebCodecs codec to container format
20
+ */
21
+ export declare function webCodecToContainerFormat(webCodec: string): string;
22
+ /**
23
+ * Calculate frame size in bytes for a given pixel format and dimensions
24
+ */
25
+ export declare function calculateFrameSize(format: string, width: number, height: number): number;
26
+ /**
27
+ * MIME type to format mapping for ImageDecoder
28
+ */
29
+ export declare const IMAGE_MIME_TO_FFMPEG: Record<string, {
30
+ format: string;
31
+ decoder?: string;
32
+ autoDetect?: boolean;
33
+ }>;
34
+ /**
35
+ * Audio codec mappings
36
+ */
37
+ export declare const AUDIO_CODEC_MAP: Record<string, string>;
38
+ /**
39
+ * Get libav audio codec from WebCodecs codec string
40
+ */
41
+ export declare function webCodecToFFmpegAudioCodec(codec: string): string;
42
+ //# sourceMappingURL=formats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formats.d.ts","sourceRoot":"","sources":["../../src/codec-utils/formats.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAa1D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAa1D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAgB9D;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAgBlE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAkCxF;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,CAU3G,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CASlD,CAAC;AAEF;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGhE"}
@@ -0,0 +1,147 @@
1
+ /**
2
+ * Codec format mappings
3
+ *
4
+ * Converts between WebCodecs formats and libav formats used by node-av.
5
+ */
6
+ /**
7
+ * Map WebCodecs pixel format to libav pixel format
8
+ */
9
+ export function pixelFormatToFFmpeg(format) {
10
+ const formatMap = {
11
+ 'I420': 'yuv420p',
12
+ 'I420A': 'yuva420p',
13
+ 'I422': 'yuv422p',
14
+ 'I444': 'yuv444p',
15
+ 'NV12': 'nv12',
16
+ 'RGBA': 'rgba',
17
+ 'RGBX': 'rgb0',
18
+ 'BGRA': 'bgra',
19
+ 'BGRX': 'bgr0',
20
+ };
21
+ return formatMap[format] || format.toLowerCase();
22
+ }
23
+ /**
24
+ * Map libav pixel format to WebCodecs pixel format
25
+ */
26
+ export function ffmpegToPixelFormat(format) {
27
+ const formatMap = {
28
+ 'yuv420p': 'I420',
29
+ 'yuva420p': 'I420A',
30
+ 'yuv422p': 'I422',
31
+ 'yuv444p': 'I444',
32
+ 'nv12': 'NV12',
33
+ 'rgba': 'RGBA',
34
+ 'rgb0': 'RGBX',
35
+ 'bgra': 'BGRA',
36
+ 'bgr0': 'BGRX',
37
+ };
38
+ return formatMap[format] || format.toUpperCase();
39
+ }
40
+ /**
41
+ * Map WebCodecs codec string to libav encoder codec
42
+ */
43
+ export function webCodecToFFmpegCodec(webCodec) {
44
+ const codecBase = webCodec.split('.')[0].toLowerCase();
45
+ const codecMap = {
46
+ 'avc1': 'libx264',
47
+ 'avc3': 'libx264',
48
+ 'hev1': 'libx265',
49
+ 'hvc1': 'libx265',
50
+ 'vp8': 'libvpx',
51
+ 'vp09': 'libvpx-vp9',
52
+ 'vp9': 'libvpx-vp9',
53
+ 'av01': 'libaom-av1',
54
+ 'av1': 'libaom-av1',
55
+ };
56
+ return codecMap[codecBase] || codecBase;
57
+ }
58
+ /**
59
+ * Map WebCodecs codec to container format
60
+ */
61
+ export function webCodecToContainerFormat(webCodec) {
62
+ const codecBase = webCodec.split('.')[0].toLowerCase();
63
+ const formatMap = {
64
+ 'avc1': 'h264',
65
+ 'avc3': 'h264',
66
+ 'hev1': 'hevc',
67
+ 'hvc1': 'hevc',
68
+ 'vp8': 'ivf',
69
+ 'vp09': 'ivf',
70
+ 'vp9': 'ivf',
71
+ 'av01': 'ivf',
72
+ 'av1': 'ivf',
73
+ };
74
+ return formatMap[codecBase] || 'rawvideo';
75
+ }
76
+ /**
77
+ * Calculate frame size in bytes for a given pixel format and dimensions
78
+ */
79
+ export function calculateFrameSize(format, width, height) {
80
+ const chromaW = Math.ceil(width / 2);
81
+ const chromaH = Math.ceil(height / 2);
82
+ switch (format.toUpperCase()) {
83
+ case 'I420':
84
+ case 'YUV420P':
85
+ // Y: width * height, U: chromaW * chromaH, V: chromaW * chromaH
86
+ return width * height + 2 * chromaW * chromaH;
87
+ case 'I420A':
88
+ case 'YUVA420P':
89
+ // I420 + Alpha plane
90
+ return width * height * 2 + 2 * chromaW * chromaH;
91
+ case 'I422':
92
+ case 'YUV422P':
93
+ // Y: width * height, U: chromaW * height, V: chromaW * height
94
+ return width * height + 2 * chromaW * height;
95
+ case 'I444':
96
+ case 'YUV444P':
97
+ // Y, U, V all full size
98
+ return width * height * 3;
99
+ case 'NV12':
100
+ // Y: width * height, UV interleaved: width * chromaH
101
+ return width * height + width * chromaH;
102
+ case 'RGBA':
103
+ case 'RGBX':
104
+ case 'BGRA':
105
+ case 'BGRX':
106
+ case 'RGB0':
107
+ case 'BGR0':
108
+ return width * height * 4;
109
+ default:
110
+ return width * height * 4; // Assume RGBA as fallback
111
+ }
112
+ }
113
+ /**
114
+ * MIME type to format mapping for ImageDecoder
115
+ */
116
+ export const IMAGE_MIME_TO_FFMPEG = {
117
+ 'image/png': { format: 'png_pipe' },
118
+ 'image/apng': { format: 'apng' },
119
+ 'image/jpeg': { format: 'jpeg_pipe' },
120
+ 'image/jpg': { format: 'jpeg_pipe' },
121
+ 'image/webp': { format: 'webp_pipe', autoDetect: true },
122
+ 'image/gif': { format: 'gif' },
123
+ 'image/bmp': { format: 'bmp_pipe' },
124
+ 'image/avif': { format: 'avif', autoDetect: true },
125
+ 'image/tiff': { format: 'tiff_pipe' },
126
+ };
127
+ /**
128
+ * Audio codec mappings
129
+ */
130
+ export const AUDIO_CODEC_MAP = {
131
+ 'opus': 'libopus',
132
+ 'aac': 'aac',
133
+ 'mp3': 'libmp3lame',
134
+ 'flac': 'flac',
135
+ 'vorbis': 'libvorbis',
136
+ 'pcm-s16': 'pcm_s16le',
137
+ 'pcm-s32': 'pcm_s32le',
138
+ 'pcm-f32': 'pcm_f32le',
139
+ };
140
+ /**
141
+ * Get libav audio codec from WebCodecs codec string
142
+ */
143
+ export function webCodecToFFmpegAudioCodec(codec) {
144
+ const codecLower = codec.toLowerCase();
145
+ return AUDIO_CODEC_MAP[codecLower] || codecLower;
146
+ }
147
+ //# sourceMappingURL=formats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formats.js","sourceRoot":"","sources":["../../src/codec-utils/formats.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Codec utilities
3
+ *
4
+ * Provides codec and format mappings between WebCodecs and libav (node-av).
5
+ */
6
+ export { type EncodedFrameData, type DecoderConfig, type EncoderConfig, type BitrateMode, type AlphaOption, DEFAULT_SHUTDOWN_TIMEOUT, DEFAULT_FLUSH_TIMEOUT, } from './types.js';
7
+ export { pixelFormatToFFmpeg, ffmpegToPixelFormat, webCodecToFFmpegCodec, webCodecToContainerFormat, calculateFrameSize, webCodecToFFmpegAudioCodec, IMAGE_MIME_TO_FFMPEG, AUDIO_CODEC_MAP, } from './formats.js';
8
+ export { AUDIO_ENCODER_CODEC_MAP, AUDIO_DECODER_CODEC_MAP, AUDIO_ENCODER_FORMAT_MAP, AUDIO_FRAME_SIZE_MAP, AUDIO_OUTPUT_FORMAT_MAP, getAudioEncoderCodec, getAudioDecoderInfo, getAudioEncoderFormat, getAudioFrameSize, getAudioOutputFormatSettings, type AudioFormatSettings, } from './audio-codecs.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/codec-utils/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,yBAAyB,EACzB,kBAAkB,EAClB,0BAA0B,EAC1B,oBAAoB,EACpB,eAAe,GAChB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,wBAAwB,EACxB,oBAAoB,EACpB,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EACjB,4BAA4B,EAC5B,KAAK,mBAAmB,GACzB,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Codec utilities
3
+ *
4
+ * Provides codec and format mappings between WebCodecs and libav (node-av).
5
+ */
6
+ // Types
7
+ export { DEFAULT_SHUTDOWN_TIMEOUT, DEFAULT_FLUSH_TIMEOUT, } from './types.js';
8
+ // Format mappings
9
+ export { pixelFormatToFFmpeg, ffmpegToPixelFormat, webCodecToFFmpegCodec, webCodecToContainerFormat, calculateFrameSize, webCodecToFFmpegAudioCodec, IMAGE_MIME_TO_FFMPEG, AUDIO_CODEC_MAP, } from './formats.js';
10
+ // Audio codec mappings
11
+ export { AUDIO_ENCODER_CODEC_MAP, AUDIO_DECODER_CODEC_MAP, AUDIO_ENCODER_FORMAT_MAP, AUDIO_FRAME_SIZE_MAP, AUDIO_OUTPUT_FORMAT_MAP, getAudioEncoderCodec, getAudioDecoderInfo, getAudioEncoderFormat, getAudioFrameSize, getAudioOutputFormatSettings, } from './audio-codecs.js';
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/codec-utils/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,QAAQ;AACR,OAAO,EAML,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,YAAY,CAAC;AAEpB,kBAAkB;AAClB,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,yBAAyB,EACzB,kBAAkB,EAClB,0BAA0B,EAC1B,oBAAoB,EACpB,eAAe,GAChB,MAAM,cAAc,CAAC;AAEtB,uBAAuB;AACvB,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,wBAAwB,EACxB,oBAAoB,EACpB,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EACjB,4BAA4B,GAE7B,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Codec configuration types
3
+ *
4
+ * Configuration types for video and audio encoding/decoding.
5
+ */
6
+ /**
7
+ * Codec configuration
8
+ */
9
+ export interface CodecConfig {
10
+ input: CodecInputConfig;
11
+ output: CodecOutputConfig;
12
+ }
13
+ /**
14
+ * Input configuration
15
+ */
16
+ export interface CodecInputConfig {
17
+ format: string;
18
+ codec?: string;
19
+ width?: number;
20
+ height?: number;
21
+ framerate?: number;
22
+ pixelFormat?: string;
23
+ }
24
+ /**
25
+ * Output configuration
26
+ */
27
+ export interface CodecOutputConfig {
28
+ format: string;
29
+ codec?: string;
30
+ width?: number;
31
+ height?: number;
32
+ framerate?: number;
33
+ pixelFormat?: string;
34
+ bitrate?: number;
35
+ }
36
+ /**
37
+ * Encoded frame data emitted by parsers
38
+ */
39
+ export interface EncodedFrameData {
40
+ data: Buffer;
41
+ timestamp: number;
42
+ keyFrame: boolean;
43
+ }
44
+ /**
45
+ * Decoder configuration
46
+ */
47
+ export interface DecoderConfig {
48
+ codec: string;
49
+ width: number;
50
+ height: number;
51
+ outputPixelFormat?: string;
52
+ hardwareDecoderArgs?: string[];
53
+ hardwareDownloadFilter?: string;
54
+ }
55
+ /**
56
+ * Bitrate mode for encoding
57
+ * - 'constant': Constant bitrate (CBR) - predictable file size, may vary quality
58
+ * - 'variable': Variable bitrate (VBR) - better quality, less predictable size
59
+ * - 'quantizer': Fixed quality mode (CRF/CQ) - consistent quality, variable size
60
+ */
61
+ export type BitrateMode = 'constant' | 'variable' | 'quantizer';
62
+ /**
63
+ * Alpha channel handling mode
64
+ * - 'discard': Drop alpha channel (default, works with all codecs)
65
+ * - 'keep': Preserve alpha channel (only VP9 and AV1 support this)
66
+ */
67
+ export type AlphaOption = 'discard' | 'keep';
68
+ /**
69
+ * Encoder configuration
70
+ */
71
+ export interface EncoderConfig {
72
+ codec: string;
73
+ width: number;
74
+ height: number;
75
+ inputPixelFormat?: string;
76
+ framerate?: number;
77
+ bitrate?: number;
78
+ bitrateMode?: BitrateMode;
79
+ latencyMode?: 'quality' | 'realtime';
80
+ alpha?: AlphaOption;
81
+ hardwareEncoderArgs?: string[];
82
+ }
83
+ /** Default timeout for graceful shutdown (ms) */
84
+ export declare const DEFAULT_SHUTDOWN_TIMEOUT = 5000;
85
+ /** Default timeout for flush operations (ms) */
86
+ export declare const DEFAULT_FLUSH_TIMEOUT = 30000;
87
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/codec-utils/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,gBAAgB,CAAC;IACxB,MAAM,EAAE,iBAAiB,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,UAAU,GAAG,WAAW,CAAC;AAEhE;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,MAAM,CAAC;AAE7C;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,WAAW,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC;IACrC,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;CAChC;AAED,iDAAiD;AACjD,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAE7C,gDAAgD;AAChD,eAAO,MAAM,qBAAqB,QAAQ,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Codec configuration types
3
+ *
4
+ * Configuration types for video and audio encoding/decoding.
5
+ */
6
+ /** Default timeout for graceful shutdown (ms) */
7
+ export const DEFAULT_SHUTDOWN_TIMEOUT = 5000;
8
+ /** Default timeout for flush operations (ms) */
9
+ export const DEFAULT_FLUSH_TIMEOUT = 30000;
10
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/codec-utils/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAuFH,iDAAiD;AACjD,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAC;AAE7C,gDAAgD;AAChD,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAC"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Container Demuxer - Extracts encoded chunks from container files (MP4, WebM, MKV)
3
+ *
4
+ * Wraps node-av's Demuxer to provide a WebCodecs-compatible interface that outputs
5
+ * EncodedVideoChunk and EncodedAudioChunk objects.
6
+ */
7
+ import { Demuxer as NodeAvDemuxer } from 'node-av';
8
+ import { EncodedVideoChunk } from '../core/EncodedVideoChunk.js';
9
+ import { EncodedAudioChunk } from '../core/EncodedAudioChunk.js';
10
+ /**
11
+ * Video stream configuration extracted from container
12
+ */
13
+ export interface VideoStreamConfig {
14
+ codec: string;
15
+ codedWidth: number;
16
+ codedHeight: number;
17
+ description?: Uint8Array;
18
+ }
19
+ /**
20
+ * Audio stream configuration extracted from container
21
+ */
22
+ export interface AudioStreamConfig {
23
+ codec: string;
24
+ sampleRate: number;
25
+ numberOfChannels: number;
26
+ description?: Uint8Array;
27
+ }
28
+ /**
29
+ * Demuxer configuration
30
+ */
31
+ export interface DemuxerConfig {
32
+ /** Path to the input file */
33
+ path: string;
34
+ }
35
+ /**
36
+ * Callback types for demuxed chunks
37
+ */
38
+ export type VideoChunkCallback = (chunk: EncodedVideoChunk, config: VideoStreamConfig) => void;
39
+ export type AudioChunkCallback = (chunk: EncodedAudioChunk, config: AudioStreamConfig) => void;
40
+ /**
41
+ * Container demuxer that outputs WebCodecs-compatible chunks
42
+ */
43
+ export declare class Demuxer {
44
+ private demuxer;
45
+ private path;
46
+ private _videoConfig;
47
+ private _audioConfig;
48
+ private _videoStreamIndex;
49
+ private _audioStreamIndex;
50
+ private _videoTimeBase;
51
+ private _audioTimeBase;
52
+ constructor(config: DemuxerConfig);
53
+ /**
54
+ * Open the container file and parse stream information
55
+ */
56
+ open(timeout?: number): Promise<void>;
57
+ /**
58
+ * Get video stream configuration (null if no video stream)
59
+ */
60
+ get videoConfig(): VideoStreamConfig | null;
61
+ /**
62
+ * Get audio stream configuration (null if no audio stream)
63
+ */
64
+ get audioConfig(): AudioStreamConfig | null;
65
+ /**
66
+ * Get container format name (e.g., "mp4", "webm")
67
+ */
68
+ get format(): string | undefined;
69
+ /**
70
+ * Get duration in seconds
71
+ */
72
+ get duration(): number | undefined;
73
+ /**
74
+ * Convert timestamp from stream time base to microseconds
75
+ */
76
+ private toMicroseconds;
77
+ /**
78
+ * Iterate over video chunks
79
+ */
80
+ videoChunks(): AsyncGenerator<EncodedVideoChunk>;
81
+ /**
82
+ * Iterate over audio chunks
83
+ */
84
+ audioChunks(): AsyncGenerator<EncodedAudioChunk>;
85
+ /**
86
+ * Iterate over all chunks (video and audio interleaved)
87
+ * Returns both the chunk and its type/config for proper routing
88
+ */
89
+ chunks(): AsyncGenerator<{
90
+ type: 'video';
91
+ chunk: EncodedVideoChunk;
92
+ config: VideoStreamConfig;
93
+ } | {
94
+ type: 'audio';
95
+ chunk: EncodedAudioChunk;
96
+ config: AudioStreamConfig;
97
+ }>;
98
+ /**
99
+ * Demux all chunks with callbacks (alternative API)
100
+ */
101
+ demux(options: {
102
+ onVideoChunk?: VideoChunkCallback;
103
+ onAudioChunk?: AudioChunkCallback;
104
+ }): Promise<void>;
105
+ /**
106
+ * Close the demuxer and release resources
107
+ */
108
+ close(): Promise<void>;
109
+ /**
110
+ * Get the underlying node-av demuxer (for advanced use)
111
+ */
112
+ get native(): NodeAvDemuxer | null;
113
+ }
114
+ //# sourceMappingURL=Demuxer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Demuxer.d.ts","sourceRoot":"","sources":["../../src/containers/Demuxer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAA8B,MAAM,8BAA8B,CAAC;AAC7F,OAAO,EAAE,iBAAiB,EAA8B,MAAM,8BAA8B,CAAC;AAG7F;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,UAAU,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,UAAU,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,6BAA6B;IAC7B,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;AAC/F,MAAM,MAAM,kBAAkB,GAAG,CAAC,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;AA+C/F;;GAEG;AACH,qBAAa,OAAO;IAClB,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,YAAY,CAAkC;IACtD,OAAO,CAAC,YAAY,CAAkC;IACtD,OAAO,CAAC,iBAAiB,CAAc;IACvC,OAAO,CAAC,iBAAiB,CAAc;IACvC,OAAO,CAAC,cAAc,CAA6C;IACnE,OAAO,CAAC,cAAc,CAA6C;gBAEvD,MAAM,EAAE,aAAa;IAIjC;;OAEG;IACG,IAAI,CAAC,OAAO,GAAE,MAA8B,GAAG,OAAO,CAAC,IAAI,CAAC;IA4ClE;;OAEG;IACH,IAAI,WAAW,IAAI,iBAAiB,GAAG,IAAI,CAE1C;IAED;;OAEG;IACH,IAAI,WAAW,IAAI,iBAAiB,GAAG,IAAI,CAE1C;IAED;;OAEG;IACH,IAAI,MAAM,IAAI,MAAM,GAAG,SAAS,CAE/B;IAED;;OAEG;IACH,IAAI,QAAQ,IAAI,MAAM,GAAG,SAAS,CAEjC;IAED;;OAEG;IACH,OAAO,CAAC,cAAc;IAKtB;;OAEG;IACI,WAAW,IAAI,cAAc,CAAC,iBAAiB,CAAC;IAyBvD;;OAEG;IACI,WAAW,IAAI,cAAc,CAAC,iBAAiB,CAAC;IAyBvD;;;OAGG;IACI,MAAM,IAAI,cAAc,CAC3B;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,iBAAiB,CAAC;QAAC,MAAM,EAAE,iBAAiB,CAAA;KAAE,GACtE;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,iBAAiB,CAAC;QAAC,MAAM,EAAE,iBAAiB,CAAA;KAAE,CACzE;IAuCD;;OAEG;IACG,KAAK,CAAC,OAAO,EAAE;QACnB,YAAY,CAAC,EAAE,kBAAkB,CAAC;QAClC,YAAY,CAAC,EAAE,kBAAkB,CAAC;KACnC,GAAG,OAAO,CAAC,IAAI,CAAC;IAUjB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5B;;OAEG;IACH,IAAI,MAAM,IAAI,aAAa,GAAG,IAAI,CAEjC;CACF"}