node-av-lgpl 0.0.0 → 7.1.0-beta.1

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 +383 -0
  283. package/dist/lib/stream.js +524 -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,294 @@
1
+ import { RTCRtpCodecParameters } from 'werift';
2
+ import type { AVCodecID } from '../constants/index.js';
3
+ import type { Demuxer } from './demuxer.js';
4
+ import type { RTPStreamOptions } from './rtp-stream.js';
5
+ import type { MediaFrameSource } from './types.js';
6
+ /**
7
+ * Codec information for WebRTC streaming.
8
+ *
9
+ * Contains RTP codec parameters and FFmpeg codec IDs for video and audio streams.
10
+ * Used for codec negotiation in WebRTC peer connections.
11
+ */
12
+ export interface WebRTCCodecInfo {
13
+ /**
14
+ * Video codec configuration.
15
+ * Combines RTP parameters (mimeType, clockRate, etc.) with FFmpeg codec ID.
16
+ */
17
+ video?: Partial<RTCRtpCodecParameters> & {
18
+ codecId: AVCodecID;
19
+ };
20
+ /**
21
+ * Optional audio codec configuration.
22
+ * Combines RTP parameters (mimeType, clockRate, channels) with FFmpeg codec ID.
23
+ */
24
+ audio?: Partial<RTCRtpCodecParameters> & {
25
+ codecId: AVCodecID;
26
+ };
27
+ }
28
+ /**
29
+ * Options for configuring WebRTC session with werift integration.
30
+ */
31
+ export interface WebRTCStreamOptions extends Omit<RTPStreamOptions, 'onVideoPacket' | 'onAudioPacket' | 'supportedVideoCodecs' | 'supportedAudioCodecs'> {
32
+ /**
33
+ * ICE servers for NAT traversal and STUN/TURN configuration.
34
+ *
35
+ * @default []
36
+ */
37
+ iceServers?: {
38
+ urls: string;
39
+ }[];
40
+ /**
41
+ * Callback invoked when a new ICE candidate is discovered.
42
+ * Send this candidate to the remote peer via signaling channel.
43
+ *
44
+ * @param candidate - ICE candidate string to send to remote peer
45
+ */
46
+ onIceCandidate?: (candidate: string) => void;
47
+ }
48
+ /**
49
+ * Complete WebRTC session management with werift integration.
50
+ *
51
+ * Provides end-to-end WebRTC streaming with automatic SDP negotiation,
52
+ * ICE candidate handling, and peer connection management.
53
+ * Built on top of {@link RTPStream} for generic RTP streaming with WebRTC-specific
54
+ * protocol details handled automatically.
55
+ * Integrates with werift library for RTCPeerConnection and media track handling.
56
+ * Ideal for building complete WebRTC streaming applications with minimal code.
57
+ *
58
+ * @example
59
+ * ```typescript
60
+ * import { WebRTCStream } from 'node-av/api';
61
+ *
62
+ * // Create session from media source
63
+ * const session = await WebRTCStream.create('rtsp://camera.local/stream', {
64
+ * mtu: 1200,
65
+ * hardware: 'auto',
66
+ * iceServers: [{ urls: 'stun:stun.l.google.com:19302' }],
67
+ * onIceCandidate: (candidate) => {
68
+ * sendToClient({ type: 'candidate', value: candidate });
69
+ * }
70
+ * });
71
+ *
72
+ * // Process SDP offer from client
73
+ * const answer = await session.setOffer(clientOffer);
74
+ * sendToClient({ type: 'answer', value: answer });
75
+ *
76
+ * // Start streaming
77
+ * await session.start();
78
+ * ```
79
+ *
80
+ * @example
81
+ * ```typescript
82
+ * // Complete WebSocket signaling server
83
+ * import { WebSocket } from 'ws';
84
+ *
85
+ * ws.on('message', async (data) => {
86
+ * const msg = JSON.parse(data);
87
+ *
88
+ * if (msg.type === 'offer') {
89
+ * const session = await WebRTCStream.create(msg.url, {
90
+ * hardware: 'auto',
91
+ * onIceCandidate: (candidate) => {
92
+ * ws.send(JSON.stringify({ type: 'candidate', value: candidate }));
93
+ * }
94
+ * });
95
+ *
96
+ * const answer = await session.setOffer(msg.value);
97
+ * ws.send(JSON.stringify({ type: 'answer', value: answer }));
98
+ *
99
+ * await session.start();
100
+ * } else if (msg.type === 'candidate') {
101
+ * session.addIceCandidate(msg.value);
102
+ * }
103
+ * });
104
+ * ```
105
+ *
106
+ * @see {@link RTPStream} For library-agnostic RTP streaming
107
+ * @see {@link Demuxer} For input media handling
108
+ */
109
+ export declare class WebRTCStream {
110
+ private stream;
111
+ private pc;
112
+ private videoTrack;
113
+ private audioTrack;
114
+ private options;
115
+ private pendingIceCandidates;
116
+ private frameSource?;
117
+ private stopping;
118
+ /**
119
+ * @param options - Session configuration options
120
+ *
121
+ * Use {@link create} factory method
122
+ *
123
+ * @internal
124
+ */
125
+ private constructor();
126
+ /**
127
+ * Create a WebRTC session from a media source.
128
+ *
129
+ * Opens the input media, creates internal streaming components, and prepares
130
+ * for WebRTC peer connection negotiation. Does not start streaming yet.
131
+ * Call {@link setOffer} to negotiate SDP and {@link start} to begin streaming.
132
+ *
133
+ * @param input - Media source URL (RTSP, file path, HTTP, etc.) or a pre-opened {@link Demuxer}
134
+ *
135
+ * @param options - Session configuration options
136
+ *
137
+ * @returns Configured WebRTC session instance
138
+ *
139
+ * @example
140
+ * ```typescript
141
+ * const session = WebRTCStream.create('rtsp://camera.local/stream', {
142
+ * mtu: 1200,
143
+ * hardware: 'auto',
144
+ * iceServers: [{ urls: 'stun:stun.l.google.com:19302' }]
145
+ * });
146
+ * ```
147
+ *
148
+ * @example
149
+ * ```typescript
150
+ * // Session from a pre-opened Demuxer (e.g. screen capture)
151
+ * const demuxer = await Device.openScreen({ frameRate: 30 });
152
+ * const session = WebRTCStream.create(demuxer, {
153
+ * hardware: 'auto'
154
+ * });
155
+ * ```
156
+ */
157
+ static create(input: string | Demuxer | MediaFrameSource, options?: WebRTCStreamOptions): WebRTCStream;
158
+ /**
159
+ * Start streaming media to the WebRTC peer connection.
160
+ *
161
+ * Begins the media processing pipeline, reading packets from input,
162
+ * transcoding if necessary, and sending RTP packets to the media tracks.
163
+ * {@link setOffer} calls this automatically after negotiating, so calling it
164
+ * explicitly is optional. It is idempotent - a useful pattern for demuxer
165
+ * inputs is calling `start()` *before* `setOffer()` so the input is open and
166
+ * its actual codecs are advertised in the answer.
167
+ *
168
+ * @returns Promise that resolves once streaming has started (runs in the background)
169
+ *
170
+ * @throws {FFmpegError} If transcoding or muxing fails
171
+ *
172
+ * @example
173
+ * ```typescript
174
+ * const session = WebRTCStream.create('rtsp://camera.local/stream');
175
+ *
176
+ * await session.start(); // open input so getCodecs() sees the real codecs
177
+ * const answer = await session.setOffer(remoteOffer);
178
+ * sendToRemote(answer);
179
+ * ```
180
+ *
181
+ * @see {@link setOffer} Which starts the stream automatically after negotiation
182
+ */
183
+ start(): Promise<void>;
184
+ /**
185
+ * Stop streaming gracefully and clean up all resources.
186
+ *
187
+ * Stops the stream, closes peer connection, and releases all resources.
188
+ * Safe to call multiple times. After stopping, you can call start() again
189
+ * to restart the session.
190
+ *
191
+ * @example
192
+ * ```typescript
193
+ * const session = await WebRTCStream.create('input.mp4');
194
+ * await session.start();
195
+ *
196
+ * // Stop after 10 seconds
197
+ * setTimeout(async () => await session.stop(), 10000);
198
+ * ```
199
+ */
200
+ stop(): Promise<void>;
201
+ /**
202
+ * Get detected codec information.
203
+ *
204
+ * Returns RTP codec parameters and FFmpeg codec IDs for video and audio.
205
+ * Useful for inspecting what codecs will be used in the WebRTC session.
206
+ * The input is automatically opened during {@link create}, so codecs can be
207
+ * detected immediately after session creation.
208
+ *
209
+ * @returns Codec configuration for video and audio streams
210
+ *
211
+ * @example
212
+ * ```typescript
213
+ * const session = await WebRTCStream.create('input.mp4');
214
+ * const codecs = session.getCodecs();
215
+ *
216
+ * console.log('Video:', codecs.video.mimeType);
217
+ * console.log('Audio:', codecs.audio?.mimeType);
218
+ * ```
219
+ */
220
+ getCodecs(): WebRTCCodecInfo;
221
+ /**
222
+ * Process SDP offer from remote peer and generate SDP answer.
223
+ *
224
+ * Creates RTCPeerConnection with detected codecs, sets up media tracks,
225
+ * processes the remote SDP offer, and generates a local SDP answer.
226
+ * Also configures ICE candidate handling via `onIceCandidate` callback in options.
227
+ * Must be called before {@link start}.
228
+ * Calling it again renegotiates: the previous peer connection is closed and
229
+ * replaced by a new one built from the new offer, while streaming continues.
230
+ *
231
+ * @param offerSdp - SDP offer string from remote WebRTC peer
232
+ *
233
+ * @returns SDP answer string to send back to remote peer
234
+ *
235
+ * @example
236
+ * ```typescript
237
+ * const session = await WebRTCStream.create('input.mp4');
238
+ *
239
+ * // Setup ICE candidate handler first
240
+ * session.onIceCandidate = (candidate) => {
241
+ * sendToRemote({ type: 'candidate', value: candidate });
242
+ * };
243
+ *
244
+ * // Process offer and send answer
245
+ * const answer = await session.setOffer(remoteOffer);
246
+ * sendToRemote({ type: 'answer', value: answer });
247
+ *
248
+ * // Start streaming
249
+ * await session.start();
250
+ * ```
251
+ */
252
+ setOffer(offerSdp: string): Promise<string>;
253
+ /**
254
+ * Add ICE candidate from remote peer.
255
+ *
256
+ * Processes ICE candidates received from the remote peer via signaling channel.
257
+ * Should be called whenever a new candidate message arrives from remote peer.
258
+ * Can be called multiple times as candidates are discovered.
259
+ *
260
+ * Supports ICE trickling: If called before {@link setOffer}, candidates are buffered
261
+ * and applied automatically once the remote description is set.
262
+ *
263
+ * @param candidate - ICE candidate string from remote peer
264
+ *
265
+ * @example
266
+ * ```typescript
267
+ * // In signaling message handler
268
+ * if (msg.type === 'candidate') {
269
+ * session.addIceCandidate(msg.value);
270
+ * }
271
+ * ```
272
+ */
273
+ addIceCandidate(candidate: string): void;
274
+ /**
275
+ * Get video codec configuration from input stream.
276
+ *
277
+ * @param codecId - FFmpeg codec ID
278
+ *
279
+ * @returns RTP codec parameters with codec ID or undefined if unsupported
280
+ *
281
+ * @internal
282
+ */
283
+ private getVideoCodecConfig;
284
+ /**
285
+ * Get audio codec configuration from input stream.
286
+ *
287
+ * @param codecId - FFmpeg codec ID
288
+ *
289
+ * @returns RTP codec parameters with codec ID or undefined if unsupported
290
+ *
291
+ * @internal
292
+ */
293
+ private getAudioCodecConfig;
294
+ }