node-av-lgpl 0.0.0 → 7.1.0-beta.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 (311) hide show
  1. package/LICENSE.md +22 -0
  2. package/README.md +711 -0
  3. package/dist/api/audio-frame-buffer.d.ts +636 -0
  4. package/dist/api/audio-frame-buffer.js +1027 -0
  5. package/dist/api/audio-frame-buffer.js.map +1 -0
  6. package/dist/api/bitstream-filter.d.ts +938 -0
  7. package/dist/api/bitstream-filter.js +1427 -0
  8. package/dist/api/bitstream-filter.js.map +1 -0
  9. package/dist/api/constants.d.ts +44 -0
  10. package/dist/api/constants.js +45 -0
  11. package/dist/api/constants.js.map +1 -0
  12. package/dist/api/data/test_av1.ivf +0 -0
  13. package/dist/api/data/test_h264.h264 +0 -0
  14. package/dist/api/data/test_hevc.h265 +0 -0
  15. package/dist/api/data/test_mjpeg.mjpeg +0 -0
  16. package/dist/api/data/test_vp8.ivf +0 -0
  17. package/dist/api/data/test_vp9.ivf +0 -0
  18. package/dist/api/decoder.d.ts +1413 -0
  19. package/dist/api/decoder.js +2367 -0
  20. package/dist/api/decoder.js.map +1 -0
  21. package/dist/api/demuxer.d.ts +1295 -0
  22. package/dist/api/demuxer.js +2344 -0
  23. package/dist/api/demuxer.js.map +1 -0
  24. package/dist/api/device.d.ts +589 -0
  25. package/dist/api/device.js +964 -0
  26. package/dist/api/device.js.map +1 -0
  27. package/dist/api/encoder-pool.d.ts +262 -0
  28. package/dist/api/encoder-pool.js +397 -0
  29. package/dist/api/encoder-pool.js.map +1 -0
  30. package/dist/api/encoder.d.ts +1509 -0
  31. package/dist/api/encoder.js +2619 -0
  32. package/dist/api/encoder.js.map +1 -0
  33. package/dist/api/filter-complex.d.ts +828 -0
  34. package/dist/api/filter-complex.js +1661 -0
  35. package/dist/api/filter-complex.js.map +1 -0
  36. package/dist/api/filter-presets.d.ts +800 -0
  37. package/dist/api/filter-presets.js +1554 -0
  38. package/dist/api/filter-presets.js.map +1 -0
  39. package/dist/api/filter.d.ts +1339 -0
  40. package/dist/api/filter.js +2075 -0
  41. package/dist/api/filter.js.map +1 -0
  42. package/dist/api/fmp4-stream.d.ts +797 -0
  43. package/dist/api/fmp4-stream.js +1428 -0
  44. package/dist/api/fmp4-stream.js.map +1 -0
  45. package/dist/api/hardware.d.ts +677 -0
  46. package/dist/api/hardware.js +1300 -0
  47. package/dist/api/hardware.js.map +1 -0
  48. package/dist/api/index.d.ts +21 -0
  49. package/dist/api/index.js +38 -0
  50. package/dist/api/index.js.map +1 -0
  51. package/dist/api/io-stream.d.ts +308 -0
  52. package/dist/api/io-stream.js +358 -0
  53. package/dist/api/io-stream.js.map +1 -0
  54. package/dist/api/muxer.d.ts +1311 -0
  55. package/dist/api/muxer.js +2672 -0
  56. package/dist/api/muxer.js.map +1 -0
  57. package/dist/api/pipeline.d.ts +801 -0
  58. package/dist/api/pipeline.js +1344 -0
  59. package/dist/api/pipeline.js.map +1 -0
  60. package/dist/api/probe.d.ts +128 -0
  61. package/dist/api/probe.js +227 -0
  62. package/dist/api/probe.js.map +1 -0
  63. package/dist/api/rtp-stream.d.ts +497 -0
  64. package/dist/api/rtp-stream.js +1131 -0
  65. package/dist/api/rtp-stream.js.map +1 -0
  66. package/dist/api/scaler.d.ts +561 -0
  67. package/dist/api/scaler.js +918 -0
  68. package/dist/api/scaler.js.map +1 -0
  69. package/dist/api/types.d.ts +17 -0
  70. package/dist/api/types.js +2 -0
  71. package/dist/api/types.js.map +1 -0
  72. package/dist/api/utilities/async-queue.d.ts +149 -0
  73. package/dist/api/utilities/async-queue.js +254 -0
  74. package/dist/api/utilities/async-queue.js.map +1 -0
  75. package/dist/api/utilities/audio-sample.d.ts +117 -0
  76. package/dist/api/utilities/audio-sample.js +112 -0
  77. package/dist/api/utilities/audio-sample.js.map +1 -0
  78. package/dist/api/utilities/audio-transcode.d.ts +20 -0
  79. package/dist/api/utilities/audio-transcode.js +27 -0
  80. package/dist/api/utilities/audio-transcode.js.map +1 -0
  81. package/dist/api/utilities/channel-layout.d.ts +76 -0
  82. package/dist/api/utilities/channel-layout.js +80 -0
  83. package/dist/api/utilities/channel-layout.js.map +1 -0
  84. package/dist/api/utilities/codec-format.d.ts +87 -0
  85. package/dist/api/utilities/codec-format.js +117 -0
  86. package/dist/api/utilities/codec-format.js.map +1 -0
  87. package/dist/api/utilities/context-options.d.ts +25 -0
  88. package/dist/api/utilities/context-options.js +23 -0
  89. package/dist/api/utilities/context-options.js.map +1 -0
  90. package/dist/api/utilities/electron-shared-texture.d.ts +368 -0
  91. package/dist/api/utilities/electron-shared-texture.js +540 -0
  92. package/dist/api/utilities/electron-shared-texture.js.map +1 -0
  93. package/dist/api/utilities/image.d.ts +207 -0
  94. package/dist/api/utilities/image.js +213 -0
  95. package/dist/api/utilities/image.js.map +1 -0
  96. package/dist/api/utilities/index.d.ts +14 -0
  97. package/dist/api/utilities/index.js +27 -0
  98. package/dist/api/utilities/index.js.map +1 -0
  99. package/dist/api/utilities/live-decoding.d.ts +15 -0
  100. package/dist/api/utilities/live-decoding.js +32 -0
  101. package/dist/api/utilities/live-decoding.js.map +1 -0
  102. package/dist/api/utilities/media-type.d.ts +49 -0
  103. package/dist/api/utilities/media-type.js +53 -0
  104. package/dist/api/utilities/media-type.js.map +1 -0
  105. package/dist/api/utilities/packet-age-watchdog.d.ts +198 -0
  106. package/dist/api/utilities/packet-age-watchdog.js +594 -0
  107. package/dist/api/utilities/packet-age-watchdog.js.map +1 -0
  108. package/dist/api/utilities/pixel-format.d.ts +89 -0
  109. package/dist/api/utilities/pixel-format.js +97 -0
  110. package/dist/api/utilities/pixel-format.js.map +1 -0
  111. package/dist/api/utilities/sample-format.d.ts +129 -0
  112. package/dist/api/utilities/sample-format.js +141 -0
  113. package/dist/api/utilities/sample-format.js.map +1 -0
  114. package/dist/api/utilities/scale-size.d.ts +51 -0
  115. package/dist/api/utilities/scale-size.js +55 -0
  116. package/dist/api/utilities/scale-size.js.map +1 -0
  117. package/dist/api/utilities/scheduler.d.ts +138 -0
  118. package/dist/api/utilities/scheduler.js +98 -0
  119. package/dist/api/utilities/scheduler.js.map +1 -0
  120. package/dist/api/utilities/streaming.d.ts +186 -0
  121. package/dist/api/utilities/streaming.js +309 -0
  122. package/dist/api/utilities/streaming.js.map +1 -0
  123. package/dist/api/utilities/timestamp.d.ts +193 -0
  124. package/dist/api/utilities/timestamp.js +206 -0
  125. package/dist/api/utilities/timestamp.js.map +1 -0
  126. package/dist/api/utilities/video-transcode.d.ts +218 -0
  127. package/dist/api/utilities/video-transcode.js +624 -0
  128. package/dist/api/utilities/video-transcode.js.map +1 -0
  129. package/dist/api/utilities/whisper-model.d.ts +330 -0
  130. package/dist/api/utilities/whisper-model.js +587 -0
  131. package/dist/api/utilities/whisper-model.js.map +1 -0
  132. package/dist/api/utils.d.ts +19 -0
  133. package/dist/api/utils.js +39 -0
  134. package/dist/api/utils.js.map +1 -0
  135. package/dist/api/webrtc-stream.d.ts +294 -0
  136. package/dist/api/webrtc-stream.js +546 -0
  137. package/dist/api/webrtc-stream.js.map +1 -0
  138. package/dist/api/whisper.d.ts +326 -0
  139. package/dist/api/whisper.js +402 -0
  140. package/dist/api/whisper.js.map +1 -0
  141. package/dist/constants/bsf-options.d.ts +364 -0
  142. package/dist/constants/bsf-options.js +7 -0
  143. package/dist/constants/bsf-options.js.map +1 -0
  144. package/dist/constants/channel-layouts.d.ts +53 -0
  145. package/dist/constants/channel-layouts.js +57 -0
  146. package/dist/constants/channel-layouts.js.map +1 -0
  147. package/dist/constants/constants.d.ts +2435 -0
  148. package/dist/constants/constants.js +1989 -0
  149. package/dist/constants/constants.js.map +1 -0
  150. package/dist/constants/decoders.d.ts +651 -0
  151. package/dist/constants/decoders.js +641 -0
  152. package/dist/constants/decoders.js.map +1 -0
  153. package/dist/constants/encoders.d.ts +314 -0
  154. package/dist/constants/encoders.js +309 -0
  155. package/dist/constants/encoders.js.map +1 -0
  156. package/dist/constants/filter-options.d.ts +12099 -0
  157. package/dist/constants/filter-options.js +7 -0
  158. package/dist/constants/filter-options.js.map +1 -0
  159. package/dist/constants/format-options.d.ts +4319 -0
  160. package/dist/constants/format-options.js +7 -0
  161. package/dist/constants/format-options.js.map +1 -0
  162. package/dist/constants/formats.d.ts +18 -0
  163. package/dist/constants/formats.js +7 -0
  164. package/dist/constants/formats.js.map +1 -0
  165. package/dist/constants/hardware.d.ts +26 -0
  166. package/dist/constants/hardware.js +27 -0
  167. package/dist/constants/hardware.js.map +1 -0
  168. package/dist/constants/index.d.ts +10 -0
  169. package/dist/constants/index.js +6 -0
  170. package/dist/constants/index.js.map +1 -0
  171. package/dist/constants/options.d.ts +6217 -0
  172. package/dist/constants/options.js +7 -0
  173. package/dist/constants/options.js.map +1 -0
  174. package/dist/ffmpeg/index.d.ts +101 -0
  175. package/dist/ffmpeg/index.js +161 -0
  176. package/dist/ffmpeg/index.js.map +1 -0
  177. package/dist/ffmpeg/version.d.ts +6 -0
  178. package/dist/ffmpeg/version.js +7 -0
  179. package/dist/ffmpeg/version.js.map +1 -0
  180. package/dist/index.d.ts +4 -0
  181. package/dist/index.js +9 -0
  182. package/dist/index.js.map +1 -0
  183. package/dist/lib/audio-fifo.d.ts +399 -0
  184. package/dist/lib/audio-fifo.js +431 -0
  185. package/dist/lib/audio-fifo.js.map +1 -0
  186. package/dist/lib/binding.d.ts +242 -0
  187. package/dist/lib/binding.js +102 -0
  188. package/dist/lib/binding.js.map +1 -0
  189. package/dist/lib/bitstream-filter-context.d.ts +381 -0
  190. package/dist/lib/bitstream-filter-context.js +443 -0
  191. package/dist/lib/bitstream-filter-context.js.map +1 -0
  192. package/dist/lib/bitstream-filter.d.ts +140 -0
  193. package/dist/lib/bitstream-filter.js +154 -0
  194. package/dist/lib/bitstream-filter.js.map +1 -0
  195. package/dist/lib/codec-context.d.ts +1069 -0
  196. package/dist/lib/codec-context.js +1336 -0
  197. package/dist/lib/codec-context.js.map +1 -0
  198. package/dist/lib/codec-parameters.d.ts +664 -0
  199. package/dist/lib/codec-parameters.js +813 -0
  200. package/dist/lib/codec-parameters.js.map +1 -0
  201. package/dist/lib/codec-parser.d.ts +201 -0
  202. package/dist/lib/codec-parser.js +213 -0
  203. package/dist/lib/codec-parser.js.map +1 -0
  204. package/dist/lib/codec.d.ts +617 -0
  205. package/dist/lib/codec.js +746 -0
  206. package/dist/lib/codec.js.map +1 -0
  207. package/dist/lib/device.d.ts +294 -0
  208. package/dist/lib/device.js +326 -0
  209. package/dist/lib/device.js.map +1 -0
  210. package/dist/lib/dictionary.d.ts +333 -0
  211. package/dist/lib/dictionary.js +372 -0
  212. package/dist/lib/dictionary.js.map +1 -0
  213. package/dist/lib/error.d.ts +311 -0
  214. package/dist/lib/error.js +395 -0
  215. package/dist/lib/error.js.map +1 -0
  216. package/dist/lib/fifo.d.ts +416 -0
  217. package/dist/lib/fifo.js +453 -0
  218. package/dist/lib/fifo.js.map +1 -0
  219. package/dist/lib/filter-context.d.ts +714 -0
  220. package/dist/lib/filter-context.js +783 -0
  221. package/dist/lib/filter-context.js.map +1 -0
  222. package/dist/lib/filter-graph-segment.d.ts +161 -0
  223. package/dist/lib/filter-graph-segment.js +172 -0
  224. package/dist/lib/filter-graph-segment.js.map +1 -0
  225. package/dist/lib/filter-graph.d.ts +641 -0
  226. package/dist/lib/filter-graph.js +704 -0
  227. package/dist/lib/filter-graph.js.map +1 -0
  228. package/dist/lib/filter-inout.d.ts +202 -0
  229. package/dist/lib/filter-inout.js +261 -0
  230. package/dist/lib/filter-inout.js.map +1 -0
  231. package/dist/lib/filter.d.ts +243 -0
  232. package/dist/lib/filter.js +272 -0
  233. package/dist/lib/filter.js.map +1 -0
  234. package/dist/lib/format-context.d.ts +1335 -0
  235. package/dist/lib/format-context.js +1455 -0
  236. package/dist/lib/format-context.js.map +1 -0
  237. package/dist/lib/frame-utils.d.ts +116 -0
  238. package/dist/lib/frame-utils.js +98 -0
  239. package/dist/lib/frame-utils.js.map +1 -0
  240. package/dist/lib/frame.d.ts +1315 -0
  241. package/dist/lib/frame.js +1535 -0
  242. package/dist/lib/frame.js.map +1 -0
  243. package/dist/lib/hardware-device-context.d.ts +362 -0
  244. package/dist/lib/hardware-device-context.js +383 -0
  245. package/dist/lib/hardware-device-context.js.map +1 -0
  246. package/dist/lib/hardware-frames-context.d.ts +418 -0
  247. package/dist/lib/hardware-frames-context.js +471 -0
  248. package/dist/lib/hardware-frames-context.js.map +1 -0
  249. package/dist/lib/index.d.ts +35 -0
  250. package/dist/lib/index.js +60 -0
  251. package/dist/lib/index.js.map +1 -0
  252. package/dist/lib/input-format.d.ts +249 -0
  253. package/dist/lib/input-format.js +306 -0
  254. package/dist/lib/input-format.js.map +1 -0
  255. package/dist/lib/io-context.d.ts +698 -0
  256. package/dist/lib/io-context.js +771 -0
  257. package/dist/lib/io-context.js.map +1 -0
  258. package/dist/lib/log.d.ts +174 -0
  259. package/dist/lib/log.js +184 -0
  260. package/dist/lib/log.js.map +1 -0
  261. package/dist/lib/native-types.d.ts +1024 -0
  262. package/dist/lib/native-types.js +2 -0
  263. package/dist/lib/native-types.js.map +1 -0
  264. package/dist/lib/option.d.ts +953 -0
  265. package/dist/lib/option.js +1607 -0
  266. package/dist/lib/option.js.map +1 -0
  267. package/dist/lib/output-format.d.ts +222 -0
  268. package/dist/lib/output-format.js +259 -0
  269. package/dist/lib/output-format.js.map +1 -0
  270. package/dist/lib/packet.d.ts +521 -0
  271. package/dist/lib/packet.js +613 -0
  272. package/dist/lib/packet.js.map +1 -0
  273. package/dist/lib/rational.d.ts +251 -0
  274. package/dist/lib/rational.js +278 -0
  275. package/dist/lib/rational.js.map +1 -0
  276. package/dist/lib/software-resample-context.d.ts +552 -0
  277. package/dist/lib/software-resample-context.js +592 -0
  278. package/dist/lib/software-resample-context.js.map +1 -0
  279. package/dist/lib/software-scale-context.d.ts +344 -0
  280. package/dist/lib/software-scale-context.js +366 -0
  281. package/dist/lib/software-scale-context.js.map +1 -0
  282. package/dist/lib/stream.d.ts +384 -0
  283. package/dist/lib/stream.js +525 -0
  284. package/dist/lib/stream.js.map +1 -0
  285. package/dist/lib/sync-queue.d.ts +179 -0
  286. package/dist/lib/sync-queue.js +197 -0
  287. package/dist/lib/sync-queue.js.map +1 -0
  288. package/dist/lib/types.d.ts +34 -0
  289. package/dist/lib/types.js +2 -0
  290. package/dist/lib/types.js.map +1 -0
  291. package/dist/lib/utilities.d.ts +1198 -0
  292. package/dist/lib/utilities.js +1302 -0
  293. package/dist/lib/utilities.js.map +1 -0
  294. package/dist/utils/electron.d.ts +49 -0
  295. package/dist/utils/electron.js +63 -0
  296. package/dist/utils/electron.js.map +1 -0
  297. package/dist/utils/index.d.ts +6 -0
  298. package/dist/utils/index.js +7 -0
  299. package/dist/utils/index.js.map +1 -0
  300. package/dist/utils/libc.d.ts +11 -0
  301. package/dist/utils/libc.js +35 -0
  302. package/dist/utils/libc.js.map +1 -0
  303. package/dist/utils/variant.d.ts +26 -0
  304. package/dist/utils/variant.js +31 -0
  305. package/dist/utils/variant.js.map +1 -0
  306. package/dist/webrtc/index.d.ts +4 -0
  307. package/dist/webrtc/index.js +7 -0
  308. package/dist/webrtc/index.js.map +1 -0
  309. package/install/check.js +124 -0
  310. package/install/ffmpeg.js +66 -0
  311. package/package.json +165 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codec.js","sourceRoot":"","sources":["../../src/lib/codec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,294 @@
1
+ import type { AVCodecID, AVPixelFormat, AVSampleFormat } from '../constants/constants.js';
2
+ /**
3
+ * Screen bounds rectangle
4
+ */
5
+ export interface ScreenBounds {
6
+ x: number;
7
+ y: number;
8
+ width: number;
9
+ height: number;
10
+ }
11
+ /**
12
+ * Base device information
13
+ */
14
+ export interface BaseDeviceInfo {
15
+ name: string;
16
+ description: string;
17
+ isDefault: boolean;
18
+ }
19
+ /**
20
+ * Device information for video capture devices
21
+ */
22
+ export interface VideoDeviceInfo extends BaseDeviceInfo {
23
+ type: 'video';
24
+ }
25
+ /**
26
+ * Device information for audio capture devices
27
+ */
28
+ export interface AudioDeviceInfo extends BaseDeviceInfo {
29
+ type: 'audio';
30
+ }
31
+ /**
32
+ * Device information for screen capture devices
33
+ */
34
+ export interface ScreenDeviceInfo extends BaseDeviceInfo {
35
+ type: 'screen';
36
+ bounds: ScreenBounds;
37
+ }
38
+ /**
39
+ * Device information for capture devices
40
+ */
41
+ export type DeviceInfo = VideoDeviceInfo | AudioDeviceInfo | ScreenDeviceInfo;
42
+ /**
43
+ * Device capture mode
44
+ */
45
+ export interface DeviceMode {
46
+ width: number;
47
+ height: number;
48
+ minFrameRate: number;
49
+ maxFrameRate: number;
50
+ /** Pixel format of raw capture modes, `AV_PIX_FMT_NONE` for compressed ones */
51
+ pixelFormat: AVPixelFormat;
52
+ /** `AV_CODEC_ID_RAWVIDEO` for raw capture modes, the codec of compressed ones (e.g. `AV_CODEC_ID_MJPEG`), `AV_CODEC_ID_NONE` if unknown */
53
+ codecId: AVCodecID;
54
+ }
55
+ /**
56
+ * Audio device capture mode
57
+ */
58
+ export interface AudioDeviceMode {
59
+ sampleRate: number;
60
+ channels: number;
61
+ sampleFormat: AVSampleFormat;
62
+ }
63
+ /**
64
+ * Low-level device enumeration and format detection.
65
+ *
66
+ * Provides direct access to system capture devices (cameras, microphones)
67
+ * and platform-specific input format names for FFmpeg.
68
+ *
69
+ * Direct mapping to platform-specific APIs:
70
+ * - macOS: AVFoundation
71
+ * - Linux: V4L2/ALSA
72
+ * - Windows: DirectShow
73
+ *
74
+ * @example
75
+ * ```typescript
76
+ * import { Device } from 'node-av/lib';
77
+ *
78
+ * // List all capture devices
79
+ * const devices = await Device.list();
80
+ * for (const device of devices) {
81
+ * console.log(`[${device.type}] ${device.name}: ${device.description}`);
82
+ * }
83
+ *
84
+ * // Get platform-specific format names
85
+ * console.log(`Video format: ${Device.getVideoFormat()}`);
86
+ * console.log(`Audio format: ${Device.getAudioFormat()}`);
87
+ * console.log(`Screen format: ${Device.getScreenFormat()}`);
88
+ * ```
89
+ *
90
+ * @see {@link DeviceInfo} For device structure
91
+ */
92
+ export declare class Device {
93
+ /**
94
+ * List all available capture devices.
95
+ *
96
+ * Enumerates video and audio capture devices on the system.
97
+ * Uses platform-specific APIs for device discovery.
98
+ *
99
+ * @returns Array of device information
100
+ *
101
+ * @example
102
+ * ```typescript
103
+ * const devices = await Device.list();
104
+ * const cameras = devices.filter(d => d.type === 'video');
105
+ * const microphones = devices.filter(d => d.type === 'audio');
106
+ * ```
107
+ */
108
+ static list(): Promise<DeviceInfo[]>;
109
+ /**
110
+ * List all available capture devices synchronously.
111
+ *
112
+ * @returns Array of device information
113
+ *
114
+ * @example
115
+ * ```typescript
116
+ * const devices = Device.listSync();
117
+ * ```
118
+ *
119
+ * @see {@link list} For async version
120
+ */
121
+ static listSync(): DeviceInfo[];
122
+ /**
123
+ * Query supported capture modes for a video device.
124
+ *
125
+ * Returns supported resolutions and frame rate ranges for the specified device.
126
+ * Modes are sorted descending by resolution (area), then by max frame rate.
127
+ *
128
+ * @param deviceName - Device name as returned by `list()` (e.g. uniqueID on macOS, /dev/video0 on Linux)
129
+ *
130
+ * @returns Array of supported device modes
131
+ *
132
+ * @example
133
+ * ```typescript
134
+ * const devices = await Device.list();
135
+ * const camera = devices.find(d => d.type === 'video');
136
+ * if (camera) {
137
+ * const modes = await Device.modes(camera.name);
138
+ * console.log('Supported modes:', modes);
139
+ * }
140
+ * ```
141
+ */
142
+ static modes(deviceName: string): Promise<DeviceMode[]>;
143
+ /**
144
+ * Query supported capture modes for a video device synchronously.
145
+ *
146
+ * @param deviceName - Device name as returned by `listSync()`
147
+ *
148
+ * @returns Array of supported device modes
149
+ *
150
+ * @example
151
+ * ```typescript
152
+ * const devices = Device.listSync();
153
+ * const camera = devices.find(d => d.type === 'video');
154
+ * if (camera) {
155
+ * const modes = Device.modesSync(camera.name);
156
+ * console.log('Supported modes:', modes);
157
+ * }
158
+ * ```
159
+ *
160
+ * @see {@link modes} For async version
161
+ */
162
+ static modesSync(deviceName: string): DeviceMode[];
163
+ /**
164
+ * Query supported audio capture modes for an audio device.
165
+ *
166
+ * Returns supported sample rates, channel counts and sample formats for the specified device.
167
+ * Modes are sorted descending by sample rate, then by channel count.
168
+ *
169
+ * @param deviceName - Device name as returned by `list()` (e.g. uniqueID on macOS, hw:0 on Linux)
170
+ *
171
+ * @returns Array of supported audio device modes
172
+ *
173
+ * @example
174
+ * ```typescript
175
+ * const devices = await Device.list();
176
+ * const mic = devices.find(d => d.type === 'audio');
177
+ * if (mic) {
178
+ * const modes = await Device.audioModes(mic.name);
179
+ * console.log('Supported audio modes:', modes);
180
+ * }
181
+ * ```
182
+ */
183
+ static audioModes(deviceName: string): Promise<AudioDeviceMode[]>;
184
+ /**
185
+ * Query supported audio capture modes for an audio device synchronously.
186
+ *
187
+ * @param deviceName - Device name as returned by `listSync()`
188
+ *
189
+ * @returns Array of supported audio device modes
190
+ *
191
+ * @example
192
+ * ```typescript
193
+ * const devices = Device.listSync();
194
+ * const mic = devices.find(d => d.type === 'audio');
195
+ * if (mic) {
196
+ * const modes = Device.audioModesSync(mic.name);
197
+ * console.log('Supported audio modes:', modes);
198
+ * }
199
+ * ```
200
+ *
201
+ * @see {@link audioModes} For async version
202
+ */
203
+ static audioModesSync(deviceName: string): AudioDeviceMode[];
204
+ /**
205
+ * Get platform-specific video input format name.
206
+ *
207
+ * @returns Format name for FFmpeg input
208
+ *
209
+ * | Platform | Format |
210
+ * |----------|--------|
211
+ * | macOS | avfoundation |
212
+ * | Linux | v4l2 |
213
+ * | Windows | dshow |
214
+ *
215
+ * @example
216
+ * ```typescript
217
+ * const format = Device.getVideoFormat();
218
+ * // Use with Demuxer.open(deviceName, { format })
219
+ * ```
220
+ */
221
+ static getVideoFormat(): string;
222
+ /**
223
+ * Get platform-specific audio input format name.
224
+ *
225
+ * @returns Format name for FFmpeg input
226
+ *
227
+ * | Platform | Format |
228
+ * |----------|--------|
229
+ * | macOS | avfoundation |
230
+ * | Linux | alsa |
231
+ * | Windows | dshow |
232
+ *
233
+ * @example
234
+ * ```typescript
235
+ * const format = Device.getAudioFormat(); // 'avfoundation' on macOS
236
+ * ```
237
+ */
238
+ static getAudioFormat(): string;
239
+ /**
240
+ * Get platform-specific screen capture format name.
241
+ *
242
+ * @returns Format name for FFmpeg input
243
+ *
244
+ * | Platform | Format |
245
+ * |----------|--------|
246
+ * | macOS | avfoundation |
247
+ * | Linux | x11grab |
248
+ * | Windows | gdigrab |
249
+ *
250
+ * @example
251
+ * ```typescript
252
+ * const format = Device.getScreenFormat(); // 'avfoundation' on macOS
253
+ * ```
254
+ */
255
+ static getScreenFormat(): string;
256
+ /**
257
+ * Check if the application has screen capture permission (macOS only).
258
+ *
259
+ * Uses `CGPreflightScreenCaptureAccess()` on macOS 11+.
260
+ * Always returns `true` on Linux, Windows, and macOS < 11.
261
+ *
262
+ * @returns `true` if screen capture is permitted
263
+ *
264
+ * @example
265
+ * ```typescript
266
+ * if (Device.hasScreenCapturePermission()) {
267
+ * console.log('Screen capture is permitted');
268
+ * } else {
269
+ * console.log('Screen capture permission not granted');
270
+ * }
271
+ * ```
272
+ */
273
+ static hasScreenCapturePermission(): boolean;
274
+ /**
275
+ * Request screen capture permission from the user (macOS only).
276
+ *
277
+ * Uses `CGRequestScreenCaptureAccess()` on macOS 11+.
278
+ * This will trigger the system permission dialog if not already granted.
279
+ * Always returns `true` on Linux, Windows, and macOS < 11.
280
+ *
281
+ * @returns `true` if permission was already granted (does not wait for dialog)
282
+ *
283
+ * @example
284
+ * ```typescript
285
+ * const granted = Device.requestScreenCaptureAccess();
286
+ * if (granted) {
287
+ * console.log('Screen capture permission already granted');
288
+ * } else {
289
+ * console.log('Screen capture permission dialog shown to user');
290
+ * }
291
+ * ```
292
+ */
293
+ static requestScreenCaptureAccess(): boolean;
294
+ }
@@ -0,0 +1,326 @@
1
+ import { bindings } from './binding.js';
2
+ /**
3
+ * Low-level device enumeration and format detection.
4
+ *
5
+ * Provides direct access to system capture devices (cameras, microphones)
6
+ * and platform-specific input format names for FFmpeg.
7
+ *
8
+ * Direct mapping to platform-specific APIs:
9
+ * - macOS: AVFoundation
10
+ * - Linux: V4L2/ALSA
11
+ * - Windows: DirectShow
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * import { Device } from 'node-av/lib';
16
+ *
17
+ * // List all capture devices
18
+ * const devices = await Device.list();
19
+ * for (const device of devices) {
20
+ * console.log(`[${device.type}] ${device.name}: ${device.description}`);
21
+ * }
22
+ *
23
+ * // Get platform-specific format names
24
+ * console.log(`Video format: ${Device.getVideoFormat()}`);
25
+ * console.log(`Audio format: ${Device.getAudioFormat()}`);
26
+ * console.log(`Screen format: ${Device.getScreenFormat()}`);
27
+ * ```
28
+ *
29
+ * @see {@link DeviceInfo} For device structure
30
+ */
31
+ export class Device {
32
+ /**
33
+ * List all available capture devices.
34
+ *
35
+ * Enumerates video and audio capture devices on the system.
36
+ * Uses platform-specific APIs for device discovery.
37
+ *
38
+ * @returns Array of device information
39
+ *
40
+ * @example
41
+ * ```typescript
42
+ * const devices = await Device.list();
43
+ * const cameras = devices.filter(d => d.type === 'video');
44
+ * const microphones = devices.filter(d => d.type === 'audio');
45
+ * ```
46
+ */
47
+ static async list() {
48
+ const nativeDevices = await bindings.Device.listDevices();
49
+ return nativeDevices.map((d) => {
50
+ if (d.type === 'screen') {
51
+ return {
52
+ name: d.name,
53
+ description: d.description,
54
+ type: 'screen',
55
+ isDefault: d.isDefault,
56
+ bounds: {
57
+ x: d.screenX ?? 0,
58
+ y: d.screenY ?? 0,
59
+ width: d.screenWidth ?? 0,
60
+ height: d.screenHeight ?? 0,
61
+ },
62
+ };
63
+ }
64
+ return {
65
+ name: d.name,
66
+ description: d.description,
67
+ type: d.type,
68
+ isDefault: d.isDefault,
69
+ };
70
+ });
71
+ }
72
+ /**
73
+ * List all available capture devices synchronously.
74
+ *
75
+ * @returns Array of device information
76
+ *
77
+ * @example
78
+ * ```typescript
79
+ * const devices = Device.listSync();
80
+ * ```
81
+ *
82
+ * @see {@link list} For async version
83
+ */
84
+ static listSync() {
85
+ const nativeDevices = bindings.Device.listDevicesSync();
86
+ return nativeDevices.map((d) => {
87
+ if (d.type === 'screen') {
88
+ return {
89
+ name: d.name,
90
+ description: d.description,
91
+ type: 'screen',
92
+ isDefault: d.isDefault,
93
+ bounds: {
94
+ x: d.screenX ?? 0,
95
+ y: d.screenY ?? 0,
96
+ width: d.screenWidth ?? 0,
97
+ height: d.screenHeight ?? 0,
98
+ },
99
+ };
100
+ }
101
+ return {
102
+ name: d.name,
103
+ description: d.description,
104
+ type: d.type,
105
+ isDefault: d.isDefault,
106
+ };
107
+ });
108
+ }
109
+ /**
110
+ * Query supported capture modes for a video device.
111
+ *
112
+ * Returns supported resolutions and frame rate ranges for the specified device.
113
+ * Modes are sorted descending by resolution (area), then by max frame rate.
114
+ *
115
+ * @param deviceName - Device name as returned by `list()` (e.g. uniqueID on macOS, /dev/video0 on Linux)
116
+ *
117
+ * @returns Array of supported device modes
118
+ *
119
+ * @example
120
+ * ```typescript
121
+ * const devices = await Device.list();
122
+ * const camera = devices.find(d => d.type === 'video');
123
+ * if (camera) {
124
+ * const modes = await Device.modes(camera.name);
125
+ * console.log('Supported modes:', modes);
126
+ * }
127
+ * ```
128
+ */
129
+ static async modes(deviceName) {
130
+ const nativeModes = await bindings.Device.listDeviceModes(deviceName);
131
+ return nativeModes.map((m) => ({
132
+ width: m.width,
133
+ height: m.height,
134
+ minFrameRate: m.minFrameRate,
135
+ maxFrameRate: m.maxFrameRate,
136
+ pixelFormat: m.pixelFormat,
137
+ codecId: m.codecId,
138
+ }));
139
+ }
140
+ /**
141
+ * Query supported capture modes for a video device synchronously.
142
+ *
143
+ * @param deviceName - Device name as returned by `listSync()`
144
+ *
145
+ * @returns Array of supported device modes
146
+ *
147
+ * @example
148
+ * ```typescript
149
+ * const devices = Device.listSync();
150
+ * const camera = devices.find(d => d.type === 'video');
151
+ * if (camera) {
152
+ * const modes = Device.modesSync(camera.name);
153
+ * console.log('Supported modes:', modes);
154
+ * }
155
+ * ```
156
+ *
157
+ * @see {@link modes} For async version
158
+ */
159
+ static modesSync(deviceName) {
160
+ const nativeModes = bindings.Device.listDeviceModesSync(deviceName);
161
+ return nativeModes.map((m) => ({
162
+ width: m.width,
163
+ height: m.height,
164
+ minFrameRate: m.minFrameRate,
165
+ maxFrameRate: m.maxFrameRate,
166
+ pixelFormat: m.pixelFormat,
167
+ codecId: m.codecId,
168
+ }));
169
+ }
170
+ /**
171
+ * Query supported audio capture modes for an audio device.
172
+ *
173
+ * Returns supported sample rates, channel counts and sample formats for the specified device.
174
+ * Modes are sorted descending by sample rate, then by channel count.
175
+ *
176
+ * @param deviceName - Device name as returned by `list()` (e.g. uniqueID on macOS, hw:0 on Linux)
177
+ *
178
+ * @returns Array of supported audio device modes
179
+ *
180
+ * @example
181
+ * ```typescript
182
+ * const devices = await Device.list();
183
+ * const mic = devices.find(d => d.type === 'audio');
184
+ * if (mic) {
185
+ * const modes = await Device.audioModes(mic.name);
186
+ * console.log('Supported audio modes:', modes);
187
+ * }
188
+ * ```
189
+ */
190
+ static async audioModes(deviceName) {
191
+ const nativeModes = await bindings.Device.listAudioDeviceModes(deviceName);
192
+ return nativeModes.map((m) => ({
193
+ sampleRate: m.sampleRate,
194
+ channels: m.channels,
195
+ sampleFormat: m.sampleFormat,
196
+ }));
197
+ }
198
+ /**
199
+ * Query supported audio capture modes for an audio device synchronously.
200
+ *
201
+ * @param deviceName - Device name as returned by `listSync()`
202
+ *
203
+ * @returns Array of supported audio device modes
204
+ *
205
+ * @example
206
+ * ```typescript
207
+ * const devices = Device.listSync();
208
+ * const mic = devices.find(d => d.type === 'audio');
209
+ * if (mic) {
210
+ * const modes = Device.audioModesSync(mic.name);
211
+ * console.log('Supported audio modes:', modes);
212
+ * }
213
+ * ```
214
+ *
215
+ * @see {@link audioModes} For async version
216
+ */
217
+ static audioModesSync(deviceName) {
218
+ const nativeModes = bindings.Device.listAudioDeviceModesSync(deviceName);
219
+ return nativeModes.map((m) => ({
220
+ sampleRate: m.sampleRate,
221
+ channels: m.channels,
222
+ sampleFormat: m.sampleFormat,
223
+ }));
224
+ }
225
+ /**
226
+ * Get platform-specific video input format name.
227
+ *
228
+ * @returns Format name for FFmpeg input
229
+ *
230
+ * | Platform | Format |
231
+ * |----------|--------|
232
+ * | macOS | avfoundation |
233
+ * | Linux | v4l2 |
234
+ * | Windows | dshow |
235
+ *
236
+ * @example
237
+ * ```typescript
238
+ * const format = Device.getVideoFormat();
239
+ * // Use with Demuxer.open(deviceName, { format })
240
+ * ```
241
+ */
242
+ static getVideoFormat() {
243
+ return bindings.Device.getVideoFormat();
244
+ }
245
+ /**
246
+ * Get platform-specific audio input format name.
247
+ *
248
+ * @returns Format name for FFmpeg input
249
+ *
250
+ * | Platform | Format |
251
+ * |----------|--------|
252
+ * | macOS | avfoundation |
253
+ * | Linux | alsa |
254
+ * | Windows | dshow |
255
+ *
256
+ * @example
257
+ * ```typescript
258
+ * const format = Device.getAudioFormat(); // 'avfoundation' on macOS
259
+ * ```
260
+ */
261
+ static getAudioFormat() {
262
+ return bindings.Device.getAudioFormat();
263
+ }
264
+ /**
265
+ * Get platform-specific screen capture format name.
266
+ *
267
+ * @returns Format name for FFmpeg input
268
+ *
269
+ * | Platform | Format |
270
+ * |----------|--------|
271
+ * | macOS | avfoundation |
272
+ * | Linux | x11grab |
273
+ * | Windows | gdigrab |
274
+ *
275
+ * @example
276
+ * ```typescript
277
+ * const format = Device.getScreenFormat(); // 'avfoundation' on macOS
278
+ * ```
279
+ */
280
+ static getScreenFormat() {
281
+ return bindings.Device.getScreenFormat();
282
+ }
283
+ /**
284
+ * Check if the application has screen capture permission (macOS only).
285
+ *
286
+ * Uses `CGPreflightScreenCaptureAccess()` on macOS 11+.
287
+ * Always returns `true` on Linux, Windows, and macOS < 11.
288
+ *
289
+ * @returns `true` if screen capture is permitted
290
+ *
291
+ * @example
292
+ * ```typescript
293
+ * if (Device.hasScreenCapturePermission()) {
294
+ * console.log('Screen capture is permitted');
295
+ * } else {
296
+ * console.log('Screen capture permission not granted');
297
+ * }
298
+ * ```
299
+ */
300
+ static hasScreenCapturePermission() {
301
+ return bindings.Device.hasScreenCapturePermission();
302
+ }
303
+ /**
304
+ * Request screen capture permission from the user (macOS only).
305
+ *
306
+ * Uses `CGRequestScreenCaptureAccess()` on macOS 11+.
307
+ * This will trigger the system permission dialog if not already granted.
308
+ * Always returns `true` on Linux, Windows, and macOS < 11.
309
+ *
310
+ * @returns `true` if permission was already granted (does not wait for dialog)
311
+ *
312
+ * @example
313
+ * ```typescript
314
+ * const granted = Device.requestScreenCaptureAccess();
315
+ * if (granted) {
316
+ * console.log('Screen capture permission already granted');
317
+ * } else {
318
+ * console.log('Screen capture permission dialog shown to user');
319
+ * }
320
+ * ```
321
+ */
322
+ static requestScreenCaptureAccess() {
323
+ return bindings.Device.requestScreenCaptureAccess();
324
+ }
325
+ }
326
+ //# sourceMappingURL=device.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device.js","sourceRoot":"","sources":["../../src/lib/device.ts"],"names":[],"mappings":"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"}