werift 0.15.10 → 0.16.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 (164) hide show
  1. package/lib/common/src/index.d.ts +2 -0
  2. package/lib/common/src/index.js +2 -0
  3. package/lib/common/src/index.js.map +1 -1
  4. package/lib/common/src/log.d.ts +11 -0
  5. package/lib/common/src/log.js +17 -0
  6. package/lib/common/src/log.js.map +1 -0
  7. package/lib/common/src/network.d.ts +7 -3
  8. package/lib/common/src/network.js +15 -7
  9. package/lib/common/src/network.js.map +1 -1
  10. package/lib/common/src/type.d.ts +3 -0
  11. package/lib/common/src/type.js +3 -0
  12. package/lib/common/src/type.js.map +1 -0
  13. package/lib/dtls/src/context/cipher.js.map +1 -1
  14. package/lib/dtls/src/flight/server/flight2.js +10 -0
  15. package/lib/dtls/src/flight/server/flight2.js.map +1 -1
  16. package/lib/ice/src/ice.d.ts +3 -0
  17. package/lib/ice/src/ice.js +9 -2
  18. package/lib/ice/src/ice.js.map +1 -1
  19. package/lib/ice/src/stun/protocol.d.ts +2 -1
  20. package/lib/ice/src/stun/protocol.js +3 -3
  21. package/lib/ice/src/stun/protocol.js.map +1 -1
  22. package/lib/ice/src/transport.d.ts +4 -2
  23. package/lib/ice/src/transport.js +8 -6
  24. package/lib/ice/src/transport.js.map +1 -1
  25. package/lib/ice/src/turn/protocol.d.ts +3 -1
  26. package/lib/ice/src/turn/protocol.js +2 -2
  27. package/lib/ice/src/turn/protocol.js.map +1 -1
  28. package/lib/ice/src/utils.d.ts +2 -1
  29. package/lib/ice/src/utils.js +2 -2
  30. package/lib/ice/src/utils.js.map +1 -1
  31. package/lib/rtp/src/codec/index.d.ts +18 -0
  32. package/lib/rtp/src/codec/index.js +81 -0
  33. package/lib/rtp/src/codec/index.js.map +1 -0
  34. package/lib/rtp/src/codec/vp8.d.ts +5 -3
  35. package/lib/rtp/src/codec/vp8.js +19 -5
  36. package/lib/rtp/src/codec/vp8.js.map +1 -1
  37. package/lib/rtp/src/container/webm.d.ts +6 -1
  38. package/lib/rtp/src/container/webm.js +9 -2
  39. package/lib/rtp/src/container/webm.js.map +1 -1
  40. package/lib/rtp/src/index.d.ts +2 -6
  41. package/lib/rtp/src/index.js +2 -6
  42. package/lib/rtp/src/index.js.map +1 -1
  43. package/lib/rtp/src/processor/base.d.ts +3 -1
  44. package/lib/rtp/src/processor/base.js +19 -6
  45. package/lib/rtp/src/processor/base.js.map +1 -1
  46. package/lib/rtp/src/processor/jitterBuffer.js +1 -2
  47. package/lib/rtp/src/processor/jitterBuffer.js.map +1 -1
  48. package/lib/rtp/src/processor/lipsync.js +22 -2
  49. package/lib/rtp/src/processor/lipsync.js.map +1 -1
  50. package/lib/rtp/src/processor/webm.d.ts +11 -7
  51. package/lib/rtp/src/processor/webm.js +16 -41
  52. package/lib/rtp/src/processor/webm.js.map +1 -1
  53. package/lib/rtp/src/processor_v2/depacketizer.d.ts +17 -0
  54. package/lib/rtp/src/processor_v2/depacketizer.js +84 -0
  55. package/lib/rtp/src/processor_v2/depacketizer.js.map +1 -0
  56. package/lib/rtp/src/processor_v2/index.d.ts +4 -0
  57. package/lib/rtp/src/processor_v2/index.js +21 -0
  58. package/lib/rtp/src/processor_v2/index.js.map +1 -0
  59. package/lib/rtp/src/processor_v2/jitterBuffer.d.ts +33 -0
  60. package/lib/rtp/src/processor_v2/jitterBuffer.js +154 -0
  61. package/lib/rtp/src/processor_v2/jitterBuffer.js.map +1 -0
  62. package/lib/rtp/src/processor_v2/source/base.d.ts +8 -0
  63. package/lib/rtp/src/processor_v2/source/base.js +16 -0
  64. package/lib/rtp/src/processor_v2/source/base.js.map +1 -0
  65. package/lib/rtp/src/processor_v2/source/index.d.ts +2 -0
  66. package/lib/rtp/src/processor_v2/source/index.js +6 -0
  67. package/lib/rtp/src/processor_v2/source/index.js.map +1 -0
  68. package/lib/rtp/src/processor_v2/source/rtp.d.ts +14 -0
  69. package/lib/rtp/src/processor_v2/source/rtp.js +24 -0
  70. package/lib/rtp/src/processor_v2/source/rtp.js.map +1 -0
  71. package/lib/rtp/src/processor_v2/webmLive.d.ts +51 -0
  72. package/lib/rtp/src/processor_v2/webmLive.js +154 -0
  73. package/lib/rtp/src/processor_v2/webmLive.js.map +1 -0
  74. package/lib/rtp/src/rtcp/header.d.ts +2 -1
  75. package/lib/rtp/src/rtcp/header.js +3 -2
  76. package/lib/rtp/src/rtcp/header.js.map +1 -1
  77. package/lib/rtp/src/rtcp/rr.d.ts +2 -0
  78. package/lib/rtp/src/rtcp/rr.js.map +1 -1
  79. package/lib/rtp/src/rtcp/rtcp.js +4 -4
  80. package/lib/rtp/src/rtcp/rtcp.js.map +1 -1
  81. package/lib/rtp/src/rtcp/rtpfb/index.js +1 -1
  82. package/lib/rtp/src/rtcp/rtpfb/index.js.map +1 -1
  83. package/lib/rtp/src/rtcp/rtpfb/nack.js +15 -7
  84. package/lib/rtp/src/rtcp/rtpfb/nack.js.map +1 -1
  85. package/lib/rtp/src/rtp/red/packet.d.ts +1 -0
  86. package/lib/rtp/src/rtp/red/packet.js.map +1 -1
  87. package/lib/rtp/src/rtp/rtp.d.ts +1 -0
  88. package/lib/rtp/src/rtp/rtp.js +27 -26
  89. package/lib/rtp/src/rtp/rtp.js.map +1 -1
  90. package/lib/rtp/src/srtp/cipher/ctr.d.ts +1 -1
  91. package/lib/rtp/src/srtp/cipher/ctr.js +14 -20
  92. package/lib/rtp/src/srtp/cipher/ctr.js.map +1 -1
  93. package/lib/webrtc/src/dataChannel.js +1 -1
  94. package/lib/webrtc/src/dataChannel.js.map +1 -1
  95. package/lib/webrtc/src/media/extension/rtpExtension.d.ts +2 -0
  96. package/lib/webrtc/src/media/extension/rtpExtension.js +8 -1
  97. package/lib/webrtc/src/media/extension/rtpExtension.js.map +1 -1
  98. package/lib/webrtc/src/media/parameters.d.ts +2 -0
  99. package/lib/webrtc/src/media/parameters.js +1 -0
  100. package/lib/webrtc/src/media/parameters.js.map +1 -1
  101. package/lib/webrtc/src/media/receiver/nack.d.ts +10 -5
  102. package/lib/webrtc/src/media/receiver/nack.js +44 -27
  103. package/lib/webrtc/src/media/receiver/nack.js.map +1 -1
  104. package/lib/webrtc/src/media/receiver/receiverTwcc.js +1 -1
  105. package/lib/webrtc/src/media/receiver/receiverTwcc.js.map +1 -1
  106. package/lib/webrtc/src/media/receiver/red.d.ts +1 -1
  107. package/lib/webrtc/src/media/receiver/red.js +14 -3
  108. package/lib/webrtc/src/media/receiver/red.js.map +1 -1
  109. package/lib/webrtc/src/media/router.d.ts +10 -3
  110. package/lib/webrtc/src/media/router.js +2 -0
  111. package/lib/webrtc/src/media/router.js.map +1 -1
  112. package/lib/webrtc/src/media/rtpReceiver.d.ts +11 -3
  113. package/lib/webrtc/src/media/rtpReceiver.js +42 -23
  114. package/lib/webrtc/src/media/rtpReceiver.js.map +1 -1
  115. package/lib/webrtc/src/media/rtpSender.d.ts +23 -2
  116. package/lib/webrtc/src/media/rtpSender.js +34 -10
  117. package/lib/webrtc/src/media/rtpSender.js.map +1 -1
  118. package/lib/webrtc/src/media/rtpTransceiver.d.ts +5 -1
  119. package/lib/webrtc/src/media/rtpTransceiver.js +9 -9
  120. package/lib/webrtc/src/media/rtpTransceiver.js.map +1 -1
  121. package/lib/webrtc/src/media/track.js +4 -2
  122. package/lib/webrtc/src/media/track.js.map +1 -1
  123. package/lib/webrtc/src/nonstandard/recorder/index.d.ts +5 -1
  124. package/lib/webrtc/src/nonstandard/recorder/index.js +2 -2
  125. package/lib/webrtc/src/nonstandard/recorder/index.js.map +1 -1
  126. package/lib/webrtc/src/nonstandard/recorder/writer/index.d.ts +1 -1
  127. package/lib/webrtc/src/nonstandard/recorder/writer/index.js +1 -1
  128. package/lib/webrtc/src/nonstandard/recorder/writer/index.js.map +1 -1
  129. package/lib/webrtc/src/nonstandard/recorder/writer/webm.d.ts +3 -3
  130. package/lib/webrtc/src/nonstandard/recorder/writer/webm.js +61 -41
  131. package/lib/webrtc/src/nonstandard/recorder/writer/webm.js.map +1 -1
  132. package/lib/webrtc/src/peerConnection.d.ts +13 -0
  133. package/lib/webrtc/src/peerConnection.js +40 -3
  134. package/lib/webrtc/src/peerConnection.js.map +1 -1
  135. package/lib/webrtc/src/sdp.d.ts +1 -0
  136. package/lib/webrtc/src/sdp.js +4 -0
  137. package/lib/webrtc/src/sdp.js.map +1 -1
  138. package/lib/webrtc/src/transport/dtls.js +6 -1
  139. package/lib/webrtc/src/transport/dtls.js.map +1 -1
  140. package/lib/webrtc/src/transport/sctp.js +1 -1
  141. package/lib/webrtc/src/transport/sctp.js.map +1 -1
  142. package/lib/webrtc/src/utils.d.ts +7 -2
  143. package/lib/webrtc/src/utils.js +9 -3
  144. package/lib/webrtc/src/utils.js.map +1 -1
  145. package/package.json +2 -2
  146. package/src/dataChannel.ts +1 -1
  147. package/src/media/extension/rtpExtension.ts +8 -0
  148. package/src/media/parameters.ts +3 -0
  149. package/src/media/receiver/nack.ts +45 -26
  150. package/src/media/receiver/receiverTwcc.ts +1 -1
  151. package/src/media/receiver/red.ts +14 -1
  152. package/src/media/router.ts +5 -3
  153. package/src/media/rtpReceiver.ts +59 -28
  154. package/src/media/rtpSender.ts +38 -12
  155. package/src/media/rtpTransceiver.ts +10 -8
  156. package/src/media/track.ts +6 -2
  157. package/src/nonstandard/recorder/index.ts +6 -2
  158. package/src/nonstandard/recorder/writer/index.ts +1 -1
  159. package/src/nonstandard/recorder/writer/webm.ts +105 -57
  160. package/src/peerConnection.ts +61 -7
  161. package/src/sdp.ts +3 -0
  162. package/src/transport/dtls.ts +5 -1
  163. package/src/transport/sctp.ts +1 -1
  164. package/src/utils.ts +8 -2
@@ -1,75 +1,123 @@
1
- import * as fs from "fs/promises";
1
+ import { appendFile, open, unlink } from "fs/promises";
2
+ import { ReadableStreamDefaultReadResult } from "stream/web";
2
3
 
3
4
  import { SupportedCodec } from "../../../../../rtp/src/container/webm";
4
5
  import {
5
- JitterBuffer,
6
+ depacketizeTransformer,
7
+ jitterBufferTransformer,
6
8
  MediaStreamTrack,
7
- SampleBuilder,
8
- WebmOutput,
9
+ RtpSourceStream,
10
+ WebmLiveOutput,
11
+ WebmLiveSink,
12
+ WeriftError,
9
13
  } from "../../..";
10
14
  import { MediaWriter } from ".";
11
15
 
16
+ const sourcePath = "packages/webrtc/src/nonstandard/recorder/writer/webm.ts";
17
+
12
18
  export class WebmFactory extends MediaWriter {
13
- webm?: WebmOutput;
19
+ rtpSources: RtpSourceStream[] = [];
20
+
21
+ async start(tracks: MediaStreamTrack[]) {
22
+ await unlink(this.path).catch((e) => e);
23
+
24
+ const inputTracks = tracks.map((track, i) => {
25
+ const trackNumber = i + 1;
26
+ const payloadType = track.codec!.payloadType;
27
+
28
+ if (track.kind === "video") {
29
+ const codec = ((): SupportedCodec => {
30
+ switch (track.codec?.name.toLowerCase() as SupportedVideoCodec) {
31
+ case "vp8":
32
+ return "VP8";
33
+ case "vp9":
34
+ return "VP9";
35
+ case "h264":
36
+ return "MPEG4/ISO/AVC";
37
+ case "av1x":
38
+ return "AV1";
39
+ default:
40
+ throw new WeriftError({
41
+ message: "unsupported codec",
42
+ payload: { track, path: sourcePath },
43
+ });
44
+ }
45
+ })();
46
+ return {
47
+ kind: "video" as const,
48
+ codec,
49
+ clockRate: 90000,
50
+ trackNumber,
51
+ width: this.options.width,
52
+ height: this.options.height,
53
+ payloadType,
54
+ track,
55
+ };
56
+ } else {
57
+ return {
58
+ kind: "audio" as const,
59
+ codec: "OPUS" as const,
60
+ clockRate: 48000,
61
+ trackNumber,
62
+ payloadType,
63
+ track,
64
+ };
65
+ }
66
+ });
14
67
 
15
- start(tracks: MediaStreamTrack[]) {
16
- this.webm = new WebmOutput(
17
- fs,
18
- this.path,
19
- tracks.map((track, i) => {
20
- const trackNumber = i + 1;
21
- const payloadType = track.codec!.payloadType;
68
+ const webm = new WebmLiveSink(inputTracks, {
69
+ duration: this.options.defaultDuration ?? 1000 * 60 * 60 * 24,
70
+ });
71
+
72
+ this.rtpSources = inputTracks.map(({ track, clockRate, codec }) => {
73
+ const rtpSource = new RtpSourceStream(track.onReceiveRtp);
74
+
75
+ const jitterBuffer = jitterBufferTransformer(clockRate, {
76
+ latency: this.options.jitterBufferLatency,
77
+ bufferSize: this.options.jitterBufferSize,
78
+ });
22
79
 
23
- if (track.kind === "video") {
24
- const codec = ((): SupportedCodec => {
25
- switch (track.codec?.name.toLowerCase() as SupportedVideoCodec) {
26
- case "vp8":
27
- return "VP8";
28
- case "vp9":
29
- return "VP9";
30
- case "h264":
31
- return "MPEG4/ISO/AVC";
32
- case "av1x":
33
- return "AV1";
34
- default:
35
- throw new Error();
36
- }
37
- })();
38
- return {
39
- kind: "video",
40
- clockRate: 90000,
41
- payloadType,
42
- trackNumber,
43
- codec,
44
- width: this.options.width,
45
- height: this.options.height,
46
- };
47
- } else {
48
- return {
49
- kind: "audio",
50
- clockRate: 48000,
51
- payloadType,
52
- trackNumber,
53
- codec: "OPUS",
54
- };
55
- }
56
- })
57
- );
80
+ if (track.kind === "video") {
81
+ rtpSource.readable
82
+ .pipeThrough(jitterBuffer)
83
+ .pipeThrough(
84
+ depacketizeTransformer((h) => h.marker, codec, {
85
+ waitForKeyframe: this.options.waitForKeyframe,
86
+ })
87
+ )
88
+ .pipeTo(webm.videoStream);
89
+ } else {
90
+ rtpSource.readable
91
+ .pipeThrough(jitterBuffer)
92
+ .pipeThrough(depacketizeTransformer(() => true, codec))
93
+ .pipeTo(webm.audioStream);
94
+ }
58
95
 
59
- tracks.forEach((track) => {
60
- const sampleBuilder =
61
- track.kind === "video"
62
- ? new SampleBuilder((h) => !!h.marker).pipe(this.webm!)
63
- : new SampleBuilder(() => true).pipe(this.webm!);
64
- new JitterBuffer({
65
- rtpStream: track.onReceiveRtp,
66
- rtcpStream: track.onReceiveRtcp,
67
- }).pipe(sampleBuilder);
96
+ return rtpSource;
68
97
  });
98
+
99
+ const reader = webm.webmStream.getReader();
100
+ const readChunk = async ({
101
+ value,
102
+ done,
103
+ }: ReadableStreamDefaultReadResult<WebmLiveOutput>) => {
104
+ if (done) return;
105
+
106
+ if (value.packet) {
107
+ await appendFile(this.path, value.packet);
108
+ } else if (value.eol) {
109
+ const { durationElement } = value.eol;
110
+ const handler = await open(this.path, "r+");
111
+ await handler.write(durationElement, 0, durationElement.length, 83);
112
+ await handler.close();
113
+ }
114
+ reader.read().then(readChunk);
115
+ };
116
+ reader.read().then(readChunk);
69
117
  }
70
118
 
71
119
  async stop() {
72
- await this.webm!.stop();
120
+ await Promise.all(this.rtpSources.map((r) => r.stop()));
73
121
  }
74
122
  }
75
123
 
@@ -5,11 +5,19 @@ import Event from "rx.mini";
5
5
  import * as uuid from "uuid";
6
6
 
7
7
  import { Profile } from "../../dtls/src/context/srtp";
8
- import { deepMerge } from ".";
8
+ import { Message } from "../../ice/src/stun/message";
9
+ import { Protocol } from "../../ice/src/types/model";
10
+ import {
11
+ Address,
12
+ deepMerge,
13
+ InterfaceAddresses,
14
+ Recvonly,
15
+ Sendonly,
16
+ Sendrecv,
17
+ } from ".";
9
18
  import {
10
19
  codecParametersFromString,
11
20
  DtlsKeys,
12
- useAbsSendTime,
13
21
  useNACK,
14
22
  usePLI,
15
23
  useREMB,
@@ -22,8 +30,6 @@ import {
22
30
  } from "./const";
23
31
  import { RTCDataChannel, RTCDataChannelParameters } from "./dataChannel";
24
32
  import { enumerate, EventTarget } from "./helper";
25
- import { useFIR } from "./media/extension/rtcpFeedback";
26
- import { useSdesMid, useTransportWideCC } from "./media/extension/rtpExtension";
27
33
  import {
28
34
  RTCRtpCodecParameters,
29
35
  RTCRtpCodingParameters,
@@ -91,6 +97,7 @@ export class RTCPeerConnection extends EventTarget {
91
97
  readonly onTransceiverAdded = new Event<[RTCRtpTransceiver]>();
92
98
  readonly onIceCandidate = new Event<[RTCIceCandidate]>();
93
99
  readonly onNegotiationneeded = new Event<[]>();
100
+ readonly onTrack = new Event<[MediaStreamTrack]>();
94
101
 
95
102
  ondatachannel?: CallbackWithValue<RTCDataChannelEvent>;
96
103
  onicecandidate?: CallbackWithValue<RTCPeerConnectionIceEvent>;
@@ -226,14 +233,42 @@ export class RTCPeerConnection extends EventTarget {
226
233
  return description.toJSON();
227
234
  }
228
235
 
236
+ private assignTransceiverCodecs(transceiver: RTCRtpTransceiver) {
237
+ const codecs = (
238
+ this.config.codecs[transceiver.kind] as RTCRtpCodecParameters[]
239
+ ).filter((codecCandidate) => {
240
+ switch (codecCandidate.direction) {
241
+ case "recvonly": {
242
+ if ([Recvonly, Sendrecv].includes(transceiver.direction)) return true;
243
+ return false;
244
+ }
245
+ case "sendonly": {
246
+ if ([Sendonly, Sendrecv].includes(transceiver.direction)) return true;
247
+ return false;
248
+ }
249
+ case "sendrecv": {
250
+ if ([Sendrecv, Recvonly, Sendonly].includes(transceiver.direction))
251
+ return true;
252
+ return false;
253
+ }
254
+ case "all": {
255
+ return true;
256
+ }
257
+ default:
258
+ return false;
259
+ }
260
+ });
261
+ transceiver.codecs = codecs;
262
+ }
263
+
229
264
  buildOfferSdp() {
230
265
  this.transceivers.forEach((transceiver) => {
231
266
  if (transceiver.codecs.length === 0) {
232
- transceiver.codecs = this.config.codecs[transceiver.kind];
267
+ this.assignTransceiverCodecs(transceiver);
233
268
  }
234
269
  if (transceiver.headerExtensions.length === 0) {
235
270
  transceiver.headerExtensions =
236
- this.config.headerExtensions[transceiver.kind];
271
+ this.config.headerExtensions[transceiver.kind] ?? [];
237
272
  }
238
273
  });
239
274
 
@@ -410,6 +445,10 @@ export class RTCPeerConnection extends EventTarget {
410
445
  ...parseIceServers(this.config.iceServers),
411
446
  forceTurn: this.config.iceTransportPolicy === "relay",
412
447
  portRange: this.config.icePortRange,
448
+ interfaceAddresses: this.config.iceInterfaceAddresses,
449
+ filterStunResponse: this.config.iceFilterStunResponse,
450
+ useIpv4: this.config.iceUseIpv4,
451
+ useIpv6: this.config.iceUseIpv6,
413
452
  });
414
453
  if (existing) {
415
454
  iceGatherer.connection.localUserName = existing.connection.localUserName;
@@ -1034,6 +1073,7 @@ export class RTCPeerConnection extends EventTarget {
1034
1073
  transceiver,
1035
1074
  receiver: transceiver.receiver,
1036
1075
  };
1076
+ this.onTrack.execute(track);
1037
1077
  this.emit("track", event);
1038
1078
  if (this.ontrack) this.ontrack(event);
1039
1079
  }
@@ -1053,7 +1093,7 @@ export class RTCPeerConnection extends EventTarget {
1053
1093
  ]);
1054
1094
 
1055
1095
  const sender = new RTCRtpSender(trackOrKind);
1056
- const receiver = new RTCRtpReceiver(kind, sender.ssrc);
1096
+ const receiver = new RTCRtpReceiver(this.config, kind, sender.ssrc);
1057
1097
  const transceiver = new RTCRtpTransceiver(
1058
1098
  kind,
1059
1099
  dtlsTransport,
@@ -1481,6 +1521,14 @@ export interface PeerConfig {
1481
1521
  iceServers: RTCIceServer[];
1482
1522
  /**Minimum port and Maximum port must not be the same value */
1483
1523
  icePortRange: [number, number] | undefined;
1524
+ iceInterfaceAddresses: InterfaceAddresses | undefined;
1525
+ iceUseIpv4: boolean;
1526
+ iceUseIpv6: boolean;
1527
+ /** If provided, is called on each STUN request.
1528
+ * Return `true` if a STUN response should be sent, false if it should be skipped. */
1529
+ iceFilterStunResponse:
1530
+ | ((message: Message, addr: Address, protocol: Protocol) => boolean)
1531
+ | undefined;
1484
1532
  dtls: Partial<{
1485
1533
  keys: DtlsKeys;
1486
1534
  }>;
@@ -1492,6 +1540,8 @@ export interface PeerConfig {
1492
1540
  outboundPacketLoss: number;
1493
1541
  /**ms */
1494
1542
  receiverReportDelay: number;
1543
+ disableSendNack: boolean;
1544
+ disableRecvRetransmit: boolean;
1495
1545
  }>;
1496
1546
  }
1497
1547
 
@@ -1542,6 +1592,10 @@ export const defaultPeerConfig: PeerConfig = {
1542
1592
  iceTransportPolicy: "all",
1543
1593
  iceServers: [{ urls: "stun:stun.l.google.com:19302" }],
1544
1594
  icePortRange: undefined,
1595
+ iceInterfaceAddresses: undefined,
1596
+ iceUseIpv4: true,
1597
+ iceUseIpv6: true,
1598
+ iceFilterStunResponse: undefined,
1545
1599
  dtls: {},
1546
1600
  bundlePolicy: "max-compat",
1547
1601
  debug: {},
package/src/sdp.ts CHANGED
@@ -611,6 +611,9 @@ export function candidateFromSdp(sdp: string) {
611
611
 
612
612
  export class RTCSessionDescription {
613
613
  constructor(public sdp: string, public type: "offer" | "answer") {}
614
+ static isThis(o: any) {
615
+ if (typeof o?.sdp === "string") return true;
616
+ }
614
617
  }
615
618
 
616
619
  export function addSDPHeader(
@@ -202,7 +202,11 @@ export class RTCDtlsTransport {
202
202
  } else {
203
203
  const dec = this.srtp.decrypt(data);
204
204
  const rtp = RtpPacket.deSerialize(dec);
205
- this.router.routeRtp(rtp);
205
+ try {
206
+ this.router.routeRtp(rtp);
207
+ } catch (error) {
208
+ log("router error", error);
209
+ }
206
210
  }
207
211
  });
208
212
  }
@@ -21,7 +21,7 @@ import {
21
21
  } from "../dataChannel";
22
22
  import { RTCDtlsTransport } from "./dtls";
23
23
 
24
- const log = debug("werift/webrtc/transport/sctp");
24
+ const log = debug("werift:packages/webrtc/src/transport/sctp.ts");
25
25
 
26
26
  export class RTCSctpTransport {
27
27
  dtlsTransport!: RTCDtlsTransport;
package/src/utils.ts CHANGED
@@ -18,7 +18,7 @@ import { Direction, Directions } from "./media/rtpTransceiver";
18
18
  import { RTCIceServer } from "./peerConnection";
19
19
  const now = require("nano-time");
20
20
 
21
- const log = debug("werift/webrtc/utils");
21
+ const log = debug("werift:packages/webrtc/src/utils.ts");
22
22
 
23
23
  export function fingerprint(file: Buffer, hashName: string) {
24
24
  const upper = (s: string) => s.toUpperCase();
@@ -64,6 +64,8 @@ export const microTime = () => now.micro() as number;
64
64
 
65
65
  export const milliTime = () => new Date().getTime();
66
66
 
67
+ export const timestampSeconds = () => Date.now() / 1000;
68
+
67
69
  /**https://datatracker.ietf.org/doc/html/rfc3550#section-4 */
68
70
  export const ntpTime = () => {
69
71
  const now = performance.timeOrigin + performance.now() - Date.UTC(1900, 0, 1);
@@ -76,7 +78,11 @@ export const ntpTime = () => {
76
78
  return buf.readBigUInt64BE();
77
79
  };
78
80
 
79
- /**https://datatracker.ietf.org/doc/html/rfc3550#section-4 */
81
+ /**
82
+ * https://datatracker.ietf.org/doc/html/rfc3550#section-4
83
+ * @param ntp
84
+ * @returns 32bit
85
+ */
80
86
  export const compactNtp = (ntp: bigint) => {
81
87
  const buf = bufferWriter([8], [ntp]);
82
88
  const [, sec, msec] = bufferReader(buf, [2, 2, 2, 2]);