werift 0.19.0 → 0.19.2

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 (284) hide show
  1. package/lib/common/src/binary.js +1 -1
  2. package/lib/common/src/binary.js.map +1 -1
  3. package/lib/common/src/network.js.map +1 -1
  4. package/lib/common/src/promise.js.map +1 -1
  5. package/lib/dtls/src/cipher/const.js +2 -2
  6. package/lib/dtls/src/cipher/const.js.map +1 -1
  7. package/lib/dtls/src/cipher/create.js +10 -10
  8. package/lib/dtls/src/cipher/create.js.map +1 -1
  9. package/lib/dtls/src/cipher/namedCurve.js.map +1 -1
  10. package/lib/dtls/src/cipher/prf.js +1 -1
  11. package/lib/dtls/src/cipher/prf.js.map +1 -1
  12. package/lib/dtls/src/cipher/suites/aead.d.ts +1 -1
  13. package/lib/dtls/src/cipher/suites/aead.js +5 -4
  14. package/lib/dtls/src/cipher/suites/aead.js.map +1 -1
  15. package/lib/dtls/src/client.js.map +1 -1
  16. package/lib/dtls/src/context/cipher.js +3 -3
  17. package/lib/dtls/src/context/cipher.js.map +1 -1
  18. package/lib/dtls/src/context/dtls.js.map +1 -1
  19. package/lib/dtls/src/context/srtp.js.map +1 -1
  20. package/lib/dtls/src/flight/client/flight5.js +8 -6
  21. package/lib/dtls/src/flight/client/flight5.js.map +1 -1
  22. package/lib/dtls/src/flight/flight.js +1 -1
  23. package/lib/dtls/src/flight/flight.js.map +1 -1
  24. package/lib/dtls/src/flight/server/flight2.js.map +1 -1
  25. package/lib/dtls/src/flight/server/flight4.js.map +1 -1
  26. package/lib/dtls/src/flight/server/flight6.js.map +1 -1
  27. package/lib/dtls/src/handshake/binary.d.ts +5 -5
  28. package/lib/dtls/src/handshake/binary.js +1 -1
  29. package/lib/dtls/src/handshake/binary.js.map +1 -1
  30. package/lib/dtls/src/handshake/const.js +1 -1
  31. package/lib/dtls/src/handshake/const.js.map +1 -1
  32. package/lib/dtls/src/handshake/extensions/ellipticCurves.d.ts +1 -1
  33. package/lib/dtls/src/handshake/extensions/ellipticCurves.js +2 -2
  34. package/lib/dtls/src/handshake/extensions/ellipticCurves.js.map +1 -1
  35. package/lib/dtls/src/handshake/extensions/extendedMasterSecret.js +1 -1
  36. package/lib/dtls/src/handshake/extensions/extendedMasterSecret.js.map +1 -1
  37. package/lib/dtls/src/handshake/extensions/renegotiationIndication.d.ts +2 -2
  38. package/lib/dtls/src/handshake/extensions/renegotiationIndication.js +2 -2
  39. package/lib/dtls/src/handshake/extensions/renegotiationIndication.js.map +1 -1
  40. package/lib/dtls/src/handshake/extensions/signature.d.ts +1 -1
  41. package/lib/dtls/src/handshake/extensions/signature.js +2 -2
  42. package/lib/dtls/src/handshake/extensions/signature.js.map +1 -1
  43. package/lib/dtls/src/handshake/extensions/useSrtp.d.ts +1 -1
  44. package/lib/dtls/src/handshake/extensions/useSrtp.js +2 -2
  45. package/lib/dtls/src/handshake/extensions/useSrtp.js.map +1 -1
  46. package/lib/dtls/src/handshake/message/alert.d.ts +2 -2
  47. package/lib/dtls/src/handshake/message/alert.js +2 -2
  48. package/lib/dtls/src/handshake/message/alert.js.map +1 -1
  49. package/lib/dtls/src/handshake/message/certificate.js +2 -2
  50. package/lib/dtls/src/handshake/message/certificate.js.map +1 -1
  51. package/lib/dtls/src/handshake/message/changeCipherSpec.d.ts +1 -1
  52. package/lib/dtls/src/handshake/message/changeCipherSpec.js +2 -2
  53. package/lib/dtls/src/handshake/message/changeCipherSpec.js.map +1 -1
  54. package/lib/dtls/src/handshake/message/client/certificateVerify.d.ts +1 -1
  55. package/lib/dtls/src/handshake/message/client/certificateVerify.js +2 -2
  56. package/lib/dtls/src/handshake/message/client/certificateVerify.js.map +1 -1
  57. package/lib/dtls/src/handshake/message/client/hello.d.ts +3 -3
  58. package/lib/dtls/src/handshake/message/client/hello.js +2 -2
  59. package/lib/dtls/src/handshake/message/client/hello.js.map +1 -1
  60. package/lib/dtls/src/handshake/message/client/keyExchange.js +2 -2
  61. package/lib/dtls/src/handshake/message/client/keyExchange.js.map +1 -1
  62. package/lib/dtls/src/handshake/message/server/certificateRequest.js +2 -2
  63. package/lib/dtls/src/handshake/message/server/certificateRequest.js.map +1 -1
  64. package/lib/dtls/src/handshake/message/server/hello.d.ts +5 -5
  65. package/lib/dtls/src/handshake/message/server/hello.js +2 -2
  66. package/lib/dtls/src/handshake/message/server/hello.js.map +1 -1
  67. package/lib/dtls/src/handshake/message/server/helloDone.js +2 -2
  68. package/lib/dtls/src/handshake/message/server/helloDone.js.map +1 -1
  69. package/lib/dtls/src/handshake/message/server/helloVerifyRequest.d.ts +2 -2
  70. package/lib/dtls/src/handshake/message/server/helloVerifyRequest.js +2 -2
  71. package/lib/dtls/src/handshake/message/server/helloVerifyRequest.js.map +1 -1
  72. package/lib/dtls/src/handshake/message/server/keyExchange.d.ts +6 -6
  73. package/lib/dtls/src/handshake/message/server/keyExchange.js +2 -2
  74. package/lib/dtls/src/handshake/message/server/keyExchange.js.map +1 -1
  75. package/lib/dtls/src/handshake/random.d.ts +1 -1
  76. package/lib/dtls/src/handshake/random.js +3 -3
  77. package/lib/dtls/src/handshake/random.js.map +1 -1
  78. package/lib/dtls/src/helper.d.ts +1 -1
  79. package/lib/dtls/src/helper.js.map +1 -1
  80. package/lib/dtls/src/record/const.js +2 -2
  81. package/lib/dtls/src/record/const.js.map +1 -1
  82. package/lib/dtls/src/record/message/fragment.d.ts +6 -6
  83. package/lib/dtls/src/record/message/fragment.js +4 -4
  84. package/lib/dtls/src/record/message/fragment.js.map +1 -1
  85. package/lib/dtls/src/record/message/header.d.ts +12 -12
  86. package/lib/dtls/src/record/message/header.js +3 -3
  87. package/lib/dtls/src/record/message/header.js.map +1 -1
  88. package/lib/dtls/src/record/message/plaintext.d.ts +12 -12
  89. package/lib/dtls/src/record/message/plaintext.js +2 -2
  90. package/lib/dtls/src/record/message/plaintext.js.map +1 -1
  91. package/lib/dtls/src/record/receive.js.map +1 -1
  92. package/lib/dtls/src/server.js.map +1 -1
  93. package/lib/dtls/src/socket.js +1 -1
  94. package/lib/dtls/src/socket.js.map +1 -1
  95. package/lib/dtls/src/transport.js.map +1 -1
  96. package/lib/dtls/src/util/binary.js +1 -1
  97. package/lib/dtls/src/util/binary.js.map +1 -1
  98. package/lib/ice/src/candidate.js +1 -1
  99. package/lib/ice/src/candidate.js.map +1 -1
  100. package/lib/ice/src/dns/lookup.d.ts +7 -0
  101. package/lib/ice/src/dns/lookup.js +47 -1
  102. package/lib/ice/src/dns/lookup.js.map +1 -1
  103. package/lib/ice/src/exceptions.d.ts +2 -2
  104. package/lib/ice/src/exceptions.js.map +1 -1
  105. package/lib/ice/src/helper.d.ts +1 -1
  106. package/lib/ice/src/helper.js.map +1 -1
  107. package/lib/ice/src/ice.d.ts +10 -18
  108. package/lib/ice/src/ice.js +62 -159
  109. package/lib/ice/src/ice.js.map +1 -1
  110. package/lib/ice/src/index.d.ts +2 -0
  111. package/lib/ice/src/index.js +4 -0
  112. package/lib/ice/src/index.js.map +1 -1
  113. package/lib/ice/src/stun/attributes.d.ts +2 -2
  114. package/lib/ice/src/stun/attributes.js +1 -1
  115. package/lib/ice/src/stun/attributes.js.map +1 -1
  116. package/lib/ice/src/stun/const.d.ts +1 -1
  117. package/lib/ice/src/stun/const.js +2 -2
  118. package/lib/ice/src/stun/const.js.map +1 -1
  119. package/lib/ice/src/stun/message.d.ts +1 -1
  120. package/lib/ice/src/stun/message.js +2 -2
  121. package/lib/ice/src/stun/message.js.map +1 -1
  122. package/lib/ice/src/stun/protocol.d.ts +5 -5
  123. package/lib/ice/src/stun/protocol.js.map +1 -1
  124. package/lib/ice/src/stun/transaction.d.ts +2 -2
  125. package/lib/ice/src/stun/transaction.js.map +1 -1
  126. package/lib/ice/src/transport.d.ts +3 -3
  127. package/lib/ice/src/transport.js +1 -1
  128. package/lib/ice/src/transport.js.map +1 -1
  129. package/lib/ice/src/turn/protocol.d.ts +32 -13
  130. package/lib/ice/src/turn/protocol.js +120 -36
  131. package/lib/ice/src/turn/protocol.js.map +1 -1
  132. package/lib/ice/src/types/model.d.ts +2 -2
  133. package/lib/ice/src/types/model.js.map +1 -1
  134. package/lib/ice/src/utils.d.ts +3 -2
  135. package/lib/ice/src/utils.js +72 -1
  136. package/lib/ice/src/utils.js.map +1 -1
  137. package/lib/rtp/src/codec/av1.js +1 -1
  138. package/lib/rtp/src/codec/av1.js.map +1 -1
  139. package/lib/rtp/src/codec/h264.js.map +1 -1
  140. package/lib/rtp/src/codec/index.js.map +1 -1
  141. package/lib/rtp/src/codec/opus.js.map +1 -1
  142. package/lib/rtp/src/codec/vp8.js.map +1 -1
  143. package/lib/rtp/src/codec/vp9.js.map +1 -1
  144. package/lib/rtp/src/extra/container/mp4/container.js.map +1 -1
  145. package/lib/rtp/src/extra/container/mp4/exp-golomb.js.map +1 -1
  146. package/lib/rtp/src/extra/container/mp4/h264.js +1 -1
  147. package/lib/rtp/src/extra/container/mp4/h264.js.map +1 -1
  148. package/lib/rtp/src/extra/container/mp4/sps-parser.js +4 -4
  149. package/lib/rtp/src/extra/container/mp4/sps-parser.js.map +1 -1
  150. package/lib/rtp/src/extra/container/ogg/parser.js.map +1 -1
  151. package/lib/rtp/src/extra/container/webm/container.js.map +1 -1
  152. package/lib/rtp/src/extra/container/webm/ebml/ebml.js +1 -1
  153. package/lib/rtp/src/extra/container/webm/ebml/ebml.js.map +1 -1
  154. package/lib/rtp/src/extra/container/webm/ebml/typedArrayUtils.js.map +1 -1
  155. package/lib/rtp/src/extra/processor/depacketizer.js.map +1 -1
  156. package/lib/rtp/src/extra/processor/depacketizerTransformer.js.map +1 -1
  157. package/lib/rtp/src/extra/processor/dtx.js.map +1 -1
  158. package/lib/rtp/src/extra/processor/interface.js.map +1 -1
  159. package/lib/rtp/src/extra/processor/jitterBuffer.js.map +1 -1
  160. package/lib/rtp/src/extra/processor/jitterBufferTransformer.js.map +1 -1
  161. package/lib/rtp/src/extra/processor/lipsync.js.map +1 -1
  162. package/lib/rtp/src/extra/processor/lipsyncCallback.d.ts +1 -1
  163. package/lib/rtp/src/extra/processor/lipsyncCallback.js.map +1 -1
  164. package/lib/rtp/src/extra/processor/mp4.js.map +1 -1
  165. package/lib/rtp/src/extra/processor/mp4Callback.js +1 -1
  166. package/lib/rtp/src/extra/processor/mp4Callback.js.map +1 -1
  167. package/lib/rtp/src/extra/processor/mute.js.map +1 -1
  168. package/lib/rtp/src/extra/processor/muteCallback.js.map +1 -1
  169. package/lib/rtp/src/extra/processor/nack.js.map +1 -1
  170. package/lib/rtp/src/extra/processor/ntpTime.js.map +1 -1
  171. package/lib/rtp/src/extra/processor/rtcpCallback.js.map +1 -1
  172. package/lib/rtp/src/extra/processor/rtpCallback.js.map +1 -1
  173. package/lib/rtp/src/extra/processor/rtpStream.js.map +1 -1
  174. package/lib/rtp/src/extra/processor/rtpTime.js.map +1 -1
  175. package/lib/rtp/src/extra/processor/webm.js.map +1 -1
  176. package/lib/rtp/src/extra/processor/webmCallback.js.map +1 -1
  177. package/lib/rtp/src/extra/processor/webmStream.js.map +1 -1
  178. package/lib/rtp/src/index.d.ts +1 -0
  179. package/lib/rtp/src/rtcp/header.js.map +1 -1
  180. package/lib/rtp/src/rtcp/psfb/fullIntraRequest.js +1 -1
  181. package/lib/rtp/src/rtcp/psfb/fullIntraRequest.js.map +1 -1
  182. package/lib/rtp/src/rtcp/psfb/index.js +1 -1
  183. package/lib/rtp/src/rtcp/psfb/index.js.map +1 -1
  184. package/lib/rtp/src/rtcp/psfb/pictureLossIndication.js +1 -1
  185. package/lib/rtp/src/rtcp/psfb/pictureLossIndication.js.map +1 -1
  186. package/lib/rtp/src/rtcp/psfb/remb.js +1 -1
  187. package/lib/rtp/src/rtcp/psfb/remb.js.map +1 -1
  188. package/lib/rtp/src/rtcp/rr.js +1 -1
  189. package/lib/rtp/src/rtcp/rr.js.map +1 -1
  190. package/lib/rtp/src/rtcp/rtcp.js.map +1 -1
  191. package/lib/rtp/src/rtcp/rtpfb/index.js +1 -1
  192. package/lib/rtp/src/rtcp/rtpfb/index.js.map +1 -1
  193. package/lib/rtp/src/rtcp/rtpfb/nack.js +2 -2
  194. package/lib/rtp/src/rtcp/rtpfb/nack.js.map +1 -1
  195. package/lib/rtp/src/rtcp/rtpfb/twcc.js +3 -3
  196. package/lib/rtp/src/rtcp/rtpfb/twcc.js.map +1 -1
  197. package/lib/rtp/src/rtcp/sdes.js +1 -1
  198. package/lib/rtp/src/rtcp/sdes.js.map +1 -1
  199. package/lib/rtp/src/rtcp/sr.js +1 -1
  200. package/lib/rtp/src/rtcp/sr.js.map +1 -1
  201. package/lib/rtp/src/rtp/headerExtension.js.map +1 -1
  202. package/lib/rtp/src/rtp/red/encoder.js.map +1 -1
  203. package/lib/rtp/src/rtp/red/handler.js.map +1 -1
  204. package/lib/rtp/src/rtp/red/packet.js +0 -1
  205. package/lib/rtp/src/rtp/red/packet.js.map +1 -1
  206. package/lib/rtp/src/rtp/rtp.js +3 -2
  207. package/lib/rtp/src/rtp/rtp.js.map +1 -1
  208. package/lib/rtp/src/rtp/rtx.js +1 -1
  209. package/lib/rtp/src/rtp/rtx.js.map +1 -1
  210. package/lib/rtp/src/srtp/cipher/ctr.d.ts +1 -1
  211. package/lib/rtp/src/srtp/cipher/ctr.js +1 -1
  212. package/lib/rtp/src/srtp/cipher/ctr.js.map +1 -1
  213. package/lib/rtp/src/srtp/cipher/gcm.d.ts +1 -1
  214. package/lib/rtp/src/srtp/cipher/gcm.js +1 -1
  215. package/lib/rtp/src/srtp/cipher/gcm.js.map +1 -1
  216. package/lib/rtp/src/srtp/const.js.map +1 -1
  217. package/lib/rtp/src/srtp/context/context.js +1 -1
  218. package/lib/rtp/src/srtp/context/context.js.map +1 -1
  219. package/lib/rtp/src/srtp/context/srtcp.js.map +1 -1
  220. package/lib/sctp/src/chunk.js +18 -18
  221. package/lib/sctp/src/chunk.js.map +1 -1
  222. package/lib/sctp/src/const.js +2 -2
  223. package/lib/sctp/src/const.js.map +1 -1
  224. package/lib/sctp/src/param.js +6 -6
  225. package/lib/sctp/src/param.js.map +1 -1
  226. package/lib/sctp/src/sctp.js +6 -2
  227. package/lib/sctp/src/sctp.js.map +1 -1
  228. package/lib/sctp/src/transport.js.map +1 -1
  229. package/lib/webrtc/src/dataChannel.d.ts +1 -1
  230. package/lib/webrtc/src/dataChannel.js +1 -1
  231. package/lib/webrtc/src/dataChannel.js.map +1 -1
  232. package/lib/webrtc/src/helper.js.map +1 -1
  233. package/lib/webrtc/src/media/parameters.d.ts +1 -2
  234. package/lib/webrtc/src/media/parameters.js.map +1 -1
  235. package/lib/webrtc/src/media/receiver/nack.js.map +1 -1
  236. package/lib/webrtc/src/media/receiver/receiverTwcc.js.map +1 -1
  237. package/lib/webrtc/src/media/receiver/statistics.js.map +1 -1
  238. package/lib/webrtc/src/media/router.js +4 -2
  239. package/lib/webrtc/src/media/router.js.map +1 -1
  240. package/lib/webrtc/src/media/rtpReceiver.d.ts +1 -1
  241. package/lib/webrtc/src/media/rtpReceiver.js +1 -1
  242. package/lib/webrtc/src/media/rtpReceiver.js.map +1 -1
  243. package/lib/webrtc/src/media/rtpSender.js +2 -2
  244. package/lib/webrtc/src/media/rtpSender.js.map +1 -1
  245. package/lib/webrtc/src/media/rtpTransceiver.js.map +1 -1
  246. package/lib/webrtc/src/media/sender/cumulativeResult.js.map +1 -1
  247. package/lib/webrtc/src/media/sender/senderBWE.js.map +1 -1
  248. package/lib/webrtc/src/media/track.js.map +1 -1
  249. package/lib/webrtc/src/nonstandard/recorder/index.js.map +1 -1
  250. package/lib/webrtc/src/nonstandard/recorder/writer/index.d.ts +1 -1
  251. package/lib/webrtc/src/nonstandard/recorder/writer/index.js.map +1 -1
  252. package/lib/webrtc/src/nonstandard/recorder/writer/webm.d.ts +2 -2
  253. package/lib/webrtc/src/nonstandard/recorder/writer/webm.js +2 -2
  254. package/lib/webrtc/src/nonstandard/recorder/writer/webm.js.map +1 -1
  255. package/lib/webrtc/src/nonstandard/userMedia.js.map +1 -1
  256. package/lib/webrtc/src/peerConnection.d.ts +3 -2
  257. package/lib/webrtc/src/peerConnection.js +14 -8
  258. package/lib/webrtc/src/peerConnection.js.map +1 -1
  259. package/lib/webrtc/src/sdp.d.ts +1 -1
  260. package/lib/webrtc/src/sdp.js +47 -37
  261. package/lib/webrtc/src/sdp.js.map +1 -1
  262. package/lib/webrtc/src/transport/dtls.js.map +1 -1
  263. package/lib/webrtc/src/transport/ice.js.map +1 -1
  264. package/lib/webrtc/src/transport/sctp.js +10 -8
  265. package/lib/webrtc/src/transport/sctp.js.map +1 -1
  266. package/lib/webrtc/src/utils.js +1 -1
  267. package/lib/webrtc/src/utils.js.map +1 -1
  268. package/package.json +14 -22
  269. package/src/dataChannel.ts +1 -1
  270. package/src/media/parameters.ts +2 -2
  271. package/src/media/receiver/nack.ts +4 -7
  272. package/src/media/router.ts +36 -40
  273. package/src/media/rtpReceiver.ts +12 -15
  274. package/src/media/rtpSender.ts +70 -83
  275. package/src/nonstandard/recorder/writer/index.ts +1 -1
  276. package/src/nonstandard/recorder/writer/webm.ts +3 -3
  277. package/src/nonstandard/userMedia.ts +1 -3
  278. package/src/peerConnection.ts +32 -24
  279. package/src/sdp.ts +50 -56
  280. package/src/transport/dtls.ts +3 -6
  281. package/src/transport/ice.ts +1 -1
  282. package/src/transport/sctp.ts +61 -67
  283. package/src/utils.ts +1 -1
  284. package/src/typings/jspack.d.ts +0 -8
@@ -21,17 +21,19 @@ Figure 2: Example for round-trip time computation
21
21
  */
22
22
 
23
23
  import { randomBytes } from "crypto";
24
+ import { jspack } from "@shinyoshiaki/jspack";
24
25
  import debug from "debug";
25
- import { jspack } from "jspack";
26
26
  import Event from "rx.mini";
27
27
  import { setTimeout } from "timers/promises";
28
28
  import * as uuid from "uuid";
29
29
 
30
+ import { codecParametersFromString } from "..";
30
31
  import { random16, uint16Add, uint32Add } from "../../../common/src";
31
32
  import {
32
33
  Extension,
33
34
  GenericNack,
34
35
  PictureLossIndication,
36
+ RTP_EXTENSION_URI,
35
37
  ReceiverEstimatedMaxBitrate,
36
38
  RedEncoder,
37
39
  RtcpPacket,
@@ -41,20 +43,18 @@ import {
41
43
  RtcpSourceDescriptionPacket,
42
44
  RtcpSrPacket,
43
45
  RtcpTransportLayerFeedback,
44
- RTP_EXTENSION_URI,
45
46
  RtpHeader,
46
47
  RtpPacket,
48
+ SourceDescriptionChunk,
49
+ SourceDescriptionItem,
50
+ TransportWideCC,
47
51
  serializeAbsSendTime,
48
52
  serializeRepairedRtpStreamId,
49
53
  serializeSdesMid,
50
54
  serializeSdesRTPStreamID,
51
55
  serializeTransportWideCC,
52
- SourceDescriptionChunk,
53
- SourceDescriptionItem,
54
- TransportWideCC,
55
56
  wrapRtx,
56
57
  } from "../../../rtp/src";
57
- import { codecParametersFromString } from "..";
58
58
  import { RTCDtlsTransport } from "../transport/dtls";
59
59
  import { Kind } from "../types/domain";
60
60
  import { compactNtp, milliTime, ntpTime, timestampSeconds } from "../utils";
@@ -104,7 +104,7 @@ export class RTCRtpSender {
104
104
  private octetCount = 0;
105
105
  private packetCount = 0;
106
106
  private rtt?: number;
107
- receiverEstimatedMaxBitrate: bigint = 0n;
107
+ receiverEstimatedMaxBitrate = 0n;
108
108
 
109
109
  // rtp
110
110
  private sequenceNumber?: number;
@@ -410,90 +410,77 @@ export class RTCRtpSender {
410
410
  handleRtcpPacket(rtcpPacket: RtcpPacket) {
411
411
  switch (rtcpPacket.type) {
412
412
  case RtcpSrPacket.type:
413
- case RtcpRrPacket.type:
414
- {
415
- const packet = rtcpPacket as RtcpSrPacket | RtcpRrPacket;
416
- packet.reports
417
- .filter((report) => report.ssrc === this.ssrc)
418
- .forEach((report) => {
419
- if (this.lastSRtimestamp === report.lsr && report.dlsr) {
420
- if (this.lastSentSRTimestamp) {
421
- const rtt =
422
- timestampSeconds() -
423
- this.lastSentSRTimestamp -
424
- report.dlsr / 65536;
425
- if (this.rtt === undefined) {
426
- this.rtt = rtt;
427
- } else {
428
- this.rtt = RTT_ALPHA * this.rtt + (1 - RTT_ALPHA) * rtt;
429
- }
413
+ case RtcpRrPacket.type: {
414
+ const packet = rtcpPacket as RtcpSrPacket | RtcpRrPacket;
415
+ packet.reports
416
+ .filter((report) => report.ssrc === this.ssrc)
417
+ .forEach((report) => {
418
+ if (this.lastSRtimestamp === report.lsr && report.dlsr) {
419
+ if (this.lastSentSRTimestamp) {
420
+ const rtt =
421
+ timestampSeconds() -
422
+ this.lastSentSRTimestamp -
423
+ report.dlsr / 65536;
424
+ if (this.rtt === undefined) {
425
+ this.rtt = rtt;
426
+ } else {
427
+ this.rtt = RTT_ALPHA * this.rtt + (1 - RTT_ALPHA) * rtt;
430
428
  }
431
429
  }
432
- });
433
- }
434
- break;
435
- case RtcpTransportLayerFeedback.type:
436
- {
437
- const packet = rtcpPacket as RtcpTransportLayerFeedback;
438
- switch (packet.feedback.count) {
439
- case TransportWideCC.count:
440
- {
441
- const feedback = packet.feedback as TransportWideCC;
442
- this.senderBWE.receiveTWCC(feedback);
430
+ }
431
+ });
432
+ }
433
+ break;
434
+ case RtcpTransportLayerFeedback.type: {
435
+ const packet = rtcpPacket as RtcpTransportLayerFeedback;
436
+ switch (packet.feedback.count) {
437
+ case TransportWideCC.count: {
438
+ const feedback = packet.feedback as TransportWideCC;
439
+ this.senderBWE.receiveTWCC(feedback);
440
+ }
441
+ break;
442
+ case GenericNack.count: {
443
+ const feedback = packet.feedback as GenericNack;
444
+ feedback.lost.forEach(async (seqNum) => {
445
+ let packet: RtpPacket | undefined =
446
+ this.rtpCache[seqNum % RTP_HISTORY_SIZE];
447
+ if (packet && packet.header.sequenceNumber !== seqNum) {
448
+ packet = undefined;
443
449
  }
444
- break;
445
- case GenericNack.count:
446
- {
447
- const feedback = packet.feedback as GenericNack;
448
- feedback.lost.forEach(async (seqNum) => {
449
- let packet: RtpPacket | undefined =
450
- this.rtpCache[seqNum % RTP_HISTORY_SIZE];
451
- if (packet && packet.header.sequenceNumber !== seqNum) {
452
- packet = undefined;
453
- }
454
- if (packet) {
455
- if (this.rtxPayloadType != undefined) {
456
- packet = wrapRtx(
457
- packet,
458
- this.rtxPayloadType,
459
- this.rtxSequenceNumber,
460
- this.rtxSsrc,
461
- );
462
- this.rtxSequenceNumber = uint16Add(
463
- this.rtxSequenceNumber,
464
- 1,
465
- );
466
- }
467
- await this.dtlsTransport.sendRtp(
468
- packet.payload,
469
- packet.header,
470
- );
471
- }
472
- });
473
- this.onGenericNack.execute(feedback);
450
+ if (packet) {
451
+ if (this.rtxPayloadType != undefined) {
452
+ packet = wrapRtx(
453
+ packet,
454
+ this.rtxPayloadType,
455
+ this.rtxSequenceNumber,
456
+ this.rtxSsrc,
457
+ );
458
+ this.rtxSequenceNumber = uint16Add(this.rtxSequenceNumber, 1);
459
+ }
460
+ await this.dtlsTransport.sendRtp(packet.payload, packet.header);
474
461
  }
475
- break;
462
+ });
463
+ this.onGenericNack.execute(feedback);
476
464
  }
465
+ break;
477
466
  }
478
- break;
479
- case RtcpPayloadSpecificFeedback.type:
480
- {
481
- const packet = rtcpPacket as RtcpPayloadSpecificFeedback;
482
- switch (packet.feedback.count) {
483
- case ReceiverEstimatedMaxBitrate.count:
484
- {
485
- const feedback = packet.feedback as ReceiverEstimatedMaxBitrate;
486
- this.receiverEstimatedMaxBitrate = feedback.bitrate;
487
- }
488
- break;
489
- case PictureLossIndication.count:
490
- {
491
- this.onPictureLossIndication.execute();
492
- }
493
- break;
467
+ }
468
+ break;
469
+ case RtcpPayloadSpecificFeedback.type: {
470
+ const packet = rtcpPacket as RtcpPayloadSpecificFeedback;
471
+ switch (packet.feedback.count) {
472
+ case ReceiverEstimatedMaxBitrate.count: {
473
+ const feedback = packet.feedback as ReceiverEstimatedMaxBitrate;
474
+ this.receiverEstimatedMaxBitrate = feedback.bitrate;
494
475
  }
476
+ break;
477
+ case PictureLossIndication.count: {
478
+ this.onPictureLossIndication.execute();
479
+ }
480
+ break;
495
481
  }
496
- break;
482
+ }
483
+ break;
497
484
  }
498
485
  this.onRtcp.execute(rtcpPacket);
499
486
  }
@@ -1,5 +1,5 @@
1
- import { MediaStreamTrack } from "../../..";
2
1
  import { MediaRecorderOptions } from "..";
2
+ import { MediaStreamTrack } from "../../..";
3
3
 
4
4
  export abstract class MediaWriter {
5
5
  constructor(
@@ -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
 
@@ -241,6 +243,10 @@ export class RTCPeerConnection extends EventTarget {
241
243
  );
242
244
  }
243
245
 
246
+ getConfiguration() {
247
+ return this.config;
248
+ }
249
+
244
250
  async createOffer() {
245
251
  await this.ensureCerts();
246
252
  const description = this.buildOfferSdp();
@@ -830,7 +836,9 @@ export class RTCPeerConnection extends EventTarget {
830
836
 
831
837
  get remoteIsBundled() {
832
838
  const remoteSdp = this._remoteDescription;
833
- if (!remoteSdp) return;
839
+ if (!remoteSdp) {
840
+ return undefined;
841
+ }
834
842
  const bundle = remoteSdp.group.find(
835
843
  (g) => g.semantic === "BUNDLE" && this.config.bundlePolicy !== "disable",
836
844
  );
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
  }
@@ -666,7 +660,7 @@ export function addSDPHeader(
666
660
  }
667
661
 
668
662
  export function codecParametersFromString(str: string) {
669
- const parameters = {};
663
+ const parameters: any = {};
670
664
  str.split(";").forEach((param) => {
671
665
  if (param.includes("=")) {
672
666
  const [k, v] = divide(param, "=");
@@ -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