werift 0.14.4-debug0 → 0.15.0-alpha.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 (64) hide show
  1. package/lib/common/src/binary.d.ts +0 -1
  2. package/lib/common/src/binary.js +1 -2
  3. package/lib/common/src/binary.js.map +1 -1
  4. package/lib/dtls/src/context/cipher.js +5 -2
  5. package/lib/dtls/src/context/cipher.js.map +1 -1
  6. package/lib/dtls/src/handshake/extensions/useSrtp.js +5 -2
  7. package/lib/dtls/src/handshake/extensions/useSrtp.js.map +1 -1
  8. package/lib/ice/src/candidate.js +5 -2
  9. package/lib/ice/src/candidate.js.map +1 -1
  10. package/lib/ice/src/ice.d.ts +2 -2
  11. package/lib/ice/src/ice.js +6 -5
  12. package/lib/ice/src/ice.js.map +1 -1
  13. package/lib/ice/src/stun/attributes.js +5 -2
  14. package/lib/ice/src/stun/attributes.js.map +1 -1
  15. package/lib/rtp/src/rtcp/rr.js +5 -2
  16. package/lib/rtp/src/rtcp/rr.js.map +1 -1
  17. package/lib/rtp/src/rtcp/rtpfb/nack.js +6 -3
  18. package/lib/rtp/src/rtcp/rtpfb/nack.js.map +1 -1
  19. package/lib/rtp/src/rtcp/rtpfb/twcc.js +6 -6
  20. package/lib/rtp/src/rtcp/rtpfb/twcc.js.map +1 -1
  21. package/lib/rtp/src/rtcp/sr.js +5 -2
  22. package/lib/rtp/src/rtcp/sr.js.map +1 -1
  23. package/lib/rtp/src/srtp/cipher/ctr.js +5 -2
  24. package/lib/rtp/src/srtp/cipher/ctr.js.map +1 -1
  25. package/lib/rtp/src/srtp/cipher/gcm.js +6 -3
  26. package/lib/rtp/src/srtp/cipher/gcm.js.map +1 -1
  27. package/lib/sctp/src/param.js +5 -2
  28. package/lib/sctp/src/param.js.map +1 -1
  29. package/lib/sctp/src/sctp.js +5 -5
  30. package/lib/sctp/src/sctp.js.map +1 -1
  31. package/lib/webrtc/src/media/receiver/nack.js +2 -2
  32. package/lib/webrtc/src/media/receiver/nack.js.map +1 -1
  33. package/lib/webrtc/src/media/rtpReceiver.d.ts +3 -2
  34. package/lib/webrtc/src/media/rtpReceiver.js +4 -2
  35. package/lib/webrtc/src/media/rtpReceiver.js.map +1 -1
  36. package/lib/webrtc/src/media/rtpSender.d.ts +4 -2
  37. package/lib/webrtc/src/media/rtpSender.js +15 -7
  38. package/lib/webrtc/src/media/rtpSender.js.map +1 -1
  39. package/lib/webrtc/src/media/rtpTransceiver.d.ts +7 -6
  40. package/lib/webrtc/src/media/rtpTransceiver.js +8 -3
  41. package/lib/webrtc/src/media/rtpTransceiver.js.map +1 -1
  42. package/lib/webrtc/src/nonstandard/recorder/writer/webm.js +1 -1
  43. package/lib/webrtc/src/nonstandard/recorder/writer/webm.js.map +1 -1
  44. package/lib/webrtc/src/peerConnection.d.ts +10 -10
  45. package/lib/webrtc/src/peerConnection.js +324 -188
  46. package/lib/webrtc/src/peerConnection.js.map +1 -1
  47. package/lib/webrtc/src/sdp.js +5 -2
  48. package/lib/webrtc/src/sdp.js.map +1 -1
  49. package/lib/webrtc/src/transport/dtls.d.ts +3 -2
  50. package/lib/webrtc/src/transport/dtls.js +3 -0
  51. package/lib/webrtc/src/transport/dtls.js.map +1 -1
  52. package/lib/webrtc/src/transport/sctp.d.ts +5 -3
  53. package/lib/webrtc/src/transport/sctp.js +46 -34
  54. package/lib/webrtc/src/transport/sctp.js.map +1 -1
  55. package/package.json +2 -2
  56. package/src/media/receiver/nack.ts +1 -1
  57. package/src/media/rtpReceiver.ts +6 -5
  58. package/src/media/rtpSender.ts +18 -9
  59. package/src/media/rtpTransceiver.ts +13 -6
  60. package/src/nonstandard/recorder/writer/webm.ts +1 -1
  61. package/src/peerConnection.ts +386 -223
  62. package/src/sdp.ts +1 -1
  63. package/src/transport/dtls.ts +4 -1
  64. package/src/transport/sctp.ts +53 -33
package/src/sdp.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { randomBytes } from "crypto";
2
2
  import { Uint64BE } from "int64-buffer";
3
- import { range } from "lodash";
3
+ import range from "lodash/range";
4
4
  import { isIPv4 } from "net";
5
5
 
6
6
  import {
@@ -2,6 +2,7 @@ import { Certificate, PrivateKey } from "@fidm/x509";
2
2
  import debug from "debug";
3
3
  import Event from "rx.mini";
4
4
  import { setTimeout } from "timers/promises";
5
+ import { v4 } from "uuid";
5
6
 
6
7
  import {
7
8
  DtlsClient,
@@ -34,6 +35,7 @@ import { RTCIceTransport } from "./ice";
34
35
  const log = debug("werift:packages/webrtc/src/transport/dtls.ts");
35
36
 
36
37
  export class RTCDtlsTransport {
38
+ id = v4();
37
39
  state: DtlsState = "new";
38
40
  role: DtlsRole = "auto";
39
41
  srtpStarted = false;
@@ -46,7 +48,7 @@ export class RTCDtlsTransport {
46
48
 
47
49
  readonly onStateChange = new Event<[DtlsState]>();
48
50
 
49
- private localCertificate?: RTCCertificate = this.certificates[0];
51
+ localCertificate?: RTCCertificate = this.certificates[0];
50
52
  private remoteParameters?: RTCDtlsParameters;
51
53
 
52
54
  constructor(
@@ -79,6 +81,7 @@ export class RTCDtlsTransport {
79
81
  signatureHash
80
82
  );
81
83
  }
84
+ return this.localCertificate;
82
85
  }
83
86
 
84
87
  setRemoteParams(remoteParameters: RTCDtlsParameters) {
@@ -24,51 +24,71 @@ import { RTCDtlsTransport } from "./dtls";
24
24
  const log = debug("werift/webrtc/transport/sctp");
25
25
 
26
26
  export class RTCSctpTransport {
27
+ dtlsTransport!: RTCDtlsTransport;
28
+ sctp!: SCTP;
29
+
27
30
  readonly onDataChannel = new Event<[RTCDataChannel]>();
28
31
  readonly uuid = uuid.v4();
29
- readonly sctp = new SCTP(new BridgeDtls(this.dtlsTransport), this.port);
32
+
30
33
  mid?: string;
31
34
  bundled = false;
32
35
  dataChannels: { [key: number]: RTCDataChannel } = {};
33
36
 
34
37
  private dataChannelQueue: [RTCDataChannel, number, Buffer][] = [];
35
38
  private dataChannelId?: number;
39
+ private eventDisposer: (() => void)[] = [];
40
+
41
+ constructor(public port = 5000) {}
42
+
43
+ setDtlsTransport(dtlsTransport: RTCDtlsTransport) {
44
+ if (this.dtlsTransport && this.dtlsTransport.id === dtlsTransport.id) {
45
+ return;
46
+ }
47
+
48
+ this.eventDisposer.forEach((dispose) => dispose());
49
+
50
+ this.dtlsTransport = dtlsTransport;
51
+ this.sctp = new SCTP(new BridgeDtls(this.dtlsTransport), this.port);
52
+
53
+ this.eventDisposer = [
54
+ ...[
55
+ this.sctp.onReceive.subscribe(this.datachannelReceive),
56
+ this.sctp.onReconfigStreams.subscribe((ids: number[]) => {
57
+ ids.forEach((id) => {
58
+ const dc = this.dataChannels[id];
59
+ if (!dc) return;
60
+ // todo fix
61
+ dc.setReadyState("closing");
62
+ dc.setReadyState("closed");
63
+ delete this.dataChannels[id];
64
+ });
65
+ }),
66
+ this.sctp.stateChanged.connected.subscribe(() => {
67
+ Object.values(this.dataChannels).forEach((channel) => {
68
+ if (channel.negotiated && channel.readyState !== "open") {
69
+ channel.setReadyState("open");
70
+ }
71
+ });
72
+ this.dataChannelFlush();
73
+ }),
74
+ this.sctp.stateChanged.closed.subscribe(() => {
75
+ Object.values(this.dataChannels).forEach((dc) => {
76
+ dc.setReadyState("closed");
77
+ });
78
+ this.dataChannels = {};
79
+ }),
80
+ this.dtlsTransport.onStateChange.subscribe((state) => {
81
+ if (state === "closed") {
82
+ this.sctp.setState(SCTP_STATE.CLOSED);
83
+ }
84
+ }),
85
+ ].map((e) => e.unSubscribe),
86
+ () => (this.sctp.onSackReceived = async () => {}),
87
+ ];
36
88
 
37
- constructor(public dtlsTransport: RTCDtlsTransport, public port = 5000) {
38
- this.sctp.onReceive.subscribe(this.datachannelReceive);
39
- this.sctp.onReconfigStreams.subscribe((ids: number[]) => {
40
- ids.forEach((id) => {
41
- const dc = this.dataChannels[id];
42
- if (!dc) return;
43
- // todo fix
44
- dc.setReadyState("closing");
45
- dc.setReadyState("closed");
46
- delete this.dataChannels[id];
47
- });
48
- });
49
- this.sctp.stateChanged.connected.subscribe(() => {
50
- Object.values(this.dataChannels).forEach((channel) => {
51
- if (channel.negotiated && channel.readyState !== "open") {
52
- channel.setReadyState("open");
53
- }
54
- });
55
- this.dataChannelFlush();
56
- });
57
- this.sctp.stateChanged.closed.subscribe(() => {
58
- Object.values(this.dataChannels).forEach((dc) => {
59
- dc.setReadyState("closed");
60
- });
61
- this.dataChannels = {};
62
- });
63
89
  this.sctp.onSackReceived = async () => {
64
90
  await this.dataChannelFlush();
65
91
  };
66
-
67
- this.dtlsTransport.onStateChange.subscribe((state) => {
68
- if (state === "closed") {
69
- this.sctp.setState(SCTP_STATE.CLOSED);
70
- }
71
- });
72
92
  }
73
93
 
74
94
  private get isServer() {