webcodecs-node 0.2.2

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 (455) hide show
  1. package/LICENSE +656 -0
  2. package/README.md +607 -0
  3. package/dist/AudioData.d.ts +6 -0
  4. package/dist/AudioData.d.ts.map +1 -0
  5. package/dist/AudioData.js +6 -0
  6. package/dist/AudioData.js.map +1 -0
  7. package/dist/AudioDecoder.d.ts +6 -0
  8. package/dist/AudioDecoder.d.ts.map +1 -0
  9. package/dist/AudioDecoder.js +6 -0
  10. package/dist/AudioDecoder.js.map +1 -0
  11. package/dist/AudioEncoder.d.ts +6 -0
  12. package/dist/AudioEncoder.d.ts.map +1 -0
  13. package/dist/AudioEncoder.js +6 -0
  14. package/dist/AudioEncoder.js.map +1 -0
  15. package/dist/EncodedAudioChunk.d.ts +6 -0
  16. package/dist/EncodedAudioChunk.d.ts.map +1 -0
  17. package/dist/EncodedAudioChunk.js +6 -0
  18. package/dist/EncodedAudioChunk.js.map +1 -0
  19. package/dist/EncodedVideoChunk.d.ts +6 -0
  20. package/dist/EncodedVideoChunk.d.ts.map +1 -0
  21. package/dist/EncodedVideoChunk.js +6 -0
  22. package/dist/EncodedVideoChunk.js.map +1 -0
  23. package/dist/FFmpegProcess.d.ts +6 -0
  24. package/dist/FFmpegProcess.d.ts.map +1 -0
  25. package/dist/FFmpegProcess.js +6 -0
  26. package/dist/FFmpegProcess.js.map +1 -0
  27. package/dist/HardwareAcceleration.d.ts +6 -0
  28. package/dist/HardwareAcceleration.d.ts.map +1 -0
  29. package/dist/HardwareAcceleration.js +6 -0
  30. package/dist/HardwareAcceleration.js.map +1 -0
  31. package/dist/ImageDecoder.d.ts +6 -0
  32. package/dist/ImageDecoder.d.ts.map +1 -0
  33. package/dist/ImageDecoder.js +6 -0
  34. package/dist/ImageDecoder.js.map +1 -0
  35. package/dist/Logger.d.ts +6 -0
  36. package/dist/Logger.d.ts.map +1 -0
  37. package/dist/Logger.js +6 -0
  38. package/dist/Logger.js.map +1 -0
  39. package/dist/MediaCapabilities.d.ts +9 -0
  40. package/dist/MediaCapabilities.d.ts.map +1 -0
  41. package/dist/MediaCapabilities.js +8 -0
  42. package/dist/MediaCapabilities.js.map +1 -0
  43. package/dist/VideoDecoder.d.ts +6 -0
  44. package/dist/VideoDecoder.d.ts.map +1 -0
  45. package/dist/VideoDecoder.js +6 -0
  46. package/dist/VideoDecoder.js.map +1 -0
  47. package/dist/VideoEncoder.d.ts +6 -0
  48. package/dist/VideoEncoder.d.ts.map +1 -0
  49. package/dist/VideoEncoder.js +6 -0
  50. package/dist/VideoEncoder.js.map +1 -0
  51. package/dist/VideoFrame.d.ts +10 -0
  52. package/dist/VideoFrame.d.ts.map +1 -0
  53. package/dist/VideoFrame.js +9 -0
  54. package/dist/VideoFrame.js.map +1 -0
  55. package/dist/__tests__/AudioData.test.d.ts +5 -0
  56. package/dist/__tests__/AudioData.test.d.ts.map +1 -0
  57. package/dist/__tests__/AudioData.test.js +179 -0
  58. package/dist/__tests__/AudioData.test.js.map +1 -0
  59. package/dist/__tests__/AudioDecoder.test.d.ts +5 -0
  60. package/dist/__tests__/AudioDecoder.test.d.ts.map +1 -0
  61. package/dist/__tests__/AudioDecoder.test.js +733 -0
  62. package/dist/__tests__/AudioDecoder.test.js.map +1 -0
  63. package/dist/__tests__/AudioEncoder.test.d.ts +5 -0
  64. package/dist/__tests__/AudioEncoder.test.d.ts.map +1 -0
  65. package/dist/__tests__/AudioEncoder.test.js +247 -0
  66. package/dist/__tests__/AudioEncoder.test.js.map +1 -0
  67. package/dist/__tests__/EncodedChunks.test.d.ts +5 -0
  68. package/dist/__tests__/EncodedChunks.test.d.ts.map +1 -0
  69. package/dist/__tests__/EncodedChunks.test.js +99 -0
  70. package/dist/__tests__/EncodedChunks.test.js.map +1 -0
  71. package/dist/__tests__/HardwareAcceleration.test.d.ts +5 -0
  72. package/dist/__tests__/HardwareAcceleration.test.d.ts.map +1 -0
  73. package/dist/__tests__/HardwareAcceleration.test.js +84 -0
  74. package/dist/__tests__/HardwareAcceleration.test.js.map +1 -0
  75. package/dist/__tests__/ImageDecoder.test.d.ts +5 -0
  76. package/dist/__tests__/ImageDecoder.test.d.ts.map +1 -0
  77. package/dist/__tests__/ImageDecoder.test.js +587 -0
  78. package/dist/__tests__/ImageDecoder.test.js.map +1 -0
  79. package/dist/__tests__/MediaCapabilities.test.d.ts +5 -0
  80. package/dist/__tests__/MediaCapabilities.test.d.ts.map +1 -0
  81. package/dist/__tests__/MediaCapabilities.test.js +346 -0
  82. package/dist/__tests__/MediaCapabilities.test.js.map +1 -0
  83. package/dist/__tests__/VideoDecoder.test.d.ts +5 -0
  84. package/dist/__tests__/VideoDecoder.test.d.ts.map +1 -0
  85. package/dist/__tests__/VideoDecoder.test.js +675 -0
  86. package/dist/__tests__/VideoDecoder.test.js.map +1 -0
  87. package/dist/__tests__/VideoEncoder.test.d.ts +5 -0
  88. package/dist/__tests__/VideoEncoder.test.d.ts.map +1 -0
  89. package/dist/__tests__/VideoEncoder.test.js +468 -0
  90. package/dist/__tests__/VideoEncoder.test.js.map +1 -0
  91. package/dist/__tests__/VideoFrame.test.d.ts +5 -0
  92. package/dist/__tests__/VideoFrame.test.d.ts.map +1 -0
  93. package/dist/__tests__/VideoFrame.test.js +243 -0
  94. package/dist/__tests__/VideoFrame.test.js.map +1 -0
  95. package/dist/__tests__/aac-utils.test.d.ts +2 -0
  96. package/dist/__tests__/aac-utils.test.d.ts.map +1 -0
  97. package/dist/__tests__/aac-utils.test.js +37 -0
  98. package/dist/__tests__/aac-utils.test.js.map +1 -0
  99. package/dist/__tests__/avc-utils.test.d.ts +2 -0
  100. package/dist/__tests__/avc-utils.test.d.ts.map +1 -0
  101. package/dist/__tests__/avc-utils.test.js +63 -0
  102. package/dist/__tests__/avc-utils.test.js.map +1 -0
  103. package/dist/__tests__/hevc-utils.test.d.ts +2 -0
  104. package/dist/__tests__/hevc-utils.test.d.ts.map +1 -0
  105. package/dist/__tests__/hevc-utils.test.js +78 -0
  106. package/dist/__tests__/hevc-utils.test.js.map +1 -0
  107. package/dist/capabilities/MediaCapabilities.d.ts +78 -0
  108. package/dist/capabilities/MediaCapabilities.d.ts.map +1 -0
  109. package/dist/capabilities/MediaCapabilities.js +276 -0
  110. package/dist/capabilities/MediaCapabilities.js.map +1 -0
  111. package/dist/capabilities/codecs.d.ts +72 -0
  112. package/dist/capabilities/codecs.d.ts.map +1 -0
  113. package/dist/capabilities/codecs.js +153 -0
  114. package/dist/capabilities/codecs.js.map +1 -0
  115. package/dist/capabilities/index.d.ts +7 -0
  116. package/dist/capabilities/index.d.ts.map +1 -0
  117. package/dist/capabilities/index.js +8 -0
  118. package/dist/capabilities/index.js.map +1 -0
  119. package/dist/capabilities/types.d.ts +77 -0
  120. package/dist/capabilities/types.d.ts.map +1 -0
  121. package/dist/capabilities/types.js +5 -0
  122. package/dist/capabilities/types.js.map +1 -0
  123. package/dist/core/AudioData.d.ts +36 -0
  124. package/dist/core/AudioData.d.ts.map +1 -0
  125. package/dist/core/AudioData.js +229 -0
  126. package/dist/core/AudioData.js.map +1 -0
  127. package/dist/core/EncodedAudioChunk.d.ts +26 -0
  128. package/dist/core/EncodedAudioChunk.d.ts.map +1 -0
  129. package/dist/core/EncodedAudioChunk.js +58 -0
  130. package/dist/core/EncodedAudioChunk.js.map +1 -0
  131. package/dist/core/EncodedVideoChunk.d.ts +23 -0
  132. package/dist/core/EncodedVideoChunk.d.ts.map +1 -0
  133. package/dist/core/EncodedVideoChunk.js +55 -0
  134. package/dist/core/EncodedVideoChunk.js.map +1 -0
  135. package/dist/core/VideoFrame.d.ts +61 -0
  136. package/dist/core/VideoFrame.d.ts.map +1 -0
  137. package/dist/core/VideoFrame.js +385 -0
  138. package/dist/core/VideoFrame.js.map +1 -0
  139. package/dist/core/index.d.ts +8 -0
  140. package/dist/core/index.d.ts.map +1 -0
  141. package/dist/core/index.js +8 -0
  142. package/dist/core/index.js.map +1 -0
  143. package/dist/debug-h264.d.ts +5 -0
  144. package/dist/debug-h264.d.ts.map +1 -0
  145. package/dist/debug-h264.js +103 -0
  146. package/dist/debug-h264.js.map +1 -0
  147. package/dist/decoders/AudioDecoder.d.ts +57 -0
  148. package/dist/decoders/AudioDecoder.d.ts.map +1 -0
  149. package/dist/decoders/AudioDecoder.js +333 -0
  150. package/dist/decoders/AudioDecoder.js.map +1 -0
  151. package/dist/decoders/ImageDecoder.d.ts +111 -0
  152. package/dist/decoders/ImageDecoder.d.ts.map +1 -0
  153. package/dist/decoders/ImageDecoder.js +686 -0
  154. package/dist/decoders/ImageDecoder.js.map +1 -0
  155. package/dist/decoders/VideoDecoder.d.ts +70 -0
  156. package/dist/decoders/VideoDecoder.d.ts.map +1 -0
  157. package/dist/decoders/VideoDecoder.js +410 -0
  158. package/dist/decoders/VideoDecoder.js.map +1 -0
  159. package/dist/decoders/index.d.ts +8 -0
  160. package/dist/decoders/index.d.ts.map +1 -0
  161. package/dist/decoders/index.js +7 -0
  162. package/dist/decoders/index.js.map +1 -0
  163. package/dist/demos/demo-audio-opus.d.ts +5 -0
  164. package/dist/demos/demo-audio-opus.d.ts.map +1 -0
  165. package/dist/demos/demo-audio-opus.js +107 -0
  166. package/dist/demos/demo-audio-opus.js.map +1 -0
  167. package/dist/demos/demo-audio.d.ts +10 -0
  168. package/dist/demos/demo-audio.d.ts.map +1 -0
  169. package/dist/demos/demo-audio.js +135 -0
  170. package/dist/demos/demo-audio.js.map +1 -0
  171. package/dist/demos/demo-conversion.d.ts +13 -0
  172. package/dist/demos/demo-conversion.d.ts.map +1 -0
  173. package/dist/demos/demo-conversion.js +301 -0
  174. package/dist/demos/demo-conversion.js.map +1 -0
  175. package/dist/demos/demo-h264.d.ts +7 -0
  176. package/dist/demos/demo-h264.d.ts.map +1 -0
  177. package/dist/demos/demo-h264.js +134 -0
  178. package/dist/demos/demo-h264.js.map +1 -0
  179. package/dist/demos/demo-hwaccel-conversion.d.ts +8 -0
  180. package/dist/demos/demo-hwaccel-conversion.d.ts.map +1 -0
  181. package/dist/demos/demo-hwaccel-conversion.js +161 -0
  182. package/dist/demos/demo-hwaccel-conversion.js.map +1 -0
  183. package/dist/demos/demo-hwaccel.d.ts +7 -0
  184. package/dist/demos/demo-hwaccel.d.ts.map +1 -0
  185. package/dist/demos/demo-hwaccel.js +51 -0
  186. package/dist/demos/demo-hwaccel.js.map +1 -0
  187. package/dist/demos/demo-image.d.ts +12 -0
  188. package/dist/demos/demo-image.d.ts.map +1 -0
  189. package/dist/demos/demo-image.js +178 -0
  190. package/dist/demos/demo-image.js.map +1 -0
  191. package/dist/demos/demo-mediabunny.d.ts +7 -0
  192. package/dist/demos/demo-mediabunny.d.ts.map +1 -0
  193. package/dist/demos/demo-mediabunny.js +78 -0
  194. package/dist/demos/demo-mediabunny.js.map +1 -0
  195. package/dist/demos/demo-pipeline.d.ts +8 -0
  196. package/dist/demos/demo-pipeline.d.ts.map +1 -0
  197. package/dist/demos/demo-pipeline.js +83 -0
  198. package/dist/demos/demo-pipeline.js.map +1 -0
  199. package/dist/demos/demo-samples.d.ts +9 -0
  200. package/dist/demos/demo-samples.d.ts.map +1 -0
  201. package/dist/demos/demo-samples.js +413 -0
  202. package/dist/demos/demo-samples.js.map +1 -0
  203. package/dist/demos/demo-streaming.d.ts +8 -0
  204. package/dist/demos/demo-streaming.d.ts.map +1 -0
  205. package/dist/demos/demo-streaming.js +299 -0
  206. package/dist/demos/demo-streaming.js.map +1 -0
  207. package/dist/demos/demo-webcodecs.d.ts +8 -0
  208. package/dist/demos/demo-webcodecs.d.ts.map +1 -0
  209. package/dist/demos/demo-webcodecs.js +316 -0
  210. package/dist/demos/demo-webcodecs.js.map +1 -0
  211. package/dist/demos/demo.d.ts +10 -0
  212. package/dist/demos/demo.d.ts.map +1 -0
  213. package/dist/demos/demo.js +123 -0
  214. package/dist/demos/demo.js.map +1 -0
  215. package/dist/encoders/AudioEncoder.d.ts +69 -0
  216. package/dist/encoders/AudioEncoder.d.ts.map +1 -0
  217. package/dist/encoders/AudioEncoder.js +425 -0
  218. package/dist/encoders/AudioEncoder.js.map +1 -0
  219. package/dist/encoders/VideoEncoder.d.ts +80 -0
  220. package/dist/encoders/VideoEncoder.d.ts.map +1 -0
  221. package/dist/encoders/VideoEncoder.js +386 -0
  222. package/dist/encoders/VideoEncoder.js.map +1 -0
  223. package/dist/encoders/codecs/av1.d.ts +31 -0
  224. package/dist/encoders/codecs/av1.d.ts.map +1 -0
  225. package/dist/encoders/codecs/av1.js +66 -0
  226. package/dist/encoders/codecs/av1.js.map +1 -0
  227. package/dist/encoders/codecs/h264.d.ts +28 -0
  228. package/dist/encoders/codecs/h264.d.ts.map +1 -0
  229. package/dist/encoders/codecs/h264.js +95 -0
  230. package/dist/encoders/codecs/h264.js.map +1 -0
  231. package/dist/encoders/codecs/hevc.d.ts +28 -0
  232. package/dist/encoders/codecs/hevc.d.ts.map +1 -0
  233. package/dist/encoders/codecs/hevc.js +73 -0
  234. package/dist/encoders/codecs/hevc.js.map +1 -0
  235. package/dist/encoders/codecs/index.d.ts +19 -0
  236. package/dist/encoders/codecs/index.d.ts.map +1 -0
  237. package/dist/encoders/codecs/index.js +60 -0
  238. package/dist/encoders/codecs/index.js.map +1 -0
  239. package/dist/encoders/codecs/vp9.d.ts +29 -0
  240. package/dist/encoders/codecs/vp9.d.ts.map +1 -0
  241. package/dist/encoders/codecs/vp9.js +58 -0
  242. package/dist/encoders/codecs/vp9.js.map +1 -0
  243. package/dist/encoders/index.d.ts +8 -0
  244. package/dist/encoders/index.d.ts.map +1 -0
  245. package/dist/encoders/index.js +8 -0
  246. package/dist/encoders/index.js.map +1 -0
  247. package/dist/ffmpeg/FFmpegProcess.d.ts +111 -0
  248. package/dist/ffmpeg/FFmpegProcess.d.ts.map +1 -0
  249. package/dist/ffmpeg/FFmpegProcess.js +543 -0
  250. package/dist/ffmpeg/FFmpegProcess.js.map +1 -0
  251. package/dist/ffmpeg/audio-codecs.d.ts +59 -0
  252. package/dist/ffmpeg/audio-codecs.d.ts.map +1 -0
  253. package/dist/ffmpeg/audio-codecs.js +99 -0
  254. package/dist/ffmpeg/audio-codecs.js.map +1 -0
  255. package/dist/ffmpeg/formats.d.ts +42 -0
  256. package/dist/ffmpeg/formats.d.ts.map +1 -0
  257. package/dist/ffmpeg/formats.js +147 -0
  258. package/dist/ffmpeg/formats.js.map +1 -0
  259. package/dist/ffmpeg/index.d.ts +9 -0
  260. package/dist/ffmpeg/index.d.ts.map +1 -0
  261. package/dist/ffmpeg/index.js +13 -0
  262. package/dist/ffmpeg/index.js.map +1 -0
  263. package/dist/ffmpeg/parsers/annexb.d.ts +88 -0
  264. package/dist/ffmpeg/parsers/annexb.d.ts.map +1 -0
  265. package/dist/ffmpeg/parsers/annexb.js +201 -0
  266. package/dist/ffmpeg/parsers/annexb.js.map +1 -0
  267. package/dist/ffmpeg/parsers/index.d.ts +6 -0
  268. package/dist/ffmpeg/parsers/index.d.ts.map +1 -0
  269. package/dist/ffmpeg/parsers/index.js +8 -0
  270. package/dist/ffmpeg/parsers/index.js.map +1 -0
  271. package/dist/ffmpeg/parsers/ivf.d.ts +54 -0
  272. package/dist/ffmpeg/parsers/ivf.d.ts.map +1 -0
  273. package/dist/ffmpeg/parsers/ivf.js +109 -0
  274. package/dist/ffmpeg/parsers/ivf.js.map +1 -0
  275. package/dist/ffmpeg/types.d.ts +85 -0
  276. package/dist/ffmpeg/types.d.ts.map +1 -0
  277. package/dist/ffmpeg/types.js +8 -0
  278. package/dist/ffmpeg/types.js.map +1 -0
  279. package/dist/formats/audio-formats.d.ts +61 -0
  280. package/dist/formats/audio-formats.d.ts.map +1 -0
  281. package/dist/formats/audio-formats.js +113 -0
  282. package/dist/formats/audio-formats.js.map +1 -0
  283. package/dist/formats/color-space.d.ts +35 -0
  284. package/dist/formats/color-space.d.ts.map +1 -0
  285. package/dist/formats/color-space.js +62 -0
  286. package/dist/formats/color-space.js.map +1 -0
  287. package/dist/formats/conversions/frame-converter.d.ts +42 -0
  288. package/dist/formats/conversions/frame-converter.d.ts.map +1 -0
  289. package/dist/formats/conversions/frame-converter.js +244 -0
  290. package/dist/formats/conversions/frame-converter.js.map +1 -0
  291. package/dist/formats/conversions/index.d.ts +8 -0
  292. package/dist/formats/conversions/index.d.ts.map +1 -0
  293. package/dist/formats/conversions/index.js +10 -0
  294. package/dist/formats/conversions/index.js.map +1 -0
  295. package/dist/formats/index.d.ts +9 -0
  296. package/dist/formats/index.d.ts.map +1 -0
  297. package/dist/formats/index.js +14 -0
  298. package/dist/formats/index.js.map +1 -0
  299. package/dist/formats/parsers/index.d.ts +5 -0
  300. package/dist/formats/parsers/index.d.ts.map +1 -0
  301. package/dist/formats/parsers/index.js +5 -0
  302. package/dist/formats/parsers/index.js.map +1 -0
  303. package/dist/formats/parsers/webp.d.ts +16 -0
  304. package/dist/formats/parsers/webp.d.ts.map +1 -0
  305. package/dist/formats/parsers/webp.js +116 -0
  306. package/dist/formats/parsers/webp.js.map +1 -0
  307. package/dist/formats/pixel-formats.d.ts +41 -0
  308. package/dist/formats/pixel-formats.d.ts.map +1 -0
  309. package/dist/formats/pixel-formats.js +113 -0
  310. package/dist/formats/pixel-formats.js.map +1 -0
  311. package/dist/hardware/HardwareAcceleration.d.ts +6 -0
  312. package/dist/hardware/HardwareAcceleration.d.ts.map +1 -0
  313. package/dist/hardware/HardwareAcceleration.js +6 -0
  314. package/dist/hardware/HardwareAcceleration.js.map +1 -0
  315. package/dist/hardware/decoder-args.d.ts +25 -0
  316. package/dist/hardware/decoder-args.d.ts.map +1 -0
  317. package/dist/hardware/decoder-args.js +84 -0
  318. package/dist/hardware/decoder-args.js.map +1 -0
  319. package/dist/hardware/detection.d.ts +39 -0
  320. package/dist/hardware/detection.d.ts.map +1 -0
  321. package/dist/hardware/detection.js +178 -0
  322. package/dist/hardware/detection.js.map +1 -0
  323. package/dist/hardware/encoder-args.d.ts +38 -0
  324. package/dist/hardware/encoder-args.d.ts.map +1 -0
  325. package/dist/hardware/encoder-args.js +177 -0
  326. package/dist/hardware/encoder-args.js.map +1 -0
  327. package/dist/hardware/index.d.ts +12 -0
  328. package/dist/hardware/index.d.ts.map +1 -0
  329. package/dist/hardware/index.js +14 -0
  330. package/dist/hardware/index.js.map +1 -0
  331. package/dist/hardware/types.d.ts +29 -0
  332. package/dist/hardware/types.d.ts.map +1 -0
  333. package/dist/hardware/types.js +58 -0
  334. package/dist/hardware/types.js.map +1 -0
  335. package/dist/index.d.ts +44 -0
  336. package/dist/index.d.ts.map +1 -0
  337. package/dist/index.js +37 -0
  338. package/dist/index.js.map +1 -0
  339. package/dist/mediabunny/FFmpegAudioDecoder.d.ts +37 -0
  340. package/dist/mediabunny/FFmpegAudioDecoder.d.ts.map +1 -0
  341. package/dist/mediabunny/FFmpegAudioDecoder.js +254 -0
  342. package/dist/mediabunny/FFmpegAudioDecoder.js.map +1 -0
  343. package/dist/mediabunny/FFmpegAudioEncoder.d.ts +77 -0
  344. package/dist/mediabunny/FFmpegAudioEncoder.d.ts.map +1 -0
  345. package/dist/mediabunny/FFmpegAudioEncoder.js +484 -0
  346. package/dist/mediabunny/FFmpegAudioEncoder.js.map +1 -0
  347. package/dist/mediabunny/FFmpegVideoDecoder.d.ts +58 -0
  348. package/dist/mediabunny/FFmpegVideoDecoder.d.ts.map +1 -0
  349. package/dist/mediabunny/FFmpegVideoDecoder.js +366 -0
  350. package/dist/mediabunny/FFmpegVideoDecoder.js.map +1 -0
  351. package/dist/mediabunny/FFmpegVideoEncoder.d.ts +77 -0
  352. package/dist/mediabunny/FFmpegVideoEncoder.d.ts.map +1 -0
  353. package/dist/mediabunny/FFmpegVideoEncoder.js +551 -0
  354. package/dist/mediabunny/FFmpegVideoEncoder.js.map +1 -0
  355. package/dist/mediabunny/index.d.ts +21 -0
  356. package/dist/mediabunny/index.d.ts.map +1 -0
  357. package/dist/mediabunny/index.js +33 -0
  358. package/dist/mediabunny/index.js.map +1 -0
  359. package/dist/polyfill.d.ts +27 -0
  360. package/dist/polyfill.d.ts.map +1 -0
  361. package/dist/polyfill.js +78 -0
  362. package/dist/polyfill.js.map +1 -0
  363. package/dist/polyfills/CanvasRenderingContext2DPolyfill.d.ts +72 -0
  364. package/dist/polyfills/CanvasRenderingContext2DPolyfill.d.ts.map +1 -0
  365. package/dist/polyfills/CanvasRenderingContext2DPolyfill.js +293 -0
  366. package/dist/polyfills/CanvasRenderingContext2DPolyfill.js.map +1 -0
  367. package/dist/polyfills/ImageDataPolyfill.d.ts +12 -0
  368. package/dist/polyfills/ImageDataPolyfill.d.ts.map +1 -0
  369. package/dist/polyfills/ImageDataPolyfill.js +22 -0
  370. package/dist/polyfills/ImageDataPolyfill.js.map +1 -0
  371. package/dist/polyfills/OffscreenCanvas.d.ts +15 -0
  372. package/dist/polyfills/OffscreenCanvas.d.ts.map +1 -0
  373. package/dist/polyfills/OffscreenCanvas.js +35 -0
  374. package/dist/polyfills/OffscreenCanvas.js.map +1 -0
  375. package/dist/polyfills/OffscreenCanvasPolyfill.d.ts +16 -0
  376. package/dist/polyfills/OffscreenCanvasPolyfill.d.ts.map +1 -0
  377. package/dist/polyfills/OffscreenCanvasPolyfill.js +46 -0
  378. package/dist/polyfills/OffscreenCanvasPolyfill.js.map +1 -0
  379. package/dist/polyfills/VideoFramePolyfill.d.ts +44 -0
  380. package/dist/polyfills/VideoFramePolyfill.d.ts.map +1 -0
  381. package/dist/polyfills/VideoFramePolyfill.js +98 -0
  382. package/dist/polyfills/VideoFramePolyfill.js.map +1 -0
  383. package/dist/tools/generate-capabilities-profile.d.ts +2 -0
  384. package/dist/tools/generate-capabilities-profile.d.ts.map +1 -0
  385. package/dist/tools/generate-capabilities-profile.js +63 -0
  386. package/dist/tools/generate-capabilities-profile.js.map +1 -0
  387. package/dist/types/audio.d.ts +26 -0
  388. package/dist/types/audio.d.ts.map +1 -0
  389. package/dist/types/audio.js +5 -0
  390. package/dist/types/audio.js.map +1 -0
  391. package/dist/types/common.d.ts +68 -0
  392. package/dist/types/common.d.ts.map +1 -0
  393. package/dist/types/common.js +70 -0
  394. package/dist/types/common.js.map +1 -0
  395. package/dist/types/geometry.d.ts +35 -0
  396. package/dist/types/geometry.d.ts.map +1 -0
  397. package/dist/types/geometry.js +34 -0
  398. package/dist/types/geometry.js.map +1 -0
  399. package/dist/types/index.d.ts +8 -0
  400. package/dist/types/index.d.ts.map +1 -0
  401. package/dist/types/index.js +8 -0
  402. package/dist/types/index.js.map +1 -0
  403. package/dist/types/video.d.ts +43 -0
  404. package/dist/types/video.d.ts.map +1 -0
  405. package/dist/types/video.js +5 -0
  406. package/dist/types/video.js.map +1 -0
  407. package/dist/types.d.ts +6 -0
  408. package/dist/types.d.ts.map +1 -0
  409. package/dist/types.js +6 -0
  410. package/dist/types.js.map +1 -0
  411. package/dist/utils/aac.d.ts +26 -0
  412. package/dist/utils/aac.d.ts.map +1 -0
  413. package/dist/utils/aac.js +129 -0
  414. package/dist/utils/aac.js.map +1 -0
  415. package/dist/utils/avc.d.ts +39 -0
  416. package/dist/utils/avc.d.ts.map +1 -0
  417. package/dist/utils/avc.js +225 -0
  418. package/dist/utils/avc.js.map +1 -0
  419. package/dist/utils/buffer.d.ts +25 -0
  420. package/dist/utils/buffer.d.ts.map +1 -0
  421. package/dist/utils/buffer.js +73 -0
  422. package/dist/utils/buffer.js.map +1 -0
  423. package/dist/utils/hevc.d.ts +27 -0
  424. package/dist/utils/hevc.d.ts.map +1 -0
  425. package/dist/utils/hevc.js +239 -0
  426. package/dist/utils/hevc.js.map +1 -0
  427. package/dist/utils/index.d.ts +11 -0
  428. package/dist/utils/index.d.ts.map +1 -0
  429. package/dist/utils/index.js +16 -0
  430. package/dist/utils/index.js.map +1 -0
  431. package/dist/utils/logger.d.ts +55 -0
  432. package/dist/utils/logger.d.ts.map +1 -0
  433. package/dist/utils/logger.js +110 -0
  434. package/dist/utils/logger.js.map +1 -0
  435. package/dist/utils/type-guards.d.ts +50 -0
  436. package/dist/utils/type-guards.d.ts.map +1 -0
  437. package/dist/utils/type-guards.js +49 -0
  438. package/dist/utils/type-guards.js.map +1 -0
  439. package/dist/utils/validation.d.ts +32 -0
  440. package/dist/utils/validation.d.ts.map +1 -0
  441. package/dist/utils/validation.js +66 -0
  442. package/dist/utils/validation.js.map +1 -0
  443. package/docs/api.md +506 -0
  444. package/docs/codecs.md +382 -0
  445. package/docs/configuration.md +442 -0
  446. package/examples/README.md +100 -0
  447. package/examples/audio-encoding.ts +85 -0
  448. package/examples/hardware-decoding.ts +245 -0
  449. package/examples/hardware-encoding.ts +231 -0
  450. package/examples/image-decoding.ts +145 -0
  451. package/examples/streaming.ts +151 -0
  452. package/examples/transparent-video.ts +162 -0
  453. package/examples/video-decoding.ts +107 -0
  454. package/examples/video-encoding.ts +93 -0
  455. package/package.json +105 -0
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Hardware acceleration type definitions
3
+ */
4
+ export type HardwareAccelerationMethod = 'none' | 'vaapi' | 'cuda' | 'nvenc' | 'nvdec' | 'qsv' | 'videotoolbox' | 'v4l2m2m' | 'drm';
5
+ export type VideoCodecName = 'h264' | 'hevc' | 'vp8' | 'vp9' | 'av1';
6
+ export interface HardwareEncoderInfo {
7
+ name: string;
8
+ hwaccel: HardwareAccelerationMethod;
9
+ codec: VideoCodecName;
10
+ available: boolean;
11
+ priority: number;
12
+ }
13
+ export interface HardwareDecoderInfo {
14
+ name: string;
15
+ hwaccel: HardwareAccelerationMethod;
16
+ codec: VideoCodecName;
17
+ available: boolean;
18
+ priority: number;
19
+ }
20
+ export interface HardwareCapabilities {
21
+ methods: HardwareAccelerationMethod[];
22
+ encoders: HardwareEncoderInfo[];
23
+ decoders: HardwareDecoderInfo[];
24
+ detected: boolean;
25
+ }
26
+ export declare const HARDWARE_ENCODERS: Omit<HardwareEncoderInfo, 'available'>[];
27
+ export declare const HARDWARE_DECODERS: Omit<HardwareDecoderInfo, 'available'>[];
28
+ export declare const SOFTWARE_ENCODERS: Record<VideoCodecName, string>;
29
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/hardware/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,0BAA0B,GAClC,MAAM,GACN,OAAO,GACP,MAAM,GACN,OAAO,GACP,OAAO,GACP,KAAK,GACL,cAAc,GACd,SAAS,GACT,KAAK,CAAC;AAEV,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AAErE,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,0BAA0B,CAAC;IACpC,KAAK,EAAE,cAAc,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,0BAA0B,CAAC;IACpC,KAAK,EAAE,cAAc,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,0BAA0B,EAAE,CAAC;IACtC,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAChC,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAChC,QAAQ,EAAE,OAAO,CAAC;CACnB;AAID,eAAO,MAAM,iBAAiB,EAAE,IAAI,CAAC,mBAAmB,EAAE,WAAW,CAAC,EA2BrE,CAAC;AAKF,eAAO,MAAM,iBAAiB,EAAE,IAAI,CAAC,mBAAmB,EAAE,WAAW,CAAC,EAoBrE,CAAC;AAGF,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAM5D,CAAC"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Hardware acceleration type definitions
3
+ */
4
+ // Hardware encoder definitions (ordered by priority)
5
+ // Lower priority = preferred. VAAPI is generally most reliable on Linux.
6
+ export const HARDWARE_ENCODERS = [
7
+ // H.264 encoders (VAAPI first as it's most reliable on Linux)
8
+ { name: 'h264_vaapi', hwaccel: 'vaapi', codec: 'h264', priority: 1 },
9
+ { name: 'h264_nvenc', hwaccel: 'nvenc', codec: 'h264', priority: 2 },
10
+ { name: 'h264_qsv', hwaccel: 'qsv', codec: 'h264', priority: 3 },
11
+ { name: 'h264_videotoolbox', hwaccel: 'videotoolbox', codec: 'h264', priority: 1 }, // macOS
12
+ { name: 'h264_v4l2m2m', hwaccel: 'v4l2m2m', codec: 'h264', priority: 5 },
13
+ // HEVC encoders
14
+ { name: 'hevc_vaapi', hwaccel: 'vaapi', codec: 'hevc', priority: 1 },
15
+ { name: 'hevc_nvenc', hwaccel: 'nvenc', codec: 'hevc', priority: 2 },
16
+ { name: 'hevc_qsv', hwaccel: 'qsv', codec: 'hevc', priority: 3 },
17
+ { name: 'hevc_videotoolbox', hwaccel: 'videotoolbox', codec: 'hevc', priority: 1 }, // macOS
18
+ { name: 'hevc_v4l2m2m', hwaccel: 'v4l2m2m', codec: 'hevc', priority: 5 },
19
+ // VP8 encoders
20
+ { name: 'vp8_vaapi', hwaccel: 'vaapi', codec: 'vp8', priority: 1 },
21
+ { name: 'vp8_v4l2m2m', hwaccel: 'v4l2m2m', codec: 'vp8', priority: 5 },
22
+ // VP9 encoders
23
+ { name: 'vp9_vaapi', hwaccel: 'vaapi', codec: 'vp9', priority: 1 },
24
+ { name: 'vp9_qsv', hwaccel: 'qsv', codec: 'vp9', priority: 3 },
25
+ // AV1 encoders (newer hardware only)
26
+ { name: 'av1_vaapi', hwaccel: 'vaapi', codec: 'av1', priority: 1 },
27
+ { name: 'av1_nvenc', hwaccel: 'nvenc', codec: 'av1', priority: 2 },
28
+ { name: 'av1_qsv', hwaccel: 'qsv', codec: 'av1', priority: 3 },
29
+ ];
30
+ // Hardware decoder definitions
31
+ // VAAPI is preferred on Linux as it's most reliable without requiring specific GPU drivers
32
+ // Note: VAAPI decoding uses -hwaccel vaapi, not a specific decoder name
33
+ export const HARDWARE_DECODERS = [
34
+ // H.264 decoders - QSV tends to be more reliable than CUDA
35
+ { name: 'h264_qsv', hwaccel: 'qsv', codec: 'h264', priority: 1 },
36
+ { name: 'h264_cuvid', hwaccel: 'cuda', codec: 'h264', priority: 3 },
37
+ // HEVC decoders
38
+ { name: 'hevc_qsv', hwaccel: 'qsv', codec: 'hevc', priority: 1 },
39
+ { name: 'hevc_cuvid', hwaccel: 'cuda', codec: 'hevc', priority: 3 },
40
+ // VP8 decoders
41
+ { name: 'vp8_qsv', hwaccel: 'qsv', codec: 'vp8', priority: 1 },
42
+ { name: 'vp8_cuvid', hwaccel: 'cuda', codec: 'vp8', priority: 3 },
43
+ // VP9 decoders
44
+ { name: 'vp9_qsv', hwaccel: 'qsv', codec: 'vp9', priority: 1 },
45
+ { name: 'vp9_cuvid', hwaccel: 'cuda', codec: 'vp9', priority: 3 },
46
+ // AV1 decoders
47
+ { name: 'av1_qsv', hwaccel: 'qsv', codec: 'av1', priority: 1 },
48
+ { name: 'av1_cuvid', hwaccel: 'cuda', codec: 'av1', priority: 3 },
49
+ ];
50
+ // Software encoder fallbacks
51
+ export const SOFTWARE_ENCODERS = {
52
+ h264: 'libx264',
53
+ hevc: 'libx265',
54
+ vp8: 'libvpx',
55
+ vp9: 'libvpx-vp9',
56
+ av1: 'libaom-av1',
57
+ };
58
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/hardware/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * WebCodecs API implementation for Node.js
3
+ *
4
+ * This module provides a Node.js implementation of the WebCodecs API
5
+ * using FFmpeg as the underlying codec engine.
6
+ *
7
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/WebCodecs_API
8
+ */
9
+ export type { BufferSource, CodecState } from './types/index.js';
10
+ export { DOMException, DOMRectReadOnly } from './types/index.js';
11
+ export type { PlaneLayout, DOMRectInit } from './types/index.js';
12
+ export type { VideoPixelFormat, VideoFrameBufferInit, VideoFrameInit, VideoFrameCopyToOptions, } from './types/index.js';
13
+ export { VideoFrame } from './core/index.js';
14
+ export { AudioData } from './core/index.js';
15
+ export type { AudioSampleFormat, AudioDataInit, AudioDataCopyToOptions, } from './core/AudioData.js';
16
+ export { EncodedVideoChunk } from './core/index.js';
17
+ export type { EncodedVideoChunkType, EncodedVideoChunkInit, } from './core/EncodedVideoChunk.js';
18
+ export { EncodedAudioChunk } from './core/index.js';
19
+ export type { EncodedAudioChunkType, EncodedAudioChunkInit, } from './core/EncodedAudioChunk.js';
20
+ export { VideoColorSpace } from './formats/index.js';
21
+ export type { VideoColorSpaceInit } from './formats/index.js';
22
+ export { VideoEncoder } from './encoders/index.js';
23
+ export type { VideoEncoderConfig, VideoEncoderInit, VideoEncoderSupport, VideoEncoderOutputMetadata, VideoEncoderEncodeOptions, } from './encoders/VideoEncoder.js';
24
+ export { AudioEncoder } from './encoders/index.js';
25
+ export type { AudioEncoderConfig, AudioEncoderInit, AudioEncoderSupport, AudioEncoderOutputMetadata, } from './encoders/AudioEncoder.js';
26
+ export { VideoDecoder } from './decoders/index.js';
27
+ export type { VideoDecoderConfig, VideoDecoderInit, VideoDecoderSupport, } from './decoders/VideoDecoder.js';
28
+ export { AudioDecoder } from './decoders/index.js';
29
+ export type { AudioDecoderConfig, AudioDecoderInit, AudioDecoderSupport, } from './decoders/AudioDecoder.js';
30
+ export { ImageDecoder, ImageTrack, ImageTrackList } from './decoders/index.js';
31
+ export type { ImageDecoderInit, ImageDecodeOptions, ImageDecodeResult, ColorSpaceConversion, PremultiplyAlpha, } from './decoders/ImageDecoder.js';
32
+ export { FFmpegProcess } from './ffmpeg/index.js';
33
+ export type { FFmpegConfig, FFmpegInputConfig, FFmpegOutputConfig } from './ffmpeg/index.js';
34
+ export { pixelFormatToFFmpeg, ffmpegToPixelFormat, webCodecToFFmpegCodec, webCodecToContainerFormat, calculateFrameSize, } from './ffmpeg/index.js';
35
+ export { detectHardwareAcceleration, getBestEncoder, getBestDecoder, getHardwareAccelerationSummary, testEncoder, parseCodecString, clearCapabilitiesCache, getEncoderArgs, getDecoderArgs, } from './hardware/index.js';
36
+ export type { HardwareAccelerationMethod, VideoCodecName, HardwareEncoderInfo, HardwareDecoderInfo, HardwareCapabilities, } from './hardware/index.js';
37
+ export { MediaCapabilities, mediaCapabilities } from './MediaCapabilities.js';
38
+ export type { VideoConfiguration, AudioConfiguration, MediaDecodingConfiguration, MediaEncodingConfiguration, MediaCapabilitiesInfo, MediaCapabilitiesDecodingInfo, MediaCapabilitiesEncodingInfo, } from './MediaCapabilities.js';
39
+ export { Logger, createLogger, setDebugMode, isDebugMode } from './utils/index.js';
40
+ export type { LogLevel, LogEntry } from './utils/index.js';
41
+ export { isImageDataLike, isCanvasLike, isVideoFrameLike, isCanvasImageSource, } from './utils/index.js';
42
+ export { installWebCodecsPolyfill } from './polyfill.js';
43
+ export { installOffscreenCanvasPolyfill } from './polyfills/OffscreenCanvas.js';
44
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,37 @@
1
+ /**
2
+ * WebCodecs API implementation for Node.js
3
+ *
4
+ * This module provides a Node.js implementation of the WebCodecs API
5
+ * using FFmpeg as the underlying codec engine.
6
+ *
7
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/WebCodecs_API
8
+ */
9
+ export { DOMException, DOMRectReadOnly } from './types/index.js';
10
+ // Core data structures
11
+ export { VideoFrame } from './core/index.js';
12
+ export { AudioData } from './core/index.js';
13
+ export { EncodedVideoChunk } from './core/index.js';
14
+ export { EncodedAudioChunk } from './core/index.js';
15
+ // Formats
16
+ export { VideoColorSpace } from './formats/index.js';
17
+ // Encoders
18
+ export { VideoEncoder } from './encoders/index.js';
19
+ export { AudioEncoder } from './encoders/index.js';
20
+ // Decoders
21
+ export { VideoDecoder } from './decoders/index.js';
22
+ export { AudioDecoder } from './decoders/index.js';
23
+ export { ImageDecoder, ImageTrack, ImageTrackList } from './decoders/index.js';
24
+ // FFmpeg utilities (for advanced use)
25
+ export { FFmpegProcess } from './ffmpeg/index.js';
26
+ export { pixelFormatToFFmpeg, ffmpegToPixelFormat, webCodecToFFmpegCodec, webCodecToContainerFormat, calculateFrameSize, } from './ffmpeg/index.js';
27
+ // Hardware acceleration
28
+ export { detectHardwareAcceleration, getBestEncoder, getBestDecoder, getHardwareAccelerationSummary, testEncoder, parseCodecString, clearCapabilitiesCache, getEncoderArgs, getDecoderArgs, } from './hardware/index.js';
29
+ // MediaCapabilities API
30
+ export { MediaCapabilities, mediaCapabilities } from './MediaCapabilities.js';
31
+ // Utilities
32
+ export { Logger, createLogger, setDebugMode, isDebugMode } from './utils/index.js';
33
+ export { isImageDataLike, isCanvasLike, isVideoFrameLike, isCanvasImageSource, } from './utils/index.js';
34
+ // Polyfills
35
+ export { installWebCodecsPolyfill } from './polyfill.js';
36
+ export { installOffscreenCanvasPolyfill } from './polyfills/OffscreenCanvas.js';
37
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AASjE,uBAAuB;AACvB,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAO5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAMpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAMpD,UAAU;AACV,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGrD,WAAW;AACX,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AASnD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAQnD,WAAW;AACX,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAOnD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAOnD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAS/E,sCAAsC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,yBAAyB,EACzB,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAE3B,wBAAwB;AACxB,OAAO,EACL,0BAA0B,EAC1B,cAAc,EACd,cAAc,EACd,8BAA8B,EAC9B,WAAW,EACX,gBAAgB,EAChB,sBAAsB,EACtB,cAAc,EACd,cAAc,GACf,MAAM,qBAAqB,CAAC;AAS7B,wBAAwB;AACxB,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAW9E,YAAY;AACZ,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEnF,OAAO,EACL,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAE1B,YAAY;AACZ,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,8BAA8B,EAAE,MAAM,gCAAgC,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * FFmpeg-backed AudioDecoder for Mediabunny
3
+ *
4
+ * Implements Mediabunny's CustomAudioDecoder interface using FFmpeg child process.
5
+ */
6
+ import { CustomAudioDecoder, EncodedPacket, AudioCodec } from 'mediabunny';
7
+ export declare class FFmpegAudioDecoder extends CustomAudioDecoder {
8
+ private process;
9
+ private accumulatedData;
10
+ private frameIndex;
11
+ private resolveFlush;
12
+ private aacConfig;
13
+ private baseTimestamp;
14
+ private hasBaseTimestamp;
15
+ static supports(codec: AudioCodec, _config: AudioDecoderConfig): boolean;
16
+ init(): Promise<void>;
17
+ /**
18
+ * Parse AAC AudioSpecificConfig from description buffer
19
+ */
20
+ private parseAacAudioSpecificConfig;
21
+ decode(packet: EncodedPacket): Promise<void>;
22
+ /**
23
+ * Wrap raw AAC frame with ADTS header (7 bytes)
24
+ */
25
+ private wrapWithAdtsHeader;
26
+ flush(): Promise<void>;
27
+ close(): Promise<void>;
28
+ /**
29
+ * Emit decoded audio samples
30
+ */
31
+ private emitDecodedSamples;
32
+ /**
33
+ * Emit an AudioSample via Mediabunny callback
34
+ */
35
+ private emitAudioSample;
36
+ }
37
+ //# sourceMappingURL=FFmpegAudioDecoder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FFmpegAudioDecoder.d.ts","sourceRoot":"","sources":["../../src/mediabunny/FFmpegAudioDecoder.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,kBAAkB,EAElB,aAAa,EACb,UAAU,EACX,MAAM,YAAY,CAAC;AA+BpB,qBAAa,kBAAmB,SAAQ,kBAAkB;IACxD,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,eAAe,CAA2B;IAClD,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,SAAS,CAAsF;IAEvG,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,gBAAgB,CAAkB;IAE1C,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO;IAIlE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAsE3B;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAwB7B,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBlD;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAqDpB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAYtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAgB1B;;OAEG;IACH,OAAO,CAAC,eAAe;CA0BxB"}
@@ -0,0 +1,254 @@
1
+ /**
2
+ * FFmpeg-backed AudioDecoder for Mediabunny
3
+ *
4
+ * Implements Mediabunny's CustomAudioDecoder interface using FFmpeg child process.
5
+ */
6
+ import { spawn } from 'child_process';
7
+ import { CustomAudioDecoder, AudioSample, } from 'mediabunny';
8
+ // Codec mapping: Mediabunny codec -> FFmpeg decoder and input format
9
+ const CODEC_MAP = {
10
+ 'aac': { decoder: 'aac', format: 'aac' },
11
+ 'opus': { decoder: 'libopus', format: 'ogg' },
12
+ 'mp3': { decoder: 'mp3', format: 'mp3' },
13
+ 'flac': { decoder: 'flac', format: 'flac' },
14
+ 'vorbis': { decoder: 'libvorbis', format: 'ogg' },
15
+ 'pcm-s16': { decoder: 'pcm_s16le', format: 's16le' },
16
+ 'pcm-s16be': { decoder: 'pcm_s16be', format: 's16be' },
17
+ 'pcm-s24': { decoder: 'pcm_s24le', format: 's24le' },
18
+ 'pcm-s24be': { decoder: 'pcm_s24be', format: 's24be' },
19
+ 'pcm-s32': { decoder: 'pcm_s32le', format: 's32le' },
20
+ 'pcm-s32be': { decoder: 'pcm_s32be', format: 's32be' },
21
+ 'pcm-f32': { decoder: 'pcm_f32le', format: 'f32le' },
22
+ 'pcm-f32be': { decoder: 'pcm_f32be', format: 'f32be' },
23
+ 'pcm-f64': { decoder: 'pcm_f64le', format: 'f64le' },
24
+ 'pcm-f64be': { decoder: 'pcm_f64be', format: 'f64be' },
25
+ 'pcm-u8': { decoder: 'pcm_u8', format: 'u8' },
26
+ 'pcm-s8': { decoder: 'pcm_s8', format: 's8' },
27
+ 'ulaw': { decoder: 'pcm_mulaw', format: 'mulaw' },
28
+ 'alaw': { decoder: 'pcm_alaw', format: 'alaw' },
29
+ };
30
+ // AAC frequency table for ADTS header
31
+ const AAC_FREQUENCIES = [
32
+ 96000, 88200, 64000, 48000, 44100, 32000, 24000, 22050,
33
+ 16000, 12000, 11025, 8000, 7350
34
+ ];
35
+ export class FFmpegAudioDecoder extends CustomAudioDecoder {
36
+ process = null;
37
+ accumulatedData = Buffer.alloc(0);
38
+ frameIndex = 0;
39
+ resolveFlush = null;
40
+ aacConfig = null;
41
+ // Track base timestamp from first input packet
42
+ baseTimestamp = 0;
43
+ hasBaseTimestamp = false;
44
+ static supports(codec, _config) {
45
+ return codec in CODEC_MAP;
46
+ }
47
+ async init() {
48
+ const codecInfo = CODEC_MAP[this.codec] || { decoder: 'aac', format: 'aac' };
49
+ const sampleRate = this.config.sampleRate ?? 44100;
50
+ const numberOfChannels = this.config.numberOfChannels ?? 2;
51
+ // Parse AAC AudioSpecificConfig if available
52
+ if (this.codec === 'aac' && this.config.description) {
53
+ this.aacConfig = this.parseAacAudioSpecificConfig(this.config.description);
54
+ }
55
+ else if (this.codec === 'aac') {
56
+ // Build default AAC config from sample rate and channels
57
+ const frequencyIndex = AAC_FREQUENCIES.indexOf(sampleRate);
58
+ this.aacConfig = {
59
+ objectType: 2, // AAC-LC
60
+ frequencyIndex: frequencyIndex >= 0 ? frequencyIndex : 4, // Default to 44100
61
+ channelConfig: numberOfChannels,
62
+ };
63
+ }
64
+ // Use 'adts' format for AAC since we'll wrap packets with ADTS headers
65
+ const inputFormat = this.codec === 'aac' ? 'aac' : codecInfo.format;
66
+ const args = [
67
+ '-hide_banner',
68
+ '-loglevel', 'error',
69
+ // Input from pipe
70
+ '-f', inputFormat,
71
+ '-i', 'pipe:0',
72
+ // Output: raw PCM f32le
73
+ '-f', 'f32le',
74
+ '-ar', String(sampleRate),
75
+ '-ac', String(numberOfChannels),
76
+ 'pipe:1',
77
+ ];
78
+ this.process = spawn('ffmpeg', args, {
79
+ stdio: ['pipe', 'pipe', 'pipe'],
80
+ });
81
+ this.process.stdout?.on('data', (data) => {
82
+ this.accumulatedData = Buffer.concat([this.accumulatedData, data]);
83
+ this.emitDecodedSamples();
84
+ });
85
+ this.process.stderr?.on('data', (data) => {
86
+ const msg = data.toString();
87
+ // Ignore common warnings, but log real errors for debugging
88
+ if (!msg.includes('Discarding') && !msg.includes('Last message repeated')) {
89
+ console.error('FFmpeg audio decoder:', msg);
90
+ }
91
+ });
92
+ this.process.on('close', () => {
93
+ // Emit any remaining samples
94
+ if (this.accumulatedData.length > 0) {
95
+ this.emitAudioSample(this.accumulatedData);
96
+ this.accumulatedData = Buffer.alloc(0);
97
+ }
98
+ if (this.resolveFlush) {
99
+ this.resolveFlush();
100
+ this.resolveFlush = null;
101
+ }
102
+ });
103
+ this.process.stdin?.on('error', () => {
104
+ // Ignore EPIPE errors
105
+ });
106
+ }
107
+ /**
108
+ * Parse AAC AudioSpecificConfig from description buffer
109
+ */
110
+ parseAacAudioSpecificConfig(description) {
111
+ let data;
112
+ if (description instanceof ArrayBuffer) {
113
+ data = new Uint8Array(description);
114
+ }
115
+ else {
116
+ data = new Uint8Array(description.buffer, description.byteOffset, description.byteLength);
117
+ }
118
+ if (data.length < 2) {
119
+ // Default config
120
+ return { objectType: 2, frequencyIndex: 4, channelConfig: 2 };
121
+ }
122
+ // Parse AudioSpecificConfig
123
+ // 5 bits: objectType
124
+ // 4 bits: frequencyIndex
125
+ // 4 bits: channelConfiguration
126
+ const objectType = (data[0] >> 3) & 0x1f;
127
+ const frequencyIndex = ((data[0] & 0x07) << 1) | ((data[1] >> 7) & 0x01);
128
+ const channelConfig = (data[1] >> 3) & 0x0f;
129
+ return { objectType, frequencyIndex, channelConfig };
130
+ }
131
+ async decode(packet) {
132
+ if (!this.process?.stdin?.writable) {
133
+ throw new Error('Decoder not initialized');
134
+ }
135
+ // Capture the base timestamp from the first packet
136
+ if (!this.hasBaseTimestamp) {
137
+ this.baseTimestamp = packet.timestamp;
138
+ this.hasBaseTimestamp = true;
139
+ }
140
+ // For AAC, wrap with ADTS header
141
+ if (this.codec === 'aac' && this.aacConfig) {
142
+ const adtsFrame = this.wrapWithAdtsHeader(packet.data);
143
+ this.process.stdin.write(adtsFrame);
144
+ }
145
+ else {
146
+ // Write encoded data directly to FFmpeg
147
+ this.process.stdin.write(Buffer.from(packet.data));
148
+ }
149
+ }
150
+ /**
151
+ * Wrap raw AAC frame with ADTS header (7 bytes)
152
+ */
153
+ wrapWithAdtsHeader(rawAac) {
154
+ if (!this.aacConfig) {
155
+ return Buffer.from(rawAac);
156
+ }
157
+ const frameLength = rawAac.length + 7; // 7-byte ADTS header
158
+ const header = Buffer.alloc(7);
159
+ // ADTS header structure (7 bytes, no CRC):
160
+ // Syncword: 12 bits (0xFFF)
161
+ // ID: 1 bit (0 = MPEG-4, 1 = MPEG-2)
162
+ // Layer: 2 bits (always 0)
163
+ // Protection absent: 1 bit (1 = no CRC)
164
+ // Profile: 2 bits (objectType - 1)
165
+ // Sampling frequency index: 4 bits
166
+ // Private bit: 1 bit (0)
167
+ // Channel configuration: 3 bits
168
+ // Original/copy: 1 bit (0)
169
+ // Home: 1 bit (0)
170
+ // Copyright ID bit: 1 bit (0)
171
+ // Copyright ID start: 1 bit (0)
172
+ // Frame length: 13 bits
173
+ // Buffer fullness: 11 bits (0x7FF = variable)
174
+ // Number of AAC frames - 1: 2 bits (0 = 1 frame)
175
+ const profile = this.aacConfig.objectType - 1; // Profile is objectType - 1
176
+ const freqIdx = this.aacConfig.frequencyIndex;
177
+ const chanCfg = this.aacConfig.channelConfig;
178
+ // Byte 0: Syncword high (0xFF)
179
+ header[0] = 0xff;
180
+ // Byte 1: Syncword low (0xF) + ID (0) + Layer (00) + Protection absent (1)
181
+ header[1] = 0xf1; // 0xF0 | 0x01
182
+ // Byte 2: Profile (2 bits) + Frequency index (4 bits) + Private (1 bit) + Channel config high (1 bit)
183
+ header[2] = ((profile & 0x03) << 6) | ((freqIdx & 0x0f) << 2) | ((chanCfg >> 2) & 0x01);
184
+ // Byte 3: Channel config low (2 bits) + Original (1 bit) + Home (1 bit) + Copyright ID (1 bit) + Copyright start (1 bit) + Frame length high (2 bits)
185
+ header[3] = ((chanCfg & 0x03) << 6) | ((frameLength >> 11) & 0x03);
186
+ // Byte 4: Frame length middle (8 bits)
187
+ header[4] = (frameLength >> 3) & 0xff;
188
+ // Byte 5: Frame length low (3 bits) + Buffer fullness high (5 bits)
189
+ header[5] = ((frameLength & 0x07) << 5) | 0x1f; // Buffer fullness = 0x7FF
190
+ // Byte 6: Buffer fullness low (6 bits) + Number of frames - 1 (2 bits)
191
+ header[6] = 0xfc; // (0x3F << 2) | 0x00
192
+ return Buffer.concat([header, Buffer.from(rawAac)]);
193
+ }
194
+ async flush() {
195
+ return new Promise((resolve) => {
196
+ this.resolveFlush = resolve;
197
+ if (this.process?.stdin) {
198
+ this.process.stdin.end();
199
+ }
200
+ else {
201
+ resolve();
202
+ }
203
+ });
204
+ }
205
+ async close() {
206
+ if (this.process) {
207
+ this.process.kill('SIGTERM');
208
+ this.process = null;
209
+ }
210
+ }
211
+ /**
212
+ * Emit decoded audio samples
213
+ */
214
+ emitDecodedSamples() {
215
+ const sampleRate = this.config.sampleRate ?? 44100;
216
+ const numberOfChannels = this.config.numberOfChannels ?? 2;
217
+ // Calculate chunk size (emit ~20ms chunks)
218
+ const samplesPerChunk = Math.floor(sampleRate * 0.02); // 20ms
219
+ const bytesPerSample = 4; // f32
220
+ const bytesPerChunk = samplesPerChunk * numberOfChannels * bytesPerSample;
221
+ while (this.accumulatedData.length >= bytesPerChunk) {
222
+ const chunkData = Buffer.from(this.accumulatedData.subarray(0, bytesPerChunk));
223
+ this.accumulatedData = this.accumulatedData.subarray(bytesPerChunk);
224
+ this.emitAudioSample(chunkData);
225
+ }
226
+ }
227
+ /**
228
+ * Emit an AudioSample via Mediabunny callback
229
+ */
230
+ emitAudioSample(data) {
231
+ if (data.length === 0)
232
+ return;
233
+ const sampleRate = this.config.sampleRate ?? 44100;
234
+ const numberOfChannels = this.config.numberOfChannels ?? 2;
235
+ const bytesPerSample = 4; // f32
236
+ const numberOfFrames = Math.floor(data.length / (numberOfChannels * bytesPerSample));
237
+ if (numberOfFrames === 0)
238
+ return;
239
+ // Calculate timestamp in seconds, preserving base timestamp from input
240
+ const offsetSeconds = this.frameIndex / sampleRate;
241
+ const timestampSeconds = this.baseTimestamp + offsetSeconds;
242
+ // Create AudioSample from raw f32 interleaved data
243
+ const sample = new AudioSample({
244
+ format: 'f32',
245
+ sampleRate,
246
+ numberOfChannels,
247
+ timestamp: timestampSeconds,
248
+ data: new Uint8Array(data),
249
+ });
250
+ this.frameIndex += numberOfFrames;
251
+ this.onSample(sample);
252
+ }
253
+ }
254
+ //# sourceMappingURL=FFmpegAudioDecoder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FFmpegAudioDecoder.js","sourceRoot":"","sources":["../../src/mediabunny/FFmpegAudioDecoder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * FFmpeg-backed AudioEncoder for Mediabunny
3
+ *
4
+ * Implements Mediabunny's CustomAudioEncoder interface using FFmpeg child process.
5
+ */
6
+ import { CustomAudioEncoder, AudioSample, AudioCodec } from 'mediabunny';
7
+ export declare class FFmpegAudioEncoder extends CustomAudioEncoder {
8
+ private process;
9
+ private accumulatedData;
10
+ private frameIndex;
11
+ private resolveFlush;
12
+ private ffmpegCodec;
13
+ private metadataEmitted;
14
+ private codecDescription;
15
+ private audioOutputFormat;
16
+ static supports(codec: AudioCodec, _config: AudioEncoderConfig): boolean;
17
+ init(): Promise<void>;
18
+ encode(audioSample: AudioSample): Promise<void>;
19
+ flush(): Promise<void>;
20
+ close(): Promise<void>;
21
+ /**
22
+ * Extract raw PCM data from AudioSample
23
+ */
24
+ private getSampleData;
25
+ /**
26
+ * Parse encoded audio frames from FFmpeg output
27
+ */
28
+ private parseEncodedFrames;
29
+ /**
30
+ * Find the end of an audio frame
31
+ */
32
+ private findFrameEnd;
33
+ private findADTSFrame;
34
+ private findMP3Frame;
35
+ /**
36
+ * Parse Ogg pages and extract individual Opus packets
37
+ * Ogg page structure:
38
+ * - 4 bytes: "OggS" magic
39
+ * - 1 byte: version
40
+ * - 1 byte: header type
41
+ * - 8 bytes: granule position
42
+ * - 4 bytes: serial number
43
+ * - 4 bytes: page sequence number
44
+ * - 4 bytes: checksum
45
+ * - 1 byte: number of segments
46
+ * - N bytes: segment table (one byte per segment)
47
+ * - data: concatenated segments
48
+ */
49
+ private findOggPage;
50
+ /**
51
+ * Extract individual Opus packets from Ogg page segments
52
+ */
53
+ private extractOggPackets;
54
+ /**
55
+ * Emit an encoded packet via Mediabunny callback
56
+ */
57
+ private emitPacket;
58
+ /**
59
+ * Get the number of samples per frame based on codec
60
+ */
61
+ private getFrameSamples;
62
+ /**
63
+ * Get codec string for the output format
64
+ */
65
+ private getCodecString;
66
+ /**
67
+ * Build Opus identification header for decoder config description
68
+ */
69
+ private buildOpusDescription;
70
+ /**
71
+ * Build AAC AudioSpecificConfig for decoder config description
72
+ * ISO 14496-3 section 1.6.2.1
73
+ */
74
+ private buildAacDescription;
75
+ private stripAdtsHeader;
76
+ }
77
+ //# sourceMappingURL=FFmpegAudioEncoder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FFmpegAudioEncoder.d.ts","sourceRoot":"","sources":["../../src/mediabunny/FFmpegAudioEncoder.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,kBAAkB,EAClB,WAAW,EAEX,UAAU,EACX,MAAM,YAAY,CAAC;AAkDpB,qBAAa,kBAAmB,SAAQ,kBAAkB;IACxD,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,eAAe,CAA2B;IAClD,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,WAAW,CAAM;IACzB,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,gBAAgB,CAA2B;IACnD,OAAO,CAAC,iBAAiB,CAA0B;IAEnD,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO;IAIlE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAsErB,MAAM,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAU/C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAYtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5B;;OAEG;YACW,aAAa;IAiC3B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAgB1B;;OAEG;IACH,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,aAAa;IAwBrB,OAAO,CAAC,YAAY;IAmCpB;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,WAAW;IAgDnB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAgCzB;;OAEG;IACH,OAAO,CAAC,UAAU;IAiDlB;;OAEG;IACH,OAAO,CAAC,eAAe;IAsBvB;;OAEG;IACH,OAAO,CAAC,cAAc;IAiBtB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAiC5B;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,eAAe;CAYxB"}