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,129 @@
1
+ /**
2
+ * AAC (AudioSpecificConfig) parsing and ADTS framing utilities.
3
+ */
4
+ export const SAMPLING_RATES = [
5
+ 96000, 88200, 64000, 48000, 44100, 32000,
6
+ 24000, 22050, 16000, 12000, 11025, 8000,
7
+ 7350,
8
+ ];
9
+ /**
10
+ * Parse the AudioSpecificConfig (ISO/IEC 14496-3) blob passed via
11
+ * AudioDecoderConfig.description for codecs like mp4a.40.*.
12
+ */
13
+ export function parseAudioSpecificConfig(data) {
14
+ if (data.length < 2) {
15
+ throw new Error('Invalid AudioSpecificConfig: too short');
16
+ }
17
+ let bitOffset = 0;
18
+ const readBits = (numBits) => {
19
+ let value = 0;
20
+ for (let i = 0; i < numBits; i++) {
21
+ const byteOffset = (bitOffset + i) >> 3;
22
+ const bitInByte = 7 - ((bitOffset + i) & 7);
23
+ if (byteOffset >= data.length) {
24
+ throw new Error('Invalid AudioSpecificConfig: read past end');
25
+ }
26
+ value = (value << 1) | ((data[byteOffset] >> bitInByte) & 1);
27
+ }
28
+ bitOffset += numBits;
29
+ return value;
30
+ };
31
+ let audioObjectType = readBits(5);
32
+ if (audioObjectType === 31) {
33
+ audioObjectType = 32 + readBits(6);
34
+ }
35
+ let samplingFrequencyIndex = readBits(4);
36
+ let samplingRate;
37
+ if (samplingFrequencyIndex === 0xf) {
38
+ samplingRate = readBits(24);
39
+ }
40
+ else {
41
+ samplingRate = SAMPLING_RATES[samplingFrequencyIndex] ?? 0;
42
+ }
43
+ const channelConfiguration = readBits(4);
44
+ return {
45
+ audioObjectType,
46
+ samplingFrequencyIndex,
47
+ samplingRate,
48
+ channelConfiguration,
49
+ };
50
+ }
51
+ /**
52
+ * Wrap a raw AAC frame with an ADTS header using the parsed config.
53
+ */
54
+ export function wrapAacFrameWithAdts(data, config) {
55
+ const adtsHeader = Buffer.alloc(7);
56
+ const frameLength = data.length + adtsHeader.length;
57
+ const profile = (config.audioObjectType === 0 ? 1 : config.audioObjectType) - 1;
58
+ const freqIdx = config.samplingFrequencyIndex & 0xf;
59
+ const chanCfg = config.channelConfiguration & 0x7;
60
+ adtsHeader[0] = 0xff;
61
+ adtsHeader[1] = 0xf1; // Sync word, MPEG-4, layer 0, protection absent
62
+ adtsHeader[2] = ((profile & 0x3) << 6) | ((freqIdx & 0xf) << 2) | ((chanCfg >> 2) & 0x1);
63
+ adtsHeader[3] = ((chanCfg & 0x3) << 6) | ((frameLength >> 11) & 0x3);
64
+ adtsHeader[4] = (frameLength >> 3) & 0xff;
65
+ adtsHeader[5] = ((frameLength & 0x7) << 5) | 0x1f;
66
+ adtsHeader[6] = 0xfc;
67
+ return Buffer.concat([adtsHeader, Buffer.from(data)]);
68
+ }
69
+ export function buildAudioSpecificConfig(params) {
70
+ const writer = new BitWriter();
71
+ const audioObjectType = params.audioObjectType ?? 2;
72
+ if (audioObjectType >= 32) {
73
+ writer.write(31, 5);
74
+ writer.write(audioObjectType - 32, 6);
75
+ }
76
+ else {
77
+ writer.write(audioObjectType, 5);
78
+ }
79
+ let samplingFrequencyIndex = SAMPLING_RATES.indexOf(params.samplingRate);
80
+ if (samplingFrequencyIndex < 0) {
81
+ samplingFrequencyIndex = 0xf;
82
+ }
83
+ writer.write(samplingFrequencyIndex, 4);
84
+ if (samplingFrequencyIndex === 0xf) {
85
+ writer.write(params.samplingRate, 24);
86
+ }
87
+ writer.write(params.channelConfiguration & 0x0f, 4);
88
+ // frameLengthFlag, dependsOnCoreCoder, extensionFlag
89
+ writer.write(0, 3);
90
+ return writer.toUint8Array();
91
+ }
92
+ class BitWriter {
93
+ buffer = 0;
94
+ bits = 0;
95
+ out = [];
96
+ write(value, numBits) {
97
+ for (let i = numBits - 1; i >= 0; i--) {
98
+ const bit = (value >> i) & 1;
99
+ this.buffer = (this.buffer << 1) | bit;
100
+ this.bits++;
101
+ if (this.bits === 8) {
102
+ this.out.push(this.buffer & 0xff);
103
+ this.buffer = 0;
104
+ this.bits = 0;
105
+ }
106
+ }
107
+ }
108
+ toUint8Array() {
109
+ if (this.bits > 0) {
110
+ this.buffer <<= (8 - this.bits);
111
+ this.out.push(this.buffer & 0xff);
112
+ this.buffer = 0;
113
+ this.bits = 0;
114
+ }
115
+ return new Uint8Array(this.out);
116
+ }
117
+ }
118
+ export function stripAdtsHeader(frame) {
119
+ if (frame.length < 7) {
120
+ return frame;
121
+ }
122
+ const protectionAbsent = frame[1] & 0x01;
123
+ const headerLength = protectionAbsent ? 7 : 9;
124
+ if (frame.length <= headerLength) {
125
+ return new Uint8Array(0);
126
+ }
127
+ return frame.subarray(headerLength);
128
+ }
129
+ //# sourceMappingURL=aac.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aac.js","sourceRoot":"","sources":["../../src/utils/aac.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Utilities for handling AVC (H.264) configuration records and converting
3
+ * length-prefixed NAL units (avcC format) into Annex B byte streams.
4
+ */
5
+ export interface AvcConfig {
6
+ lengthSize: number;
7
+ sps: Uint8Array[];
8
+ pps: Uint8Array[];
9
+ }
10
+ /**
11
+ * Parse an AVCDecoderConfigurationRecord (ISO/IEC 14496-15) into a structure
12
+ * containing SPS/PPS NAL units and the NAL length size.
13
+ */
14
+ export declare function parseAvcDecoderConfig(data: Uint8Array): AvcConfig;
15
+ /**
16
+ * Convert an avcC length-prefixed chunk into Annex B byte stream and optionally
17
+ * prepend SPS/PPS parameter sets (required for key frames).
18
+ */
19
+ export declare function convertAvccToAnnexB(chunk: Uint8Array, config: AvcConfig, includeParameterSets: boolean): Buffer;
20
+ /**
21
+ * Split an Annex B stream into individual NAL units (without start codes).
22
+ */
23
+ export declare function splitAnnexBNals(data: Uint8Array): Uint8Array[];
24
+ /**
25
+ * Extract SPS/PPS parameter sets from an Annex B bitstream.
26
+ */
27
+ export declare function extractAvcParameterSetsFromAnnexB(data: Uint8Array): {
28
+ sps: Uint8Array[];
29
+ pps: Uint8Array[];
30
+ };
31
+ /**
32
+ * Build an AVCDecoderConfigurationRecord from SPS/PPS parameter sets.
33
+ */
34
+ export declare function buildAvcDecoderConfig(spsList: Uint8Array[], ppsList: Uint8Array[], lengthSize?: number): Uint8Array;
35
+ /**
36
+ * Convert Annex B frame into MP4 length-prefixed NAL units (avcC format).
37
+ */
38
+ export declare function convertAnnexBToAvcc(data: Uint8Array, lengthSize?: number): Buffer;
39
+ //# sourceMappingURL=avc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"avc.d.ts","sourceRoot":"","sources":["../../src/utils/avc.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,UAAU,EAAE,CAAC;IAClB,GAAG,EAAE,UAAU,EAAE,CAAC;CACnB;AAID;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,UAAU,GAAG,SAAS,CAgDjE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,SAAS,EACjB,oBAAoB,EAAE,OAAO,GAC5B,MAAM,CAiCR;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,EAAE,CA0B9D;AAmBD;;GAEG;AACH,wBAAgB,iCAAiC,CAAC,IAAI,EAAE,UAAU,GAAG;IAAE,GAAG,EAAE,UAAU,EAAE,CAAC;IAAC,GAAG,EAAE,UAAU,EAAE,CAAA;CAAE,CAqB5G;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,UAAU,EAAE,EACrB,OAAO,EAAE,UAAU,EAAE,EACrB,UAAU,GAAE,MAAU,GACrB,UAAU,CA+CZ;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,GAAE,MAAU,GAAG,MAAM,CAsBpF"}
@@ -0,0 +1,225 @@
1
+ /**
2
+ * Utilities for handling AVC (H.264) configuration records and converting
3
+ * length-prefixed NAL units (avcC format) into Annex B byte streams.
4
+ */
5
+ const START_CODE = Buffer.from([0x00, 0x00, 0x00, 0x01]);
6
+ /**
7
+ * Parse an AVCDecoderConfigurationRecord (ISO/IEC 14496-15) into a structure
8
+ * containing SPS/PPS NAL units and the NAL length size.
9
+ */
10
+ export function parseAvcDecoderConfig(data) {
11
+ if (data.length < 7) {
12
+ throw new Error('Invalid AVCDecoderConfigurationRecord: too short');
13
+ }
14
+ const lengthSizeMinusOne = data[4] & 0x03;
15
+ const lengthSize = (lengthSizeMinusOne & 0x03) + 1;
16
+ let offset = 5;
17
+ const numOfSps = data[offset] & 0x1f;
18
+ offset += 1;
19
+ const sps = [];
20
+ for (let i = 0; i < numOfSps; i++) {
21
+ if (offset + 2 > data.length) {
22
+ throw new Error('Invalid AVCDecoderConfigurationRecord: truncated SPS length');
23
+ }
24
+ const length = (data[offset] << 8) | data[offset + 1];
25
+ offset += 2;
26
+ if (offset + length > data.length) {
27
+ throw new Error('Invalid AVCDecoderConfigurationRecord: truncated SPS data');
28
+ }
29
+ sps.push(data.subarray(offset, offset + length));
30
+ offset += length;
31
+ }
32
+ if (offset + 1 > data.length) {
33
+ throw new Error('Invalid AVCDecoderConfigurationRecord: missing PPS count');
34
+ }
35
+ const numOfPps = data[offset];
36
+ offset += 1;
37
+ const pps = [];
38
+ for (let i = 0; i < numOfPps; i++) {
39
+ if (offset + 2 > data.length) {
40
+ throw new Error('Invalid AVCDecoderConfigurationRecord: truncated PPS length');
41
+ }
42
+ const length = (data[offset] << 8) | data[offset + 1];
43
+ offset += 2;
44
+ if (offset + length > data.length) {
45
+ throw new Error('Invalid AVCDecoderConfigurationRecord: truncated PPS data');
46
+ }
47
+ pps.push(data.subarray(offset, offset + length));
48
+ offset += length;
49
+ }
50
+ return { lengthSize, sps, pps };
51
+ }
52
+ /**
53
+ * Convert an avcC length-prefixed chunk into Annex B byte stream and optionally
54
+ * prepend SPS/PPS parameter sets (required for key frames).
55
+ */
56
+ export function convertAvccToAnnexB(chunk, config, includeParameterSets) {
57
+ const parts = [];
58
+ if (includeParameterSets) {
59
+ for (const nal of config.sps) {
60
+ parts.push(START_CODE, Buffer.from(nal));
61
+ }
62
+ for (const nal of config.pps) {
63
+ parts.push(START_CODE, Buffer.from(nal));
64
+ }
65
+ }
66
+ let offset = 0;
67
+ while (offset + config.lengthSize <= chunk.length) {
68
+ let nalSize = 0;
69
+ for (let i = 0; i < config.lengthSize; i++) {
70
+ nalSize = (nalSize << 8) | chunk[offset + i];
71
+ }
72
+ offset += config.lengthSize;
73
+ if (nalSize <= 0 || offset + nalSize > chunk.length) {
74
+ break; // malformed
75
+ }
76
+ const nal = chunk.subarray(offset, offset + nalSize);
77
+ parts.push(START_CODE, Buffer.from(nal));
78
+ offset += nalSize;
79
+ }
80
+ if (parts.length === 0) {
81
+ // Fallback to original chunk to avoid dropping data entirely.
82
+ return Buffer.from(chunk);
83
+ }
84
+ return Buffer.concat(parts);
85
+ }
86
+ /**
87
+ * Split an Annex B stream into individual NAL units (without start codes).
88
+ */
89
+ export function splitAnnexBNals(data) {
90
+ const units = [];
91
+ let offset = 0;
92
+ let unitStart = -1;
93
+ while (offset < data.length) {
94
+ const startCodeLength = getStartCodeLength(data, offset);
95
+ if (startCodeLength > 0) {
96
+ if (unitStart >= 0 && unitStart < offset) {
97
+ const unit = data.subarray(unitStart, offset);
98
+ if (unit.length > 0) {
99
+ units.push(unit);
100
+ }
101
+ }
102
+ offset += startCodeLength;
103
+ unitStart = offset;
104
+ }
105
+ else {
106
+ offset++;
107
+ }
108
+ }
109
+ if (unitStart >= 0 && unitStart < data.length) {
110
+ units.push(data.subarray(unitStart));
111
+ }
112
+ return units;
113
+ }
114
+ function getStartCodeLength(data, offset) {
115
+ if (offset + 3 > data.length) {
116
+ return 0;
117
+ }
118
+ if (data[offset] === 0 && data[offset + 1] === 0) {
119
+ if (data[offset + 2] === 1) {
120
+ return 3;
121
+ }
122
+ if (offset + 3 < data.length && data[offset + 2] === 0 && data[offset + 3] === 1) {
123
+ return 4;
124
+ }
125
+ }
126
+ return 0;
127
+ }
128
+ /**
129
+ * Extract SPS/PPS parameter sets from an Annex B bitstream.
130
+ */
131
+ export function extractAvcParameterSetsFromAnnexB(data) {
132
+ const units = splitAnnexBNals(data);
133
+ const sps = [];
134
+ const pps = [];
135
+ const seen = new Set();
136
+ for (const unit of units) {
137
+ if (unit.length === 0)
138
+ continue;
139
+ const nalType = unit[0] & 0x1f;
140
+ const key = `${nalType}:${unit.toString()}`;
141
+ if (seen.has(key))
142
+ continue;
143
+ seen.add(key);
144
+ if (nalType === 7) {
145
+ sps.push(unit);
146
+ }
147
+ else if (nalType === 8) {
148
+ pps.push(unit);
149
+ }
150
+ }
151
+ return { sps, pps };
152
+ }
153
+ /**
154
+ * Build an AVCDecoderConfigurationRecord from SPS/PPS parameter sets.
155
+ */
156
+ export function buildAvcDecoderConfig(spsList, ppsList, lengthSize = 4) {
157
+ if (spsList.length === 0 || ppsList.length === 0) {
158
+ throw new Error('At least one SPS and PPS are required to build AVC config');
159
+ }
160
+ const sanitizedLength = Math.min(Math.max(lengthSize, 1), 4);
161
+ const spsCount = Math.min(spsList.length, 31);
162
+ const ppsCount = Math.min(ppsList.length, 255);
163
+ let size = 6; // version/profile/level/length size + numOfSPS byte
164
+ for (let i = 0; i < spsCount; i++) {
165
+ size += 2 + spsList[i].length;
166
+ }
167
+ size += 1; // numOfPPS byte
168
+ for (let i = 0; i < ppsCount; i++) {
169
+ size += 2 + ppsList[i].length;
170
+ }
171
+ const buffer = Buffer.alloc(size);
172
+ let offset = 0;
173
+ const firstSps = spsList[0];
174
+ buffer[offset++] = 1; // configurationVersion
175
+ buffer[offset++] = firstSps[1] ?? 0x64; // profile indication
176
+ buffer[offset++] = firstSps[2] ?? 0x00; // profile compatibility
177
+ buffer[offset++] = firstSps[3] ?? 0x1f; // level indication
178
+ buffer[offset++] = 0xfc | ((sanitizedLength - 1) & 0x03);
179
+ buffer[offset++] = 0xe0 | spsCount;
180
+ for (let i = 0; i < spsCount; i++) {
181
+ const sps = spsList[i];
182
+ buffer.writeUInt16BE(sps.length, offset);
183
+ offset += 2;
184
+ Buffer.from(sps).copy(buffer, offset);
185
+ offset += sps.length;
186
+ }
187
+ buffer[offset++] = ppsCount;
188
+ for (let i = 0; i < ppsCount; i++) {
189
+ const pps = ppsList[i];
190
+ buffer.writeUInt16BE(pps.length, offset);
191
+ offset += 2;
192
+ Buffer.from(pps).copy(buffer, offset);
193
+ offset += pps.length;
194
+ }
195
+ return new Uint8Array(buffer);
196
+ }
197
+ /**
198
+ * Convert Annex B frame into MP4 length-prefixed NAL units (avcC format).
199
+ */
200
+ export function convertAnnexBToAvcc(data, lengthSize = 4) {
201
+ const units = splitAnnexBNals(data);
202
+ const sanitizedLength = Math.min(Math.max(lengthSize, 1), 4);
203
+ const parts = [];
204
+ for (const unit of units) {
205
+ if (unit.length === 0)
206
+ continue;
207
+ const lengthBuffer = Buffer.alloc(sanitizedLength);
208
+ if (sanitizedLength === 4) {
209
+ lengthBuffer.writeUInt32BE(unit.length, 0);
210
+ }
211
+ else if (sanitizedLength === 2) {
212
+ lengthBuffer.writeUInt16BE(unit.length, 0);
213
+ }
214
+ else if (sanitizedLength === 1) {
215
+ lengthBuffer.writeUInt8(unit.length, 0);
216
+ }
217
+ else {
218
+ // 3-byte length
219
+ lengthBuffer.writeUIntBE(unit.length, 0, 3);
220
+ }
221
+ parts.push(lengthBuffer, Buffer.from(unit));
222
+ }
223
+ return Buffer.concat(parts);
224
+ }
225
+ //# sourceMappingURL=avc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"avc.js","sourceRoot":"","sources":["../../src/utils/avc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Buffer and ArrayBuffer utilities
3
+ */
4
+ import { BufferSource } from '../types/index.js';
5
+ /**
6
+ * Convert any BufferSource to Uint8Array
7
+ */
8
+ export declare function toUint8Array(source: BufferSource): Uint8Array;
9
+ /**
10
+ * Copy BufferSource to a new Uint8Array
11
+ */
12
+ export declare function copyToUint8Array(source: BufferSource): Uint8Array;
13
+ /**
14
+ * Concatenate multiple Uint8Arrays into one
15
+ */
16
+ export declare function concatUint8Arrays(arrays: Uint8Array[]): Uint8Array;
17
+ /**
18
+ * Check if an object is a ReadableStream
19
+ */
20
+ export declare function isReadableStream(obj: unknown): obj is ReadableStream;
21
+ /**
22
+ * Read a ReadableStream completely into a Uint8Array
23
+ */
24
+ export declare function readStreamToUint8Array(stream: ReadableStream<ArrayBufferView>): Promise<Uint8Array>;
25
+ //# sourceMappingURL=buffer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buffer.d.ts","sourceRoot":"","sources":["../../src/utils/buffer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,UAAU,CAO7D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,UAAU,CASjE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,UAAU,CASlE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,cAAc,CAMpE;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,MAAM,EAAE,cAAc,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAmBzG"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Buffer and ArrayBuffer utilities
3
+ */
4
+ /**
5
+ * Convert any BufferSource to Uint8Array
6
+ */
7
+ export function toUint8Array(source) {
8
+ if (source instanceof ArrayBuffer) {
9
+ return new Uint8Array(source);
10
+ }
11
+ else if (ArrayBuffer.isView(source)) {
12
+ return new Uint8Array(source.buffer, source.byteOffset, source.byteLength);
13
+ }
14
+ throw new TypeError('source must be an ArrayBuffer or ArrayBufferView');
15
+ }
16
+ /**
17
+ * Copy BufferSource to a new Uint8Array
18
+ */
19
+ export function copyToUint8Array(source) {
20
+ if (source instanceof ArrayBuffer) {
21
+ return new Uint8Array(source.slice(0));
22
+ }
23
+ else if (ArrayBuffer.isView(source)) {
24
+ const copy = new Uint8Array(source.byteLength);
25
+ copy.set(new Uint8Array(source.buffer, source.byteOffset, source.byteLength));
26
+ return copy;
27
+ }
28
+ throw new TypeError('source must be an ArrayBuffer or ArrayBufferView');
29
+ }
30
+ /**
31
+ * Concatenate multiple Uint8Arrays into one
32
+ */
33
+ export function concatUint8Arrays(arrays) {
34
+ const totalLength = arrays.reduce((sum, arr) => sum + arr.length, 0);
35
+ const result = new Uint8Array(totalLength);
36
+ let offset = 0;
37
+ for (const arr of arrays) {
38
+ result.set(arr, offset);
39
+ offset += arr.length;
40
+ }
41
+ return result;
42
+ }
43
+ /**
44
+ * Check if an object is a ReadableStream
45
+ */
46
+ export function isReadableStream(obj) {
47
+ return (typeof obj === 'object' &&
48
+ obj !== null &&
49
+ typeof obj.getReader === 'function');
50
+ }
51
+ /**
52
+ * Read a ReadableStream completely into a Uint8Array
53
+ */
54
+ export async function readStreamToUint8Array(stream) {
55
+ const reader = stream.getReader();
56
+ const chunks = [];
57
+ try {
58
+ while (true) {
59
+ const { done, value } = await reader.read();
60
+ if (done)
61
+ break;
62
+ if (value) {
63
+ const chunk = new Uint8Array(value.buffer, value.byteOffset, value.byteLength);
64
+ chunks.push(chunk);
65
+ }
66
+ }
67
+ }
68
+ finally {
69
+ reader.releaseLock();
70
+ }
71
+ return concatUint8Arrays(chunks);
72
+ }
73
+ //# sourceMappingURL=buffer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buffer.js","sourceRoot":"","sources":["../../src/utils/buffer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,MAAoB;IAC/C,IAAI,MAAM,YAAY,WAAW,EAAE,CAAC;QAClC,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;SAAM,IAAI,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACtC,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IAC7E,CAAC;IACD,MAAM,IAAI,SAAS,CAAC,kDAAkD,CAAC,CAAC;AAC1E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAoB;IACnD,IAAI,MAAM,YAAY,WAAW,EAAE,CAAC;QAClC,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC;SAAM,IAAI,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC/C,IAAI,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;QAC9E,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,IAAI,SAAS,CAAC,kDAAkD,CAAC,CAAC;AAC1E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAoB;IACpD,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACrE,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC;IAC3C,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACxB,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC;IACvB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAY;IAC3C,OAAO,CACL,OAAO,GAAG,KAAK,QAAQ;QACvB,GAAG,KAAK,IAAI;QACZ,OAAQ,GAAsB,CAAC,SAAS,KAAK,UAAU,CACxD,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,MAAuC;IAClF,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;IAClC,MAAM,MAAM,GAAiB,EAAE,CAAC;IAEhC,IAAI,CAAC;QACH,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAC5C,IAAI,IAAI;gBAAE,MAAM;YAEhB,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;gBAC/E,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;IAED,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC;AACnC,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Utilities for handling HEVC (H.265) configuration records (HVCC) and
3
+ * converting length-prefixed MP4 samples into Annex B byte streams.
4
+ */
5
+ export interface HvccConfig {
6
+ lengthSize: number;
7
+ vps: Uint8Array[];
8
+ sps: Uint8Array[];
9
+ pps: Uint8Array[];
10
+ }
11
+ /**
12
+ * Parse an HEVCDecoderConfigurationRecord as defined in ISO/IEC 14496-15.
13
+ */
14
+ export declare function parseHvccDecoderConfig(data: Uint8Array): HvccConfig;
15
+ /**
16
+ * Convert HVCC (length-prefixed) samples to Annex B and optionally add VPS/SPS/PPS.
17
+ */
18
+ export declare function convertHvccToAnnexB(chunk: Uint8Array, config: HvccConfig, includeParameterSets: boolean): Buffer;
19
+ export declare function splitHevcAnnexBNals(data: Uint8Array): Uint8Array[];
20
+ export declare function extractHevcParameterSetsFromAnnexB(data: Uint8Array): {
21
+ vps: Uint8Array[];
22
+ sps: Uint8Array[];
23
+ pps: Uint8Array[];
24
+ };
25
+ export declare function convertAnnexBToHvcc(data: Uint8Array, lengthSize?: number): Buffer;
26
+ export declare function buildHvccDecoderConfig(vpsList: Uint8Array[], spsList: Uint8Array[], ppsList: Uint8Array[], lengthSize?: number): Uint8Array;
27
+ //# sourceMappingURL=hevc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hevc.d.ts","sourceRoot":"","sources":["../../src/utils/hevc.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,UAAU,EAAE,CAAC;IAClB,GAAG,EAAE,UAAU,EAAE,CAAC;IAClB,GAAG,EAAE,UAAU,EAAE,CAAC;CACnB;AAID;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAsDnE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,UAAU,EAClB,oBAAoB,EAAE,OAAO,GAC5B,MAAM,CAqCR;AAmBD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,EAAE,CA0BlE;AAED,wBAAgB,kCAAkC,CAChD,IAAI,EAAE,UAAU,GACf;IAAE,GAAG,EAAE,UAAU,EAAE,CAAC;IAAC,GAAG,EAAE,UAAU,EAAE,CAAC;IAAC,GAAG,EAAE,UAAU,EAAE,CAAA;CAAE,CAwB7D;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,GAAE,MAAU,GAAG,MAAM,CAqBpF;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,UAAU,EAAE,EACrB,OAAO,EAAE,UAAU,EAAE,EACrB,OAAO,EAAE,UAAU,EAAE,EACrB,UAAU,GAAE,MAAU,GACrB,UAAU,CAqEZ"}