werift 0.19.0 → 0.19.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 (241) hide show
  1. package/lib/common/src/binary.js.map +1 -1
  2. package/lib/common/src/network.js.map +1 -1
  3. package/lib/common/src/promise.js.map +1 -1
  4. package/lib/dtls/src/cipher/const.js +2 -2
  5. package/lib/dtls/src/cipher/const.js.map +1 -1
  6. package/lib/dtls/src/cipher/create.js +10 -10
  7. package/lib/dtls/src/cipher/create.js.map +1 -1
  8. package/lib/dtls/src/cipher/namedCurve.js.map +1 -1
  9. package/lib/dtls/src/cipher/prf.js +1 -1
  10. package/lib/dtls/src/cipher/prf.js.map +1 -1
  11. package/lib/dtls/src/cipher/suites/aead.d.ts +1 -1
  12. package/lib/dtls/src/cipher/suites/aead.js.map +1 -1
  13. package/lib/dtls/src/client.js.map +1 -1
  14. package/lib/dtls/src/context/cipher.js +2 -2
  15. package/lib/dtls/src/context/cipher.js.map +1 -1
  16. package/lib/dtls/src/context/dtls.js.map +1 -1
  17. package/lib/dtls/src/context/srtp.js.map +1 -1
  18. package/lib/dtls/src/flight/client/flight5.js +8 -6
  19. package/lib/dtls/src/flight/client/flight5.js.map +1 -1
  20. package/lib/dtls/src/flight/flight.js +1 -1
  21. package/lib/dtls/src/flight/flight.js.map +1 -1
  22. package/lib/dtls/src/flight/server/flight2.js.map +1 -1
  23. package/lib/dtls/src/flight/server/flight4.js.map +1 -1
  24. package/lib/dtls/src/flight/server/flight6.js.map +1 -1
  25. package/lib/dtls/src/handshake/const.js +1 -1
  26. package/lib/dtls/src/handshake/const.js.map +1 -1
  27. package/lib/dtls/src/handshake/extensions/ellipticCurves.js +1 -1
  28. package/lib/dtls/src/handshake/extensions/ellipticCurves.js.map +1 -1
  29. package/lib/dtls/src/handshake/extensions/extendedMasterSecret.js +1 -1
  30. package/lib/dtls/src/handshake/extensions/extendedMasterSecret.js.map +1 -1
  31. package/lib/dtls/src/handshake/extensions/renegotiationIndication.js +1 -1
  32. package/lib/dtls/src/handshake/extensions/renegotiationIndication.js.map +1 -1
  33. package/lib/dtls/src/handshake/extensions/signature.js +1 -1
  34. package/lib/dtls/src/handshake/extensions/signature.js.map +1 -1
  35. package/lib/dtls/src/handshake/extensions/useSrtp.js +1 -1
  36. package/lib/dtls/src/handshake/extensions/useSrtp.js.map +1 -1
  37. package/lib/dtls/src/handshake/message/alert.js +1 -1
  38. package/lib/dtls/src/handshake/message/alert.js.map +1 -1
  39. package/lib/dtls/src/handshake/message/certificate.js +1 -1
  40. package/lib/dtls/src/handshake/message/certificate.js.map +1 -1
  41. package/lib/dtls/src/handshake/message/changeCipherSpec.js +1 -1
  42. package/lib/dtls/src/handshake/message/changeCipherSpec.js.map +1 -1
  43. package/lib/dtls/src/handshake/message/client/certificateVerify.js +1 -1
  44. package/lib/dtls/src/handshake/message/client/certificateVerify.js.map +1 -1
  45. package/lib/dtls/src/handshake/message/client/hello.js +1 -1
  46. package/lib/dtls/src/handshake/message/client/hello.js.map +1 -1
  47. package/lib/dtls/src/handshake/message/client/keyExchange.js +1 -1
  48. package/lib/dtls/src/handshake/message/client/keyExchange.js.map +1 -1
  49. package/lib/dtls/src/handshake/message/server/certificateRequest.js +1 -1
  50. package/lib/dtls/src/handshake/message/server/certificateRequest.js.map +1 -1
  51. package/lib/dtls/src/handshake/message/server/hello.js +1 -1
  52. package/lib/dtls/src/handshake/message/server/hello.js.map +1 -1
  53. package/lib/dtls/src/handshake/message/server/helloDone.js +1 -1
  54. package/lib/dtls/src/handshake/message/server/helloDone.js.map +1 -1
  55. package/lib/dtls/src/handshake/message/server/helloVerifyRequest.js +1 -1
  56. package/lib/dtls/src/handshake/message/server/helloVerifyRequest.js.map +1 -1
  57. package/lib/dtls/src/handshake/message/server/keyExchange.js +1 -1
  58. package/lib/dtls/src/handshake/message/server/keyExchange.js.map +1 -1
  59. package/lib/dtls/src/handshake/random.js +2 -2
  60. package/lib/dtls/src/handshake/random.js.map +1 -1
  61. package/lib/dtls/src/helper.d.ts +1 -1
  62. package/lib/dtls/src/helper.js.map +1 -1
  63. package/lib/dtls/src/record/const.js +2 -2
  64. package/lib/dtls/src/record/const.js.map +1 -1
  65. package/lib/dtls/src/record/message/fragment.d.ts +1 -1
  66. package/lib/dtls/src/record/message/fragment.js +3 -3
  67. package/lib/dtls/src/record/message/fragment.js.map +1 -1
  68. package/lib/dtls/src/record/message/header.js +2 -2
  69. package/lib/dtls/src/record/message/header.js.map +1 -1
  70. package/lib/dtls/src/record/message/plaintext.js +1 -1
  71. package/lib/dtls/src/record/message/plaintext.js.map +1 -1
  72. package/lib/dtls/src/record/receive.js.map +1 -1
  73. package/lib/dtls/src/server.js.map +1 -1
  74. package/lib/dtls/src/socket.js.map +1 -1
  75. package/lib/dtls/src/transport.js.map +1 -1
  76. package/lib/ice/src/candidate.js +1 -1
  77. package/lib/ice/src/candidate.js.map +1 -1
  78. package/lib/ice/src/dns/lookup.js.map +1 -1
  79. package/lib/ice/src/exceptions.js.map +1 -1
  80. package/lib/ice/src/helper.js.map +1 -1
  81. package/lib/ice/src/ice.d.ts +5 -13
  82. package/lib/ice/src/ice.js +57 -154
  83. package/lib/ice/src/ice.js.map +1 -1
  84. package/lib/ice/src/stun/attributes.js.map +1 -1
  85. package/lib/ice/src/stun/const.d.ts +1 -1
  86. package/lib/ice/src/stun/const.js +2 -2
  87. package/lib/ice/src/stun/const.js.map +1 -1
  88. package/lib/ice/src/stun/message.js +1 -1
  89. package/lib/ice/src/stun/message.js.map +1 -1
  90. package/lib/ice/src/stun/protocol.js.map +1 -1
  91. package/lib/ice/src/stun/transaction.js.map +1 -1
  92. package/lib/ice/src/transport.js +1 -1
  93. package/lib/ice/src/transport.js.map +1 -1
  94. package/lib/ice/src/turn/protocol.js.map +1 -1
  95. package/lib/ice/src/utils.d.ts +1 -0
  96. package/lib/ice/src/utils.js +72 -1
  97. package/lib/ice/src/utils.js.map +1 -1
  98. package/lib/rtp/src/codec/av1.js +1 -1
  99. package/lib/rtp/src/codec/av1.js.map +1 -1
  100. package/lib/rtp/src/codec/h264.js.map +1 -1
  101. package/lib/rtp/src/codec/index.js.map +1 -1
  102. package/lib/rtp/src/codec/opus.js.map +1 -1
  103. package/lib/rtp/src/codec/vp8.js.map +1 -1
  104. package/lib/rtp/src/codec/vp9.js.map +1 -1
  105. package/lib/rtp/src/extra/container/mp4/container.js.map +1 -1
  106. package/lib/rtp/src/extra/container/mp4/exp-golomb.js.map +1 -1
  107. package/lib/rtp/src/extra/container/mp4/h264.js +1 -1
  108. package/lib/rtp/src/extra/container/mp4/h264.js.map +1 -1
  109. package/lib/rtp/src/extra/container/mp4/sps-parser.js +4 -4
  110. package/lib/rtp/src/extra/container/mp4/sps-parser.js.map +1 -1
  111. package/lib/rtp/src/extra/container/ogg/parser.js.map +1 -1
  112. package/lib/rtp/src/extra/container/webm/container.js.map +1 -1
  113. package/lib/rtp/src/extra/container/webm/ebml/ebml.js +1 -1
  114. package/lib/rtp/src/extra/container/webm/ebml/ebml.js.map +1 -1
  115. package/lib/rtp/src/extra/container/webm/ebml/typedArrayUtils.js.map +1 -1
  116. package/lib/rtp/src/extra/processor/depacketizer.js.map +1 -1
  117. package/lib/rtp/src/extra/processor/depacketizerTransformer.js.map +1 -1
  118. package/lib/rtp/src/extra/processor/dtx.js.map +1 -1
  119. package/lib/rtp/src/extra/processor/interface.js.map +1 -1
  120. package/lib/rtp/src/extra/processor/jitterBuffer.js.map +1 -1
  121. package/lib/rtp/src/extra/processor/jitterBufferTransformer.js.map +1 -1
  122. package/lib/rtp/src/extra/processor/lipsync.js.map +1 -1
  123. package/lib/rtp/src/extra/processor/lipsyncCallback.d.ts +1 -1
  124. package/lib/rtp/src/extra/processor/lipsyncCallback.js.map +1 -1
  125. package/lib/rtp/src/extra/processor/mp4.js.map +1 -1
  126. package/lib/rtp/src/extra/processor/mp4Callback.js +1 -1
  127. package/lib/rtp/src/extra/processor/mp4Callback.js.map +1 -1
  128. package/lib/rtp/src/extra/processor/mute.js.map +1 -1
  129. package/lib/rtp/src/extra/processor/muteCallback.js.map +1 -1
  130. package/lib/rtp/src/extra/processor/nack.js.map +1 -1
  131. package/lib/rtp/src/extra/processor/ntpTime.js.map +1 -1
  132. package/lib/rtp/src/extra/processor/rtcpCallback.js.map +1 -1
  133. package/lib/rtp/src/extra/processor/rtpCallback.js.map +1 -1
  134. package/lib/rtp/src/extra/processor/rtpStream.js.map +1 -1
  135. package/lib/rtp/src/extra/processor/rtpTime.js.map +1 -1
  136. package/lib/rtp/src/extra/processor/webm.js.map +1 -1
  137. package/lib/rtp/src/extra/processor/webmCallback.js.map +1 -1
  138. package/lib/rtp/src/extra/processor/webmStream.js.map +1 -1
  139. package/lib/rtp/src/index.d.ts +1 -0
  140. package/lib/rtp/src/rtcp/header.js.map +1 -1
  141. package/lib/rtp/src/rtcp/psfb/fullIntraRequest.js +1 -1
  142. package/lib/rtp/src/rtcp/psfb/fullIntraRequest.js.map +1 -1
  143. package/lib/rtp/src/rtcp/psfb/index.js +1 -1
  144. package/lib/rtp/src/rtcp/psfb/index.js.map +1 -1
  145. package/lib/rtp/src/rtcp/psfb/pictureLossIndication.js +1 -1
  146. package/lib/rtp/src/rtcp/psfb/pictureLossIndication.js.map +1 -1
  147. package/lib/rtp/src/rtcp/psfb/remb.js +1 -1
  148. package/lib/rtp/src/rtcp/psfb/remb.js.map +1 -1
  149. package/lib/rtp/src/rtcp/rr.js +1 -1
  150. package/lib/rtp/src/rtcp/rr.js.map +1 -1
  151. package/lib/rtp/src/rtcp/rtcp.js.map +1 -1
  152. package/lib/rtp/src/rtcp/rtpfb/index.js +1 -1
  153. package/lib/rtp/src/rtcp/rtpfb/index.js.map +1 -1
  154. package/lib/rtp/src/rtcp/rtpfb/nack.js +2 -2
  155. package/lib/rtp/src/rtcp/rtpfb/nack.js.map +1 -1
  156. package/lib/rtp/src/rtcp/rtpfb/twcc.js +3 -3
  157. package/lib/rtp/src/rtcp/rtpfb/twcc.js.map +1 -1
  158. package/lib/rtp/src/rtcp/sdes.js +1 -1
  159. package/lib/rtp/src/rtcp/sdes.js.map +1 -1
  160. package/lib/rtp/src/rtcp/sr.js +1 -1
  161. package/lib/rtp/src/rtcp/sr.js.map +1 -1
  162. package/lib/rtp/src/rtp/headerExtension.js.map +1 -1
  163. package/lib/rtp/src/rtp/red/encoder.js.map +1 -1
  164. package/lib/rtp/src/rtp/red/handler.js.map +1 -1
  165. package/lib/rtp/src/rtp/red/packet.js +0 -1
  166. package/lib/rtp/src/rtp/red/packet.js.map +1 -1
  167. package/lib/rtp/src/rtp/rtp.js +3 -2
  168. package/lib/rtp/src/rtp/rtp.js.map +1 -1
  169. package/lib/rtp/src/srtp/cipher/ctr.d.ts +1 -1
  170. package/lib/rtp/src/srtp/cipher/ctr.js +1 -1
  171. package/lib/rtp/src/srtp/cipher/ctr.js.map +1 -1
  172. package/lib/rtp/src/srtp/cipher/gcm.d.ts +1 -1
  173. package/lib/rtp/src/srtp/cipher/gcm.js +1 -1
  174. package/lib/rtp/src/srtp/cipher/gcm.js.map +1 -1
  175. package/lib/rtp/src/srtp/const.js.map +1 -1
  176. package/lib/rtp/src/srtp/context/context.js +1 -1
  177. package/lib/rtp/src/srtp/context/context.js.map +1 -1
  178. package/lib/rtp/src/srtp/context/srtcp.js.map +1 -1
  179. package/lib/sctp/src/chunk.js +17 -17
  180. package/lib/sctp/src/chunk.js.map +1 -1
  181. package/lib/sctp/src/const.js +2 -2
  182. package/lib/sctp/src/const.js.map +1 -1
  183. package/lib/sctp/src/param.js +5 -5
  184. package/lib/sctp/src/param.js.map +1 -1
  185. package/lib/sctp/src/sctp.js +5 -1
  186. package/lib/sctp/src/sctp.js.map +1 -1
  187. package/lib/sctp/src/transport.js.map +1 -1
  188. package/lib/webrtc/src/dataChannel.d.ts +1 -1
  189. package/lib/webrtc/src/dataChannel.js +1 -1
  190. package/lib/webrtc/src/dataChannel.js.map +1 -1
  191. package/lib/webrtc/src/helper.js.map +1 -1
  192. package/lib/webrtc/src/media/parameters.d.ts +1 -2
  193. package/lib/webrtc/src/media/parameters.js.map +1 -1
  194. package/lib/webrtc/src/media/receiver/nack.js.map +1 -1
  195. package/lib/webrtc/src/media/receiver/receiverTwcc.js.map +1 -1
  196. package/lib/webrtc/src/media/receiver/statistics.js.map +1 -1
  197. package/lib/webrtc/src/media/router.js +4 -2
  198. package/lib/webrtc/src/media/router.js.map +1 -1
  199. package/lib/webrtc/src/media/rtpReceiver.d.ts +1 -1
  200. package/lib/webrtc/src/media/rtpReceiver.js +1 -1
  201. package/lib/webrtc/src/media/rtpReceiver.js.map +1 -1
  202. package/lib/webrtc/src/media/rtpSender.js +1 -1
  203. package/lib/webrtc/src/media/rtpSender.js.map +1 -1
  204. package/lib/webrtc/src/media/rtpTransceiver.js.map +1 -1
  205. package/lib/webrtc/src/media/sender/cumulativeResult.js.map +1 -1
  206. package/lib/webrtc/src/media/sender/senderBWE.js.map +1 -1
  207. package/lib/webrtc/src/media/track.js.map +1 -1
  208. package/lib/webrtc/src/nonstandard/recorder/index.js.map +1 -1
  209. package/lib/webrtc/src/nonstandard/recorder/writer/index.d.ts +1 -1
  210. package/lib/webrtc/src/nonstandard/recorder/writer/index.js.map +1 -1
  211. package/lib/webrtc/src/nonstandard/recorder/writer/webm.d.ts +2 -2
  212. package/lib/webrtc/src/nonstandard/recorder/writer/webm.js +2 -2
  213. package/lib/webrtc/src/nonstandard/recorder/writer/webm.js.map +1 -1
  214. package/lib/webrtc/src/nonstandard/userMedia.js.map +1 -1
  215. package/lib/webrtc/src/peerConnection.d.ts +2 -2
  216. package/lib/webrtc/src/peerConnection.js +11 -8
  217. package/lib/webrtc/src/peerConnection.js.map +1 -1
  218. package/lib/webrtc/src/sdp.js +47 -37
  219. package/lib/webrtc/src/sdp.js.map +1 -1
  220. package/lib/webrtc/src/transport/dtls.js.map +1 -1
  221. package/lib/webrtc/src/transport/ice.js.map +1 -1
  222. package/lib/webrtc/src/transport/sctp.js +9 -7
  223. package/lib/webrtc/src/transport/sctp.js.map +1 -1
  224. package/lib/webrtc/src/utils.js +1 -1
  225. package/lib/webrtc/src/utils.js.map +1 -1
  226. package/package.json +9 -17
  227. package/src/dataChannel.ts +1 -1
  228. package/src/media/parameters.ts +2 -2
  229. package/src/media/receiver/nack.ts +4 -7
  230. package/src/media/router.ts +36 -40
  231. package/src/media/rtpReceiver.ts +12 -15
  232. package/src/media/rtpSender.ts +69 -82
  233. package/src/nonstandard/recorder/writer/index.ts +1 -1
  234. package/src/nonstandard/recorder/writer/webm.ts +3 -3
  235. package/src/nonstandard/userMedia.ts +1 -3
  236. package/src/peerConnection.ts +28 -24
  237. package/src/sdp.ts +49 -55
  238. package/src/transport/dtls.ts +3 -6
  239. package/src/transport/ice.ts +1 -1
  240. package/src/transport/sctp.ts +60 -66
  241. package/src/utils.ts +1 -1
@@ -1,6 +1,8 @@
1
1
  import { unlink } from "fs/promises";
2
2
  import { EventDisposer } from "rx.mini";
3
3
 
4
+ import { MediaWriter } from ".";
5
+ import { MediaStreamTrack, WeriftError } from "../../..";
4
6
  import {
5
7
  DepacketizeCallback,
6
8
  JitterBufferCallback,
@@ -8,12 +10,10 @@ import {
8
10
  NtpTimeCallback,
9
11
  RtcpSourceCallback,
10
12
  RtpSourceCallback,
11
- saveToFileSystem,
12
13
  SupportedCodec,
13
14
  WebmCallback,
15
+ saveToFileSystem,
14
16
  } from "../../../../../rtp/src/extra";
15
- import { MediaStreamTrack, WeriftError } from "../../..";
16
- import { MediaWriter } from ".";
17
17
 
18
18
  const sourcePath = "packages/webrtc/src/nonstandard/recorder/writer/webm.ts";
19
19
 
@@ -134,9 +134,7 @@ export class MediaPlayerWebm extends MediaPlayer {
134
134
  const run = async () => {
135
135
  if (payloadType > 100) payloadType = 96;
136
136
 
137
- const cmd = `gst-launch-1.0 filesrc location=${
138
- this.props.path
139
- } ! matroskademux name=d \
137
+ const cmd = `gst-launch-1.0 filesrc location=${this.props.path} ! matroskademux name=d \
140
138
  d.video_0 ! queue ! rtpvp8pay pt=${payloadType++} ! \
141
139
  udpsink host=127.0.0.1 port=${this.props.videoPort} \
142
140
  d.audio_0 ! queue ! rtpopuspay pt=${payloadType++} ! \
@@ -4,34 +4,34 @@ import isEqual from "lodash/isEqual";
4
4
  import Event from "rx.mini";
5
5
  import * as uuid from "uuid";
6
6
 
7
- import { Profile } from "../../dtls/src/context/srtp";
8
- import { Message } from "../../ice/src/stun/message";
9
- import { Protocol } from "../../ice/src/types/model";
10
7
  import {
11
8
  Address,
12
9
  CandidatePair,
13
- deepMerge,
14
10
  InterfaceAddresses,
15
11
  Recvonly,
16
12
  Sendonly,
17
13
  Sendrecv,
14
+ deepMerge,
18
15
  } from ".";
19
16
  import {
20
- codecParametersFromString,
21
17
  DtlsKeys,
18
+ codecParametersFromString,
22
19
  useNACK,
23
20
  usePLI,
24
21
  useREMB,
25
22
  } from ".";
23
+ import { Profile } from "../../dtls/src/context/srtp";
24
+ import { Message } from "../../ice/src/stun/message";
25
+ import { Protocol } from "../../ice/src/types/model";
26
26
  import {
27
27
  DISCARD_HOST,
28
28
  DISCARD_PORT,
29
29
  ReceiverDirection,
30
- SenderDirections,
31
30
  SRTP_PROFILE,
31
+ SenderDirections,
32
32
  } from "./const";
33
33
  import { RTCDataChannel, RTCDataChannelParameters } from "./dataChannel";
34
- import { enumerate, EventTarget } from "./helper";
34
+ import { EventTarget, enumerate } from "./helper";
35
35
  import {
36
36
  RTCRtpCodecParameters,
37
37
  RTCRtpCodingParameters,
@@ -51,11 +51,11 @@ import {
51
51
  } from "./media/rtpTransceiver";
52
52
  import { MediaStream, MediaStreamTrack } from "./media/track";
53
53
  import {
54
- addSDPHeader,
55
54
  GroupDescription,
56
55
  MediaDescription,
57
56
  SessionDescription,
58
57
  SsrcDescription,
58
+ addSDPHeader,
59
59
  } from "./sdp";
60
60
  import { RTCCertificate, RTCDtlsTransport } from "./transport/dtls";
61
61
  import {
@@ -168,20 +168,18 @@ export class RTCPeerConnection extends EventTarget {
168
168
 
169
169
  codecParams.payloadType = 96 + i;
170
170
  switch (codecParams.name.toLowerCase()) {
171
- case "rtx":
172
- {
173
- codecParams.parameters = `apt=${codecParams.payloadType - 1}`;
174
- }
175
- break;
176
- case "red":
177
- {
178
- if (codecParams.contentType === "audio") {
179
- const redundant = codecParams.payloadType + 1;
180
- codecParams.parameters = `${redundant}/${redundant}`;
181
- codecParams.payloadType = 63;
182
- }
171
+ case "rtx": {
172
+ codecParams.parameters = `apt=${codecParams.payloadType - 1}`;
173
+ }
174
+ break;
175
+ case "red": {
176
+ if (codecParams.contentType === "audio") {
177
+ const redundant = codecParams.payloadType + 1;
178
+ codecParams.parameters = `${redundant}/${redundant}`;
179
+ codecParams.payloadType = 63;
183
180
  }
184
- break;
181
+ }
182
+ break;
185
183
  }
186
184
  }
187
185
 
@@ -214,12 +212,16 @@ export class RTCPeerConnection extends EventTarget {
214
212
  }
215
213
 
216
214
  get localDescription() {
217
- if (!this._localDescription) return;
215
+ if (!this._localDescription) {
216
+ return undefined;
217
+ }
218
218
  return this._localDescription.toJSON();
219
219
  }
220
220
 
221
221
  get remoteDescription() {
222
- if (!this._remoteDescription) return;
222
+ if (!this._remoteDescription) {
223
+ return undefined;
224
+ }
223
225
  return this._remoteDescription.toJSON();
224
226
  }
225
227
 
@@ -830,7 +832,9 @@ export class RTCPeerConnection extends EventTarget {
830
832
 
831
833
  get remoteIsBundled() {
832
834
  const remoteSdp = this._remoteDescription;
833
- if (!remoteSdp) return;
835
+ if (!remoteSdp) {
836
+ return undefined;
837
+ }
834
838
  const bundle = remoteSdp.group.find(
835
839
  (g) => g.semantic === "BUNDLE" && this.config.bundlePolicy !== "disable",
836
840
  );
package/src/sdp.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { randomBytes } from "crypto";
2
+ import { isIPv4 } from "net";
2
3
  import { Uint64BE } from "int64-buffer";
3
4
  import range from "lodash/range";
4
- import { isIPv4 } from "net";
5
5
 
6
6
  import {
7
7
  DTLS_ROLE_SETUP,
@@ -63,12 +63,13 @@ export class SessionDescription {
63
63
  } else if (line.startsWith("a=")) {
64
64
  const [attr, value] = parseAttr(line);
65
65
  switch (attr) {
66
- case "fingerprint":
66
+ case "fingerprint": {
67
67
  const [algorithm, fingerprint] = value?.split(" ") || [];
68
68
  session.dtlsFingerprints.push(
69
69
  new RTCDtlsFingerprint(algorithm, fingerprint),
70
70
  );
71
- break;
71
+ }
72
+ break;
72
73
  case "ice-lite":
73
74
  session.iceLite = true;
74
75
  break;
@@ -147,7 +148,7 @@ export class SessionDescription {
147
148
  case "end-of-candidates":
148
149
  currentMedia.iceCandidatesComplete = true;
149
150
  break;
150
- case "extmap":
151
+ case "extmap": {
151
152
  // eslint-disable-next-line prefer-const
152
153
  let [extId, extUri] = value.split(" ");
153
154
  if (extId.includes("/")) {
@@ -159,14 +160,16 @@ export class SessionDescription {
159
160
  uri: extUri,
160
161
  }),
161
162
  );
162
- break;
163
- case "fingerprint":
163
+ }
164
+ break;
165
+ case "fingerprint": {
164
166
  if (!value) throw new Error();
165
167
  const [algorithm, fingerprint] = value.split(" ");
166
168
  currentMedia.dtlsParams?.fingerprints.push(
167
169
  new RTCDtlsFingerprint(algorithm, fingerprint),
168
170
  );
169
- break;
171
+ }
172
+ break;
170
173
  case "ice-options":
171
174
  currentMedia.iceOptions = value;
172
175
  break;
@@ -190,11 +193,12 @@ export class SessionDescription {
190
193
  case "msid":
191
194
  currentMedia.msid = value;
192
195
  break;
193
- case "rtcp":
196
+ case "rtcp": {
194
197
  const [port, rest] = divide(value, " ");
195
198
  currentMedia.rtcpPort = parseInt(port);
196
199
  currentMedia.rtcpHost = ipAddressFromSdp(rest);
197
- break;
200
+ }
201
+ break;
198
202
  case "rtcp-mux":
199
203
  currentMedia.rtcpMux = true;
200
204
  break;
@@ -207,34 +211,34 @@ export class SessionDescription {
207
211
  case "inactive":
208
212
  currentMedia.direction = attr;
209
213
  break;
210
- case "rtpmap":
211
- {
212
- const [formatId, formatDesc] = divide(value, " ");
213
- const [type, clock, channel] = formatDesc.split("/");
214
- let channels: number | undefined;
215
- if (currentMedia.kind === "audio") {
216
- channels = channel ? parseInt(channel) : 1;
217
- }
218
- const codec = new RTCRtpCodecParameters({
219
- mimeType: currentMedia.kind + "/" + type,
220
- channels,
221
- clockRate: parseInt(clock),
222
- payloadType: parseInt(formatId),
223
- });
224
- currentMedia.rtp.codecs.push(codec);
214
+ case "rtpmap": {
215
+ const [formatId, formatDesc] = divide(value, " ");
216
+ const [type, clock, channel] = formatDesc.split("/");
217
+ let channels: number | undefined;
218
+ if (currentMedia.kind === "audio") {
219
+ channels = channel ? parseInt(channel) : 1;
225
220
  }
226
- break;
227
- case "sctpmap":
221
+ const codec = new RTCRtpCodecParameters({
222
+ mimeType: currentMedia.kind + "/" + type,
223
+ channels,
224
+ clockRate: parseInt(clock),
225
+ payloadType: parseInt(formatId),
226
+ });
227
+ currentMedia.rtp.codecs.push(codec);
228
+ }
229
+ break;
230
+ case "sctpmap": {
228
231
  if (!value) throw new Error();
229
232
  const [formatId, formatDesc] = divide(value, " ");
230
233
  currentMedia.sctpMap[parseInt(formatId)] = formatDesc;
231
234
  currentMedia.sctpPort = parseInt(formatId);
232
- break;
235
+ }
236
+ break;
233
237
  case "sctp-port":
234
238
  if (!value) throw new Error();
235
239
  currentMedia.sctpPort = parseInt(value);
236
240
  break;
237
- case "ssrc":
241
+ case "ssrc": {
238
242
  const [ssrcStr, ssrcDesc] = divide(value, " ");
239
243
  const ssrc = parseInt(ssrcStr);
240
244
  const [ssrcAttr, ssrcValue] = divide(ssrcDesc, ":");
@@ -246,22 +250,22 @@ export class SessionDescription {
246
250
  if (SSRC_INFO_ATTRS.includes(ssrcAttr)) {
247
251
  ssrcInfo[ssrcAttr] = ssrcValue;
248
252
  }
249
- break;
253
+ }
254
+ break;
250
255
  case "ssrc-group":
251
256
  parseGroup(currentMedia.ssrcGroup, value);
252
257
  break;
253
- case "rid":
254
- {
255
- const [rid, direction] = divide(value, " ");
256
-
257
- currentMedia.simulcastParameters.push(
258
- new RTCRtpSimulcastParameters({
259
- rid,
260
- direction: direction as any,
261
- }),
262
- );
263
- }
264
- break;
258
+ case "rid": {
259
+ const [rid, direction] = divide(value, " ");
260
+
261
+ currentMedia.simulcastParameters.push(
262
+ new RTCRtpSimulcastParameters({
263
+ rid,
264
+ direction: direction as any,
265
+ }),
266
+ );
267
+ }
268
+ break;
265
269
  }
266
270
  }
267
271
  });
@@ -278,11 +282,7 @@ export class SessionDescription {
278
282
  for (let i = 0; i < bundle.items.length; i++) {
279
283
  if (!bundle.items.includes(i.toString())) continue;
280
284
  const check = session.media[i];
281
- if (
282
- check?.iceParams &&
283
- check.iceParams.usernameFragment &&
284
- check.iceParams.password
285
- ) {
285
+ if (check.iceParams?.usernameFragment && check.iceParams.password) {
286
286
  currentMedia.iceParams = {
287
287
  ...check.iceParams,
288
288
  };
@@ -327,7 +327,7 @@ export class SessionDescription {
327
327
  }
328
328
 
329
329
  webrtcTrackId(media: MediaDescription) {
330
- if (media.msid && media.msid.includes(" ")) {
330
+ if (media.msid?.includes(" ")) {
331
331
  const bits = media.msid.split(" ");
332
332
  for (const group of this.msidSemantic) {
333
333
  if (
@@ -532,10 +532,7 @@ export class MediaDescription {
532
532
  }
533
533
 
534
534
  export class GroupDescription {
535
- constructor(
536
- public semantic: string,
537
- public items: string[],
538
- ) {}
535
+ constructor(public semantic: string, public items: string[]) {}
539
536
 
540
537
  get str() {
541
538
  return `${this.semantic} ${this.items.join(" ")}`;
@@ -643,10 +640,7 @@ export function candidateFromSdp(sdp: string) {
643
640
  }
644
641
 
645
642
  export class RTCSessionDescription {
646
- constructor(
647
- public sdp: string,
648
- public type: "offer" | "answer",
649
- ) {}
643
+ constructor(public sdp: string, public type: "offer" | "answer") {}
650
644
  static isThis(o: any) {
651
645
  if (typeof o?.sdp === "string") return true;
652
646
  }
@@ -20,14 +20,14 @@ import { CipherContext } from "../../../dtls/src/context/cipher";
20
20
  import { Profile } from "../../../dtls/src/context/srtp";
21
21
  import { Connection } from "../../../ice/src";
22
22
  import {
23
- isMedia,
24
- isRtcp,
25
23
  RtcpPacket,
26
24
  RtcpPacketConverter,
27
25
  RtpHeader,
28
26
  RtpPacket,
29
27
  SrtcpSession,
30
28
  SrtpSession,
29
+ isMedia,
30
+ isRtcp,
31
31
  } from "../../../rtp/src";
32
32
  import { keyLength, saltLength } from "../../../rtp/src/srtp/const";
33
33
  import { RtpRouter } from "../media/router";
@@ -329,10 +329,7 @@ export type DtlsKeys = {
329
329
  };
330
330
 
331
331
  export class RTCDtlsFingerprint {
332
- constructor(
333
- public algorithm: string,
334
- public value: string,
335
- ) {}
332
+ constructor(public algorithm: string, public value: string) {}
336
333
  }
337
334
 
338
335
  export class RTCDtlsParameters {
@@ -248,7 +248,7 @@ export class IceCandidate {
248
248
  }
249
249
 
250
250
  export class RTCIceParameters {
251
- iceLite: boolean = false;
251
+ iceLite = false;
252
252
  usernameFragment!: string;
253
253
  password!: string;
254
254
 
@@ -108,79 +108,73 @@ export class RTCSctpTransport {
108
108
  if (ppId === WEBRTC_DCEP && data.length > 0) {
109
109
  log("DCEP", streamId, ppId, data);
110
110
  switch (data[0]) {
111
- case DATA_CHANNEL_OPEN:
112
- {
113
- if (data.length < 12) {
114
- log("DATA_CHANNEL_OPEN data.length not enough");
115
- return;
116
- }
117
-
118
- if (!Object.keys(this.dataChannels).includes(streamId.toString())) {
119
- const [
120
- ,
121
- channelType,
122
- ,
123
- reliability,
124
- labelLength,
125
- protocolLength,
126
- ] = jspack.Unpack("!BBHLHH", data);
127
-
128
- let pos = 12;
129
- const label = data.slice(pos, pos + labelLength).toString("utf8");
130
- pos += labelLength;
131
- const protocol = data
132
- .slice(pos, pos + protocolLength)
133
- .toString("utf8");
134
-
135
- log("DATA_CHANNEL_OPEN", {
136
- channelType,
137
- reliability,
138
- streamId,
139
- label,
140
- protocol,
141
- });
142
-
143
- const maxRetransmits =
144
- (channelType & 0x03) === 1 ? reliability : undefined;
145
- const maxPacketLifeTime =
146
- (channelType & 0x03) === 2 ? reliability : undefined;
147
-
148
- // # register channel
149
- const parameters = new RTCDataChannelParameters({
150
- label,
151
- ordered: (channelType & 0x80) === 0,
152
- maxPacketLifeTime,
153
- maxRetransmits,
154
- protocol,
155
- id: streamId,
156
- });
157
- const channel = new RTCDataChannel(this, parameters, false);
158
- channel.isCreatedByRemote = true;
159
- this.dataChannels[streamId] = channel;
160
-
161
- this.onDataChannel.execute(channel);
162
- channel.setReadyState("open");
163
- } else {
164
- log("datachannel already opened", "retransmit ack");
165
- }
111
+ case DATA_CHANNEL_OPEN: {
112
+ if (data.length < 12) {
113
+ log("DATA_CHANNEL_OPEN data.length not enough");
114
+ return;
115
+ }
166
116
 
167
- const channel = this.dataChannels[streamId];
168
- this.dataChannelQueue.push([
169
- channel,
170
- WEBRTC_DCEP,
171
- Buffer.from(jspack.Pack("!B", [DATA_CHANNEL_ACK])),
172
- ]);
173
- await this.dataChannelFlush();
117
+ if (!Object.keys(this.dataChannels).includes(streamId.toString())) {
118
+ const [, channelType, , reliability, labelLength, protocolLength] =
119
+ jspack.Unpack("!BBHLHH", data);
120
+
121
+ let pos = 12;
122
+ const label = data.slice(pos, pos + labelLength).toString("utf8");
123
+ pos += labelLength;
124
+ const protocol = data
125
+ .slice(pos, pos + protocolLength)
126
+ .toString("utf8");
127
+
128
+ log("DATA_CHANNEL_OPEN", {
129
+ channelType,
130
+ reliability,
131
+ streamId,
132
+ label,
133
+ protocol,
134
+ });
135
+
136
+ const maxRetransmits =
137
+ (channelType & 0x03) === 1 ? reliability : undefined;
138
+ const maxPacketLifeTime =
139
+ (channelType & 0x03) === 2 ? reliability : undefined;
140
+
141
+ // # register channel
142
+ const parameters = new RTCDataChannelParameters({
143
+ label,
144
+ ordered: (channelType & 0x80) === 0,
145
+ maxPacketLifeTime,
146
+ maxRetransmits,
147
+ protocol,
148
+ id: streamId,
149
+ });
150
+ const channel = new RTCDataChannel(this, parameters, false);
151
+ channel.isCreatedByRemote = true;
152
+ this.dataChannels[streamId] = channel;
153
+
154
+ this.onDataChannel.execute(channel);
155
+ channel.setReadyState("open");
156
+ } else {
157
+ log("datachannel already opened", "retransmit ack");
174
158
  }
175
- break;
176
- case DATA_CHANNEL_ACK:
159
+
160
+ const channel = this.dataChannels[streamId];
161
+ this.dataChannelQueue.push([
162
+ channel,
163
+ WEBRTC_DCEP,
164
+ Buffer.from(jspack.Pack("!B", [DATA_CHANNEL_ACK])),
165
+ ]);
166
+ await this.dataChannelFlush();
167
+ }
168
+ break;
169
+ case DATA_CHANNEL_ACK: {
177
170
  log("DATA_CHANNEL_ACK", streamId, ppId);
178
171
  const channel = this.dataChannels[streamId];
179
172
  if (!channel) {
180
173
  throw new Error("channel not found");
181
174
  }
182
175
  channel.setReadyState("open");
183
- break;
176
+ }
177
+ break;
184
178
  }
185
179
  } else {
186
180
  const channel = this.dataChannels[streamId];
@@ -200,7 +194,7 @@ export class RTCSctpTransport {
200
194
  }
201
195
  })();
202
196
 
203
- channel.message.execute(msg);
197
+ channel.onMessage.execute(msg);
204
198
  channel.emit("message", { data: msg });
205
199
  if (channel.onmessage) {
206
200
  channel.onmessage({ data: msg });
package/src/utils.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  /* eslint-disable prefer-const */
2
2
  import { createHash } from "crypto";
3
+ import { RemoteInfo, createSocket } from "dgram";
3
4
  import debug from "debug";
4
- import { createSocket, RemoteInfo } from "dgram";
5
5
  import mergeWith from "lodash/mergeWith";
6
6
  import { performance } from "perf_hooks";
7
7