node-datachannel 0.29.0 → 0.31.0

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 (61) hide show
  1. package/.clang-format +17 -0
  2. package/CMakeLists.txt +16 -2
  3. package/dist/cjs/lib/index.cjs +21 -0
  4. package/dist/cjs/lib/index.cjs.map +1 -1
  5. package/dist/cjs/polyfill/RTCPeerConnection.cjs +6 -1
  6. package/dist/cjs/polyfill/RTCPeerConnection.cjs.map +1 -1
  7. package/dist/esm/lib/index.mjs +15 -1
  8. package/dist/esm/lib/index.mjs.map +1 -1
  9. package/dist/esm/polyfill/RTCPeerConnection.mjs +6 -1
  10. package/dist/esm/polyfill/RTCPeerConnection.mjs.map +1 -1
  11. package/dist/types/lib/index.d.ts +58 -4
  12. package/dist/types/lib/types.d.ts +3 -1
  13. package/package.json +3 -2
  14. package/rollup.config.mjs +1 -1
  15. package/src/cpp/data-channel-wrapper.cpp +432 -411
  16. package/src/cpp/data-channel-wrapper.h +0 -2
  17. package/src/cpp/ice-udp-mux-listener-wrapper.cpp +104 -97
  18. package/src/cpp/main.cpp +25 -11
  19. package/src/cpp/media-audio-wrapper.cpp +291 -294
  20. package/src/cpp/media-audio-wrapper.h +1 -3
  21. package/src/cpp/media-av1packetization.cpp +24 -0
  22. package/src/cpp/media-av1packetization.h +11 -0
  23. package/src/cpp/media-av1rtppacketizer-wrapper.cpp +126 -0
  24. package/src/cpp/media-av1rtppacketizer-wrapper.h +29 -0
  25. package/src/cpp/media-direction.cpp +32 -32
  26. package/src/cpp/media-direction.h +1 -1
  27. package/src/cpp/media-h264rtppacketizer-wrapper.cpp +126 -0
  28. package/src/cpp/media-h264rtppacketizer-wrapper.h +30 -0
  29. package/src/cpp/media-h265rtppacketizer-wrapper.cpp +126 -0
  30. package/src/cpp/media-h265rtppacketizer-wrapper.h +30 -0
  31. package/src/cpp/media-h26xseparator.cpp +32 -0
  32. package/src/cpp/media-h26xseparator.h +11 -0
  33. package/src/cpp/media-mediahandler-helper.cpp +28 -0
  34. package/src/cpp/media-mediahandler-helper.h +11 -0
  35. package/src/cpp/media-rtcpnackresponder-wrapper.cpp +68 -0
  36. package/src/cpp/media-rtcpnackresponder-wrapper.h +28 -0
  37. package/src/cpp/media-rtcpreceivingsession-wrapper.cpp +38 -25
  38. package/src/cpp/media-rtcpreceivingsession-wrapper.h +1 -6
  39. package/src/cpp/media-rtcpsrreporter-wrapper.cpp +93 -0
  40. package/src/cpp/media-rtcpsrreporter-wrapper.h +30 -0
  41. package/src/cpp/media-rtppacketizationconfig-wrapper.cpp +167 -0
  42. package/src/cpp/media-rtppacketizationconfig-wrapper.h +35 -0
  43. package/src/cpp/media-rtppacketizer-wrapper.cpp +95 -0
  44. package/src/cpp/media-rtppacketizer-wrapper.h +30 -0
  45. package/src/cpp/media-track-wrapper.cpp +356 -340
  46. package/src/cpp/media-track-wrapper.h +0 -3
  47. package/src/cpp/media-video-wrapper.cpp +347 -313
  48. package/src/cpp/media-video-wrapper.h +3 -3
  49. package/src/cpp/peer-connection-wrapper.cpp +1094 -1047
  50. package/src/cpp/peer-connection-wrapper.h +0 -2
  51. package/src/cpp/rtc-wrapper.cpp +142 -138
  52. package/src/cpp/rtc-wrapper.h +8 -10
  53. package/src/cpp/thread-safe-callback.cpp +39 -50
  54. package/src/cpp/thread-safe-callback.h +26 -28
  55. package/src/cpp/web-socket-server-wrapper.cpp +205 -199
  56. package/src/cpp/web-socket-server-wrapper.h +0 -4
  57. package/src/cpp/web-socket-wrapper.cpp +625 -598
  58. package/src/cpp/web-socket-wrapper.h +0 -3
  59. package/src/lib/index.ts +69 -2
  60. package/src/lib/types.ts +6 -0
  61. package/src/polyfill/RTCPeerConnection.ts +8 -2
@@ -1,9 +1,6 @@
1
1
  #ifndef WEB_SOCKET_WRAPPER_H
2
2
  #define WEB_SOCKET_WRAPPER_H
3
3
 
4
- #include <iostream>
5
- #include <string>
6
- #include <variant>
7
4
  #include <memory>
8
5
  #include <unordered_set>
9
6
 
package/src/lib/index.ts CHANGED
@@ -7,6 +7,8 @@ import {
7
7
  DescriptionType,
8
8
  Direction,
9
9
  LogLevel,
10
+ NalUnitSeparator,
11
+ ObuPacketization,
10
12
  RtcConfig,
11
13
  RTCIceConnectionState,
12
14
  RTCIceGatheringState,
@@ -63,8 +65,10 @@ export const Audio: {
63
65
  export interface Video {
64
66
  addVideoCodec(payloadType: number, codec: string, profile?: string): void;
65
67
  addH264Codec(payloadType: number, profile?: string): void;
68
+ addH265Codec(payloadType: number): void;
66
69
  addVP8Codec(payloadType: number): void;
67
70
  addVP9Codec(payloadType: number): void;
71
+ addAV1Codec(payloadType: number): void;
68
72
  direction(): Direction;
69
73
  generateSdp(eol: string, addr: string, port: number): string;
70
74
  mid(): string;
@@ -102,7 +106,7 @@ export interface Track {
102
106
  requestBitrate(bitRate: number): boolean;
103
107
  setBufferedAmountLowThreshold(newSize: number): void;
104
108
  requestKeyframe(): boolean;
105
- setMediaHandler(handler: RtcpReceivingSession): void;
109
+ setMediaHandler(handler: MediaHandler): void;
106
110
  onOpen(cb: () => void): void;
107
111
  onClosed(cb: () => void): void;
108
112
  onError(cb: (err: string) => void): void;
@@ -182,12 +186,68 @@ export const IceUdpMuxListener: {
182
186
  new (port: number, address?: string): IceUdpMuxListener;
183
187
  } = nodeDataChannel.IceUdpMuxListener;
184
188
 
185
- export interface RtcpReceivingSession {}
189
+ export interface RtpPacketizationConfig {
190
+ playoutDelayId: number,
191
+ playoutDelayMin: number,
192
+ playoutDelayMax: number,
193
+ timestamp: number,
194
+ get clockRate(): number
195
+ }
196
+
197
+ export const RtpPacketizationConfig: {
198
+ new(ssrc: number, cname: string, payloadType: number, clockRate: number, videoOrientationId?: number): RtpPacketizationConfig
199
+ } = nodeDataChannel.RtpPacketizationConfig
200
+
201
+ export interface MediaHandler {
202
+ addToChain(handler: MediaHandler): void
203
+ }
204
+
205
+ export interface RtcpReceivingSession extends MediaHandler {}
186
206
 
187
207
  export const RtcpReceivingSession: {
188
208
  new (): RtcpReceivingSession;
189
209
  } = nodeDataChannel.RtcpReceivingSession;
190
210
 
211
+ export interface RtcpNackResponder extends MediaHandler {}
212
+
213
+ export const RtcpNackResponder: {
214
+ new (maxSize?: number): RtcpNackResponder
215
+ } = nodeDataChannel.RtcpNackResponder;
216
+
217
+ export interface RtcpSrReporter extends MediaHandler {
218
+ get rtpConfig(): RtpPacketizationConfig
219
+ }
220
+
221
+ export const RtcpSrReporter: {
222
+ new (rtpConfig: RtpPacketizationConfig): RtcpSrReporter
223
+ } = nodeDataChannel.RtcpSrReporter;
224
+
225
+ export interface RtpPacketizer extends MediaHandler {
226
+ get rtpConfig(): RtpPacketizationConfig
227
+ }
228
+
229
+ export const RtpPacketizer: {
230
+ new (rtpConfig: RtpPacketizationConfig): RtpPacketizer
231
+ } = nodeDataChannel.RtpPacketizer;
232
+
233
+ export interface H264RtpPacketizer extends RtpPacketizer {}
234
+
235
+ export const H264RtpPacketizer: {
236
+ new (separator: NalUnitSeparator, rtpConfig: RtpPacketizationConfig, maxFragmentSize?: number): H264RtpPacketizer
237
+ } = nodeDataChannel.H264RtpPacketizer
238
+
239
+ export interface H265RtpPacketizer extends RtpPacketizer {}
240
+
241
+ export const H265RtpPacketizer: {
242
+ new (separator: NalUnitSeparator, rtpConfig: RtpPacketizationConfig, maxFragmentSize?: number): H265RtpPacketizer
243
+ } = nodeDataChannel.H265RtpPacketizer
244
+
245
+ export interface AV1RtpPacketizer extends RtpPacketizer {}
246
+
247
+ export const AV1RtpPacketizer: {
248
+ new (packetization: ObuPacketization, rtpConfig: RtpPacketizationConfig, maxFragmentSize?: number): AV1RtpPacketizer
249
+ } = nodeDataChannel.AV1RtpPacketizer
250
+
191
251
  export { WebSocketServer } from './websocket-server';
192
252
  export { WebSocket } from './websocket';
193
253
 
@@ -200,6 +260,13 @@ export default {
200
260
  setSctpSettings,
201
261
  getLibraryVersion,
202
262
  RtcpReceivingSession,
263
+ RtcpNackResponder,
264
+ RtcpSrReporter,
265
+ RtpPacketizationConfig,
266
+ RtpPacketizer,
267
+ H264RtpPacketizer,
268
+ H265RtpPacketizer,
269
+ AV1RtpPacketizer,
203
270
  Track,
204
271
  Video,
205
272
  Audio,
package/src/lib/types.ts CHANGED
@@ -160,3 +160,9 @@ export interface IceUdpMuxRequest {
160
160
  host: string;
161
161
  port: number;
162
162
  }
163
+
164
+ // Same as rtc::NalUnit::Separator
165
+ export type NalUnitSeparator = 'Length' | 'ShortStartSequence' | 'LongStartSequence' | 'StartSequence';
166
+
167
+ // Same as rtc::AV1RtpPacketizer::Packetization
168
+ export type ObuPacketization = 'Obu' | 'TemporalUnit';
@@ -1,5 +1,5 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
- import { SelectedCandidateInfo } from '../lib/types';
2
+ import { DataChannelInitConfig, SelectedCandidateInfo } from '../lib/types';
3
3
  import { PeerConnection } from '../lib/index';
4
4
  import RTCSessionDescription from './RTCSessionDescription';
5
5
  import RTCDataChannel from './RTCDataChannel';
@@ -362,7 +362,13 @@ export default class RTCPeerConnection extends EventTarget implements globalThis
362
362
  }
363
363
 
364
364
  createDataChannel(label: string, opts: globalThis.RTCDataChannelInit = {}): RTCDataChannel {
365
- const channel = this.#peerConnection.createDataChannel(label, opts);
365
+ const nativeOpts: DataChannelInitConfig = {
366
+ ...opts,
367
+ // libdatachannel uses "unordered", opposite of RTCDataChannelInit.ordered
368
+ unordered: opts.ordered === false ? true : false,
369
+ };
370
+
371
+ const channel = this.#peerConnection.createDataChannel(label, nativeOpts);
366
372
  const dataChannel = new RTCDataChannel(channel, opts);
367
373
 
368
374
  // ensure we can close all channels when shutting down