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,151 @@
1
+ /**
2
+ * Streaming Example
3
+ *
4
+ * Demonstrates real-time encoding with latencyMode comparison.
5
+ *
6
+ * Run: npx tsx examples/streaming.ts
7
+ */
8
+
9
+ import { VideoEncoder, VideoFrame, EncodedVideoChunk } from '../src/index.js';
10
+
11
+ interface EncodingResult {
12
+ mode: string;
13
+ chunks: number;
14
+ totalBytes: number;
15
+ keyFrames: number;
16
+ encodeTime: number;
17
+ }
18
+
19
+ async function encodeWithMode(
20
+ mode: 'quality' | 'realtime',
21
+ width: number,
22
+ height: number,
23
+ frameCount: number,
24
+ framerate: number
25
+ ): Promise<EncodingResult> {
26
+ const chunks: EncodedVideoChunk[] = [];
27
+ const startTime = Date.now();
28
+
29
+ const encoder = new VideoEncoder({
30
+ output: (chunk) => chunks.push(chunk),
31
+ error: console.error,
32
+ });
33
+
34
+ encoder.configure({
35
+ codec: 'avc1.42001E',
36
+ width,
37
+ height,
38
+ bitrate: 1_000_000,
39
+ framerate,
40
+ latencyMode: mode,
41
+ });
42
+
43
+ // Generate frames
44
+ for (let i = 0; i < frameCount; i++) {
45
+ const rgba = new Uint8Array(width * height * 4);
46
+
47
+ // Create moving pattern for realistic encoding
48
+ for (let y = 0; y < height; y++) {
49
+ for (let x = 0; x < width; x++) {
50
+ const idx = (y * width + x) * 4;
51
+ rgba[idx] = ((x + i * 10) % 256); // R
52
+ rgba[idx + 1] = ((y + i * 5) % 256); // G
53
+ rgba[idx + 2] = (((x + y) / 2 + i * 3) % 256); // B
54
+ rgba[idx + 3] = 255; // A
55
+ }
56
+ }
57
+
58
+ const frame = new VideoFrame(rgba, {
59
+ format: 'RGBA',
60
+ codedWidth: width,
61
+ codedHeight: height,
62
+ timestamp: (i * 1_000_000) / framerate,
63
+ });
64
+
65
+ encoder.encode(frame, { keyFrame: i % framerate === 0 });
66
+ frame.close();
67
+ }
68
+
69
+ await encoder.flush();
70
+ encoder.close();
71
+
72
+ const encodeTime = Date.now() - startTime;
73
+
74
+ return {
75
+ mode,
76
+ chunks: chunks.length,
77
+ totalBytes: chunks.reduce((sum, c) => sum + c.byteLength, 0),
78
+ keyFrames: chunks.filter((c) => c.type === 'key').length,
79
+ encodeTime,
80
+ };
81
+ }
82
+
83
+ async function main() {
84
+ console.log('=== Streaming / Latency Mode Comparison ===\n');
85
+
86
+ const width = 640;
87
+ const height = 480;
88
+ const frameCount = 60;
89
+ const framerate = 30;
90
+
91
+ console.log(`Encoding ${frameCount} frames at ${width}x${height} @ ${framerate}fps\n`);
92
+
93
+ // Test quality mode
94
+ console.log('Testing quality mode...');
95
+ const qualityResult = await encodeWithMode('quality', width, height, frameCount, framerate);
96
+
97
+ // Test realtime mode
98
+ console.log('Testing realtime mode...');
99
+ const realtimeResult = await encodeWithMode('realtime', width, height, frameCount, framerate);
100
+
101
+ // Display results
102
+ console.log('\n=== Results ===\n');
103
+
104
+ console.log('Quality Mode (optimized for compression):');
105
+ console.log(` Encode time: ${qualityResult.encodeTime}ms`);
106
+ console.log(` Output size: ${(qualityResult.totalBytes / 1024).toFixed(2)} KB`);
107
+ console.log(` Chunks: ${qualityResult.chunks}`);
108
+ console.log(` Key frames: ${qualityResult.keyFrames}`);
109
+ console.log(
110
+ ` Bitrate: ${((qualityResult.totalBytes * 8 * framerate) / frameCount / 1000).toFixed(0)} kbps`
111
+ );
112
+
113
+ console.log('\nRealtime Mode (optimized for low latency):');
114
+ console.log(` Encode time: ${realtimeResult.encodeTime}ms`);
115
+ console.log(` Output size: ${(realtimeResult.totalBytes / 1024).toFixed(2)} KB`);
116
+ console.log(` Chunks: ${realtimeResult.chunks}`);
117
+ console.log(` Key frames: ${realtimeResult.keyFrames}`);
118
+ console.log(
119
+ ` Bitrate: ${((realtimeResult.totalBytes * 8 * framerate) / frameCount / 1000).toFixed(0)} kbps`
120
+ );
121
+
122
+ console.log('\n=== Comparison ===\n');
123
+
124
+ const sizeDiff =
125
+ ((realtimeResult.totalBytes - qualityResult.totalBytes) / qualityResult.totalBytes) * 100;
126
+ const timeDiff =
127
+ ((realtimeResult.encodeTime - qualityResult.encodeTime) / qualityResult.encodeTime) * 100;
128
+
129
+ console.log(
130
+ `Size difference: ${sizeDiff > 0 ? '+' : ''}${sizeDiff.toFixed(1)}% ` +
131
+ `(realtime uses ${sizeDiff > 0 ? 'more' : 'less'} space)`
132
+ );
133
+ console.log(
134
+ `Time difference: ${timeDiff > 0 ? '+' : ''}${timeDiff.toFixed(1)}% ` +
135
+ `(realtime is ${timeDiff < 0 ? 'faster' : 'slower'})`
136
+ );
137
+
138
+ console.log('\n=== When to use each mode ===\n');
139
+ console.log('Quality mode:');
140
+ console.log(' - File encoding for storage/distribution');
141
+ console.log(' - VOD (Video on Demand) content');
142
+ console.log(' - When file size matters more than latency');
143
+
144
+ console.log('\nRealtime mode:');
145
+ console.log(' - Live streaming');
146
+ console.log(' - Video conferencing');
147
+ console.log(' - Real-time screen sharing');
148
+ console.log(' - When latency matters more than compression');
149
+ }
150
+
151
+ main().catch(console.error);
@@ -0,0 +1,162 @@
1
+ /**
2
+ * Transparent Video Example
3
+ *
4
+ * Demonstrates encoding video with alpha channel using VP9.
5
+ *
6
+ * Run: npx tsx examples/transparent-video.ts
7
+ */
8
+
9
+ import { VideoEncoder, VideoFrame, EncodedVideoChunk } from '../src/index.js';
10
+
11
+ async function main() {
12
+ const width = 256;
13
+ const height = 256;
14
+ const frameCount = 30;
15
+ const framerate = 30;
16
+
17
+ console.log('=== Transparent Video Encoding Example ===\n');
18
+
19
+ // Check if VP9 supports alpha
20
+ const support = await VideoEncoder.isConfigSupported({
21
+ codec: 'vp9',
22
+ width,
23
+ height,
24
+ });
25
+
26
+ if (!support.supported) {
27
+ console.log('VP9 encoding not supported');
28
+ return;
29
+ }
30
+
31
+ const chunks: EncodedVideoChunk[] = [];
32
+
33
+ const encoder = new VideoEncoder({
34
+ output: (chunk, metadata) => {
35
+ chunks.push(chunk);
36
+ console.log(`Encoded: ${chunk.type} frame, ${chunk.byteLength} bytes`);
37
+ },
38
+ error: console.error,
39
+ });
40
+
41
+ // Configure VP9 with alpha preservation
42
+ encoder.configure({
43
+ codec: 'vp9',
44
+ width,
45
+ height,
46
+ alpha: 'keep', // Preserve transparency
47
+ framerate,
48
+ });
49
+
50
+ console.log('Encoding frames with transparency...\n');
51
+
52
+ // Generate frames with animated transparency
53
+ for (let i = 0; i < frameCount; i++) {
54
+ const rgba = new Uint8Array(width * height * 4);
55
+
56
+ // Create a circular gradient with animated transparency
57
+ const centerX = width / 2;
58
+ const centerY = height / 2;
59
+ const maxRadius = Math.min(width, height) / 2;
60
+ const animPhase = (i / frameCount) * Math.PI * 2;
61
+
62
+ for (let y = 0; y < height; y++) {
63
+ for (let x = 0; x < width; x++) {
64
+ const idx = (y * width + x) * 4;
65
+
66
+ // Distance from center
67
+ const dx = x - centerX;
68
+ const dy = y - centerY;
69
+ const dist = Math.sqrt(dx * dx + dy * dy);
70
+
71
+ // Animated radius
72
+ const radius = maxRadius * (0.5 + 0.3 * Math.sin(animPhase));
73
+
74
+ if (dist < radius) {
75
+ // Inside circle: solid color with gradient alpha
76
+ const alpha = 255 * (1 - dist / radius);
77
+ rgba[idx] = 100; // R
78
+ rgba[idx + 1] = 200; // G
79
+ rgba[idx + 2] = 255; // B
80
+ rgba[idx + 3] = Math.floor(alpha); // A
81
+ } else {
82
+ // Outside circle: fully transparent
83
+ rgba[idx] = 0;
84
+ rgba[idx + 1] = 0;
85
+ rgba[idx + 2] = 0;
86
+ rgba[idx + 3] = 0;
87
+ }
88
+ }
89
+ }
90
+
91
+ const frame = new VideoFrame(rgba, {
92
+ format: 'RGBA',
93
+ codedWidth: width,
94
+ codedHeight: height,
95
+ timestamp: (i * 1_000_000) / framerate,
96
+ });
97
+
98
+ encoder.encode(frame, { keyFrame: i === 0 });
99
+ frame.close();
100
+ }
101
+
102
+ await encoder.flush();
103
+ encoder.close();
104
+
105
+ // Statistics
106
+ const totalBytes = chunks.reduce((sum, c) => sum + c.byteLength, 0);
107
+
108
+ console.log(`\nEncoding complete:`);
109
+ console.log(` Codec: VP9 with alpha`);
110
+ console.log(` Frames: ${frameCount}`);
111
+ console.log(` Size: ${(totalBytes / 1024).toFixed(2)} KB`);
112
+
113
+ // Compare with discarded alpha
114
+ console.log('\n--- Comparison with alpha:discard ---\n');
115
+
116
+ const chunksNoAlpha: EncodedVideoChunk[] = [];
117
+
118
+ const encoderNoAlpha = new VideoEncoder({
119
+ output: (chunk) => chunksNoAlpha.push(chunk),
120
+ error: console.error,
121
+ });
122
+
123
+ encoderNoAlpha.configure({
124
+ codec: 'vp9',
125
+ width,
126
+ height,
127
+ alpha: 'discard', // Strip transparency
128
+ framerate,
129
+ });
130
+
131
+ // Encode same content without alpha
132
+ for (let i = 0; i < frameCount; i++) {
133
+ const rgba = new Uint8Array(width * height * 4);
134
+ rgba.fill(128); // Gray with full alpha
135
+ for (let j = 3; j < rgba.length; j += 4) {
136
+ rgba[j] = 255;
137
+ }
138
+
139
+ const frame = new VideoFrame(rgba, {
140
+ format: 'RGBA',
141
+ codedWidth: width,
142
+ codedHeight: height,
143
+ timestamp: (i * 1_000_000) / framerate,
144
+ });
145
+
146
+ encoderNoAlpha.encode(frame, { keyFrame: i === 0 });
147
+ frame.close();
148
+ }
149
+
150
+ await encoderNoAlpha.flush();
151
+ encoderNoAlpha.close();
152
+
153
+ const totalBytesNoAlpha = chunksNoAlpha.reduce((sum, c) => sum + c.byteLength, 0);
154
+
155
+ console.log(`Without alpha: ${(totalBytesNoAlpha / 1024).toFixed(2)} KB`);
156
+ console.log(`With alpha: ${(totalBytes / 1024).toFixed(2)} KB`);
157
+ console.log(
158
+ `Alpha overhead: ${(((totalBytes - totalBytesNoAlpha) / totalBytesNoAlpha) * 100).toFixed(1)}%`
159
+ );
160
+ }
161
+
162
+ main().catch(console.error);
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Video Decoding Example
3
+ *
4
+ * Demonstrates how to decode video chunks back to raw frames.
5
+ *
6
+ * Run: npx tsx examples/video-decoding.ts
7
+ */
8
+
9
+ import {
10
+ VideoEncoder,
11
+ VideoDecoder,
12
+ VideoFrame,
13
+ EncodedVideoChunk,
14
+ } from '../src/index.js';
15
+
16
+ async function main() {
17
+ const width = 320;
18
+ const height = 240;
19
+ const frameCount = 10;
20
+ const framerate = 30;
21
+
22
+ // First, encode some frames to get chunks to decode
23
+ const chunks: EncodedVideoChunk[] = [];
24
+
25
+ const encoder = new VideoEncoder({
26
+ output: (chunk) => chunks.push(chunk),
27
+ error: console.error,
28
+ });
29
+
30
+ encoder.configure({
31
+ codec: 'avc1.42001E',
32
+ width,
33
+ height,
34
+ bitrate: 500_000,
35
+ framerate,
36
+ });
37
+
38
+ console.log('Encoding frames...');
39
+
40
+ for (let i = 0; i < frameCount; i++) {
41
+ const rgba = new Uint8Array(width * height * 4);
42
+ // Create solid color frames for easy verification
43
+ const color = Math.floor((i / frameCount) * 255);
44
+ for (let j = 0; j < rgba.length; j += 4) {
45
+ rgba[j] = color; // R
46
+ rgba[j + 1] = 255 - color; // G
47
+ rgba[j + 2] = 128; // B
48
+ rgba[j + 3] = 255; // A
49
+ }
50
+
51
+ const frame = new VideoFrame(rgba, {
52
+ format: 'RGBA',
53
+ codedWidth: width,
54
+ codedHeight: height,
55
+ timestamp: (i * 1_000_000) / framerate,
56
+ });
57
+
58
+ encoder.encode(frame, { keyFrame: i === 0 });
59
+ frame.close();
60
+ }
61
+
62
+ await encoder.flush();
63
+ encoder.close();
64
+
65
+ console.log(`Encoded ${chunks.length} chunks\n`);
66
+
67
+ // Now decode the chunks
68
+ const decodedFrames: { timestamp: number; size: string }[] = [];
69
+
70
+ const decoder = new VideoDecoder({
71
+ output: (frame) => {
72
+ decodedFrames.push({
73
+ timestamp: frame.timestamp,
74
+ size: `${frame.codedWidth}x${frame.codedHeight}`,
75
+ });
76
+ console.log(
77
+ `Decoded frame: ${frame.codedWidth}x${frame.codedHeight}, ` +
78
+ `format: ${frame.format}, timestamp: ${frame.timestamp}`
79
+ );
80
+ frame.close();
81
+ },
82
+ error: (err) => {
83
+ console.error('Decoding error:', err);
84
+ },
85
+ });
86
+
87
+ decoder.configure({
88
+ codec: 'avc1.42001E',
89
+ codedWidth: width,
90
+ codedHeight: height,
91
+ });
92
+
93
+ console.log('Decoding chunks...');
94
+
95
+ for (const chunk of chunks) {
96
+ decoder.decode(chunk);
97
+ }
98
+
99
+ await decoder.flush();
100
+ decoder.close();
101
+
102
+ console.log(`\nDecoding complete:`);
103
+ console.log(` Input chunks: ${chunks.length}`);
104
+ console.log(` Output frames: ${decodedFrames.length}`);
105
+ }
106
+
107
+ main().catch(console.error);
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Video Encoding Example
3
+ *
4
+ * Demonstrates how to encode raw video frames to H.264.
5
+ *
6
+ * Run: npx tsx examples/video-encoding.ts
7
+ */
8
+
9
+ import { VideoEncoder, VideoFrame, EncodedVideoChunk } from '../src/index.js';
10
+ import { writeFileSync } from 'fs';
11
+
12
+ async function main() {
13
+ const width = 320;
14
+ const height = 240;
15
+ const frameCount = 60;
16
+ const framerate = 30;
17
+
18
+ const chunks: EncodedVideoChunk[] = [];
19
+
20
+ // Create encoder with callbacks
21
+ const encoder = new VideoEncoder({
22
+ output: (chunk, metadata) => {
23
+ chunks.push(chunk);
24
+ console.log(
25
+ `Encoded frame: ${chunk.type} ${chunk.byteLength} bytes, timestamp: ${chunk.timestamp}`
26
+ );
27
+
28
+ // First chunk includes decoder configuration
29
+ if (metadata?.decoderConfig) {
30
+ console.log('Decoder config:', metadata.decoderConfig);
31
+ }
32
+ },
33
+ error: (err) => {
34
+ console.error('Encoding error:', err);
35
+ },
36
+ });
37
+
38
+ // Configure the encoder
39
+ encoder.configure({
40
+ codec: 'avc1.42001E', // H.264 Baseline
41
+ width,
42
+ height,
43
+ bitrate: 1_000_000,
44
+ framerate,
45
+ bitrateMode: 'variable', // VBR for better quality
46
+ });
47
+
48
+ console.log(`Encoding ${frameCount} frames at ${width}x${height}...`);
49
+
50
+ // Generate and encode frames
51
+ for (let i = 0; i < frameCount; i++) {
52
+ // Create a simple gradient frame
53
+ const rgba = new Uint8Array(width * height * 4);
54
+
55
+ for (let y = 0; y < height; y++) {
56
+ for (let x = 0; x < width; x++) {
57
+ const idx = (y * width + x) * 4;
58
+ // Animate color based on frame number
59
+ rgba[idx] = (x + i * 5) % 256; // R
60
+ rgba[idx + 1] = (y + i * 3) % 256; // G
61
+ rgba[idx + 2] = ((x + y) / 2 + i * 2) % 256; // B
62
+ rgba[idx + 3] = 255; // A
63
+ }
64
+ }
65
+
66
+ const frame = new VideoFrame(rgba, {
67
+ format: 'RGBA',
68
+ codedWidth: width,
69
+ codedHeight: height,
70
+ timestamp: (i * 1_000_000) / framerate, // microseconds
71
+ });
72
+
73
+ // Force keyframe every second
74
+ encoder.encode(frame, { keyFrame: i % framerate === 0 });
75
+ frame.close();
76
+ }
77
+
78
+ // Wait for all frames to be encoded
79
+ await encoder.flush();
80
+ encoder.close();
81
+
82
+ // Calculate total size
83
+ const totalBytes = chunks.reduce((sum, chunk) => sum + chunk.byteLength, 0);
84
+ const keyFrames = chunks.filter((c) => c.type === 'key').length;
85
+
86
+ console.log(`\nEncoding complete:`);
87
+ console.log(` Total chunks: ${chunks.length}`);
88
+ console.log(` Key frames: ${keyFrames}`);
89
+ console.log(` Total size: ${(totalBytes / 1024).toFixed(2)} KB`);
90
+ console.log(` Avg bitrate: ${((totalBytes * 8 * framerate) / frameCount / 1000).toFixed(0)} kbps`);
91
+ }
92
+
93
+ main().catch(console.error);
package/package.json ADDED
@@ -0,0 +1,105 @@
1
+ {
2
+ "name": "webcodecs-node",
3
+ "version": "0.2.2",
4
+ "description": "WebCodecs API implementation for Node.js using FFmpeg",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "type": "module",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ },
13
+ "./mediabunny/FFmpegVideoEncoder": {
14
+ "types": "./dist/mediabunny/FFmpegVideoEncoder.d.ts",
15
+ "import": "./dist/mediabunny/FFmpegVideoEncoder.js"
16
+ },
17
+ "./mediabunny/FFmpegVideoDecoder": {
18
+ "types": "./dist/mediabunny/FFmpegVideoDecoder.d.ts",
19
+ "import": "./dist/mediabunny/FFmpegVideoDecoder.js"
20
+ },
21
+ "./mediabunny/FFmpegAudioEncoder": {
22
+ "types": "./dist/mediabunny/FFmpegAudioEncoder.d.ts",
23
+ "import": "./dist/mediabunny/FFmpegAudioEncoder.js"
24
+ },
25
+ "./mediabunny/FFmpegAudioDecoder": {
26
+ "types": "./dist/mediabunny/FFmpegAudioDecoder.d.ts",
27
+ "import": "./dist/mediabunny/FFmpegAudioDecoder.js"
28
+ },
29
+ "./polyfill": {
30
+ "types": "./dist/polyfill.d.ts",
31
+ "import": "./dist/polyfill.js"
32
+ }
33
+ },
34
+ "files": [
35
+ "dist",
36
+ "docs",
37
+ "examples",
38
+ "README.md",
39
+ "LICENSE"
40
+ ],
41
+ "scripts": {
42
+ "build": "tsc",
43
+ "test": "node --experimental-vm-modules node_modules/jest/bin/jest.js",
44
+ "demo": "node dist/demos/demo.js",
45
+ "demo:mediabunny": "node dist/demos/demo-mediabunny.js",
46
+ "demo:image": "node dist/demos/demo-image.js",
47
+ "demo:conversion": "node dist/demos/demo-conversion.js",
48
+ "demo:webcodecs": "node dist/demos/demo-webcodecs.js",
49
+ "demo:hwaccel": "node dist/demos/demo-hwaccel.js",
50
+ "demo:hwaccel-conversion": "node dist/demos/demo-hwaccel-conversion.js",
51
+ "demo:streaming": "node dist/demos/demo-streaming.js",
52
+ "demo:samples": "node dist/demos/demo-samples.js"
53
+ },
54
+ "keywords": [
55
+ "webcodecs",
56
+ "video",
57
+ "audio",
58
+ "encoder",
59
+ "decoder",
60
+ "ffmpeg",
61
+ "mediabunny",
62
+ "node",
63
+ "h264",
64
+ "hevc",
65
+ "vp9",
66
+ "av1",
67
+ "opus",
68
+ "aac",
69
+ "hardware-acceleration",
70
+ "vaapi",
71
+ "nvenc"
72
+ ],
73
+ "author": "Mohamed Ikbel Boulabiar boulabiar@gmail.com",
74
+ "license": "AGPL-3.0-or-later",
75
+ "repository": {
76
+ "type": "git",
77
+ "url": "https://github.com/boulabiar/webcodecs-node"
78
+ },
79
+ "bugs": {
80
+ "url": ""
81
+ },
82
+ "homepage": "",
83
+ "dependencies": {
84
+ "mediabunny": "^1.25.3",
85
+ "sharp": "^0.32.6"
86
+ },
87
+ "peerDependencies": {
88
+ "mediabunny": ">=1.25.0"
89
+ },
90
+ "peerDependenciesMeta": {
91
+ "mediabunny": {
92
+ "optional": true
93
+ }
94
+ },
95
+ "devDependencies": {
96
+ "@types/jest": "^30.0.0",
97
+ "@types/node": "^20.10.0",
98
+ "jest": "^29.7.0",
99
+ "ts-jest": "^29.4.5",
100
+ "typescript": "^5.3.0"
101
+ },
102
+ "engines": {
103
+ "node": ">=18.0.0"
104
+ }
105
+ }