webcodecs-node 0.7.2 → 0.8.5

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 (507) hide show
  1. package/README.md +106 -16
  2. package/dist/backends/node-av/HardwarePipeline.d.ts +36 -0
  3. package/dist/backends/node-av/HardwarePipeline.d.ts.map +1 -0
  4. package/dist/backends/node-av/HardwarePipeline.js +203 -0
  5. package/dist/backends/node-av/HardwarePipeline.js.map +1 -0
  6. package/dist/backends/node-av/audio/NodeAvAudioDecoder.d.ts +46 -0
  7. package/dist/backends/node-av/audio/NodeAvAudioDecoder.d.ts.map +1 -0
  8. package/dist/backends/node-av/audio/NodeAvAudioDecoder.js +277 -0
  9. package/dist/backends/node-av/audio/NodeAvAudioDecoder.js.map +1 -0
  10. package/dist/backends/node-av/audio/NodeAvAudioEncoder.d.ts +47 -0
  11. package/dist/backends/node-av/audio/NodeAvAudioEncoder.d.ts.map +1 -0
  12. package/dist/backends/node-av/audio/NodeAvAudioEncoder.js +363 -0
  13. package/dist/backends/node-av/audio/NodeAvAudioEncoder.js.map +1 -0
  14. package/dist/backends/node-av/audio/decoder/channel-layout.d.ts +12 -0
  15. package/dist/backends/node-av/audio/decoder/channel-layout.d.ts.map +1 -0
  16. package/dist/backends/node-av/audio/decoder/channel-layout.js +24 -0
  17. package/dist/backends/node-av/audio/decoder/channel-layout.js.map +1 -0
  18. package/dist/backends/node-av/audio/decoder/codec-mapping.d.ts +9 -0
  19. package/dist/backends/node-av/audio/decoder/codec-mapping.d.ts.map +1 -0
  20. package/dist/backends/node-av/audio/decoder/codec-mapping.js +40 -0
  21. package/dist/backends/node-av/audio/decoder/codec-mapping.js.map +1 -0
  22. package/dist/backends/node-av/audio/decoder/constants.d.ts +6 -0
  23. package/dist/backends/node-av/audio/decoder/constants.d.ts.map +1 -0
  24. package/dist/backends/node-av/audio/decoder/constants.js +6 -0
  25. package/dist/backends/node-av/audio/decoder/constants.js.map +1 -0
  26. package/dist/backends/node-av/audio/decoder/index.d.ts +8 -0
  27. package/dist/backends/node-av/audio/decoder/index.d.ts.map +1 -0
  28. package/dist/backends/node-av/audio/decoder/index.js +8 -0
  29. package/dist/backends/node-av/audio/decoder/index.js.map +1 -0
  30. package/dist/backends/node-av/audio/decoder/sample-format.d.ts +14 -0
  31. package/dist/backends/node-av/audio/decoder/sample-format.d.ts.map +1 -0
  32. package/dist/backends/node-av/audio/decoder/sample-format.js +54 -0
  33. package/dist/backends/node-av/audio/decoder/sample-format.js.map +1 -0
  34. package/dist/backends/node-av/audio/encoder/channel-layout.d.ts +12 -0
  35. package/dist/backends/node-av/audio/encoder/channel-layout.d.ts.map +1 -0
  36. package/dist/backends/node-av/audio/encoder/channel-layout.js +24 -0
  37. package/dist/backends/node-av/audio/encoder/channel-layout.js.map +1 -0
  38. package/dist/backends/node-av/audio/encoder/codec-description.d.ts +33 -0
  39. package/dist/backends/node-av/audio/encoder/codec-description.d.ts.map +1 -0
  40. package/dist/backends/node-av/audio/encoder/codec-description.js +137 -0
  41. package/dist/backends/node-av/audio/encoder/codec-description.js.map +1 -0
  42. package/dist/backends/node-av/audio/encoder/codec-mapping.d.ts +12 -0
  43. package/dist/backends/node-av/audio/encoder/codec-mapping.d.ts.map +1 -0
  44. package/dist/backends/node-av/audio/encoder/codec-mapping.js +61 -0
  45. package/dist/backends/node-av/audio/encoder/codec-mapping.js.map +1 -0
  46. package/dist/backends/node-av/audio/encoder/constants.d.ts +6 -0
  47. package/dist/backends/node-av/audio/encoder/constants.d.ts.map +1 -0
  48. package/dist/backends/node-av/audio/encoder/constants.js +6 -0
  49. package/dist/backends/node-av/audio/encoder/constants.js.map +1 -0
  50. package/dist/backends/node-av/audio/encoder/drain.d.ts +32 -0
  51. package/dist/backends/node-av/audio/encoder/drain.d.ts.map +1 -0
  52. package/dist/backends/node-av/audio/encoder/drain.js +51 -0
  53. package/dist/backends/node-av/audio/encoder/drain.js.map +1 -0
  54. package/dist/backends/node-av/audio/encoder/index.d.ts +20 -0
  55. package/dist/backends/node-av/audio/encoder/index.d.ts.map +1 -0
  56. package/dist/backends/node-av/audio/encoder/index.js +20 -0
  57. package/dist/backends/node-av/audio/encoder/index.js.map +1 -0
  58. package/dist/backends/node-av/audio/encoder/options.d.ts +40 -0
  59. package/dist/backends/node-av/audio/encoder/options.d.ts.map +1 -0
  60. package/dist/backends/node-av/audio/encoder/options.js +127 -0
  61. package/dist/backends/node-av/audio/encoder/options.js.map +1 -0
  62. package/dist/backends/node-av/audio/encoder/sample-format-convert.d.ts +40 -0
  63. package/dist/backends/node-av/audio/encoder/sample-format-convert.d.ts.map +1 -0
  64. package/dist/backends/node-av/audio/encoder/sample-format-convert.js +152 -0
  65. package/dist/backends/node-av/audio/encoder/sample-format-convert.js.map +1 -0
  66. package/dist/backends/node-av/hardware-pipeline/capabilities.d.ts +10 -0
  67. package/dist/backends/node-av/hardware-pipeline/capabilities.d.ts.map +1 -0
  68. package/dist/backends/node-av/hardware-pipeline/capabilities.js +45 -0
  69. package/dist/backends/node-av/hardware-pipeline/capabilities.js.map +1 -0
  70. package/dist/backends/node-av/hardware-pipeline/index.d.ts +6 -0
  71. package/dist/backends/node-av/hardware-pipeline/index.d.ts.map +1 -0
  72. package/dist/backends/node-av/hardware-pipeline/index.js +5 -0
  73. package/dist/backends/node-av/hardware-pipeline/index.js.map +1 -0
  74. package/dist/backends/node-av/hardware-pipeline/types.d.ts +13 -0
  75. package/dist/backends/node-av/hardware-pipeline/types.d.ts.map +1 -0
  76. package/dist/backends/node-av/hardware-pipeline/types.js +5 -0
  77. package/dist/backends/node-av/hardware-pipeline/types.js.map +1 -0
  78. package/dist/backends/node-av/image/NodeAvImageDecoder.d.ts +95 -0
  79. package/dist/backends/node-av/image/NodeAvImageDecoder.d.ts.map +1 -0
  80. package/dist/backends/node-av/image/NodeAvImageDecoder.js +383 -0
  81. package/dist/backends/node-av/image/NodeAvImageDecoder.js.map +1 -0
  82. package/dist/backends/node-av/image/WebPImageDecoder.d.ts +57 -0
  83. package/dist/backends/node-av/image/WebPImageDecoder.d.ts.map +1 -0
  84. package/dist/backends/node-av/image/WebPImageDecoder.js +178 -0
  85. package/dist/backends/node-av/image/WebPImageDecoder.js.map +1 -0
  86. package/dist/backends/node-av/image/decoder/constants.d.ts +14 -0
  87. package/dist/backends/node-av/image/decoder/constants.d.ts.map +1 -0
  88. package/dist/backends/node-av/image/decoder/constants.js +24 -0
  89. package/dist/backends/node-av/image/decoder/constants.js.map +1 -0
  90. package/dist/backends/node-av/image/decoder/index.d.ts +7 -0
  91. package/dist/backends/node-av/image/decoder/index.d.ts.map +1 -0
  92. package/dist/backends/node-av/image/decoder/index.js +6 -0
  93. package/dist/backends/node-av/image/decoder/index.js.map +1 -0
  94. package/dist/backends/node-av/image/decoder/probe.d.ts +12 -0
  95. package/dist/backends/node-av/image/decoder/probe.d.ts.map +1 -0
  96. package/dist/backends/node-av/image/decoder/probe.js +57 -0
  97. package/dist/backends/node-av/image/decoder/probe.js.map +1 -0
  98. package/dist/backends/node-av/image/decoder/types.d.ts +25 -0
  99. package/dist/backends/node-av/image/decoder/types.d.ts.map +1 -0
  100. package/dist/backends/node-av/image/decoder/types.js +5 -0
  101. package/dist/backends/node-av/image/decoder/types.js.map +1 -0
  102. package/dist/backends/node-av/video/NodeAvVideoDecoder.d.ts +44 -0
  103. package/dist/backends/node-av/video/NodeAvVideoDecoder.d.ts.map +1 -0
  104. package/dist/backends/node-av/video/NodeAvVideoDecoder.js +326 -0
  105. package/dist/backends/node-av/video/NodeAvVideoDecoder.js.map +1 -0
  106. package/dist/backends/node-av/video/NodeAvVideoEncoder.d.ts +49 -0
  107. package/dist/backends/node-av/video/NodeAvVideoEncoder.d.ts.map +1 -0
  108. package/dist/backends/node-av/video/NodeAvVideoEncoder.js +317 -0
  109. package/dist/backends/node-av/video/NodeAvVideoEncoder.js.map +1 -0
  110. package/dist/backends/node-av/video/decoder/codec-mapping.d.ts +9 -0
  111. package/dist/backends/node-av/video/decoder/codec-mapping.d.ts.map +1 -0
  112. package/dist/backends/node-av/video/decoder/codec-mapping.js +25 -0
  113. package/dist/backends/node-av/video/decoder/codec-mapping.js.map +1 -0
  114. package/dist/backends/node-av/video/decoder/constants.d.ts +13 -0
  115. package/dist/backends/node-av/video/decoder/constants.d.ts.map +1 -0
  116. package/dist/backends/node-av/video/decoder/constants.js +13 -0
  117. package/dist/backends/node-av/video/decoder/constants.js.map +1 -0
  118. package/dist/backends/node-av/video/decoder/index.d.ts +7 -0
  119. package/dist/backends/node-av/video/decoder/index.d.ts.map +1 -0
  120. package/dist/backends/node-av/video/decoder/index.js +7 -0
  121. package/dist/backends/node-av/video/decoder/index.js.map +1 -0
  122. package/dist/backends/node-av/video/decoder/pixel-format.d.ts +13 -0
  123. package/dist/backends/node-av/video/decoder/pixel-format.d.ts.map +1 -0
  124. package/dist/backends/node-av/video/decoder/pixel-format.js +88 -0
  125. package/dist/backends/node-av/video/decoder/pixel-format.js.map +1 -0
  126. package/dist/backends/node-av/video/encoder/codec-description.d.ts +26 -0
  127. package/dist/backends/node-av/video/encoder/codec-description.d.ts.map +1 -0
  128. package/dist/backends/node-av/video/encoder/codec-description.js +86 -0
  129. package/dist/backends/node-av/video/encoder/codec-description.js.map +1 -0
  130. package/dist/backends/node-av/video/encoder/drain.d.ts +34 -0
  131. package/dist/backends/node-av/video/encoder/drain.d.ts.map +1 -0
  132. package/dist/backends/node-av/video/encoder/drain.js +51 -0
  133. package/dist/backends/node-av/video/encoder/drain.js.map +1 -0
  134. package/dist/backends/node-av/video/encoder/filters.d.ts +37 -0
  135. package/dist/backends/node-av/video/encoder/filters.d.ts.map +1 -0
  136. package/dist/backends/node-av/video/encoder/filters.js +71 -0
  137. package/dist/backends/node-av/video/encoder/filters.js.map +1 -0
  138. package/dist/backends/node-av/video/encoder/gpu-filters.d.ts +9 -0
  139. package/dist/backends/node-av/video/encoder/gpu-filters.d.ts.map +1 -0
  140. package/dist/backends/node-av/video/encoder/gpu-filters.js +26 -0
  141. package/dist/backends/node-av/video/encoder/gpu-filters.js.map +1 -0
  142. package/dist/backends/node-av/video/encoder/hardware-constraints.d.ts +12 -0
  143. package/dist/backends/node-av/video/encoder/hardware-constraints.d.ts.map +1 -0
  144. package/dist/backends/node-av/video/encoder/hardware-constraints.js +31 -0
  145. package/dist/backends/node-av/video/encoder/hardware-constraints.js.map +1 -0
  146. package/dist/backends/node-av/video/encoder/index.d.ts +28 -0
  147. package/dist/backends/node-av/video/encoder/index.d.ts.map +1 -0
  148. package/dist/backends/node-av/video/encoder/index.js +28 -0
  149. package/dist/backends/node-av/video/encoder/index.js.map +1 -0
  150. package/dist/backends/node-av/video/encoder/options.d.ts +39 -0
  151. package/dist/backends/node-av/video/encoder/options.d.ts.map +1 -0
  152. package/dist/backends/node-av/video/encoder/options.js +195 -0
  153. package/dist/backends/node-av/video/encoder/options.js.map +1 -0
  154. package/dist/backends/node-av/video/encoder/pixel-format-config.d.ts +42 -0
  155. package/dist/backends/node-av/video/encoder/pixel-format-config.d.ts.map +1 -0
  156. package/dist/backends/node-av/video/encoder/pixel-format-config.js +122 -0
  157. package/dist/backends/node-av/video/encoder/pixel-format-config.js.map +1 -0
  158. package/dist/backends/node-av/video/encoder/pixel-format.d.ts +13 -0
  159. package/dist/backends/node-av/video/encoder/pixel-format.d.ts.map +1 -0
  160. package/dist/backends/node-av/video/encoder/pixel-format.js +68 -0
  161. package/dist/backends/node-av/video/encoder/pixel-format.js.map +1 -0
  162. package/dist/backends/node-av/video/encoder/setup.d.ts +33 -0
  163. package/dist/backends/node-av/video/encoder/setup.d.ts.map +1 -0
  164. package/dist/backends/node-av/video/encoder/setup.js +62 -0
  165. package/dist/backends/node-av/video/encoder/setup.js.map +1 -0
  166. package/dist/backends/node-av/video/encoder/software-encoders.d.ts +8 -0
  167. package/dist/backends/node-av/video/encoder/software-encoders.d.ts.map +1 -0
  168. package/dist/backends/node-av/video/encoder/software-encoders.js +17 -0
  169. package/dist/backends/node-av/video/encoder/software-encoders.js.map +1 -0
  170. package/dist/backends/node-av/video/encoder/timestamp.d.ts +34 -0
  171. package/dist/backends/node-av/video/encoder/timestamp.d.ts.map +1 -0
  172. package/dist/backends/node-av/video/encoder/timestamp.js +39 -0
  173. package/dist/backends/node-av/video/encoder/timestamp.js.map +1 -0
  174. package/dist/backends/types.d.ts +44 -0
  175. package/dist/backends/types.d.ts.map +1 -1
  176. package/dist/backends/types.js.map +1 -1
  177. package/dist/codec-utils/formats.d.ts.map +1 -1
  178. package/dist/codec-utils/formats.js +78 -0
  179. package/dist/codec-utils/formats.js.map +1 -1
  180. package/dist/codec-utils/types.d.ts +1 -1
  181. package/dist/codecs/aac.d.ts +10 -0
  182. package/dist/codecs/aac.d.ts.map +1 -0
  183. package/dist/codecs/aac.js +10 -0
  184. package/dist/codecs/aac.js.map +1 -0
  185. package/dist/codecs/avc.d.ts +11 -0
  186. package/dist/codecs/avc.d.ts.map +1 -0
  187. package/dist/codecs/avc.js +11 -0
  188. package/dist/codecs/avc.js.map +1 -0
  189. package/dist/codecs/hevc.d.ts +11 -0
  190. package/dist/codecs/hevc.d.ts.map +1 -0
  191. package/dist/codecs/hevc.js +11 -0
  192. package/dist/codecs/hevc.js.map +1 -0
  193. package/dist/codecs/index.d.ts +10 -0
  194. package/dist/codecs/index.d.ts.map +1 -0
  195. package/dist/codecs/index.js +14 -0
  196. package/dist/codecs/index.js.map +1 -0
  197. package/dist/codecs/validation/audio.d.ts +19 -0
  198. package/dist/codecs/validation/audio.d.ts.map +1 -0
  199. package/dist/codecs/validation/audio.js +111 -0
  200. package/dist/codecs/validation/audio.js.map +1 -0
  201. package/dist/codecs/validation/config.d.ts +27 -0
  202. package/dist/codecs/validation/config.d.ts.map +1 -0
  203. package/dist/codecs/validation/config.js +154 -0
  204. package/dist/codecs/validation/config.js.map +1 -0
  205. package/dist/codecs/validation/index.d.ts +9 -0
  206. package/dist/codecs/validation/index.d.ts.map +1 -0
  207. package/dist/codecs/validation/index.js +12 -0
  208. package/dist/codecs/validation/index.js.map +1 -0
  209. package/dist/codecs/validation/video.d.ts +24 -0
  210. package/dist/codecs/validation/video.d.ts.map +1 -0
  211. package/dist/codecs/validation/video.js +196 -0
  212. package/dist/codecs/validation/video.js.map +1 -0
  213. package/dist/config/webcodecs-config.d.ts +58 -0
  214. package/dist/config/webcodecs-config.d.ts.map +1 -0
  215. package/dist/config/webcodecs-config.js +187 -0
  216. package/dist/config/webcodecs-config.js.map +1 -0
  217. package/dist/containers/Demuxer.d.ts +3 -1
  218. package/dist/containers/Demuxer.d.ts.map +1 -1
  219. package/dist/containers/Demuxer.js +26 -19
  220. package/dist/containers/Demuxer.js.map +1 -1
  221. package/dist/containers/FFmpegMuxer.d.ts +42 -0
  222. package/dist/containers/FFmpegMuxer.d.ts.map +1 -0
  223. package/dist/containers/FFmpegMuxer.js +311 -0
  224. package/dist/containers/FFmpegMuxer.js.map +1 -0
  225. package/dist/containers/Muxer.d.ts +75 -107
  226. package/dist/containers/Muxer.d.ts.map +1 -1
  227. package/dist/containers/Muxer.js +184 -243
  228. package/dist/containers/Muxer.js.map +1 -1
  229. package/dist/containers/NodeAvMuxer.d.ts +125 -0
  230. package/dist/containers/NodeAvMuxer.d.ts.map +1 -0
  231. package/dist/containers/NodeAvMuxer.js +458 -0
  232. package/dist/containers/NodeAvMuxer.js.map +1 -0
  233. package/dist/containers/extract.d.ts.map +1 -1
  234. package/dist/containers/extract.js +3 -1
  235. package/dist/containers/extract.js.map +1 -1
  236. package/dist/containers/index.d.ts +20 -14
  237. package/dist/containers/index.d.ts.map +1 -1
  238. package/dist/containers/index.js +21 -14
  239. package/dist/containers/index.js.map +1 -1
  240. package/dist/containers/muxer-types.d.ts +117 -0
  241. package/dist/containers/muxer-types.d.ts.map +1 -0
  242. package/dist/containers/muxer-types.js +45 -0
  243. package/dist/containers/muxer-types.js.map +1 -0
  244. package/dist/containers/transcode.d.ts.map +1 -1
  245. package/dist/containers/transcode.js +171 -150
  246. package/dist/containers/transcode.js.map +1 -1
  247. package/dist/core/AudioData.d.ts.map +1 -1
  248. package/dist/core/AudioData.js +54 -12
  249. package/dist/core/AudioData.js.map +1 -1
  250. package/dist/core/EncodedAudioChunk.d.ts.map +1 -1
  251. package/dist/core/EncodedAudioChunk.js +74 -6
  252. package/dist/core/EncodedAudioChunk.js.map +1 -1
  253. package/dist/core/EncodedVideoChunk.d.ts +2 -0
  254. package/dist/core/EncodedVideoChunk.d.ts.map +1 -1
  255. package/dist/core/EncodedVideoChunk.js +70 -2
  256. package/dist/core/EncodedVideoChunk.js.map +1 -1
  257. package/dist/core/VideoFrame.d.ts +27 -2
  258. package/dist/core/VideoFrame.d.ts.map +1 -1
  259. package/dist/core/VideoFrame.js +245 -125
  260. package/dist/core/VideoFrame.js.map +1 -1
  261. package/dist/core/video-frame/layout.d.ts +10 -0
  262. package/dist/core/video-frame/layout.d.ts.map +1 -0
  263. package/dist/core/video-frame/layout.js +97 -0
  264. package/dist/core/video-frame/layout.js.map +1 -0
  265. package/dist/core/video-frame/orientation.d.ts +23 -0
  266. package/dist/core/video-frame/orientation.d.ts.map +1 -0
  267. package/dist/core/video-frame/orientation.js +49 -0
  268. package/dist/core/video-frame/orientation.js.map +1 -0
  269. package/dist/core/video-frame/transfer.d.ts +19 -0
  270. package/dist/core/video-frame/transfer.d.ts.map +1 -0
  271. package/dist/core/video-frame/transfer.js +78 -0
  272. package/dist/core/video-frame/transfer.js.map +1 -0
  273. package/dist/core/video-frame/validation.d.ts +28 -0
  274. package/dist/core/video-frame/validation.d.ts.map +1 -0
  275. package/dist/core/video-frame/validation.js +76 -0
  276. package/dist/core/video-frame/validation.js.map +1 -0
  277. package/dist/decoders/AudioDecoder.d.ts +2 -19
  278. package/dist/decoders/AudioDecoder.d.ts.map +1 -1
  279. package/dist/decoders/AudioDecoder.js +27 -11
  280. package/dist/decoders/AudioDecoder.js.map +1 -1
  281. package/dist/decoders/ImageDecoder.d.ts +34 -41
  282. package/dist/decoders/ImageDecoder.d.ts.map +1 -1
  283. package/dist/decoders/ImageDecoder.js +158 -266
  284. package/dist/decoders/ImageDecoder.js.map +1 -1
  285. package/dist/decoders/VideoDecoder.d.ts +3 -38
  286. package/dist/decoders/VideoDecoder.d.ts.map +1 -1
  287. package/dist/decoders/VideoDecoder.js +126 -124
  288. package/dist/decoders/VideoDecoder.js.map +1 -1
  289. package/dist/decoders/audio/config.d.ts +23 -0
  290. package/dist/decoders/audio/config.d.ts.map +1 -0
  291. package/dist/decoders/audio/config.js +112 -0
  292. package/dist/decoders/audio/config.js.map +1 -0
  293. package/dist/decoders/audio/constants.d.ts +6 -0
  294. package/dist/decoders/audio/constants.d.ts.map +1 -0
  295. package/dist/decoders/audio/constants.js +6 -0
  296. package/dist/decoders/audio/constants.js.map +1 -0
  297. package/dist/decoders/audio/types.d.ts +21 -0
  298. package/dist/decoders/audio/types.d.ts.map +1 -0
  299. package/dist/decoders/audio/types.js +5 -0
  300. package/dist/decoders/audio/types.js.map +1 -0
  301. package/dist/decoders/image/orientation.d.ts +16 -0
  302. package/dist/decoders/image/orientation.d.ts.map +1 -0
  303. package/dist/decoders/image/orientation.js +170 -0
  304. package/dist/decoders/image/orientation.js.map +1 -0
  305. package/dist/decoders/image/stream.d.ts +12 -0
  306. package/dist/decoders/image/stream.d.ts.map +1 -0
  307. package/dist/decoders/image/stream.js +41 -0
  308. package/dist/decoders/image/stream.js.map +1 -0
  309. package/dist/decoders/image/tracks.d.ts +76 -0
  310. package/dist/decoders/image/tracks.d.ts.map +1 -0
  311. package/dist/decoders/image/tracks.js +136 -0
  312. package/dist/decoders/image/tracks.js.map +1 -0
  313. package/dist/decoders/image/types.d.ts +36 -0
  314. package/dist/decoders/image/types.d.ts.map +1 -0
  315. package/dist/decoders/image/types.js +5 -0
  316. package/dist/decoders/image/types.js.map +1 -0
  317. package/dist/decoders/video/codec-specific.d.ts +19 -0
  318. package/dist/decoders/video/codec-specific.d.ts.map +1 -0
  319. package/dist/decoders/video/codec-specific.js +62 -0
  320. package/dist/decoders/video/codec-specific.js.map +1 -0
  321. package/dist/decoders/video/config.d.ts +17 -0
  322. package/dist/decoders/video/config.d.ts.map +1 -0
  323. package/dist/decoders/video/config.js +91 -0
  324. package/dist/decoders/video/config.js.map +1 -0
  325. package/dist/decoders/video/constants.d.ts +8 -0
  326. package/dist/decoders/video/constants.d.ts.map +1 -0
  327. package/dist/decoders/video/constants.js +13 -0
  328. package/dist/decoders/video/constants.js.map +1 -0
  329. package/dist/decoders/video/queue.d.ts +9 -0
  330. package/dist/decoders/video/queue.d.ts.map +1 -0
  331. package/dist/decoders/video/queue.js +17 -0
  332. package/dist/decoders/video/queue.js.map +1 -0
  333. package/dist/decoders/video/types.d.ts +41 -0
  334. package/dist/decoders/video/types.d.ts.map +1 -0
  335. package/dist/decoders/video/types.js +5 -0
  336. package/dist/decoders/video/types.js.map +1 -0
  337. package/dist/demos/demo-audio-visualizer.js +74 -48
  338. package/dist/demos/demo-audio-visualizer.js.map +1 -1
  339. package/dist/demos/demo-dvd-logo.js +26 -23
  340. package/dist/demos/demo-dvd-logo.js.map +1 -1
  341. package/dist/demos/demo-flow-field.d.ts +11 -0
  342. package/dist/demos/demo-flow-field.d.ts.map +1 -0
  343. package/dist/demos/demo-flow-field.js +305 -0
  344. package/dist/demos/demo-flow-field.js.map +1 -0
  345. package/dist/demos/demo-four-corners.js +56 -120
  346. package/dist/demos/demo-four-corners.js.map +1 -1
  347. package/dist/demos/demo-image.js +24 -19
  348. package/dist/demos/demo-image.js.map +1 -1
  349. package/dist/demos/demo-matrix-rain.d.ts +11 -0
  350. package/dist/demos/demo-matrix-rain.d.ts.map +1 -0
  351. package/dist/demos/demo-matrix-rain.js +246 -0
  352. package/dist/demos/demo-matrix-rain.js.map +1 -0
  353. package/dist/demos/demo-pipeline.js +56 -51
  354. package/dist/demos/demo-pipeline.js.map +1 -1
  355. package/dist/demos/demo-samples.js +56 -402
  356. package/dist/demos/demo-samples.js.map +1 -1
  357. package/dist/encoders/AudioEncoder.d.ts +4 -28
  358. package/dist/encoders/AudioEncoder.d.ts.map +1 -1
  359. package/dist/encoders/AudioEncoder.js +83 -20
  360. package/dist/encoders/AudioEncoder.js.map +1 -1
  361. package/dist/encoders/VideoEncoder.d.ts +25 -46
  362. package/dist/encoders/VideoEncoder.d.ts.map +1 -1
  363. package/dist/encoders/VideoEncoder.js +180 -88
  364. package/dist/encoders/VideoEncoder.js.map +1 -1
  365. package/dist/encoders/audio/config.d.ts +30 -0
  366. package/dist/encoders/audio/config.d.ts.map +1 -0
  367. package/dist/encoders/audio/config.js +169 -0
  368. package/dist/encoders/audio/config.js.map +1 -0
  369. package/dist/encoders/audio/constants.d.ts +8 -0
  370. package/dist/encoders/audio/constants.d.ts.map +1 -0
  371. package/dist/encoders/audio/constants.js +8 -0
  372. package/dist/encoders/audio/constants.js.map +1 -0
  373. package/dist/encoders/audio/types.d.ts +70 -0
  374. package/dist/encoders/audio/types.d.ts.map +1 -0
  375. package/dist/encoders/audio/types.js +5 -0
  376. package/dist/encoders/audio/types.js.map +1 -0
  377. package/dist/encoders/video/config.d.ts +25 -0
  378. package/dist/encoders/video/config.d.ts.map +1 -0
  379. package/dist/encoders/video/config.js +132 -0
  380. package/dist/encoders/video/config.js.map +1 -0
  381. package/dist/encoders/video/constants.d.ts +8 -0
  382. package/dist/encoders/video/constants.d.ts.map +1 -0
  383. package/dist/encoders/video/constants.js +8 -0
  384. package/dist/encoders/video/constants.js.map +1 -0
  385. package/dist/encoders/video/queue.d.ts +9 -0
  386. package/dist/encoders/video/queue.d.ts.map +1 -0
  387. package/dist/encoders/video/queue.js +17 -0
  388. package/dist/encoders/video/queue.js.map +1 -0
  389. package/dist/encoders/video/types.d.ts +104 -0
  390. package/dist/encoders/video/types.d.ts.map +1 -0
  391. package/dist/encoders/video/types.js +5 -0
  392. package/dist/encoders/video/types.js.map +1 -0
  393. package/dist/formats/color-space/convert.d.ts +27 -0
  394. package/dist/formats/color-space/convert.d.ts.map +1 -0
  395. package/dist/formats/color-space/convert.js +91 -0
  396. package/dist/formats/color-space/convert.js.map +1 -0
  397. package/dist/formats/color-space/extract.d.ts +32 -0
  398. package/dist/formats/color-space/extract.d.ts.map +1 -0
  399. package/dist/formats/color-space/extract.js +116 -0
  400. package/dist/formats/color-space/extract.js.map +1 -0
  401. package/dist/formats/color-space/index.d.ts +10 -0
  402. package/dist/formats/color-space/index.d.ts.map +1 -0
  403. package/dist/formats/color-space/index.js +14 -0
  404. package/dist/formats/color-space/index.js.map +1 -0
  405. package/dist/formats/color-space/maps.d.ts +70 -0
  406. package/dist/formats/color-space/maps.d.ts.map +1 -0
  407. package/dist/formats/color-space/maps.js +70 -0
  408. package/dist/formats/color-space/maps.js.map +1 -0
  409. package/dist/formats/color-space/types.d.ts +68 -0
  410. package/dist/formats/color-space/types.d.ts.map +1 -0
  411. package/dist/formats/color-space/types.js +49 -0
  412. package/dist/formats/color-space/types.js.map +1 -0
  413. package/dist/formats/color-space.d.ts +4 -124
  414. package/dist/formats/color-space.d.ts.map +1 -1
  415. package/dist/formats/color-space.js +5 -108
  416. package/dist/formats/color-space.js.map +1 -1
  417. package/dist/formats/conversions/frame-converter.d.ts +8 -3
  418. package/dist/formats/conversions/frame-converter.d.ts.map +1 -1
  419. package/dist/formats/conversions/frame-converter.js +16 -12
  420. package/dist/formats/conversions/frame-converter.js.map +1 -1
  421. package/dist/formats/pixel-format/helpers.d.ts +49 -0
  422. package/dist/formats/pixel-format/helpers.d.ts.map +1 -0
  423. package/dist/formats/pixel-format/helpers.js +117 -0
  424. package/dist/formats/pixel-format/helpers.js.map +1 -0
  425. package/dist/formats/pixel-format/index.d.ts +9 -0
  426. package/dist/formats/pixel-format/index.d.ts.map +1 -0
  427. package/dist/formats/pixel-format/index.js +10 -0
  428. package/dist/formats/pixel-format/index.js.map +1 -0
  429. package/dist/formats/pixel-format/sizes.d.ts +17 -0
  430. package/dist/formats/pixel-format/sizes.d.ts.map +1 -0
  431. package/dist/formats/pixel-format/sizes.js +159 -0
  432. package/dist/formats/pixel-format/sizes.js.map +1 -0
  433. package/dist/formats/pixel-format/types.d.ts +13 -0
  434. package/dist/formats/pixel-format/types.d.ts.map +1 -0
  435. package/dist/formats/pixel-format/types.js +5 -0
  436. package/dist/formats/pixel-format/types.js.map +1 -0
  437. package/dist/formats/pixel-formats.d.ts +4 -53
  438. package/dist/formats/pixel-formats.d.ts.map +1 -1
  439. package/dist/formats/pixel-formats.js +5 -179
  440. package/dist/formats/pixel-formats.js.map +1 -1
  441. package/dist/hardware/decoder-args.d.ts.map +1 -1
  442. package/dist/hardware/decoder-args.js +35 -14
  443. package/dist/hardware/decoder-args.js.map +1 -1
  444. package/dist/hardware/detection.d.ts.map +1 -1
  445. package/dist/hardware/detection.js +39 -0
  446. package/dist/hardware/detection.js.map +1 -1
  447. package/dist/hardware/encoder-args.d.ts.map +1 -1
  448. package/dist/hardware/encoder-args.js +43 -5
  449. package/dist/hardware/encoder-args.js.map +1 -1
  450. package/dist/hardware/types.d.ts.map +1 -1
  451. package/dist/hardware/types.js +36 -28
  452. package/dist/hardware/types.js.map +1 -1
  453. package/dist/node-av/NodeAvVideoEncoder.d.ts +5 -0
  454. package/dist/node-av/NodeAvVideoEncoder.d.ts.map +1 -1
  455. package/dist/node-av/NodeAvVideoEncoder.js +76 -23
  456. package/dist/node-av/NodeAvVideoEncoder.js.map +1 -1
  457. package/dist/transfer/detach.d.ts +42 -0
  458. package/dist/transfer/detach.d.ts.map +1 -0
  459. package/dist/transfer/detach.js +93 -0
  460. package/dist/transfer/detach.js.map +1 -0
  461. package/dist/transfer/index.d.ts +9 -0
  462. package/dist/transfer/index.d.ts.map +1 -0
  463. package/dist/transfer/index.js +11 -0
  464. package/dist/transfer/index.js.map +1 -0
  465. package/dist/transfer/validate.d.ts +45 -0
  466. package/dist/transfer/validate.d.ts.map +1 -0
  467. package/dist/transfer/validate.js +98 -0
  468. package/dist/transfer/validate.js.map +1 -0
  469. package/dist/types/video.d.ts +16 -0
  470. package/dist/types/video.d.ts.map +1 -1
  471. package/dist/utils/avc.d.ts +2 -0
  472. package/dist/utils/avc.d.ts.map +1 -1
  473. package/dist/utils/avc.js +36 -8
  474. package/dist/utils/avc.js.map +1 -1
  475. package/dist/utils/codec-validation.d.ts +3 -28
  476. package/dist/utils/codec-validation.d.ts.map +1 -1
  477. package/dist/utils/codec-validation.js +4 -238
  478. package/dist/utils/codec-validation.js.map +1 -1
  479. package/dist/utils/hevc.d.ts +2 -0
  480. package/dist/utils/hevc.d.ts.map +1 -1
  481. package/dist/utils/hevc.js +42 -8
  482. package/dist/utils/hevc.js.map +1 -1
  483. package/docs/api.md +24 -4
  484. package/docs/architecture-refactor-plan.md +149 -0
  485. package/docs/architecture.md +258 -0
  486. package/docs/configuration.md +10 -7
  487. package/package.json +6 -4
  488. package/dist/config/ffmpeg-quality.d.ts +0 -14
  489. package/dist/config/ffmpeg-quality.d.ts.map +0 -1
  490. package/dist/config/ffmpeg-quality.js +0 -41
  491. package/dist/config/ffmpeg-quality.js.map +0 -1
  492. package/dist/polyfills/CanvasRenderingContext2DPolyfill.d.ts +0 -72
  493. package/dist/polyfills/CanvasRenderingContext2DPolyfill.d.ts.map +0 -1
  494. package/dist/polyfills/CanvasRenderingContext2DPolyfill.js +0 -293
  495. package/dist/polyfills/CanvasRenderingContext2DPolyfill.js.map +0 -1
  496. package/dist/polyfills/ImageDataPolyfill.d.ts +0 -12
  497. package/dist/polyfills/ImageDataPolyfill.d.ts.map +0 -1
  498. package/dist/polyfills/ImageDataPolyfill.js +0 -22
  499. package/dist/polyfills/ImageDataPolyfill.js.map +0 -1
  500. package/dist/polyfills/OffscreenCanvasPolyfill.d.ts +0 -16
  501. package/dist/polyfills/OffscreenCanvasPolyfill.d.ts.map +0 -1
  502. package/dist/polyfills/OffscreenCanvasPolyfill.js +0 -46
  503. package/dist/polyfills/OffscreenCanvasPolyfill.js.map +0 -1
  504. package/dist/polyfills/VideoFramePolyfill.d.ts +0 -44
  505. package/dist/polyfills/VideoFramePolyfill.d.ts.map +0 -1
  506. package/dist/polyfills/VideoFramePolyfill.js +0 -98
  507. package/dist/polyfills/VideoFramePolyfill.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NodeAvMuxer.d.ts","sourceRoot":"","sources":["../../src/containers/NodeAvMuxer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,aAAa,EAiBd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAGjE,OAAO,KAAK,EACV,MAAM,EACN,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,kBAAkB,CAAC;AAI1B,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAwCxF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,WAAY,YAAW,MAAM;IACxC,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,iBAAiB,CAAc;IACvC,OAAO,CAAC,iBAAiB,CAAc;IACvC,OAAO,CAAC,YAAY,CAAiC;IACrD,OAAO,CAAC,YAAY,CAAiC;IACrD,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,cAAc,CAAS;IAE/B,OAAO,CAAC,aAAa,CAAO;IAC5B,OAAO,CAAC,aAAa,CAAO;IAE5B,OAAO,CAAC,kBAAkB,CAAmF;IAC7G,OAAO,CAAC,eAAe,CAAM;IAC7B,OAAO,CAAC,oBAAoB,CAAS;IAErC,OAAO,CAAC,WAAW,CAAS;gBAEhB,MAAM,EAAE,WAAW;IAI/B;;;;OAIG;IACG,IAAI,CAAC,OAAO,GAAE,MAA8B,GAAG,OAAO,CAAC,IAAI,CAAC;IAelE;;;;;OAKG;IACG,aAAa,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;IAgC9D;;;;;OAKG;IACG,aAAa,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;IA+B9D;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAU3B;;;;OAIG;IACG,eAAe,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAgG9D,OAAO,CAAC,wBAAwB;IAoDhC;;;;OAIG;IACG,eAAe,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAiD9D;;;;OAIG;IACG,KAAK,CAAC,OAAO,GAAE,MAA+B,GAAG,OAAO,CAAC,IAAI,CAAC;IA6DpE;;OAEG;IACH,IAAI,MAAM,IAAI,aAAa,GAAG,IAAI,CAEjC;IAED;;OAEG;IACH,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED;;OAEG;IACH,IAAI,eAAe,IAAI,MAAM,CAE5B;CACF;AAED;;;GAGG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,UAAU,CAAsC;IACxD,OAAO,CAAC,QAAQ,CAAoC;IAEpD;;;OAGG;WACU,KAAK,CAChB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAC5B,OAAO,CAAC,IAAI,CAAC;CAiCjB"}
@@ -0,0 +1,458 @@
1
+ /**
2
+ * Node-av Muxer - Fast muxer using node-av's FormatContext API
3
+ *
4
+ * Uses node-av's low-level FormatContext API to provide a WebCodecs-compatible interface
5
+ * that accepts EncodedVideoChunk and EncodedAudioChunk objects. This is the fast path
6
+ * (~5ms muxing time) used by the main Muxer class.
7
+ */
8
+ import { FormatContext, Packet, Rational, Demuxer as NodeAvDemuxerInternal, Muxer as NodeAvMuxerInternal, AV_CODEC_ID_H264, AV_CODEC_ID_HEVC, AV_CODEC_ID_VP8, AV_CODEC_ID_VP9, AV_CODEC_ID_AV1, AV_CODEC_ID_AAC, AV_CODEC_ID_OPUS, AV_CODEC_ID_MP3, AV_CODEC_ID_VORBIS, AV_CODEC_ID_FLAC, AVMEDIA_TYPE_VIDEO, AVMEDIA_TYPE_AUDIO, } from 'node-av';
9
+ import { withTimeout, DEFAULT_TIMEOUTS } from '../utils/timeout.js';
10
+ import { Logger } from '../utils/logger.js';
11
+ import { inferFormat } from './muxer-types.js';
12
+ const logger = new Logger('NodeAvMuxer');
13
+ /**
14
+ * Maps WebCodecs codec strings to FFmpeg codec IDs
15
+ */
16
+ function mapVideoCodecId(codec) {
17
+ const codecLower = codec.toLowerCase();
18
+ if (codecLower.startsWith('avc1') || codecLower.startsWith('avc3') || codecLower === 'h264') {
19
+ return AV_CODEC_ID_H264;
20
+ }
21
+ else if (codecLower.startsWith('hvc1') || codecLower.startsWith('hev1') || codecLower === 'hevc') {
22
+ return AV_CODEC_ID_HEVC;
23
+ }
24
+ else if (codecLower === 'vp8') {
25
+ return AV_CODEC_ID_VP8;
26
+ }
27
+ else if (codecLower.startsWith('vp09') || codecLower === 'vp9') {
28
+ return AV_CODEC_ID_VP9;
29
+ }
30
+ else if (codecLower.startsWith('av01') || codecLower === 'av1') {
31
+ return AV_CODEC_ID_AV1;
32
+ }
33
+ throw new Error(`Unsupported video codec: ${codec}`);
34
+ }
35
+ function mapAudioCodecId(codec) {
36
+ const codecLower = codec.toLowerCase();
37
+ if (codecLower.startsWith('mp4a') || codecLower === 'aac') {
38
+ return AV_CODEC_ID_AAC;
39
+ }
40
+ else if (codecLower === 'mp3') {
41
+ return AV_CODEC_ID_MP3;
42
+ }
43
+ else if (codecLower === 'opus') {
44
+ return AV_CODEC_ID_OPUS;
45
+ }
46
+ else if (codecLower === 'vorbis') {
47
+ return AV_CODEC_ID_VORBIS;
48
+ }
49
+ else if (codecLower === 'flac') {
50
+ return AV_CODEC_ID_FLAC;
51
+ }
52
+ throw new Error(`Unsupported audio codec: ${codec}`);
53
+ }
54
+ /**
55
+ * Node-av based muxer that accepts WebCodecs-compatible chunks
56
+ *
57
+ * Uses node-av's low-level FormatContext API for direct packet writing.
58
+ * This is the fast implementation (~5ms) used internally by the main Muxer class.
59
+ *
60
+ * @example
61
+ * ```typescript
62
+ * const muxer = new NodeAvMuxer({ path: 'output.mp4' });
63
+ * await muxer.open();
64
+ * await muxer.addVideoTrack({
65
+ * codec: 'avc1.42001E',
66
+ * codedWidth: 640,
67
+ * codedHeight: 480,
68
+ * framerate: 30,
69
+ * description: spsNaluBuffer, // Optional: H.264 SPS/PPS
70
+ * });
71
+ *
72
+ * // Write encoded chunks from VideoEncoder
73
+ * await muxer.writeVideoChunk(chunk);
74
+ *
75
+ * await muxer.close();
76
+ * ```
77
+ */
78
+ export class NodeAvMuxer {
79
+ formatContext = null;
80
+ config;
81
+ _videoStreamIndex = -1;
82
+ _audioStreamIndex = -1;
83
+ _videoConfig = null;
84
+ _audioConfig = null;
85
+ _videoChunkCount = 0;
86
+ _audioChunkCount = 0;
87
+ _headerWritten = false;
88
+ // Track DTS for monotonic ordering (required by container formats)
89
+ _lastVideoDts = -1n;
90
+ _lastAudioDts = -1n;
91
+ // Buffer video packets until we can determine B-frame pattern
92
+ _videoPacketBuffer = [];
93
+ _videoPtsOffset = 0n;
94
+ _videoBufferAnalyzed = false;
95
+ // Track if B-frames were detected - when false, use DTS = PTS
96
+ _hasBFrames = false;
97
+ constructor(config) {
98
+ this.config = config;
99
+ }
100
+ /**
101
+ * Open the muxer for writing
102
+ *
103
+ * @param timeout - Operation timeout in milliseconds (default: 15000)
104
+ */
105
+ async open(timeout = DEFAULT_TIMEOUTS.open) {
106
+ const format = this.config.format || inferFormat(this.config.path);
107
+ // Create and configure FormatContext
108
+ this.formatContext = new FormatContext();
109
+ this.formatContext.allocOutputContext2(null, format, this.config.path);
110
+ // Open output file
111
+ await withTimeout(this.formatContext.openOutput(this.config.path), timeout, `Muxer open (${this.config.path})`);
112
+ }
113
+ /**
114
+ * Add a video track to the output
115
+ *
116
+ * @param config - Video track configuration
117
+ * @returns Stream index for the video track
118
+ */
119
+ async addVideoTrack(config) {
120
+ if (!this.formatContext) {
121
+ throw new Error('Muxer not opened');
122
+ }
123
+ this._videoConfig = config;
124
+ const codecId = mapVideoCodecId(config.codec);
125
+ // Create a new stream
126
+ const stream = this.formatContext.newStream(null);
127
+ this._videoStreamIndex = stream.index;
128
+ // Set codec parameters on the stream
129
+ const cp = stream.codecpar;
130
+ cp.codecType = AVMEDIA_TYPE_VIDEO;
131
+ cp.codecId = codecId;
132
+ cp.width = config.codedWidth;
133
+ cp.height = config.codedHeight;
134
+ cp.bitRate = BigInt(config.bitrate || 1_000_000);
135
+ cp.format = 0; // YUV420P
136
+ // Set extradata if description is provided (SPS/PPS for H.264, etc.)
137
+ if (config.description && config.description.length > 0) {
138
+ cp.extradata = Buffer.from(config.description);
139
+ }
140
+ // Set stream time base to microseconds (WebCodecs uses microseconds)
141
+ stream.timeBase = new Rational(1, 1_000_000);
142
+ return this._videoStreamIndex;
143
+ }
144
+ /**
145
+ * Add an audio track to the output
146
+ *
147
+ * @param config - Audio track configuration
148
+ * @returns Stream index for the audio track
149
+ */
150
+ async addAudioTrack(config) {
151
+ if (!this.formatContext) {
152
+ throw new Error('Muxer not opened');
153
+ }
154
+ this._audioConfig = config;
155
+ const codecId = mapAudioCodecId(config.codec);
156
+ // Create a new stream
157
+ const stream = this.formatContext.newStream(null);
158
+ this._audioStreamIndex = stream.index;
159
+ // Set codec parameters on the stream
160
+ const cp = stream.codecpar;
161
+ cp.codecType = AVMEDIA_TYPE_AUDIO;
162
+ cp.codecId = codecId;
163
+ cp.sampleRate = config.sampleRate;
164
+ cp.channels = config.numberOfChannels;
165
+ cp.bitRate = BigInt(config.bitrate || 128_000);
166
+ // Set extradata if description is provided (AudioSpecificConfig for AAC, etc.)
167
+ if (config.description && config.description.length > 0) {
168
+ cp.extradata = Buffer.from(config.description);
169
+ }
170
+ // Set stream time base to microseconds (WebCodecs uses microseconds)
171
+ stream.timeBase = new Rational(1, 1_000_000);
172
+ return this._audioStreamIndex;
173
+ }
174
+ /**
175
+ * Write header if not already written
176
+ */
177
+ writeHeaderIfNeeded() {
178
+ if (!this._headerWritten && this.formatContext) {
179
+ const ret = this.formatContext.writeHeaderSync();
180
+ if (ret < 0) {
181
+ throw new Error(`Failed to write header: ${ret}`);
182
+ }
183
+ this._headerWritten = true;
184
+ }
185
+ }
186
+ /**
187
+ * Write an encoded video chunk to the output container
188
+ *
189
+ * @param chunk - EncodedVideoChunk from VideoEncoder
190
+ */
191
+ async writeVideoChunk(chunk) {
192
+ if (!this.formatContext || this._videoStreamIndex < 0) {
193
+ throw new Error('Video track not configured. Call addVideoTrack() first.');
194
+ }
195
+ // Write header on first chunk
196
+ this.writeHeaderIfNeeded();
197
+ // Get the output stream's actual time base (may differ from what we set)
198
+ const stream = this.formatContext.streams[this._videoStreamIndex];
199
+ const streamTimeBase = stream.timeBase;
200
+ // Create a proper node-av Packet from the chunk data
201
+ const packet = new Packet();
202
+ packet.alloc();
203
+ packet.data = Buffer.from(chunk._buffer);
204
+ // Convert timestamps from microseconds to stream timebase
205
+ const usToStreamTs = (us) => {
206
+ // ts_out = ts_in * (timebase_in / timebase_out)
207
+ // ts_out = us * (1/1000000) / (streamTimeBase.num / streamTimeBase.den)
208
+ // ts_out = us * streamTimeBase.den / (1000000 * streamTimeBase.num)
209
+ return BigInt(Math.round(us * streamTimeBase.den / (1_000_000 * streamTimeBase.num)));
210
+ };
211
+ // Use actual chunk timestamp as PTS (presentation time)
212
+ const pts = usToStreamTs(chunk.timestamp);
213
+ const frameDuration = usToStreamTs(chunk.duration ?? 33333);
214
+ const isKeyframe = chunk.type === 'key';
215
+ // Buffer packets until we can analyze B-frame pattern (wait for second keyframe or enough packets)
216
+ if (!this._videoBufferAnalyzed) {
217
+ this._videoPacketBuffer.push({ pts, duration: frameDuration, data: Buffer.from(chunk._buffer), isKeyframe });
218
+ // Analyze after we have: second keyframe, or 30 packets, or detect out-of-order PTS
219
+ const hasSecondKeyframe = this._videoPacketBuffer.filter(p => p.isKeyframe).length >= 2;
220
+ const hasEnoughPackets = this._videoPacketBuffer.length >= 30;
221
+ const hasOutOfOrderPts = this._videoPacketBuffer.length >= 2 &&
222
+ this._videoPacketBuffer.some((p, i) => i > 0 && p.pts < this._videoPacketBuffer[i - 1].pts);
223
+ if (hasSecondKeyframe || hasEnoughPackets || hasOutOfOrderPts) {
224
+ this._videoBufferAnalyzed = true;
225
+ // Check if there are B-frames (out-of-order PTS)
226
+ let maxPtsDrop = 0n;
227
+ for (let i = 1; i < this._videoPacketBuffer.length; i++) {
228
+ if (this._videoPacketBuffer[i].pts < this._videoPacketBuffer[i - 1].pts) {
229
+ this._hasBFrames = true;
230
+ const drop = this._videoPacketBuffer[i - 1].pts - this._videoPacketBuffer[i].pts;
231
+ if (drop > maxPtsDrop)
232
+ maxPtsDrop = drop;
233
+ }
234
+ }
235
+ // If B-frames detected, compute required PTS offset
236
+ // Offset = max(DTS - PTS) across all packets when DTS increments by duration
237
+ if (this._hasBFrames) {
238
+ // Compute what DTS would be for each packet if we just increment by duration
239
+ let simulatedDts = 0n;
240
+ let maxOffset = 0n;
241
+ for (const p of this._videoPacketBuffer) {
242
+ if (simulatedDts > p.pts) {
243
+ const offset = simulatedDts - p.pts;
244
+ if (offset > maxOffset)
245
+ maxOffset = offset;
246
+ }
247
+ simulatedDts += p.duration > 0n ? p.duration : 1n;
248
+ }
249
+ this._videoPtsOffset = maxOffset + 1n; // Add 1 for safety margin
250
+ }
251
+ // Write all buffered packets
252
+ for (const bufferedPacket of this._videoPacketBuffer) {
253
+ this.writeVideoPacketInternal(bufferedPacket.data, bufferedPacket.pts + this._videoPtsOffset, bufferedPacket.duration, bufferedPacket.isKeyframe, stream, streamTimeBase);
254
+ }
255
+ this._videoPacketBuffer = [];
256
+ }
257
+ return;
258
+ }
259
+ // After buffer analysis, write packets directly with computed offset
260
+ this.writeVideoPacketInternal(Buffer.from(chunk._buffer), pts + this._videoPtsOffset, frameDuration, isKeyframe, stream, streamTimeBase);
261
+ }
262
+ writeVideoPacketInternal(data, pts, duration, isKeyframe, stream, streamTimeBase) {
263
+ const packet = new Packet();
264
+ packet.alloc();
265
+ packet.data = data;
266
+ // DTS must be monotonically increasing AND DTS <= PTS
267
+ let dts;
268
+ if (!this._hasBFrames) {
269
+ // No B-frames: DTS = PTS (handles non-zero start timestamps correctly)
270
+ dts = pts;
271
+ }
272
+ else {
273
+ // B-frames: compute DTS by incrementing from 0
274
+ if (this._lastVideoDts < 0n) {
275
+ dts = 0n;
276
+ }
277
+ else {
278
+ dts = this._lastVideoDts + (duration > 0n ? duration : 1n);
279
+ }
280
+ // Cap DTS at PTS (required for valid composition time offset)
281
+ if (dts > pts) {
282
+ dts = pts;
283
+ }
284
+ }
285
+ // Ensure strictly increasing
286
+ if (this._lastVideoDts >= 0n && dts <= this._lastVideoDts) {
287
+ dts = this._lastVideoDts + 1n;
288
+ }
289
+ this._lastVideoDts = dts;
290
+ packet.pts = pts;
291
+ packet.dts = dts;
292
+ packet.duration = duration;
293
+ packet.streamIndex = this._videoStreamIndex;
294
+ packet.isKeyframe = isKeyframe;
295
+ packet.timeBase = streamTimeBase;
296
+ const ret = this.formatContext.interleavedWriteFrameSync(packet);
297
+ packet.free();
298
+ if (ret < 0) {
299
+ throw new Error(`Failed to write video packet: ${ret}`);
300
+ }
301
+ this._videoChunkCount++;
302
+ }
303
+ /**
304
+ * Write an encoded audio chunk to the output container
305
+ *
306
+ * @param chunk - EncodedAudioChunk from AudioEncoder
307
+ */
308
+ async writeAudioChunk(chunk) {
309
+ if (!this.formatContext || this._audioStreamIndex < 0 || !this._audioConfig) {
310
+ throw new Error('Audio track not configured. Call addAudioTrack() first.');
311
+ }
312
+ // Write header on first chunk
313
+ this.writeHeaderIfNeeded();
314
+ // Get the output stream's actual time base (may differ from what we set)
315
+ const stream = this.formatContext.streams[this._audioStreamIndex];
316
+ const streamTimeBase = stream.timeBase;
317
+ // Create a proper node-av Packet from the chunk data
318
+ const packet = new Packet();
319
+ packet.alloc();
320
+ packet.data = Buffer.from(chunk._rawData);
321
+ // Convert timestamps from microseconds to stream timebase
322
+ // For audio, the stream timebase is typically 1/sampleRate
323
+ const usToStreamTs = (us) => {
324
+ // ts_out = ts_in * (timebase_in / timebase_out)
325
+ // ts_out = us * (1/1000000) / (streamTimeBase.num / streamTimeBase.den)
326
+ // ts_out = us * streamTimeBase.den / (1000000 * streamTimeBase.num)
327
+ return BigInt(Math.round(us * streamTimeBase.den / (1_000_000 * streamTimeBase.num)));
328
+ };
329
+ // Audio doesn't have B-frames, so PTS = DTS
330
+ // Use actual chunk timestamp for both
331
+ const pts = usToStreamTs(chunk.timestamp);
332
+ packet.pts = pts;
333
+ packet.dts = pts;
334
+ if (chunk.duration) {
335
+ packet.duration = usToStreamTs(chunk.duration);
336
+ }
337
+ packet.streamIndex = this._audioStreamIndex;
338
+ packet.isKeyframe = chunk.type === 'key';
339
+ packet.timeBase = streamTimeBase;
340
+ // Use interleavedWriteFrameSync for proper A/V packet interleaving
341
+ const ret = this.formatContext.interleavedWriteFrameSync(packet);
342
+ packet.free();
343
+ if (ret < 0) {
344
+ throw new Error(`Failed to write audio packet: ${ret}`);
345
+ }
346
+ this._audioChunkCount++;
347
+ }
348
+ /**
349
+ * Finalize and close the muxer
350
+ *
351
+ * @param timeout - Operation timeout in milliseconds (default: 10000)
352
+ */
353
+ async close(timeout = DEFAULT_TIMEOUTS.close) {
354
+ if (this.formatContext) {
355
+ // Flush any buffered video packets
356
+ if (this._videoPacketBuffer.length > 0) {
357
+ this._videoBufferAnalyzed = true;
358
+ const stream = this.formatContext.streams[this._videoStreamIndex];
359
+ const streamTimeBase = stream?.timeBase ?? { num: 1, den: 1000 };
360
+ // Analyze B-frames in remaining buffer
361
+ for (let i = 1; i < this._videoPacketBuffer.length; i++) {
362
+ if (this._videoPacketBuffer[i].pts < this._videoPacketBuffer[i - 1].pts) {
363
+ this._hasBFrames = true;
364
+ break;
365
+ }
366
+ }
367
+ if (this._hasBFrames) {
368
+ let simulatedDts = this._lastVideoDts >= 0n ? this._lastVideoDts : 0n;
369
+ let maxOffset = 0n;
370
+ for (const p of this._videoPacketBuffer) {
371
+ simulatedDts += p.duration > 0n ? p.duration : 1n;
372
+ if (simulatedDts > p.pts + this._videoPtsOffset) {
373
+ const offset = simulatedDts - (p.pts + this._videoPtsOffset);
374
+ if (offset > maxOffset)
375
+ maxOffset = offset;
376
+ }
377
+ }
378
+ this._videoPtsOffset += maxOffset + 1n;
379
+ }
380
+ for (const bufferedPacket of this._videoPacketBuffer) {
381
+ this.writeVideoPacketInternal(bufferedPacket.data, bufferedPacket.pts + this._videoPtsOffset, bufferedPacket.duration, bufferedPacket.isKeyframe, stream, streamTimeBase);
382
+ }
383
+ this._videoPacketBuffer = [];
384
+ }
385
+ // Write trailer
386
+ if (this._headerWritten) {
387
+ const ret = this.formatContext.writeTrailerSync();
388
+ if (ret < 0) {
389
+ logger.warn(`writeTrailer returned error code ${ret}`);
390
+ }
391
+ }
392
+ // Close output and free context
393
+ await withTimeout(this.formatContext.closeOutput(), timeout, 'Muxer close output');
394
+ this.formatContext.freeContext();
395
+ this.formatContext = null;
396
+ }
397
+ }
398
+ /**
399
+ * Get the underlying FormatContext (for advanced use)
400
+ */
401
+ get native() {
402
+ return this.formatContext;
403
+ }
404
+ /**
405
+ * Get number of video chunks written
406
+ */
407
+ get videoChunkCount() {
408
+ return this._videoChunkCount;
409
+ }
410
+ /**
411
+ * Get number of audio chunks written
412
+ */
413
+ get audioChunkCount() {
414
+ return this._audioChunkCount;
415
+ }
416
+ }
417
+ /**
418
+ * Helper class for stream copy (remux) operations
419
+ * This copies encoded data from one container to another without re-encoding
420
+ */
421
+ export class StreamCopier {
422
+ srcDemuxer = null;
423
+ dstMuxer = null;
424
+ /**
425
+ * Remux a file from one container format to another
426
+ * This performs a stream copy without re-encoding
427
+ */
428
+ static async remux(inputPath, outputPath, options) {
429
+ const demuxer = await NodeAvDemuxerInternal.open(inputPath);
430
+ const format = options?.format || inferFormat(outputPath);
431
+ const muxer = await NodeAvMuxerInternal.open(outputPath, { format });
432
+ const streamMap = new Map();
433
+ // Copy video stream
434
+ const videoStream = demuxer.video();
435
+ if (videoStream) {
436
+ const outIndex = muxer.addStream(videoStream);
437
+ streamMap.set(videoStream.index, outIndex);
438
+ }
439
+ // Copy audio stream
440
+ const audioStream = demuxer.audio();
441
+ if (audioStream) {
442
+ const outIndex = muxer.addStream(audioStream);
443
+ streamMap.set(audioStream.index, outIndex);
444
+ }
445
+ // Copy packets
446
+ for await (const packet of demuxer.packets()) {
447
+ if (!packet)
448
+ continue;
449
+ const outIndex = streamMap.get(packet.streamIndex);
450
+ if (outIndex !== undefined) {
451
+ await muxer.writePacket(packet, outIndex);
452
+ }
453
+ }
454
+ await demuxer.close();
455
+ await muxer.close();
456
+ }
457
+ }
458
+ //# sourceMappingURL=NodeAvMuxer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NodeAvMuxer.js","sourceRoot":"","sources":["../../src/containers/NodeAvMuxer.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../src/containers/extract.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAuB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,CAAC,UAAU,CAAC,CA8CvF"}
1
+ {"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../src/containers/extract.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAKnD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAuB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,CAAC,UAAU,CAAC,CA8CvF"}
@@ -5,6 +5,8 @@
5
5
  */
6
6
  import { Demuxer } from './Demuxer.js';
7
7
  import { VideoDecoder } from '../decoders/VideoDecoder.js';
8
+ import { Logger } from '../utils/logger.js';
9
+ const logger = new Logger('Extract');
8
10
  /**
9
11
  * Extract video frames from a container file as VideoFrame objects
10
12
  *
@@ -36,7 +38,7 @@ export async function* extractVideoFrames(inputPath) {
36
38
  output: (frame) => {
37
39
  frames.push(frame);
38
40
  },
39
- error: (err) => console.error('Decode error:', err),
41
+ error: (err) => logger.error('Decode error:', err),
40
42
  });
41
43
  decoder.configure({
42
44
  codec: videoConfig.codec,
@@ -1 +1 @@
1
- {"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/containers/extract.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAG3D;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,kBAAkB,CAAC,SAAiB;IACzD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IACjD,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;IAErB,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IACxC,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO;IACT,CAAC;IAED,oCAAoC;IACpC,MAAM,MAAM,GAAiB,EAAE,CAAC;IAEhC,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC;QAC/B,MAAM,EAAE,CAAC,KAAiB,EAAE,EAAE;YAC5B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;QACD,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,GAAG,CAAC;KACpD,CAAC,CAAC;IAEH,OAAO,CAAC,SAAS,CAAC;QAChB,KAAK,EAAE,WAAW,CAAC,KAAK;QACxB,UAAU,EAAE,WAAW,CAAC,UAAU;QAClC,WAAW,EAAE,WAAW,CAAC,WAAW;QACpC,WAAW,EAAE,WAAW,CAAC,WAAW;KACrC,CAAC,CAAC;IAEH,0BAA0B;IAC1B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;QAChD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEtB,2BAA2B;QAC3B,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,MAAM,CAAC,KAAK,EAAG,CAAC;QACxB,CAAC;IACH,CAAC;IAED,wCAAwC;IACxC,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IACtB,OAAO,CAAC,KAAK,EAAE,CAAC;IAChB,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IAEtB,6BAA6B;IAC7B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/containers/extract.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC;AAErC;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,kBAAkB,CAAC,SAAiB;IACzD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IACjD,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;IAErB,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IACxC,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO;IACT,CAAC;IAED,oCAAoC;IACpC,MAAM,MAAM,GAAiB,EAAE,CAAC;IAEhC,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC;QAC/B,MAAM,EAAE,CAAC,KAAiB,EAAE,EAAE;YAC5B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;QACD,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,GAAG,CAAC;KACnD,CAAC,CAAC;IAEH,OAAO,CAAC,SAAS,CAAC;QAChB,KAAK,EAAE,WAAW,CAAC,KAAK;QACxB,UAAU,EAAE,WAAW,CAAC,UAAU;QAClC,WAAW,EAAE,WAAW,CAAC,WAAW;QACpC,WAAW,EAAE,WAAW,CAAC,WAAW;KACrC,CAAC,CAAC;IAEH,0BAA0B;IAC1B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;QAChD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEtB,2BAA2B;QAC3B,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,MAAM,CAAC,KAAK,EAAG,CAAC;QACxB,CAAC;IACH,CAAC;IAED,wCAAwC;IACxC,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IACtB,OAAO,CAAC,KAAK,EAAE,CAAC;IAChB,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IAEtB,6BAA6B;IAC7B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -6,11 +6,7 @@
6
6
  *
7
7
  * @example
8
8
  * ```typescript
9
- * import { Demuxer, transcode, getMediaInfo } from 'webcodecs-node/containers';
10
- *
11
- * // Get media info
12
- * const info = await getMediaInfo('video.mp4');
13
- * console.log(info.video.codec, info.video.width, info.video.height);
9
+ * import { Demuxer, Muxer, muxChunks } from 'webcodecs-node/containers';
14
10
  *
15
11
  * // Demux video chunks for WebCodecs processing
16
12
  * const demuxer = new Demuxer({ path: 'video.mp4' });
@@ -20,20 +16,30 @@
20
16
  * }
21
17
  * await demuxer.close();
22
18
  *
23
- * // Transcode to different codec/settings
24
- * await transcode('input.mp4', 'output.mp4', {
25
- * videoCodec: 'h264',
26
- * videoBitrate: 1_000_000,
27
- * });
19
+ * // Mux encoded chunks to a file (with automatic fallback)
20
+ * const muxer = new Muxer({ path: 'output.mp4' });
21
+ * await muxer.open();
22
+ * await muxer.addVideoTrack({ codec: 'avc1.64001E', ... });
23
+ * // ... write chunks
24
+ * const result = await muxer.closeWithResult();
25
+ * console.log(`Used ${result.backend} in ${result.durationMs}ms`);
28
26
  *
29
- * // Remux to different container (no re-encoding)
30
- * await remux('input.mp4', 'output.mkv');
27
+ * // Or use the convenience function
28
+ * const result = await muxChunks({
29
+ * path: 'output.mp4',
30
+ * video: { config, chunks },
31
+ * audio: { config, chunks },
32
+ * });
31
33
  * ```
32
34
  */
33
35
  export { Demuxer } from './Demuxer.js';
34
36
  export type { DemuxerConfig, VideoStreamConfig, AudioStreamConfig, VideoChunkCallback, AudioChunkCallback, } from './Demuxer.js';
35
- export { Muxer, StreamCopier } from './Muxer.js';
36
- export type { MuxerConfig, VideoTrackConfig, AudioTrackConfig } from './Muxer.js';
37
+ export type { IMuxer, MuxerConfig, VideoTrackConfig, AudioTrackConfig, MuxResult, } from './muxer-types.js';
38
+ export { MuxerError, inferFormat } from './muxer-types.js';
39
+ export { Muxer, muxChunks } from './Muxer.js';
40
+ export type { MuxerOptions } from './Muxer.js';
41
+ export { NodeAvMuxer, StreamCopier } from './NodeAvMuxer.js';
42
+ export { FFmpegMuxer } from './FFmpegMuxer.js';
37
43
  export { remux, transcode, getMediaInfo } from './transcode.js';
38
44
  export type { TranscodeOptions, TranscodeProgress, TranscodeResult, MediaInfo, VideoCodec, AudioCodec, HardwareAcceleration, } from './transcode.js';
39
45
  export { extractVideoFrames } from './extract.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/containers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,YAAY,EACV,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACjD,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGlF,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAChE,YAAY,EACV,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,SAAS,EACT,UAAU,EACV,UAAU,EACV,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/containers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,YAAY,EACV,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,cAAc,CAAC;AAGtB,YAAY,EACV,MAAM,EACN,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,SAAS,GACV,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG3D,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC9C,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAG7D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAChE,YAAY,EACV,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,SAAS,EACT,UAAU,EACV,UAAU,EACV,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC"}
@@ -6,11 +6,7 @@
6
6
  *
7
7
  * @example
8
8
  * ```typescript
9
- * import { Demuxer, transcode, getMediaInfo } from 'webcodecs-node/containers';
10
- *
11
- * // Get media info
12
- * const info = await getMediaInfo('video.mp4');
13
- * console.log(info.video.codec, info.video.width, info.video.height);
9
+ * import { Demuxer, Muxer, muxChunks } from 'webcodecs-node/containers';
14
10
  *
15
11
  * // Demux video chunks for WebCodecs processing
16
12
  * const demuxer = new Demuxer({ path: 'video.mp4' });
@@ -20,20 +16,31 @@
20
16
  * }
21
17
  * await demuxer.close();
22
18
  *
23
- * // Transcode to different codec/settings
24
- * await transcode('input.mp4', 'output.mp4', {
25
- * videoCodec: 'h264',
26
- * videoBitrate: 1_000_000,
27
- * });
19
+ * // Mux encoded chunks to a file (with automatic fallback)
20
+ * const muxer = new Muxer({ path: 'output.mp4' });
21
+ * await muxer.open();
22
+ * await muxer.addVideoTrack({ codec: 'avc1.64001E', ... });
23
+ * // ... write chunks
24
+ * const result = await muxer.closeWithResult();
25
+ * console.log(`Used ${result.backend} in ${result.durationMs}ms`);
28
26
  *
29
- * // Remux to different container (no re-encoding)
30
- * await remux('input.mp4', 'output.mkv');
27
+ * // Or use the convenience function
28
+ * const result = await muxChunks({
29
+ * path: 'output.mp4',
30
+ * video: { config, chunks },
31
+ * audio: { config, chunks },
32
+ * });
31
33
  * ```
32
34
  */
33
35
  // Demuxer
34
36
  export { Demuxer } from './Demuxer.js';
35
- // Muxer
36
- export { Muxer, StreamCopier } from './Muxer.js';
37
+ export { MuxerError, inferFormat } from './muxer-types.js';
38
+ // Main Muxer (with automatic fallback - recommended)
39
+ export { Muxer, muxChunks } from './Muxer.js';
40
+ // Node-av Muxer (fast, direct implementation)
41
+ export { NodeAvMuxer, StreamCopier } from './NodeAvMuxer.js';
42
+ // FFmpeg Muxer (subprocess-based, more compatible)
43
+ export { FFmpegMuxer } from './FFmpegMuxer.js';
37
44
  // Transcoding utilities
38
45
  export { remux, transcode, getMediaInfo } from './transcode.js';
39
46
  // Frame extraction
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/containers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,UAAU;AACV,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AASvC,QAAQ;AACR,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAGjD,wBAAwB;AACxB,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAWhE,mBAAmB;AACnB,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/containers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,UAAU;AACV,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAiBvC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE3D,qDAAqD;AACrD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG9C,8CAA8C;AAC9C,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAE7D,mDAAmD;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,wBAAwB;AACxB,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAWhE,mBAAmB;AACnB,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC"}