werift 0.19.3 → 0.19.5

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 (370) hide show
  1. package/lib/common/src/binary.d.ts +0 -1
  2. package/lib/common/src/binary.js +14 -14
  3. package/lib/common/src/binary.js.map +1 -1
  4. package/lib/common/src/network.d.ts +1 -2
  5. package/lib/common/src/network.js +4 -4
  6. package/lib/common/src/network.js.map +1 -1
  7. package/lib/common/src/number.js +10 -10
  8. package/lib/common/src/number.js.map +1 -1
  9. package/lib/dtls/src/cipher/create.d.ts +1 -1
  10. package/lib/dtls/src/cipher/create.js +2 -3
  11. package/lib/dtls/src/cipher/create.js.map +1 -1
  12. package/lib/dtls/src/cipher/ec.d.ts +0 -1
  13. package/lib/dtls/src/cipher/key-exchange.js +7 -7
  14. package/lib/dtls/src/cipher/key-exchange.js.map +1 -1
  15. package/lib/dtls/src/cipher/namedCurve.d.ts +1 -2
  16. package/lib/dtls/src/cipher/namedCurve.js +1 -2
  17. package/lib/dtls/src/cipher/namedCurve.js.map +1 -1
  18. package/lib/dtls/src/cipher/prf.d.ts +1 -2
  19. package/lib/dtls/src/cipher/prf.js +11 -12
  20. package/lib/dtls/src/cipher/prf.js.map +1 -1
  21. package/lib/dtls/src/cipher/suites/abstract.d.ts +1 -2
  22. package/lib/dtls/src/cipher/suites/abstract.js.map +1 -1
  23. package/lib/dtls/src/cipher/suites/aead.d.ts +1 -2
  24. package/lib/dtls/src/cipher/suites/aead.js.map +1 -1
  25. package/lib/dtls/src/client.d.ts +1 -1
  26. package/lib/dtls/src/client.js.map +1 -1
  27. package/lib/dtls/src/context/cipher.d.ts +6 -7
  28. package/lib/dtls/src/context/cipher.js +5 -3
  29. package/lib/dtls/src/context/cipher.js.map +1 -1
  30. package/lib/dtls/src/context/dtls.d.ts +5 -6
  31. package/lib/dtls/src/context/dtls.js +1 -2
  32. package/lib/dtls/src/context/dtls.js.map +1 -1
  33. package/lib/dtls/src/context/transport.d.ts +1 -2
  34. package/lib/dtls/src/context/transport.js.map +1 -1
  35. package/lib/dtls/src/flight/client/flight1.d.ts +4 -4
  36. package/lib/dtls/src/flight/client/flight1.js.map +1 -1
  37. package/lib/dtls/src/flight/client/flight3.d.ts +3 -3
  38. package/lib/dtls/src/flight/client/flight3.js +6 -0
  39. package/lib/dtls/src/flight/client/flight3.js.map +1 -1
  40. package/lib/dtls/src/flight/client/flight5.d.ts +4 -4
  41. package/lib/dtls/src/flight/client/flight5.js.map +1 -1
  42. package/lib/dtls/src/flight/flight.d.ts +3 -4
  43. package/lib/dtls/src/flight/flight.js.map +1 -1
  44. package/lib/dtls/src/flight/server/flight2.d.ts +4 -4
  45. package/lib/dtls/src/flight/server/flight2.js +9 -2
  46. package/lib/dtls/src/flight/server/flight2.js.map +1 -1
  47. package/lib/dtls/src/flight/server/flight4.d.ts +5 -5
  48. package/lib/dtls/src/flight/server/flight4.js.map +1 -1
  49. package/lib/dtls/src/flight/server/flight6.d.ts +4 -4
  50. package/lib/dtls/src/flight/server/flight6.js.map +1 -1
  51. package/lib/dtls/src/handshake/extensions/ellipticCurves.d.ts +1 -2
  52. package/lib/dtls/src/handshake/extensions/ellipticCurves.js.map +1 -1
  53. package/lib/dtls/src/handshake/extensions/renegotiationIndication.d.ts +0 -1
  54. package/lib/dtls/src/handshake/extensions/signature.d.ts +1 -2
  55. package/lib/dtls/src/handshake/extensions/signature.js.map +1 -1
  56. package/lib/dtls/src/handshake/extensions/useSrtp.d.ts +1 -2
  57. package/lib/dtls/src/handshake/extensions/useSrtp.js.map +1 -1
  58. package/lib/dtls/src/handshake/message/alert.d.ts +0 -1
  59. package/lib/dtls/src/handshake/message/alert.js.map +1 -1
  60. package/lib/dtls/src/handshake/message/certificate.d.ts +1 -2
  61. package/lib/dtls/src/handshake/message/certificate.js.map +1 -1
  62. package/lib/dtls/src/handshake/message/changeCipherSpec.d.ts +0 -1
  63. package/lib/dtls/src/handshake/message/client/certificateVerify.d.ts +2 -3
  64. package/lib/dtls/src/handshake/message/client/certificateVerify.js.map +1 -1
  65. package/lib/dtls/src/handshake/message/client/hello.d.ts +1 -2
  66. package/lib/dtls/src/handshake/message/client/hello.js.map +1 -1
  67. package/lib/dtls/src/handshake/message/client/keyExchange.d.ts +1 -2
  68. package/lib/dtls/src/handshake/message/client/keyExchange.js.map +1 -1
  69. package/lib/dtls/src/handshake/message/finished.d.ts +1 -2
  70. package/lib/dtls/src/handshake/message/finished.js.map +1 -1
  71. package/lib/dtls/src/handshake/message/server/certificateRequest.d.ts +2 -3
  72. package/lib/dtls/src/handshake/message/server/certificateRequest.js.map +1 -1
  73. package/lib/dtls/src/handshake/message/server/hello.d.ts +2 -3
  74. package/lib/dtls/src/handshake/message/server/hello.js.map +1 -1
  75. package/lib/dtls/src/handshake/message/server/helloDone.d.ts +1 -2
  76. package/lib/dtls/src/handshake/message/server/helloDone.js.map +1 -1
  77. package/lib/dtls/src/handshake/message/server/helloVerifyRequest.d.ts +1 -2
  78. package/lib/dtls/src/handshake/message/server/helloVerifyRequest.js.map +1 -1
  79. package/lib/dtls/src/handshake/message/server/keyExchange.d.ts +2 -3
  80. package/lib/dtls/src/handshake/message/server/keyExchange.js.map +1 -1
  81. package/lib/dtls/src/handshake/random.d.ts +0 -1
  82. package/lib/dtls/src/helper.d.ts +0 -1
  83. package/lib/dtls/src/helper.js +3 -3
  84. package/lib/dtls/src/helper.js.map +1 -1
  85. package/lib/dtls/src/record/builder.d.ts +2 -3
  86. package/lib/dtls/src/record/builder.js +2 -4
  87. package/lib/dtls/src/record/builder.js.map +1 -1
  88. package/lib/dtls/src/record/message/fragment.d.ts +1 -2
  89. package/lib/dtls/src/record/message/fragment.js.map +1 -1
  90. package/lib/dtls/src/record/message/header.d.ts +0 -1
  91. package/lib/dtls/src/record/message/plaintext.d.ts +0 -1
  92. package/lib/dtls/src/record/receive.d.ts +2 -3
  93. package/lib/dtls/src/record/receive.js.map +1 -1
  94. package/lib/dtls/src/server.d.ts +1 -1
  95. package/lib/dtls/src/server.js.map +1 -1
  96. package/lib/dtls/src/socket.d.ts +5 -6
  97. package/lib/dtls/src/socket.js +17 -23
  98. package/lib/dtls/src/socket.js.map +1 -1
  99. package/lib/dtls/src/transport.d.ts +1 -3
  100. package/lib/dtls/src/transport.js.map +1 -1
  101. package/lib/dtls/src/typings/domain.d.ts +2 -3
  102. package/lib/dtls/src/typings/domain.js.map +1 -1
  103. package/lib/dtls/src/util/binary.d.ts +0 -1
  104. package/lib/dtls/src/util/binary.js +1 -2
  105. package/lib/dtls/src/util/binary.js.map +1 -1
  106. package/lib/ice/src/candidate.js +3 -3
  107. package/lib/ice/src/candidate.js.map +1 -1
  108. package/lib/ice/src/dns/lookup.d.ts +1 -1
  109. package/lib/ice/src/dns/lookup.js +1 -0
  110. package/lib/ice/src/dns/lookup.js.map +1 -1
  111. package/lib/ice/src/exceptions.js.map +1 -1
  112. package/lib/ice/src/helper.d.ts +0 -1
  113. package/lib/ice/src/helper.js +5 -5
  114. package/lib/ice/src/helper.js.map +1 -1
  115. package/lib/ice/src/ice.d.ts +3 -2
  116. package/lib/ice/src/ice.js +25 -16
  117. package/lib/ice/src/ice.js.map +1 -1
  118. package/lib/ice/src/stun/attributes.d.ts +0 -1
  119. package/lib/ice/src/stun/attributes.js +5 -5
  120. package/lib/ice/src/stun/attributes.js.map +1 -1
  121. package/lib/ice/src/stun/message.d.ts +0 -1
  122. package/lib/ice/src/stun/message.js +2 -2
  123. package/lib/ice/src/stun/message.js.map +1 -1
  124. package/lib/ice/src/stun/protocol.d.ts +0 -1
  125. package/lib/ice/src/stun/transaction.d.ts +1 -1
  126. package/lib/ice/src/transport.d.ts +1 -4
  127. package/lib/ice/src/turn/protocol.d.ts +1 -2
  128. package/lib/ice/src/turn/protocol.js +5 -4
  129. package/lib/ice/src/turn/protocol.js.map +1 -1
  130. package/lib/ice/src/types/model.d.ts +0 -1
  131. package/lib/ice/src/utils.js +3 -4
  132. package/lib/ice/src/utils.js.map +1 -1
  133. package/lib/rtp/src/codec/av1.d.ts +1 -2
  134. package/lib/rtp/src/codec/av1.js +2 -2
  135. package/lib/rtp/src/codec/av1.js.map +1 -1
  136. package/lib/rtp/src/codec/base.d.ts +1 -2
  137. package/lib/rtp/src/codec/base.js.map +1 -1
  138. package/lib/rtp/src/codec/h264.d.ts +2 -3
  139. package/lib/rtp/src/codec/h264.js.map +1 -1
  140. package/lib/rtp/src/codec/index.d.ts +1 -2
  141. package/lib/rtp/src/codec/index.js +2 -2
  142. package/lib/rtp/src/codec/index.js.map +1 -1
  143. package/lib/rtp/src/codec/opus.d.ts +2 -3
  144. package/lib/rtp/src/codec/opus.js.map +1 -1
  145. package/lib/rtp/src/codec/vp8.d.ts +2 -3
  146. package/lib/rtp/src/codec/vp8.js +1 -1
  147. package/lib/rtp/src/codec/vp8.js.map +1 -1
  148. package/lib/rtp/src/codec/vp9.d.ts +2 -3
  149. package/lib/rtp/src/codec/vp9.js +1 -1
  150. package/lib/rtp/src/codec/vp9.js.map +1 -1
  151. package/lib/rtp/src/extra/container/mp4/h264.d.ts +0 -1
  152. package/lib/rtp/src/extra/container/mp4/h264.js +2 -2
  153. package/lib/rtp/src/extra/container/mp4/h264.js.map +1 -1
  154. package/lib/rtp/src/extra/container/mp4/mp4box.d.ts +1 -1
  155. package/lib/rtp/src/extra/container/mp4/mp4box.js +3 -3
  156. package/lib/rtp/src/extra/container/mp4/mp4box.js.map +1 -1
  157. package/lib/rtp/src/extra/container/ogg/parser.d.ts +0 -1
  158. package/lib/rtp/src/extra/container/webm/container.d.ts +0 -1
  159. package/lib/rtp/src/extra/container/webm/container.js +2 -3
  160. package/lib/rtp/src/extra/container/webm/container.js.map +1 -1
  161. package/lib/rtp/src/extra/container/webm/ebml/typedArrayUtils.js +2 -2
  162. package/lib/rtp/src/extra/container/webm/ebml/typedArrayUtils.js.map +1 -1
  163. package/lib/rtp/src/extra/processor/depacketizer.d.ts +2 -3
  164. package/lib/rtp/src/extra/processor/depacketizer.js.map +1 -1
  165. package/lib/rtp/src/extra/processor/depacketizerCallback.d.ts +1 -1
  166. package/lib/rtp/src/extra/processor/depacketizerCallback.js.map +1 -1
  167. package/lib/rtp/src/extra/processor/depacketizerTransformer.d.ts +2 -3
  168. package/lib/rtp/src/extra/processor/depacketizerTransformer.js.map +1 -1
  169. package/lib/rtp/src/extra/processor/dtx.d.ts +2 -3
  170. package/lib/rtp/src/extra/processor/dtx.js.map +1 -1
  171. package/lib/rtp/src/extra/processor/dtxCallback.js.map +1 -1
  172. package/lib/rtp/src/extra/processor/interface.d.ts +2 -2
  173. package/lib/rtp/src/extra/processor/jitterBuffer.d.ts +2 -2
  174. package/lib/rtp/src/extra/processor/jitterBuffer.js.map +1 -1
  175. package/lib/rtp/src/extra/processor/jitterBufferCallback.d.ts +1 -1
  176. package/lib/rtp/src/extra/processor/jitterBufferCallback.js.map +1 -1
  177. package/lib/rtp/src/extra/processor/jitterBufferTransformer.d.ts +1 -2
  178. package/lib/rtp/src/extra/processor/jitterBufferTransformer.js.map +1 -1
  179. package/lib/rtp/src/extra/processor/lipsync.d.ts +3 -4
  180. package/lib/rtp/src/extra/processor/lipsync.js +2 -2
  181. package/lib/rtp/src/extra/processor/lipsync.js.map +1 -1
  182. package/lib/rtp/src/extra/processor/lipsyncCallback.d.ts +1 -1
  183. package/lib/rtp/src/extra/processor/lipsyncCallback.js.map +1 -1
  184. package/lib/rtp/src/extra/processor/mp4.d.ts +2 -3
  185. package/lib/rtp/src/extra/processor/mp4.js.map +1 -1
  186. package/lib/rtp/src/extra/processor/mp4Callback.d.ts +2 -2
  187. package/lib/rtp/src/extra/processor/mp4Callback.js.map +1 -1
  188. package/lib/rtp/src/extra/processor/mute.d.ts +2 -3
  189. package/lib/rtp/src/extra/processor/mute.js.map +1 -1
  190. package/lib/rtp/src/extra/processor/muteCallback.d.ts +2 -2
  191. package/lib/rtp/src/extra/processor/muteCallback.js.map +1 -1
  192. package/lib/rtp/src/extra/processor/nack.d.ts +2 -2
  193. package/lib/rtp/src/extra/processor/nack.js.map +1 -1
  194. package/lib/rtp/src/extra/processor/nackHandlerCallback.js.map +1 -1
  195. package/lib/rtp/src/extra/processor/ntpTime.d.ts +2 -2
  196. package/lib/rtp/src/extra/processor/ntpTime.js.map +1 -1
  197. package/lib/rtp/src/extra/processor/ntpTimeCallback.d.ts +1 -1
  198. package/lib/rtp/src/extra/processor/ntpTimeCallback.js.map +1 -1
  199. package/lib/rtp/src/extra/processor/rtcpCallback.d.ts +2 -2
  200. package/lib/rtp/src/extra/processor/rtcpCallback.js.map +1 -1
  201. package/lib/rtp/src/extra/processor/rtpCallback.d.ts +1 -2
  202. package/lib/rtp/src/extra/processor/rtpCallback.js.map +1 -1
  203. package/lib/rtp/src/extra/processor/rtpStream.d.ts +2 -4
  204. package/lib/rtp/src/extra/processor/rtpStream.js.map +1 -1
  205. package/lib/rtp/src/extra/processor/rtpTime.d.ts +2 -2
  206. package/lib/rtp/src/extra/processor/rtpTime.js.map +1 -1
  207. package/lib/rtp/src/extra/processor/rtpTimeCallback.d.ts +1 -1
  208. package/lib/rtp/src/extra/processor/rtpTimeCallback.js.map +1 -1
  209. package/lib/rtp/src/extra/processor/webm.d.ts +2 -3
  210. package/lib/rtp/src/extra/processor/webm.js +2 -2
  211. package/lib/rtp/src/extra/processor/webm.js.map +1 -1
  212. package/lib/rtp/src/extra/processor/webmCallback.d.ts +2 -2
  213. package/lib/rtp/src/extra/processor/webmCallback.js.map +1 -1
  214. package/lib/rtp/src/extra/processor/webmStream.d.ts +2 -3
  215. package/lib/rtp/src/extra/processor/webmStream.js.map +1 -1
  216. package/lib/rtp/src/helper.d.ts +0 -1
  217. package/lib/rtp/src/helper.js +6 -6
  218. package/lib/rtp/src/helper.js.map +1 -1
  219. package/lib/rtp/src/index.d.ts +0 -1
  220. package/lib/rtp/src/rtcp/header.d.ts +0 -1
  221. package/lib/rtp/src/rtcp/psfb/fullIntraRequest.d.ts +0 -1
  222. package/lib/rtp/src/rtcp/psfb/index.d.ts +1 -2
  223. package/lib/rtp/src/rtcp/psfb/index.js.map +1 -1
  224. package/lib/rtp/src/rtcp/psfb/pictureLossIndication.d.ts +0 -1
  225. package/lib/rtp/src/rtcp/psfb/remb.d.ts +0 -1
  226. package/lib/rtp/src/rtcp/rr.d.ts +0 -1
  227. package/lib/rtp/src/rtcp/rtcp.d.ts +0 -1
  228. package/lib/rtp/src/rtcp/rtcp.js +2 -2
  229. package/lib/rtp/src/rtcp/rtcp.js.map +1 -1
  230. package/lib/rtp/src/rtcp/rtpfb/index.d.ts +1 -2
  231. package/lib/rtp/src/rtcp/rtpfb/index.js.map +1 -1
  232. package/lib/rtp/src/rtcp/rtpfb/nack.d.ts +0 -1
  233. package/lib/rtp/src/rtcp/rtpfb/twcc.d.ts +0 -1
  234. package/lib/rtp/src/rtcp/rtpfb/twcc.js +1 -2
  235. package/lib/rtp/src/rtcp/rtpfb/twcc.js.map +1 -1
  236. package/lib/rtp/src/rtcp/sdes.d.ts +1 -2
  237. package/lib/rtp/src/rtcp/sdes.js.map +1 -1
  238. package/lib/rtp/src/rtcp/sr.d.ts +0 -1
  239. package/lib/rtp/src/rtp/headerExtension.d.ts +1 -2
  240. package/lib/rtp/src/rtp/headerExtension.js +12 -12
  241. package/lib/rtp/src/rtp/headerExtension.js.map +1 -1
  242. package/lib/rtp/src/rtp/red/encoder.d.ts +0 -1
  243. package/lib/rtp/src/rtp/red/handler.d.ts +1 -1
  244. package/lib/rtp/src/rtp/red/handler.js.map +1 -1
  245. package/lib/rtp/src/rtp/red/packet.d.ts +0 -1
  246. package/lib/rtp/src/rtp/rtp.d.ts +0 -1
  247. package/lib/rtp/src/rtp/rtp.js.map +1 -1
  248. package/lib/rtp/src/rtp/rtx.js +2 -3
  249. package/lib/rtp/src/rtp/rtx.js.map +1 -1
  250. package/lib/rtp/src/srtp/cipher/ctr.d.ts +0 -1
  251. package/lib/rtp/src/srtp/cipher/gcm.d.ts +0 -1
  252. package/lib/rtp/src/srtp/cipher/index.d.ts +2 -3
  253. package/lib/rtp/src/srtp/cipher/index.js.map +1 -1
  254. package/lib/rtp/src/srtp/context/context.d.ts +3 -5
  255. package/lib/rtp/src/srtp/context/context.js.map +1 -1
  256. package/lib/rtp/src/srtp/context/srtcp.d.ts +2 -3
  257. package/lib/rtp/src/srtp/context/srtcp.js.map +1 -1
  258. package/lib/rtp/src/srtp/context/srtp.d.ts +1 -2
  259. package/lib/rtp/src/srtp/context/srtp.js.map +1 -1
  260. package/lib/rtp/src/srtp/session.d.ts +1 -2
  261. package/lib/rtp/src/srtp/session.js.map +1 -1
  262. package/lib/rtp/src/srtp/srtcp.d.ts +1 -2
  263. package/lib/rtp/src/srtp/srtcp.js.map +1 -1
  264. package/lib/rtp/src/srtp/srtp.d.ts +2 -3
  265. package/lib/rtp/src/srtp/srtp.js.map +1 -1
  266. package/lib/rtp/src/util.d.ts +0 -1
  267. package/lib/sctp/src/chunk.d.ts +0 -1
  268. package/lib/sctp/src/chunk.js +4 -4
  269. package/lib/sctp/src/chunk.js.map +1 -1
  270. package/lib/sctp/src/helper.js +2 -3
  271. package/lib/sctp/src/helper.js.map +1 -1
  272. package/lib/sctp/src/param.d.ts +0 -1
  273. package/lib/sctp/src/param.js.map +1 -1
  274. package/lib/sctp/src/sctp.d.ts +5 -6
  275. package/lib/sctp/src/sctp.js.map +1 -1
  276. package/lib/sctp/src/transport.d.ts +1 -3
  277. package/lib/sctp/src/transport.js.map +1 -1
  278. package/lib/webrtc/src/const.d.ts +1 -1
  279. package/lib/webrtc/src/const.js.map +1 -1
  280. package/lib/webrtc/src/dataChannel.d.ts +2 -3
  281. package/lib/webrtc/src/dataChannel.js.map +1 -1
  282. package/lib/webrtc/src/helper.d.ts +0 -1
  283. package/lib/webrtc/src/helper.js +3 -3
  284. package/lib/webrtc/src/helper.js.map +1 -1
  285. package/lib/webrtc/src/media/extension/rtcpFeedback.d.ts +1 -1
  286. package/lib/webrtc/src/media/extension/rtcpFeedback.js.map +1 -1
  287. package/lib/webrtc/src/media/extension/rtpExtension.js +7 -8
  288. package/lib/webrtc/src/media/extension/rtpExtension.js.map +1 -1
  289. package/lib/webrtc/src/media/parameters.d.ts +1 -1
  290. package/lib/webrtc/src/media/parameters.js.map +1 -1
  291. package/lib/webrtc/src/media/receiver/nack.d.ts +2 -2
  292. package/lib/webrtc/src/media/receiver/nack.js.map +1 -1
  293. package/lib/webrtc/src/media/receiver/receiverTwcc.d.ts +1 -1
  294. package/lib/webrtc/src/media/receiver/receiverTwcc.js.map +1 -1
  295. package/lib/webrtc/src/media/receiver/statistics.d.ts +1 -1
  296. package/lib/webrtc/src/media/receiver/statistics.js.map +1 -1
  297. package/lib/webrtc/src/media/router.d.ts +4 -4
  298. package/lib/webrtc/src/media/router.js.map +1 -1
  299. package/lib/webrtc/src/media/rtpReceiver.d.ts +7 -7
  300. package/lib/webrtc/src/media/rtpReceiver.js.map +1 -1
  301. package/lib/webrtc/src/media/rtpSender.d.ts +5 -6
  302. package/lib/webrtc/src/media/rtpSender.js.map +1 -1
  303. package/lib/webrtc/src/media/rtpTransceiver.d.ts +6 -6
  304. package/lib/webrtc/src/media/rtpTransceiver.js.map +1 -1
  305. package/lib/webrtc/src/media/sender/senderBWE.d.ts +1 -1
  306. package/lib/webrtc/src/media/sender/senderBWE.js.map +1 -1
  307. package/lib/webrtc/src/media/track.d.ts +6 -5
  308. package/lib/webrtc/src/media/track.js +14 -1
  309. package/lib/webrtc/src/media/track.js.map +1 -1
  310. package/lib/webrtc/src/nonstandard/index.d.ts +2 -0
  311. package/lib/webrtc/src/nonstandard/index.js +2 -0
  312. package/lib/webrtc/src/nonstandard/index.js.map +1 -1
  313. package/lib/webrtc/src/nonstandard/navigator.d.ts +73 -0
  314. package/lib/webrtc/src/nonstandard/navigator.js +88 -0
  315. package/lib/webrtc/src/nonstandard/navigator.js.map +1 -0
  316. package/lib/webrtc/src/nonstandard/recorder/index.d.ts +23 -7
  317. package/lib/webrtc/src/nonstandard/recorder/index.js +30 -27
  318. package/lib/webrtc/src/nonstandard/recorder/index.js.map +1 -1
  319. package/lib/webrtc/src/nonstandard/recorder/writer/index.d.ts +17 -5
  320. package/lib/webrtc/src/nonstandard/recorder/writer/index.js +3 -9
  321. package/lib/webrtc/src/nonstandard/recorder/writer/index.js.map +1 -1
  322. package/lib/webrtc/src/nonstandard/recorder/writer/webm.d.ts +1 -1
  323. package/lib/webrtc/src/nonstandard/recorder/writer/webm.js +23 -12
  324. package/lib/webrtc/src/nonstandard/recorder/writer/webm.js.map +1 -1
  325. package/lib/webrtc/src/nonstandard/userMedia.d.ts +4 -5
  326. package/lib/webrtc/src/nonstandard/userMedia.js.map +1 -1
  327. package/lib/webrtc/src/peerConnection.d.ts +10 -10
  328. package/lib/webrtc/src/peerConnection.js +15 -21
  329. package/lib/webrtc/src/peerConnection.js.map +1 -1
  330. package/lib/webrtc/src/sdp.d.ts +4 -4
  331. package/lib/webrtc/src/sdp.js +21 -21
  332. package/lib/webrtc/src/sdp.js.map +1 -1
  333. package/lib/webrtc/src/transport/dtls.d.ts +8 -8
  334. package/lib/webrtc/src/transport/dtls.js +16 -3
  335. package/lib/webrtc/src/transport/dtls.js.map +1 -1
  336. package/lib/webrtc/src/transport/ice.d.ts +1 -1
  337. package/lib/webrtc/src/transport/ice.js +3 -3
  338. package/lib/webrtc/src/transport/ice.js.map +1 -1
  339. package/lib/webrtc/src/transport/sctp.d.ts +1 -2
  340. package/lib/webrtc/src/transport/sctp.js +1 -1
  341. package/lib/webrtc/src/transport/sctp.js.map +1 -1
  342. package/lib/webrtc/src/utils.d.ts +5 -5
  343. package/lib/webrtc/src/utils.js +16 -10
  344. package/lib/webrtc/src/utils.js.map +1 -1
  345. package/package.json +12 -8
  346. package/src/const.ts +1 -1
  347. package/src/dataChannel.ts +2 -2
  348. package/src/media/extension/rtcpFeedback.ts +1 -1
  349. package/src/media/parameters.ts +1 -1
  350. package/src/media/receiver/nack.ts +9 -6
  351. package/src/media/receiver/receiverTwcc.ts +3 -3
  352. package/src/media/receiver/statistics.ts +1 -1
  353. package/src/media/router.ts +45 -39
  354. package/src/media/rtpReceiver.ts +30 -19
  355. package/src/media/rtpSender.ts +84 -71
  356. package/src/media/rtpTransceiver.ts +6 -6
  357. package/src/media/sender/senderBWE.ts +1 -1
  358. package/src/media/track.ts +19 -5
  359. package/src/nonstandard/index.ts +2 -0
  360. package/src/nonstandard/navigator.ts +118 -0
  361. package/src/nonstandard/recorder/index.ts +47 -19
  362. package/src/nonstandard/recorder/writer/index.ts +7 -4
  363. package/src/nonstandard/recorder/writer/webm.ts +25 -14
  364. package/src/nonstandard/userMedia.ts +1 -1
  365. package/src/peerConnection.ts +43 -51
  366. package/src/sdp.ts +108 -94
  367. package/src/transport/dtls.ts +28 -14
  368. package/src/transport/ice.ts +1 -1
  369. package/src/transport/sctp.ts +75 -67
  370. package/src/utils.ts +13 -6
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import { RtcpHeader } from "../header";
3
2
  export declare class GenericNack {
4
3
  static count: number;
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import { RtcpHeader } from "../header";
3
2
  export declare class TransportWideCC {
4
3
  static count: number;
@@ -231,8 +231,7 @@ class TransportWideCC {
231
231
  const currentSequenceNumber = this.baseSequenceNumber - 1;
232
232
  const results = this.packetChunks
233
233
  .filter((v) => v instanceof RunLengthChunk)
234
- .map((chunk) => chunk.results(currentSequenceNumber))
235
- .flatMap((v) => v);
234
+ .flatMap((chunk) => chunk.results(currentSequenceNumber));
236
235
  let deltaIdx = 0;
237
236
  const referenceTime = BigInt(this.referenceTime) * 64n;
238
237
  let currentReceivedAtMs = referenceTime;
@@ -1 +1 @@
1
- {"version":3,"file":"twcc.js","sourceRoot":"","sources":["../../../../../../rtp/src/rtcp/rtpfb/twcc.ts"],"names":[],"mappings":"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","sourcesContent":["import debug from \"debug\";\n\nimport {\n BitWriter2,\n bufferReader,\n bufferWriter,\n getBit,\n} from \"../../../../common/src\";\nimport { RtcpHeader } from \"../header\";\n\nconst log = debug(\"werift/rtp/rtcp/rtpfb/twcc\");\n\n/* RTP Extensions for Transport-wide Congestion Control\n * draft-holmer-rmcat-transport-wide-cc-extensions-01\n\n 0 1 2 3\n 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7\n +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n |V=2|P| FMT=15 | PT=205 | length |\n +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n | SSRC of packet sender |\n +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n | SSRC of media source |\n +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n | base sequence number | packet status count |\n +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n | reference time | fb pkt. count |\n +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n | packet chunk | packet chunk |\n +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n . .\n . .\n +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n | packet chunk | recv delta | recv delta |\n +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n . .\n . .\n +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n | recv delta | recv delta | zero padding |\n +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n */\n\nexport class TransportWideCC {\n static count = 15;\n count = TransportWideCC.count;\n length = 2;\n\n senderSsrc!: number;\n mediaSourceSsrc!: number;\n baseSequenceNumber!: number;\n packetStatusCount!: number;\n /** 24bit multiples of 64ms */\n referenceTime!: number;\n fbPktCount!: number;\n packetChunks: (RunLengthChunk | StatusVectorChunk)[] = [];\n recvDeltas: RecvDelta[] = [];\n header!: RtcpHeader;\n\n constructor(props: Partial<TransportWideCC> = {}) {\n Object.assign(this, props);\n if (!this.header) {\n this.header = new RtcpHeader({\n type: 205,\n count: this.count,\n version: 2,\n });\n }\n }\n\n static deSerialize(data: Buffer, header: RtcpHeader) {\n const [\n senderSsrc,\n mediaSsrc,\n baseSequenceNumber,\n packetStatusCount,\n referenceTime,\n fbPktCount,\n ] = bufferReader(data, [4, 4, 2, 2, 3, 1]);\n const packetChunks: (RunLengthChunk | StatusVectorChunk)[] = [];\n const recvDeltas: RecvDelta[] = [];\n\n let packetStatusPos = 16;\n for (let processedPacketNum = 0; processedPacketNum < packetStatusCount; ) {\n const type = getBit(\n data.slice(packetStatusPos, packetStatusPos + 1)[0],\n 0,\n 1,\n );\n let iPacketStatus: RunLengthChunk | StatusVectorChunk | undefined;\n switch (type) {\n case PacketChunk.TypeTCCRunLengthChunk: {\n const packetStatus = RunLengthChunk.deSerialize(\n data.slice(packetStatusPos, packetStatusPos + 2),\n );\n iPacketStatus = packetStatus;\n const packetNumberToProcess = Math.min(\n packetStatusCount - processedPacketNum,\n packetStatus.runLength,\n );\n if (\n packetStatus.packetStatus ===\n PacketStatus.TypeTCCPacketReceivedSmallDelta ||\n packetStatus.packetStatus ===\n PacketStatus.TypeTCCPacketReceivedLargeDelta\n ) {\n for (let _ = 0; _ < packetNumberToProcess; _++) {\n recvDeltas.push(\n new RecvDelta({ type: packetStatus.packetStatus as any }),\n );\n }\n }\n processedPacketNum += packetNumberToProcess;\n }\n break;\n case PacketChunk.TypeTCCStatusVectorChunk: {\n const packetStatus = StatusVectorChunk.deSerialize(\n data.slice(packetStatusPos, packetStatusPos + 2),\n );\n iPacketStatus = packetStatus;\n if (packetStatus.symbolSize === 0) {\n packetStatus.symbolList.forEach((v) => {\n if (v === PacketStatus.TypeTCCPacketReceivedSmallDelta) {\n recvDeltas.push(\n new RecvDelta({\n type: PacketStatus.TypeTCCPacketReceivedSmallDelta,\n }),\n );\n }\n });\n }\n if (packetStatus.symbolSize === 1) {\n packetStatus.symbolList.forEach((v) => {\n if (\n v === PacketStatus.TypeTCCPacketReceivedSmallDelta ||\n v === PacketStatus.TypeTCCPacketReceivedLargeDelta\n ) {\n recvDeltas.push(\n new RecvDelta({\n type: v,\n }),\n );\n }\n });\n }\n processedPacketNum += packetStatus.symbolList.length;\n }\n break;\n }\n if (!iPacketStatus) throw new Error();\n packetStatusPos += 2;\n packetChunks.push(iPacketStatus);\n }\n\n let recvDeltaPos = packetStatusPos;\n recvDeltas.forEach((delta) => {\n if (delta.type === PacketStatus.TypeTCCPacketReceivedSmallDelta) {\n delta.deSerialize(data.slice(recvDeltaPos, recvDeltaPos + 1));\n recvDeltaPos++;\n }\n if (delta.type === PacketStatus.TypeTCCPacketReceivedLargeDelta) {\n delta.deSerialize(data.slice(recvDeltaPos, recvDeltaPos + 2));\n recvDeltaPos += 2;\n }\n });\n\n return new TransportWideCC({\n senderSsrc,\n mediaSourceSsrc: mediaSsrc,\n baseSequenceNumber,\n packetStatusCount,\n referenceTime,\n fbPktCount,\n recvDeltas,\n packetChunks,\n header,\n });\n }\n\n serialize() {\n const constBuf = bufferWriter(\n [4, 4, 2, 2, 3, 1],\n [\n this.senderSsrc,\n this.mediaSourceSsrc,\n this.baseSequenceNumber,\n this.packetStatusCount,\n this.referenceTime,\n this.fbPktCount,\n ],\n );\n\n const chunks = Buffer.concat(\n this.packetChunks.map((chunk) => chunk.serialize()),\n );\n\n const deltas = Buffer.concat(\n this.recvDeltas\n .map((delta) => {\n try {\n return delta.serialize();\n } catch (error: any) {\n log(error?.message);\n return undefined;\n }\n })\n .filter((v) => v) as Buffer[],\n );\n\n const buf = Buffer.concat([constBuf, chunks, deltas]);\n\n if (this.header.padding && buf.length % 4 !== 0) {\n const rest = 4 - (buf.length % 4);\n const padding = Buffer.alloc(rest);\n padding[padding.length - 1] = padding.length;\n\n this.header.length = Math.floor((buf.length + padding.length) / 4);\n return Buffer.concat([this.header.serialize(), buf, padding]);\n }\n\n this.header.length = Math.floor(buf.length / 4);\n return Buffer.concat([this.header.serialize(), buf]);\n }\n\n get packetResults(): PacketResult[] {\n const currentSequenceNumber = this.baseSequenceNumber - 1;\n const results = this.packetChunks\n .filter((v) => v instanceof RunLengthChunk)\n .map((chunk) => (chunk as RunLengthChunk).results(currentSequenceNumber))\n .flatMap((v) => v);\n\n let deltaIdx = 0;\n const referenceTime = BigInt(this.referenceTime) * 64n;\n let currentReceivedAtMs = referenceTime;\n\n for (const result of results) {\n const recvDelta = this.recvDeltas[deltaIdx];\n if (!result.received || !recvDelta) {\n continue;\n }\n currentReceivedAtMs += BigInt(recvDelta.delta) / 1000n;\n result.delta = recvDelta.delta;\n result.receivedAtMs = Number(currentReceivedAtMs);\n deltaIdx++;\n }\n return results;\n }\n}\n\n// 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// |T| S | Run Length |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\nexport class RunLengthChunk {\n type!: PacketChunk.TypeTCCRunLengthChunk;\n packetStatus!: PacketStatus;\n /** 13bit */\n runLength!: number;\n\n constructor(props: Partial<RunLengthChunk> = {}) {\n Object.assign(this, props);\n this.type = PacketChunk.TypeTCCRunLengthChunk;\n }\n\n static deSerialize(data: Buffer) {\n const packetStatus = getBit(data[0], 1, 2);\n const runLength = (getBit(data[0], 3, 5) << 8) + data[1];\n\n return new RunLengthChunk({ type: 0, packetStatus, runLength });\n }\n\n serialize() {\n const buf = new BitWriter2(16)\n .set(0)\n .set(this.packetStatus, 2)\n .set(this.runLength, 13).buffer;\n\n return buf;\n }\n\n results(currentSequenceNumber: number) {\n const received =\n this.packetStatus === PacketStatus.TypeTCCPacketReceivedSmallDelta ||\n this.packetStatus === PacketStatus.TypeTCCPacketReceivedLargeDelta;\n\n const results: PacketResult[] = [];\n for (let i = 0; i <= this.runLength; ++i) {\n results.push(\n new PacketResult({ sequenceNumber: ++currentSequenceNumber, received }),\n );\n }\n return results;\n }\n}\n\n// 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// |T|S| symbol list |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\nexport class StatusVectorChunk {\n type!: number;\n symbolSize!: number;\n symbolList: number[] = [];\n\n constructor(props: Partial<StatusVectorChunk> = {}) {\n Object.assign(this, props);\n }\n\n static deSerialize(data: Buffer) {\n const type = PacketChunk.TypeTCCStatusVectorChunk;\n let symbolSize = getBit(data[0], 1, 1);\n const symbolList: number[] = [];\n\n function range(n: number, cb: (i: number) => void) {\n for (let i = 0; i < n; i++) {\n cb(i);\n }\n }\n\n switch (symbolSize) {\n case 0:\n range(6, (i) => symbolList.push(getBit(data[0], 2 + i, 1)));\n range(8, (i) => symbolList.push(getBit(data[1], i, 1)));\n break;\n case 1:\n range(3, (i) => symbolList.push(getBit(data[0], 2 + i * 2, 2)));\n range(4, (i) => symbolList.push(getBit(data[1], i * 2, 2)));\n break;\n default:\n symbolSize = (getBit(data[0], 2, 6) << 8) + data[1];\n }\n\n return new StatusVectorChunk({ type, symbolSize, symbolList });\n }\n\n serialize() {\n const buf = Buffer.alloc(2);\n\n const writer = new BitWriter2(16).set(1).set(this.symbolSize);\n const bits = this.symbolSize === 0 ? 1 : 2;\n\n this.symbolList.forEach((v) => {\n writer.set(v, bits);\n });\n buf.writeUInt16BE(writer.value);\n return buf;\n }\n}\n\nexport class RecvDelta {\n /**optional (If undefined, it will be set automatically.)*/\n type?:\n | PacketStatus.TypeTCCPacketReceivedSmallDelta\n | PacketStatus.TypeTCCPacketReceivedLargeDelta;\n /**micro sec */\n delta!: number;\n\n constructor(props: Partial<RecvDelta> = {}) {\n Object.assign(this, props);\n }\n\n static deSerialize(data: Buffer) {\n let type: number | undefined;\n let delta: number | undefined;\n\n if (data.length === 1) {\n type = PacketStatus.TypeTCCPacketReceivedSmallDelta;\n delta = 250 * data[0];\n } else if (data.length === 2) {\n type = PacketStatus.TypeTCCPacketReceivedLargeDelta;\n delta = 250 * data.readInt16BE();\n }\n\n if (type === undefined || delta === undefined) throw new Error();\n\n return new RecvDelta({ type, delta });\n }\n\n deSerialize(data: Buffer) {\n const res = RecvDelta.deSerialize(data);\n this.delta = res.delta;\n }\n\n parsed = false; // todo refactor\n parseDelta() {\n this.delta = Math.floor(this.delta / 250);\n\n if (this.delta < 0 || this.delta > 255) {\n if (this.delta > 32767) this.delta = 32767; // maxInt16\n if (this.delta < -32768) this.delta = -32768; // minInt16\n if (!this.type) this.type = PacketStatus.TypeTCCPacketReceivedLargeDelta;\n } else {\n if (!this.type) this.type = PacketStatus.TypeTCCPacketReceivedSmallDelta;\n }\n this.parsed = true;\n }\n\n serialize() {\n if (!this.parsed) this.parseDelta();\n if (this.type === PacketStatus.TypeTCCPacketReceivedSmallDelta) {\n const buf = Buffer.alloc(1);\n buf.writeUInt8(this.delta);\n return buf;\n } else if (this.type === PacketStatus.TypeTCCPacketReceivedLargeDelta) {\n const buf = Buffer.alloc(2);\n buf.writeInt16BE(this.delta);\n return buf;\n }\n\n throw new Error(\"errDeltaExceedLimit \" + this.delta + \" \" + this.type);\n }\n}\n\nexport enum PacketChunk {\n TypeTCCRunLengthChunk = 0,\n TypeTCCStatusVectorChunk = 1,\n packetStatusChunkLength = 2,\n}\n\nexport enum PacketStatus {\n TypeTCCPacketNotReceived = 0,\n TypeTCCPacketReceivedSmallDelta = 1,\n TypeTCCPacketReceivedLargeDelta = 2,\n TypeTCCPacketReceivedWithoutDelta = 3,\n}\n\nexport class PacketResult {\n sequenceNumber = 0;\n delta = 0;\n received = false;\n receivedAtMs = 0;\n constructor(props: Partial<PacketResult>) {\n Object.assign(this, props);\n }\n}\n"]}
1
+ {"version":3,"file":"twcc.js","sourceRoot":"","sources":["../../../../../../rtp/src/rtcp/rtpfb/twcc.ts"],"names":[],"mappings":"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","sourcesContent":["import debug from \"debug\";\n\nimport {\n BitWriter2,\n bufferReader,\n bufferWriter,\n getBit,\n} from \"../../../../common/src\";\nimport { RtcpHeader } from \"../header\";\n\nconst log = debug(\"werift/rtp/rtcp/rtpfb/twcc\");\n\n/* RTP Extensions for Transport-wide Congestion Control\n * draft-holmer-rmcat-transport-wide-cc-extensions-01\n\n 0 1 2 3\n 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7\n +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n |V=2|P| FMT=15 | PT=205 | length |\n +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n | SSRC of packet sender |\n +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n | SSRC of media source |\n +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n | base sequence number | packet status count |\n +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n | reference time | fb pkt. count |\n +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n | packet chunk | packet chunk |\n +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n . .\n . .\n +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n | packet chunk | recv delta | recv delta |\n +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n . .\n . .\n +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n | recv delta | recv delta | zero padding |\n +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n */\n\nexport class TransportWideCC {\n static count = 15;\n count = TransportWideCC.count;\n length = 2;\n\n senderSsrc!: number;\n mediaSourceSsrc!: number;\n baseSequenceNumber!: number;\n packetStatusCount!: number;\n /** 24bit multiples of 64ms */\n referenceTime!: number;\n fbPktCount!: number;\n packetChunks: (RunLengthChunk | StatusVectorChunk)[] = [];\n recvDeltas: RecvDelta[] = [];\n header!: RtcpHeader;\n\n constructor(props: Partial<TransportWideCC> = {}) {\n Object.assign(this, props);\n if (!this.header) {\n this.header = new RtcpHeader({\n type: 205,\n count: this.count,\n version: 2,\n });\n }\n }\n\n static deSerialize(data: Buffer, header: RtcpHeader) {\n const [\n senderSsrc,\n mediaSsrc,\n baseSequenceNumber,\n packetStatusCount,\n referenceTime,\n fbPktCount,\n ] = bufferReader(data, [4, 4, 2, 2, 3, 1]);\n const packetChunks: (RunLengthChunk | StatusVectorChunk)[] = [];\n const recvDeltas: RecvDelta[] = [];\n\n let packetStatusPos = 16;\n for (let processedPacketNum = 0; processedPacketNum < packetStatusCount; ) {\n const type = getBit(\n data.slice(packetStatusPos, packetStatusPos + 1)[0],\n 0,\n 1,\n );\n let iPacketStatus: RunLengthChunk | StatusVectorChunk | undefined;\n switch (type) {\n case PacketChunk.TypeTCCRunLengthChunk:\n {\n const packetStatus = RunLengthChunk.deSerialize(\n data.slice(packetStatusPos, packetStatusPos + 2),\n );\n iPacketStatus = packetStatus;\n const packetNumberToProcess = Math.min(\n packetStatusCount - processedPacketNum,\n packetStatus.runLength,\n );\n if (\n packetStatus.packetStatus ===\n PacketStatus.TypeTCCPacketReceivedSmallDelta ||\n packetStatus.packetStatus ===\n PacketStatus.TypeTCCPacketReceivedLargeDelta\n ) {\n for (let _ = 0; _ < packetNumberToProcess; _++) {\n recvDeltas.push(\n new RecvDelta({ type: packetStatus.packetStatus as any }),\n );\n }\n }\n processedPacketNum += packetNumberToProcess;\n }\n break;\n case PacketChunk.TypeTCCStatusVectorChunk:\n {\n const packetStatus = StatusVectorChunk.deSerialize(\n data.slice(packetStatusPos, packetStatusPos + 2),\n );\n iPacketStatus = packetStatus;\n if (packetStatus.symbolSize === 0) {\n packetStatus.symbolList.forEach((v) => {\n if (v === PacketStatus.TypeTCCPacketReceivedSmallDelta) {\n recvDeltas.push(\n new RecvDelta({\n type: PacketStatus.TypeTCCPacketReceivedSmallDelta,\n }),\n );\n }\n });\n }\n if (packetStatus.symbolSize === 1) {\n packetStatus.symbolList.forEach((v) => {\n if (\n v === PacketStatus.TypeTCCPacketReceivedSmallDelta ||\n v === PacketStatus.TypeTCCPacketReceivedLargeDelta\n ) {\n recvDeltas.push(\n new RecvDelta({\n type: v,\n }),\n );\n }\n });\n }\n processedPacketNum += packetStatus.symbolList.length;\n }\n break;\n }\n if (!iPacketStatus) throw new Error();\n packetStatusPos += 2;\n packetChunks.push(iPacketStatus);\n }\n\n let recvDeltaPos = packetStatusPos;\n recvDeltas.forEach((delta) => {\n if (delta.type === PacketStatus.TypeTCCPacketReceivedSmallDelta) {\n delta.deSerialize(data.slice(recvDeltaPos, recvDeltaPos + 1));\n recvDeltaPos++;\n }\n if (delta.type === PacketStatus.TypeTCCPacketReceivedLargeDelta) {\n delta.deSerialize(data.slice(recvDeltaPos, recvDeltaPos + 2));\n recvDeltaPos += 2;\n }\n });\n\n return new TransportWideCC({\n senderSsrc,\n mediaSourceSsrc: mediaSsrc,\n baseSequenceNumber,\n packetStatusCount,\n referenceTime,\n fbPktCount,\n recvDeltas,\n packetChunks,\n header,\n });\n }\n\n serialize() {\n const constBuf = bufferWriter(\n [4, 4, 2, 2, 3, 1],\n [\n this.senderSsrc,\n this.mediaSourceSsrc,\n this.baseSequenceNumber,\n this.packetStatusCount,\n this.referenceTime,\n this.fbPktCount,\n ],\n );\n\n const chunks = Buffer.concat(\n this.packetChunks.map((chunk) => chunk.serialize()),\n );\n\n const deltas = Buffer.concat(\n this.recvDeltas\n .map((delta) => {\n try {\n return delta.serialize();\n } catch (error: any) {\n log(error?.message);\n return undefined;\n }\n })\n .filter((v) => v) as Buffer[],\n );\n\n const buf = Buffer.concat([constBuf, chunks, deltas]);\n\n if (this.header.padding && buf.length % 4 !== 0) {\n const rest = 4 - (buf.length % 4);\n const padding = Buffer.alloc(rest);\n padding[padding.length - 1] = padding.length;\n\n this.header.length = Math.floor((buf.length + padding.length) / 4);\n return Buffer.concat([this.header.serialize(), buf, padding]);\n }\n\n this.header.length = Math.floor(buf.length / 4);\n return Buffer.concat([this.header.serialize(), buf]);\n }\n\n get packetResults(): PacketResult[] {\n const currentSequenceNumber = this.baseSequenceNumber - 1;\n const results = this.packetChunks\n .filter((v) => v instanceof RunLengthChunk)\n .flatMap((chunk) =>\n (chunk as RunLengthChunk).results(currentSequenceNumber),\n );\n\n let deltaIdx = 0;\n const referenceTime = BigInt(this.referenceTime) * 64n;\n let currentReceivedAtMs = referenceTime;\n\n for (const result of results) {\n const recvDelta = this.recvDeltas[deltaIdx];\n if (!result.received || !recvDelta) {\n continue;\n }\n currentReceivedAtMs += BigInt(recvDelta.delta) / 1000n;\n result.delta = recvDelta.delta;\n result.receivedAtMs = Number(currentReceivedAtMs);\n deltaIdx++;\n }\n return results;\n }\n}\n\n// 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// |T| S | Run Length |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\nexport class RunLengthChunk {\n type!: PacketChunk.TypeTCCRunLengthChunk;\n packetStatus!: PacketStatus;\n /** 13bit */\n runLength!: number;\n\n constructor(props: Partial<RunLengthChunk> = {}) {\n Object.assign(this, props);\n this.type = PacketChunk.TypeTCCRunLengthChunk;\n }\n\n static deSerialize(data: Buffer) {\n const packetStatus = getBit(data[0], 1, 2);\n const runLength = (getBit(data[0], 3, 5) << 8) + data[1];\n\n return new RunLengthChunk({ type: 0, packetStatus, runLength });\n }\n\n serialize() {\n const buf = new BitWriter2(16)\n .set(0)\n .set(this.packetStatus, 2)\n .set(this.runLength, 13).buffer;\n\n return buf;\n }\n\n results(currentSequenceNumber: number) {\n const received =\n this.packetStatus === PacketStatus.TypeTCCPacketReceivedSmallDelta ||\n this.packetStatus === PacketStatus.TypeTCCPacketReceivedLargeDelta;\n\n const results: PacketResult[] = [];\n for (let i = 0; i <= this.runLength; ++i) {\n results.push(\n new PacketResult({ sequenceNumber: ++currentSequenceNumber, received }),\n );\n }\n return results;\n }\n}\n\n// 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// |T|S| symbol list |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\nexport class StatusVectorChunk {\n type!: number;\n symbolSize!: number;\n symbolList: number[] = [];\n\n constructor(props: Partial<StatusVectorChunk> = {}) {\n Object.assign(this, props);\n }\n\n static deSerialize(data: Buffer) {\n const type = PacketChunk.TypeTCCStatusVectorChunk;\n let symbolSize = getBit(data[0], 1, 1);\n const symbolList: number[] = [];\n\n function range(n: number, cb: (i: number) => void) {\n for (let i = 0; i < n; i++) {\n cb(i);\n }\n }\n\n switch (symbolSize) {\n case 0:\n range(6, (i) => symbolList.push(getBit(data[0], 2 + i, 1)));\n range(8, (i) => symbolList.push(getBit(data[1], i, 1)));\n break;\n case 1:\n range(3, (i) => symbolList.push(getBit(data[0], 2 + i * 2, 2)));\n range(4, (i) => symbolList.push(getBit(data[1], i * 2, 2)));\n break;\n default:\n symbolSize = (getBit(data[0], 2, 6) << 8) + data[1];\n }\n\n return new StatusVectorChunk({ type, symbolSize, symbolList });\n }\n\n serialize() {\n const buf = Buffer.alloc(2);\n\n const writer = new BitWriter2(16).set(1).set(this.symbolSize);\n const bits = this.symbolSize === 0 ? 1 : 2;\n\n this.symbolList.forEach((v) => {\n writer.set(v, bits);\n });\n buf.writeUInt16BE(writer.value);\n return buf;\n }\n}\n\nexport class RecvDelta {\n /**optional (If undefined, it will be set automatically.)*/\n type?:\n | PacketStatus.TypeTCCPacketReceivedSmallDelta\n | PacketStatus.TypeTCCPacketReceivedLargeDelta;\n /**micro sec */\n delta!: number;\n\n constructor(props: Partial<RecvDelta> = {}) {\n Object.assign(this, props);\n }\n\n static deSerialize(data: Buffer) {\n let type: number | undefined;\n let delta: number | undefined;\n\n if (data.length === 1) {\n type = PacketStatus.TypeTCCPacketReceivedSmallDelta;\n delta = 250 * data[0];\n } else if (data.length === 2) {\n type = PacketStatus.TypeTCCPacketReceivedLargeDelta;\n delta = 250 * data.readInt16BE();\n }\n\n if (type === undefined || delta === undefined) throw new Error();\n\n return new RecvDelta({ type, delta });\n }\n\n deSerialize(data: Buffer) {\n const res = RecvDelta.deSerialize(data);\n this.delta = res.delta;\n }\n\n parsed = false; // todo refactor\n parseDelta() {\n this.delta = Math.floor(this.delta / 250);\n\n if (this.delta < 0 || this.delta > 255) {\n if (this.delta > 32767) this.delta = 32767; // maxInt16\n if (this.delta < -32768) this.delta = -32768; // minInt16\n if (!this.type) this.type = PacketStatus.TypeTCCPacketReceivedLargeDelta;\n } else {\n if (!this.type) this.type = PacketStatus.TypeTCCPacketReceivedSmallDelta;\n }\n this.parsed = true;\n }\n\n serialize() {\n if (!this.parsed) this.parseDelta();\n if (this.type === PacketStatus.TypeTCCPacketReceivedSmallDelta) {\n const buf = Buffer.alloc(1);\n buf.writeUInt8(this.delta);\n return buf;\n } else if (this.type === PacketStatus.TypeTCCPacketReceivedLargeDelta) {\n const buf = Buffer.alloc(2);\n buf.writeInt16BE(this.delta);\n return buf;\n }\n\n throw new Error(\"errDeltaExceedLimit \" + this.delta + \" \" + this.type);\n }\n}\n\nexport enum PacketChunk {\n TypeTCCRunLengthChunk = 0,\n TypeTCCStatusVectorChunk = 1,\n packetStatusChunkLength = 2,\n}\n\nexport enum PacketStatus {\n TypeTCCPacketNotReceived = 0,\n TypeTCCPacketReceivedSmallDelta = 1,\n TypeTCCPacketReceivedLargeDelta = 2,\n TypeTCCPacketReceivedWithoutDelta = 3,\n}\n\nexport class PacketResult {\n sequenceNumber = 0;\n delta = 0;\n received = false;\n receivedAtMs = 0;\n constructor(props: Partial<PacketResult>) {\n Object.assign(this, props);\n }\n}\n"]}
@@ -1,5 +1,4 @@
1
- /// <reference types="node" />
2
- import { RtcpHeader } from "./header";
1
+ import type { RtcpHeader } from "./header";
3
2
  export declare class RtcpSourceDescriptionPacket {
4
3
  static readonly type = 202;
5
4
  readonly type = 202;
@@ -1 +1 @@
1
- {"version":3,"file":"sdes.js","sourceRoot":"","sources":["../../../../../rtp/src/rtcp/sdes.ts"],"names":[],"mappings":"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","sourcesContent":["import { bufferWriter } from \"../../../common/src\";\nimport { RtcpHeader } from \"./header\";\nimport { RtcpPacketConverter } from \"./rtcp\";\n\nexport class RtcpSourceDescriptionPacket {\n static readonly type = 202;\n readonly type = RtcpSourceDescriptionPacket.type;\n chunks: SourceDescriptionChunk[] = [];\n\n constructor(props: Partial<RtcpSourceDescriptionPacket>) {\n Object.assign(this, props);\n }\n\n get length() {\n let length = 0;\n this.chunks.forEach((chunk) => (length += chunk.length));\n return length;\n }\n\n serialize() {\n let payload = Buffer.concat(this.chunks.map((chunk) => chunk.serialize()));\n while (payload.length % 4)\n payload = Buffer.concat([payload, Buffer.from([0])]);\n return RtcpPacketConverter.serialize(\n this.type,\n this.chunks.length,\n payload,\n payload.length / 4,\n );\n }\n\n static deSerialize(payload: Buffer, header: RtcpHeader) {\n const chunks: SourceDescriptionChunk[] = [];\n for (let i = 0; i < payload.length; ) {\n const chunk = SourceDescriptionChunk.deSerialize(payload.slice(i));\n chunks.push(chunk);\n i += chunk.length;\n }\n\n return new RtcpSourceDescriptionPacket({ chunks });\n }\n}\n\nexport class SourceDescriptionChunk {\n source!: number;\n items: SourceDescriptionItem[] = [];\n\n constructor(props: Partial<SourceDescriptionChunk> = {}) {\n Object.assign(this, props);\n }\n\n get length() {\n let length = 4;\n this.items.forEach((item) => (length += item.length));\n length += 1;\n length += getPadding(length);\n return length;\n }\n\n serialize() {\n const data = Buffer.concat([\n bufferWriter([4], [this.source]),\n Buffer.concat(this.items.map((item) => item.serialize())),\n ]);\n\n const res = Buffer.concat([data, Buffer.alloc(getPadding(data.length))]);\n return res;\n }\n\n static deSerialize(data: Buffer) {\n const source = data.readUInt32BE();\n const items: SourceDescriptionItem[] = [];\n for (let i = 4; i < data.length; ) {\n const type = data[i];\n if (type === 0) break;\n\n const item = SourceDescriptionItem.deSerialize(data.slice(i));\n items.push(item);\n i += item.length;\n }\n\n return new SourceDescriptionChunk({ source, items });\n }\n}\n\nexport class SourceDescriptionItem {\n type!: number;\n text!: string;\n\n constructor(props: Partial<SourceDescriptionItem>) {\n Object.assign(this, props);\n }\n\n get length() {\n return 1 + 1 + Buffer.from(this.text).length;\n }\n\n serialize() {\n const text = Buffer.from(this.text);\n return Buffer.concat([\n bufferWriter([1, 1], [this.type, text.length]),\n text,\n ]);\n }\n\n static deSerialize(data: Buffer) {\n const type = data[0];\n const octetCount = data[1];\n const text = data.slice(2, 2 + octetCount).toString();\n return new SourceDescriptionItem({ type, text });\n }\n}\n\nfunction getPadding(len: number) {\n if (len % 4 == 0) {\n return 0;\n }\n return 4 - (len % 4);\n}\n"]}
1
+ {"version":3,"file":"sdes.js","sourceRoot":"","sources":["../../../../../rtp/src/rtcp/sdes.ts"],"names":[],"mappings":"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","sourcesContent":["import { bufferWriter } from \"../../../common/src\";\nimport type { RtcpHeader } from \"./header\";\nimport { RtcpPacketConverter } from \"./rtcp\";\n\nexport class RtcpSourceDescriptionPacket {\n static readonly type = 202;\n readonly type = RtcpSourceDescriptionPacket.type;\n chunks: SourceDescriptionChunk[] = [];\n\n constructor(props: Partial<RtcpSourceDescriptionPacket>) {\n Object.assign(this, props);\n }\n\n get length() {\n let length = 0;\n this.chunks.forEach((chunk) => (length += chunk.length));\n return length;\n }\n\n serialize() {\n let payload = Buffer.concat(this.chunks.map((chunk) => chunk.serialize()));\n while (payload.length % 4)\n payload = Buffer.concat([payload, Buffer.from([0])]);\n return RtcpPacketConverter.serialize(\n this.type,\n this.chunks.length,\n payload,\n payload.length / 4,\n );\n }\n\n static deSerialize(payload: Buffer, header: RtcpHeader) {\n const chunks: SourceDescriptionChunk[] = [];\n for (let i = 0; i < payload.length; ) {\n const chunk = SourceDescriptionChunk.deSerialize(payload.slice(i));\n chunks.push(chunk);\n i += chunk.length;\n }\n\n return new RtcpSourceDescriptionPacket({ chunks });\n }\n}\n\nexport class SourceDescriptionChunk {\n source!: number;\n items: SourceDescriptionItem[] = [];\n\n constructor(props: Partial<SourceDescriptionChunk> = {}) {\n Object.assign(this, props);\n }\n\n get length() {\n let length = 4;\n this.items.forEach((item) => (length += item.length));\n length += 1;\n length += getPadding(length);\n return length;\n }\n\n serialize() {\n const data = Buffer.concat([\n bufferWriter([4], [this.source]),\n Buffer.concat(this.items.map((item) => item.serialize())),\n ]);\n\n const res = Buffer.concat([data, Buffer.alloc(getPadding(data.length))]);\n return res;\n }\n\n static deSerialize(data: Buffer) {\n const source = data.readUInt32BE();\n const items: SourceDescriptionItem[] = [];\n for (let i = 4; i < data.length; ) {\n const type = data[i];\n if (type === 0) break;\n\n const item = SourceDescriptionItem.deSerialize(data.slice(i));\n items.push(item);\n i += item.length;\n }\n\n return new SourceDescriptionChunk({ source, items });\n }\n}\n\nexport class SourceDescriptionItem {\n type!: number;\n text!: string;\n\n constructor(props: Partial<SourceDescriptionItem>) {\n Object.assign(this, props);\n }\n\n get length() {\n return 1 + 1 + Buffer.from(this.text).length;\n }\n\n serialize() {\n const text = Buffer.from(this.text);\n return Buffer.concat([\n bufferWriter([1, 1], [this.type, text.length]),\n text,\n ]);\n }\n\n static deSerialize(data: Buffer) {\n const type = data[0];\n const octetCount = data[1];\n const text = data.slice(2, 2 + octetCount).toString();\n return new SourceDescriptionItem({ type, text });\n }\n}\n\nfunction getPadding(len: number) {\n if (len % 4 == 0) {\n return 0;\n }\n return 4 - (len % 4);\n}\n"]}
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import { RtcpReceiverInfo } from "./rr";
3
2
  export declare class RtcpSrPacket {
4
3
  ssrc: number;
@@ -1,5 +1,4 @@
1
- /// <reference types="node" />
2
- import { Extension } from "./rtp";
1
+ import type { Extension } from "./rtp";
3
2
  export declare const RTP_EXTENSION_URI: {
4
3
  readonly sdesMid: "urn:ietf:params:rtp-hdrext:sdes:mid";
5
4
  readonly sdesRTPStreamID: "urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id";
@@ -1,6 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.deserializeAudioLevelIndication = exports.deserializeAbsSendTime = exports.deserializeUint16BE = exports.deserializeString = exports.serializeAudioLevelIndication = exports.serializeAbsSendTime = exports.serializeTransportWideCC = exports.serializeRepairedRtpStreamId = exports.serializeSdesRTPStreamID = exports.serializeSdesMid = exports.rtpHeaderExtensionsParser = exports.RTP_EXTENSION_URI = void 0;
3
+ exports.RTP_EXTENSION_URI = void 0;
4
+ exports.rtpHeaderExtensionsParser = rtpHeaderExtensionsParser;
5
+ exports.serializeSdesMid = serializeSdesMid;
6
+ exports.serializeSdesRTPStreamID = serializeSdesRTPStreamID;
7
+ exports.serializeRepairedRtpStreamId = serializeRepairedRtpStreamId;
8
+ exports.serializeTransportWideCC = serializeTransportWideCC;
9
+ exports.serializeAbsSendTime = serializeAbsSendTime;
10
+ exports.serializeAudioLevelIndication = serializeAudioLevelIndication;
11
+ exports.deserializeString = deserializeString;
12
+ exports.deserializeUint16BE = deserializeUint16BE;
13
+ exports.deserializeAbsSendTime = deserializeAbsSendTime;
14
+ exports.deserializeAudioLevelIndication = deserializeAudioLevelIndication;
4
15
  const src_1 = require("../../../common/src");
5
16
  exports.RTP_EXTENSION_URI = {
6
17
  sdesMid: "urn:ietf:params:rtp-hdrext:sdes:mid",
@@ -46,49 +57,39 @@ function rtpHeaderExtensionsParser(extensions, extIdUriMap) {
46
57
  return acc;
47
58
  }, {});
48
59
  }
49
- exports.rtpHeaderExtensionsParser = rtpHeaderExtensionsParser;
50
60
  function serializeSdesMid(id) {
51
61
  return Buffer.from(id);
52
62
  }
53
- exports.serializeSdesMid = serializeSdesMid;
54
63
  function serializeSdesRTPStreamID(id) {
55
64
  return Buffer.from(id);
56
65
  }
57
- exports.serializeSdesRTPStreamID = serializeSdesRTPStreamID;
58
66
  function serializeRepairedRtpStreamId(id) {
59
67
  return Buffer.from(id);
60
68
  }
61
- exports.serializeRepairedRtpStreamId = serializeRepairedRtpStreamId;
62
69
  function serializeTransportWideCC(transportSequenceNumber) {
63
70
  return (0, src_1.bufferWriter)([2], [transportSequenceNumber]);
64
71
  }
65
- exports.serializeTransportWideCC = serializeTransportWideCC;
66
72
  function serializeAbsSendTime(ntpTime) {
67
73
  const buf = Buffer.alloc(3);
68
74
  const time = (ntpTime >> 14n) & 0x00ffffffn;
69
75
  buf.writeUIntBE(Number(time), 0, 3);
70
76
  return buf;
71
77
  }
72
- exports.serializeAbsSendTime = serializeAbsSendTime;
73
78
  function serializeAudioLevelIndication(level) {
74
79
  const stream = new src_1.BitStream(Buffer.alloc(1));
75
80
  stream.writeBits(1, 1);
76
81
  stream.writeBits(7, level);
77
82
  return stream.uint8Array;
78
83
  }
79
- exports.serializeAudioLevelIndication = serializeAudioLevelIndication;
80
84
  function deserializeString(buf) {
81
85
  return buf.toString();
82
86
  }
83
- exports.deserializeString = deserializeString;
84
87
  function deserializeUint16BE(buf) {
85
88
  return buf.readUInt16BE();
86
89
  }
87
- exports.deserializeUint16BE = deserializeUint16BE;
88
90
  function deserializeAbsSendTime(buf) {
89
91
  return (0, src_1.bufferReader)(buf, [3])[0];
90
92
  }
91
- exports.deserializeAbsSendTime = deserializeAbsSendTime;
92
93
  function deserializeAudioLevelIndication(buf) {
93
94
  const stream = new src_1.BitStream(buf);
94
95
  const value = {
@@ -97,5 +98,4 @@ function deserializeAudioLevelIndication(buf) {
97
98
  };
98
99
  return value;
99
100
  }
100
- exports.deserializeAudioLevelIndication = deserializeAudioLevelIndication;
101
101
  //# sourceMappingURL=headerExtension.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"headerExtension.js","sourceRoot":"","sources":["../../../../../rtp/src/rtp/headerExtension.ts"],"names":[],"mappings":"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","sourcesContent":["import { BitStream, bufferReader, bufferWriter } from \"../../../common/src\";\nimport { Extension } from \"./rtp\";\n\nexport const RTP_EXTENSION_URI = {\n sdesMid: \"urn:ietf:params:rtp-hdrext:sdes:mid\",\n sdesRTPStreamID: \"urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id\",\n repairedRtpStreamId: \"urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id\",\n transportWideCC:\n \"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\",\n absSendTime: \"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\",\n dependencyDescriptor:\n \"https://aomediacodec.github.io/av1-rtp-spec/#dependency-descriptor-rtp-header-extension\",\n audioLevelIndication: \"urn:ietf:params:rtp-hdrext:ssrc-audio-level\",\n} as const;\n\nexport type TransportWideCCPayload = number;\n\nexport type AudioLevelIndicationPayload = { v: boolean; level: number };\n\nexport function rtpHeaderExtensionsParser(\n extensions: Extension[],\n extIdUriMap: { [id: number]: string },\n): { [uri: string]: any } {\n return extensions\n .map((extension) => {\n const uri = extIdUriMap[extension.id];\n if (!uri) {\n return { uri: \"unknown\", value: extension.payload };\n }\n switch (uri) {\n case RTP_EXTENSION_URI.sdesMid:\n case RTP_EXTENSION_URI.sdesRTPStreamID:\n case RTP_EXTENSION_URI.repairedRtpStreamId:\n return { uri, value: deserializeString(extension.payload) };\n case RTP_EXTENSION_URI.transportWideCC:\n return { uri, value: deserializeUint16BE(extension.payload) };\n case RTP_EXTENSION_URI.absSendTime:\n return {\n uri,\n value: deserializeAbsSendTime(extension.payload),\n };\n case RTP_EXTENSION_URI.audioLevelIndication: {\n return {\n uri,\n value: deserializeAudioLevelIndication(extension.payload),\n };\n }\n default:\n return { uri, value: extension.payload };\n }\n })\n .reduce((acc: { [uri: string]: any }, cur) => {\n if (cur) acc[cur.uri] = cur.value;\n return acc;\n }, {});\n}\n\nexport function serializeSdesMid(id: string) {\n return Buffer.from(id);\n}\n\nexport function serializeSdesRTPStreamID(id: string) {\n return Buffer.from(id);\n}\n\nexport function serializeRepairedRtpStreamId(id: string) {\n return Buffer.from(id);\n}\n\nexport function serializeTransportWideCC(transportSequenceNumber: number) {\n return bufferWriter([2], [transportSequenceNumber]);\n}\n\nexport function serializeAbsSendTime(ntpTime: bigint) {\n const buf = Buffer.alloc(3);\n const time = (ntpTime >> 14n) & 0x00ffffffn;\n buf.writeUIntBE(Number(time), 0, 3);\n return buf;\n}\n\nexport function serializeAudioLevelIndication(level: number) {\n const stream = new BitStream(Buffer.alloc(1));\n stream.writeBits(1, 1);\n stream.writeBits(7, level);\n\n return stream.uint8Array;\n}\n\nexport function deserializeString(buf: Buffer) {\n return buf.toString();\n}\n\nexport function deserializeUint16BE(buf: Buffer) {\n return buf.readUInt16BE();\n}\n\nexport function deserializeAbsSendTime(buf: Buffer) {\n return bufferReader(buf, [3])[0];\n}\n\nexport function deserializeAudioLevelIndication(buf: Buffer) {\n const stream = new BitStream(buf);\n const value: AudioLevelIndicationPayload = {\n v: stream.readBits(1) === 1,\n level: stream.readBits(7),\n };\n return value;\n}\n"]}
1
+ {"version":3,"file":"headerExtension.js","sourceRoot":"","sources":["../../../../../rtp/src/rtp/headerExtension.ts"],"names":[],"mappings":";;;AAmBA,8DAoCC;AAED,4CAEC;AAED,4DAEC;AAED,oEAEC;AAED,4DAEC;AAED,oDAKC;AAED,sEAMC;AAED,8CAEC;AAED,kDAEC;AAED,wDAEC;AAED,0EAOC;AA3GD,6CAA4E;AAG/D,QAAA,iBAAiB,GAAG;IAC/B,OAAO,EAAE,qCAAqC;IAC9C,eAAe,EAAE,+CAA+C;IAChE,mBAAmB,EAAE,wDAAwD;IAC7E,eAAe,EACb,2EAA2E;IAC7E,WAAW,EAAE,4DAA4D;IACzE,oBAAoB,EAClB,yFAAyF;IAC3F,oBAAoB,EAAE,6CAA6C;CAC3D,CAAC;AAMX,SAAgB,yBAAyB,CACvC,UAAuB,EACvB,WAAqC;IAErC,OAAO,UAAU;SACd,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;QACjB,MAAM,GAAG,GAAG,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC;QACtD,CAAC;QACD,QAAQ,GAAG,EAAE,CAAC;YACZ,KAAK,yBAAiB,CAAC,OAAO,CAAC;YAC/B,KAAK,yBAAiB,CAAC,eAAe,CAAC;YACvC,KAAK,yBAAiB,CAAC,mBAAmB;gBACxC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,iBAAiB,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9D,KAAK,yBAAiB,CAAC,eAAe;gBACpC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,mBAAmB,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;YAChE,KAAK,yBAAiB,CAAC,WAAW;gBAChC,OAAO;oBACL,GAAG;oBACH,KAAK,EAAE,sBAAsB,CAAC,SAAS,CAAC,OAAO,CAAC;iBACjD,CAAC;YACJ,KAAK,yBAAiB,CAAC,oBAAoB,CAAC,CAAC,CAAC;gBAC5C,OAAO;oBACL,GAAG;oBACH,KAAK,EAAE,+BAA+B,CAAC,SAAS,CAAC,OAAO,CAAC;iBAC1D,CAAC;YACJ,CAAC;YACD;gBACE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC;QAC7C,CAAC;IACH,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,GAA2B,EAAE,GAAG,EAAE,EAAE;QAC3C,IAAI,GAAG;YAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC;QAClC,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAE,CAAC,CAAC;AACX,CAAC;AAED,SAAgB,gBAAgB,CAAC,EAAU;IACzC,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACzB,CAAC;AAED,SAAgB,wBAAwB,CAAC,EAAU;IACjD,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACzB,CAAC;AAED,SAAgB,4BAA4B,CAAC,EAAU;IACrD,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACzB,CAAC;AAED,SAAgB,wBAAwB,CAAC,uBAA+B;IACtE,OAAO,IAAA,kBAAY,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAC,CAAC;AACtD,CAAC;AAED,SAAgB,oBAAoB,CAAC,OAAe;IAClD,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,GAAG,WAAW,CAAC;IAC5C,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACpC,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAgB,6BAA6B,CAAC,KAAa;IACzD,MAAM,MAAM,GAAG,IAAI,eAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACvB,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAE3B,OAAO,MAAM,CAAC,UAAU,CAAC;AAC3B,CAAC;AAED,SAAgB,iBAAiB,CAAC,GAAW;IAC3C,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACxB,CAAC;AAED,SAAgB,mBAAmB,CAAC,GAAW;IAC7C,OAAO,GAAG,CAAC,YAAY,EAAE,CAAC;AAC5B,CAAC;AAED,SAAgB,sBAAsB,CAAC,GAAW;IAChD,OAAO,IAAA,kBAAY,EAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnC,CAAC;AAED,SAAgB,+BAA+B,CAAC,GAAW;IACzD,MAAM,MAAM,GAAG,IAAI,eAAS,CAAC,GAAG,CAAC,CAAC;IAClC,MAAM,KAAK,GAAgC;QACzC,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;QAC3B,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;KAC1B,CAAC;IACF,OAAO,KAAK,CAAC;AACf,CAAC","sourcesContent":["import { BitStream, bufferReader, bufferWriter } from \"../../../common/src\";\nimport type { Extension } from \"./rtp\";\n\nexport const RTP_EXTENSION_URI = {\n sdesMid: \"urn:ietf:params:rtp-hdrext:sdes:mid\",\n sdesRTPStreamID: \"urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id\",\n repairedRtpStreamId: \"urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id\",\n transportWideCC:\n \"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\",\n absSendTime: \"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\",\n dependencyDescriptor:\n \"https://aomediacodec.github.io/av1-rtp-spec/#dependency-descriptor-rtp-header-extension\",\n audioLevelIndication: \"urn:ietf:params:rtp-hdrext:ssrc-audio-level\",\n} as const;\n\nexport type TransportWideCCPayload = number;\n\nexport type AudioLevelIndicationPayload = { v: boolean; level: number };\n\nexport function rtpHeaderExtensionsParser(\n extensions: Extension[],\n extIdUriMap: { [id: number]: string },\n): { [uri: string]: any } {\n return extensions\n .map((extension) => {\n const uri = extIdUriMap[extension.id];\n if (!uri) {\n return { uri: \"unknown\", value: extension.payload };\n }\n switch (uri) {\n case RTP_EXTENSION_URI.sdesMid:\n case RTP_EXTENSION_URI.sdesRTPStreamID:\n case RTP_EXTENSION_URI.repairedRtpStreamId:\n return { uri, value: deserializeString(extension.payload) };\n case RTP_EXTENSION_URI.transportWideCC:\n return { uri, value: deserializeUint16BE(extension.payload) };\n case RTP_EXTENSION_URI.absSendTime:\n return {\n uri,\n value: deserializeAbsSendTime(extension.payload),\n };\n case RTP_EXTENSION_URI.audioLevelIndication: {\n return {\n uri,\n value: deserializeAudioLevelIndication(extension.payload),\n };\n }\n default:\n return { uri, value: extension.payload };\n }\n })\n .reduce((acc: { [uri: string]: any }, cur) => {\n if (cur) acc[cur.uri] = cur.value;\n return acc;\n }, {});\n}\n\nexport function serializeSdesMid(id: string) {\n return Buffer.from(id);\n}\n\nexport function serializeSdesRTPStreamID(id: string) {\n return Buffer.from(id);\n}\n\nexport function serializeRepairedRtpStreamId(id: string) {\n return Buffer.from(id);\n}\n\nexport function serializeTransportWideCC(transportSequenceNumber: number) {\n return bufferWriter([2], [transportSequenceNumber]);\n}\n\nexport function serializeAbsSendTime(ntpTime: bigint) {\n const buf = Buffer.alloc(3);\n const time = (ntpTime >> 14n) & 0x00ffffffn;\n buf.writeUIntBE(Number(time), 0, 3);\n return buf;\n}\n\nexport function serializeAudioLevelIndication(level: number) {\n const stream = new BitStream(Buffer.alloc(1));\n stream.writeBits(1, 1);\n stream.writeBits(7, level);\n\n return stream.uint8Array;\n}\n\nexport function deserializeString(buf: Buffer) {\n return buf.toString();\n}\n\nexport function deserializeUint16BE(buf: Buffer) {\n return buf.readUInt16BE();\n}\n\nexport function deserializeAbsSendTime(buf: Buffer) {\n return bufferReader(buf, [3])[0];\n}\n\nexport function deserializeAudioLevelIndication(buf: Buffer) {\n const stream = new BitStream(buf);\n const value: AudioLevelIndicationPayload = {\n v: stream.readBits(1) === 1,\n level: stream.readBits(7),\n };\n return value;\n}\n"]}
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import { Red } from "./packet";
3
2
  export declare class RedEncoder {
4
3
  distance: number;
@@ -1,4 +1,4 @@
1
- import { Red, RtpPacket } from "../..";
1
+ import { type Red, RtpPacket } from "../..";
2
2
  export declare class RedHandler {
3
3
  private readonly size;
4
4
  private sequenceNumbers;
@@ -1 +1 @@
1
- {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../../../../rtp/src/rtp/red/handler.ts"],"names":[],"mappings":";;;AAAA,6BAAwE;AAExE,iEAAiE;AACjE,mEAAmE;AACnE,oEAAoE;AACpE,oEAAoE;AACpE,oEAAoE;AAEpE,kBAAkB;AAClB,oBAAoB;AACpB,oBAAoB;AACpB,oBAAoB;AAEpB,MAAa,UAAU;IAAvB;QACmB;;;;mBAAO,GAAG;WAAC;QACpB;;;;mBAA4B,EAAE;WAAC;IAsDzC,CAAC;IApDC,IAAI,CAAC,GAAQ,EAAE,IAAe;QAC5B,MAAM,OAAO,GAAgB,EAAE,CAAC;QAEhC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;YAC5D,MAAM,cAAc,GAAG,IAAA,aAAS,EAC9B,IAAI,CAAC,MAAM,CAAC,cAAc,EAC1B,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAC/B,CAAC;YACF,IAAI,eAAe,EAAE,CAAC;gBACpB,OAAO,CAAC,IAAI,CACV,IAAI,aAAS,CACX,IAAI,aAAS,CAAC;oBACZ,SAAS,EAAE,IAAA,aAAS,EAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,eAAe,CAAC;oBAC7D,WAAW,EAAE,OAAO;oBACpB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;oBACtB,cAAc;oBACd,MAAM,EAAE,IAAI;iBACb,CAAC,EACF,KAAK,CACN,CACF,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CACV,IAAI,aAAS,CACX,IAAI,aAAS,CAAC;oBACZ,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;oBAChC,WAAW,EAAE,OAAO;oBACpB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;oBACtB,cAAc;oBACd,MAAM,EAAE,IAAI;iBACb,CAAC,EACF,KAAK,CACN,CACF,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;YACpC,YAAY;YACZ,IAAI,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC;gBAC3D,OAAO,KAAK,CAAC;YACf,CAAC;iBAAM,CAAC;gBACN,kBAAkB;gBAClB,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;oBAC5C,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;gBAC/B,CAAC;gBACD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;gBACnD,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AAxDD,gCAwDC","sourcesContent":["import { Red, RtpHeader, RtpPacket, uint16Add, uint32Add } from \"../..\";\n\n// 0 1 2 3\n// 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// |F| block PT | timestamp offset | block length |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n\n// 0 1 2 3 4 5 6 7\n// +-+-+-+-+-+-+-+-+\n// |0| Block PT |\n// +-+-+-+-+-+-+-+-+\n\nexport class RedHandler {\n private readonly size = 150;\n private sequenceNumbers: number[] = [];\n\n push(red: Red, base: RtpPacket) {\n const packets: RtpPacket[] = [];\n\n red.blocks.forEach(({ blockPT, timestampOffset, block }, i) => {\n const sequenceNumber = uint16Add(\n base.header.sequenceNumber,\n -(red.blocks.length - (i + 1)),\n );\n if (timestampOffset) {\n packets.push(\n new RtpPacket(\n new RtpHeader({\n timestamp: uint32Add(base.header.timestamp, -timestampOffset),\n payloadType: blockPT,\n ssrc: base.header.ssrc,\n sequenceNumber,\n marker: true,\n }),\n block,\n ),\n );\n } else {\n packets.push(\n new RtpPacket(\n new RtpHeader({\n timestamp: base.header.timestamp,\n payloadType: blockPT,\n ssrc: base.header.ssrc,\n sequenceNumber,\n marker: true,\n }),\n block,\n ),\n );\n }\n });\n\n const filtered = packets.filter((p) => {\n // duplicate\n if (this.sequenceNumbers.includes(p.header.sequenceNumber)) {\n return false;\n } else {\n // buffer overflow\n if (this.sequenceNumbers.length > this.size) {\n this.sequenceNumbers.shift();\n }\n this.sequenceNumbers.push(p.header.sequenceNumber);\n return true;\n }\n });\n return filtered;\n }\n}\n"]}
1
+ {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../../../../rtp/src/rtp/red/handler.ts"],"names":[],"mappings":";;;AAAA,6BAA6E;AAE7E,iEAAiE;AACjE,mEAAmE;AACnE,oEAAoE;AACpE,oEAAoE;AACpE,oEAAoE;AAEpE,kBAAkB;AAClB,oBAAoB;AACpB,oBAAoB;AACpB,oBAAoB;AAEpB,MAAa,UAAU;IAAvB;QACmB;;;;mBAAO,GAAG;WAAC;QACpB;;;;mBAA4B,EAAE;WAAC;IAsDzC,CAAC;IApDC,IAAI,CAAC,GAAQ,EAAE,IAAe;QAC5B,MAAM,OAAO,GAAgB,EAAE,CAAC;QAEhC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;YAC5D,MAAM,cAAc,GAAG,IAAA,aAAS,EAC9B,IAAI,CAAC,MAAM,CAAC,cAAc,EAC1B,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAC/B,CAAC;YACF,IAAI,eAAe,EAAE,CAAC;gBACpB,OAAO,CAAC,IAAI,CACV,IAAI,aAAS,CACX,IAAI,aAAS,CAAC;oBACZ,SAAS,EAAE,IAAA,aAAS,EAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,eAAe,CAAC;oBAC7D,WAAW,EAAE,OAAO;oBACpB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;oBACtB,cAAc;oBACd,MAAM,EAAE,IAAI;iBACb,CAAC,EACF,KAAK,CACN,CACF,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CACV,IAAI,aAAS,CACX,IAAI,aAAS,CAAC;oBACZ,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;oBAChC,WAAW,EAAE,OAAO;oBACpB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;oBACtB,cAAc;oBACd,MAAM,EAAE,IAAI;iBACb,CAAC,EACF,KAAK,CACN,CACF,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;YACpC,YAAY;YACZ,IAAI,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC;gBAC3D,OAAO,KAAK,CAAC;YACf,CAAC;iBAAM,CAAC;gBACN,kBAAkB;gBAClB,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;oBAC5C,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;gBAC/B,CAAC;gBACD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;gBACnD,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AAxDD,gCAwDC","sourcesContent":["import { type Red, RtpHeader, RtpPacket, uint16Add, uint32Add } from \"../..\";\n\n// 0 1 2 3\n// 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// |F| block PT | timestamp offset | block length |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n\n// 0 1 2 3 4 5 6 7\n// +-+-+-+-+-+-+-+-+\n// |0| Block PT |\n// +-+-+-+-+-+-+-+-+\n\nexport class RedHandler {\n private readonly size = 150;\n private sequenceNumbers: number[] = [];\n\n push(red: Red, base: RtpPacket) {\n const packets: RtpPacket[] = [];\n\n red.blocks.forEach(({ blockPT, timestampOffset, block }, i) => {\n const sequenceNumber = uint16Add(\n base.header.sequenceNumber,\n -(red.blocks.length - (i + 1)),\n );\n if (timestampOffset) {\n packets.push(\n new RtpPacket(\n new RtpHeader({\n timestamp: uint32Add(base.header.timestamp, -timestampOffset),\n payloadType: blockPT,\n ssrc: base.header.ssrc,\n sequenceNumber,\n marker: true,\n }),\n block,\n ),\n );\n } else {\n packets.push(\n new RtpPacket(\n new RtpHeader({\n timestamp: base.header.timestamp,\n payloadType: blockPT,\n ssrc: base.header.ssrc,\n sequenceNumber,\n marker: true,\n }),\n block,\n ),\n );\n }\n });\n\n const filtered = packets.filter((p) => {\n // duplicate\n if (this.sequenceNumbers.includes(p.header.sequenceNumber)) {\n return false;\n } else {\n // buffer overflow\n if (this.sequenceNumbers.length > this.size) {\n this.sequenceNumbers.shift();\n }\n this.sequenceNumbers.push(p.header.sequenceNumber);\n return true;\n }\n });\n return filtered;\n }\n}\n"]}
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  export declare class Red {
3
2
  header: RedHeader;
4
3
  blocks: {
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  export type Extension = {
3
2
  id: number;
4
3
  payload: Buffer;
@@ -1 +1 @@
1
- {"version":3,"file":"rtp.js","sourceRoot":"","sources":["../../../../../rtp/src/rtp/rtp.ts"],"names":[],"mappings":"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","sourcesContent":["import { BitWriter, getBit } from \"../../../common/src\";\n\nexport type Extension = { id: number; payload: Buffer };\n\nexport const ExtensionProfiles = {\n OneByte: 0xbede, // 48862\n TwoByte: 0x1000, // 4096\n} as const;\ntype ExtensionProfile =\n (typeof ExtensionProfiles)[keyof typeof ExtensionProfiles];\n\nconst seqNumOffset = 2;\nconst timestampOffset = 4;\nconst ssrcOffset = 8;\nconst csrcOffset = 12;\nconst csrcSize = 4;\n\n/*\n * 0 1 2 3\n * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1\n * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n * |V=2|P|X| CC |M| PT | sequence number |\n * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n * | timestamp |\n * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n * | synchronization source (SSRC) identifier |\n * +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+\n * | contributing source (CSRC) identifiers |\n * | .... |\n * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n */\n\nexport class RtpHeader {\n version = 2;\n padding = false;\n paddingSize = 0;\n extension = false;\n marker = false;\n payloadOffset = 0;\n payloadType = 0;\n /**16bit, 初期値はランダムである必要があります*/\n sequenceNumber = 0;\n /**32bit microsec (milli/1000), 初期値はランダムである必要があります*/\n timestamp = 0;\n ssrc = 0;\n csrcLength = 0;\n csrc: number[] = [];\n extensionProfile: ExtensionProfile = ExtensionProfiles.OneByte;\n /**deserialize only */\n extensionLength?: number;\n extensions: Extension[] = [];\n constructor(props: Partial<RtpHeader> = {}) {\n Object.assign(this, props);\n }\n\n static deSerialize(rawPacket: Buffer) {\n const h = new RtpHeader();\n let currOffset = 0;\n const v_p_x_cc = rawPacket[currOffset++];\n h.version = getBit(v_p_x_cc, 0, 2);\n h.padding = getBit(v_p_x_cc, 2) > 0;\n h.extension = getBit(v_p_x_cc, 3) > 0;\n h.csrcLength = getBit(v_p_x_cc, 4, 4);\n h.csrc = [...Array(h.csrcLength)].map(() => {\n const csrc = rawPacket.readUInt32BE(currOffset);\n currOffset += 4;\n return csrc;\n });\n currOffset += csrcOffset - 1;\n\n const m_pt = rawPacket[1];\n h.marker = getBit(m_pt, 0) > 0;\n h.payloadType = getBit(m_pt, 1, 7);\n\n h.sequenceNumber = rawPacket.readUInt16BE(seqNumOffset);\n h.timestamp = rawPacket.readUInt32BE(timestampOffset);\n h.ssrc = rawPacket.readUInt32BE(ssrcOffset);\n\n for (let i = 0; i < h.csrc.length; i++) {\n const offset = csrcOffset + i * csrcSize;\n h.csrc[i] = rawPacket.subarray(offset).readUInt32BE();\n }\n if (h.extension) {\n h.extensionProfile = rawPacket\n .subarray(currOffset)\n .readUInt16BE() as ExtensionProfile;\n currOffset += 2;\n const extensionLength = rawPacket.subarray(currOffset).readUInt16BE() * 4;\n h.extensionLength = extensionLength;\n currOffset += 2;\n\n switch (h.extensionProfile) {\n // RFC 8285 RTP One Byte Header Extension\n case ExtensionProfiles.OneByte: {\n const end = currOffset + extensionLength;\n while (currOffset < end) {\n if (rawPacket[currOffset] === 0x00) {\n currOffset++;\n continue;\n }\n\n const extId = rawPacket[currOffset] >> 4;\n const len =\n (rawPacket[currOffset] & (rawPacket[currOffset] ^ 0xf0)) + 1; // and not &^\n currOffset++;\n if (extId === 0xf) {\n break;\n }\n const extension: Extension = {\n id: extId,\n payload: rawPacket.subarray(currOffset, currOffset + len),\n };\n h.extensions = [...h.extensions, extension];\n currOffset += len;\n }\n }\n break;\n // RFC 8285 RTP Two Byte Header Extension\n case ExtensionProfiles.TwoByte: {\n const end = currOffset + extensionLength;\n while (currOffset < end) {\n if (rawPacket[currOffset] === 0x00) {\n currOffset++;\n continue;\n }\n const extId = rawPacket[currOffset];\n currOffset++;\n const len = rawPacket[currOffset];\n currOffset++;\n\n const extension: Extension = {\n id: extId,\n payload: rawPacket.subarray(currOffset, currOffset + len),\n };\n h.extensions = [...h.extensions, extension];\n currOffset += len;\n }\n }\n break;\n default: {\n const extension: Extension = {\n id: 0,\n payload: rawPacket.subarray(\n currOffset,\n currOffset + extensionLength,\n ),\n };\n h.extensions = [...h.extensions, extension];\n currOffset += h.extensions[0].payload.length;\n }\n break;\n }\n }\n h.payloadOffset = currOffset;\n if (h.padding) {\n h.paddingSize = rawPacket[rawPacket.length - 1];\n }\n\n return h;\n }\n\n get serializeSize() {\n const { csrc, extensionProfile, extensions } = this;\n\n let size = 12 + csrc.length * csrcSize;\n\n if (extensions.length > 0 || this.extension === true) {\n let extSize = 4;\n switch (extensionProfile) {\n case ExtensionProfiles.OneByte:\n for (const extension of extensions) {\n extSize += 1 + extension.payload.length;\n }\n break;\n case ExtensionProfiles.TwoByte:\n for (const extension of extensions) {\n extSize += 2 + extension.payload.length;\n }\n break;\n default:\n extSize += extensions[0].payload.length;\n }\n size += Math.floor((extSize + 3) / 4) * 4;\n }\n\n return size;\n }\n\n serialize(size: number) {\n const buf = Buffer.alloc(size);\n let offset = 0;\n\n const v_p_x_cc = new BitWriter(8);\n v_p_x_cc.set(2, 0, this.version);\n if (this.padding) v_p_x_cc.set(1, 2, 1);\n if (this.extensions.length > 0) this.extension = true;\n if (this.extension) v_p_x_cc.set(1, 3, 1);\n v_p_x_cc.set(4, 4, this.csrc.length);\n buf.writeUInt8(v_p_x_cc.value, offset++);\n\n const m_pt = new BitWriter(8);\n if (this.marker) m_pt.set(1, 0, 1);\n m_pt.set(7, 1, this.payloadType);\n buf.writeUInt8(m_pt.value, offset++);\n\n buf.writeUInt16BE(this.sequenceNumber, seqNumOffset);\n offset += 2;\n buf.writeUInt32BE(this.timestamp, timestampOffset);\n offset += 4;\n buf.writeUInt32BE(this.ssrc, ssrcOffset);\n offset += 4;\n\n for (const csrc of this.csrc) {\n buf.writeUInt32BE(csrc, offset);\n offset += 4;\n }\n\n if (this.extension) {\n const extHeaderPos = offset;\n buf.writeUInt16BE(this.extensionProfile, offset);\n offset += 4;\n const startExtensionsPos = offset;\n\n switch (this.extensionProfile) {\n case ExtensionProfiles.OneByte:\n for (const extension of this.extensions) {\n buf.writeUInt8(\n (extension.id << 4) | (extension.payload.length - 1),\n offset++,\n );\n extension.payload.copy(buf, offset);\n offset += extension.payload.length;\n }\n break;\n case ExtensionProfiles.TwoByte: // 1バイトで収まらなくなった歴史的経緯\n for (const extension of this.extensions) {\n buf.writeUInt8(extension.id, offset++);\n buf.writeUInt8(extension.payload.length, offset++);\n extension.payload.copy(buf, offset);\n offset += extension.payload.length;\n }\n break;\n default: {\n const extLen = this.extensions[0].payload.length;\n if (extLen % 4 != 0) {\n throw new Error();\n }\n this.extensions[0].payload.copy(buf, offset);\n offset += extLen;\n }\n }\n\n const extSize = offset - startExtensionsPos;\n const roundedExtSize = Math.trunc((extSize + 3) / 4) * 4;\n\n buf.writeUInt16BE(Math.trunc(roundedExtSize / 4), extHeaderPos + 2);\n // padding 4 bytes boundaries\n for (let i = 0; i < roundedExtSize - extSize; i++) {\n buf.writeUInt8(0, offset);\n offset++;\n }\n }\n this.payloadOffset = offset;\n return buf;\n }\n}\n\nexport class RtpPacket {\n constructor(public header: RtpHeader, public payload: Buffer) {}\n\n get serializeSize() {\n return this.header.serializeSize + this.payload.length;\n }\n\n clone() {\n return new RtpPacket(new RtpHeader({ ...this.header }), this.payload);\n }\n\n serialize() {\n let buf = this.header.serialize(\n this.header.serializeSize + this.payload.length,\n );\n const { payloadOffset } = this.header;\n this.payload.copy(buf, payloadOffset);\n if (this.header.padding) {\n const padding = Buffer.alloc(this.header.paddingSize);\n padding.writeUInt8(this.header.paddingSize, this.header.paddingSize - 1);\n buf = Buffer.concat([buf, padding]);\n }\n\n return buf;\n }\n\n static deSerialize(buf: Buffer) {\n const header = RtpHeader.deSerialize(buf);\n const p = new RtpPacket(\n header,\n buf.subarray(header.payloadOffset, buf.length - header.paddingSize),\n );\n return p;\n }\n\n clear() {\n this.payload = null as any;\n }\n}\n"]}
1
+ {"version":3,"file":"rtp.js","sourceRoot":"","sources":["../../../../../rtp/src/rtp/rtp.ts"],"names":[],"mappings":"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","sourcesContent":["import { BitWriter, getBit } from \"../../../common/src\";\n\nexport type Extension = { id: number; payload: Buffer };\n\nexport const ExtensionProfiles = {\n OneByte: 0xbede, // 48862\n TwoByte: 0x1000, // 4096\n} as const;\ntype ExtensionProfile =\n (typeof ExtensionProfiles)[keyof typeof ExtensionProfiles];\n\nconst seqNumOffset = 2;\nconst timestampOffset = 4;\nconst ssrcOffset = 8;\nconst csrcOffset = 12;\nconst csrcSize = 4;\n\n/*\n * 0 1 2 3\n * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1\n * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n * |V=2|P|X| CC |M| PT | sequence number |\n * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n * | timestamp |\n * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n * | synchronization source (SSRC) identifier |\n * +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+\n * | contributing source (CSRC) identifiers |\n * | .... |\n * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n */\n\nexport class RtpHeader {\n version = 2;\n padding = false;\n paddingSize = 0;\n extension = false;\n marker = false;\n payloadOffset = 0;\n payloadType = 0;\n /**16bit, 初期値はランダムである必要があります*/\n sequenceNumber = 0;\n /**32bit microsec (milli/1000), 初期値はランダムである必要があります*/\n timestamp = 0;\n ssrc = 0;\n csrcLength = 0;\n csrc: number[] = [];\n extensionProfile: ExtensionProfile = ExtensionProfiles.OneByte;\n /**deserialize only */\n extensionLength?: number;\n extensions: Extension[] = [];\n constructor(props: Partial<RtpHeader> = {}) {\n Object.assign(this, props);\n }\n\n static deSerialize(rawPacket: Buffer) {\n const h = new RtpHeader();\n let currOffset = 0;\n const v_p_x_cc = rawPacket[currOffset++];\n h.version = getBit(v_p_x_cc, 0, 2);\n h.padding = getBit(v_p_x_cc, 2) > 0;\n h.extension = getBit(v_p_x_cc, 3) > 0;\n h.csrcLength = getBit(v_p_x_cc, 4, 4);\n h.csrc = [...Array(h.csrcLength)].map(() => {\n const csrc = rawPacket.readUInt32BE(currOffset);\n currOffset += 4;\n return csrc;\n });\n currOffset += csrcOffset - 1;\n\n const m_pt = rawPacket[1];\n h.marker = getBit(m_pt, 0) > 0;\n h.payloadType = getBit(m_pt, 1, 7);\n\n h.sequenceNumber = rawPacket.readUInt16BE(seqNumOffset);\n h.timestamp = rawPacket.readUInt32BE(timestampOffset);\n h.ssrc = rawPacket.readUInt32BE(ssrcOffset);\n\n for (let i = 0; i < h.csrc.length; i++) {\n const offset = csrcOffset + i * csrcSize;\n h.csrc[i] = rawPacket.subarray(offset).readUInt32BE();\n }\n if (h.extension) {\n h.extensionProfile = rawPacket\n .subarray(currOffset)\n .readUInt16BE() as ExtensionProfile;\n currOffset += 2;\n const extensionLength = rawPacket.subarray(currOffset).readUInt16BE() * 4;\n h.extensionLength = extensionLength;\n currOffset += 2;\n\n switch (h.extensionProfile) {\n // RFC 8285 RTP One Byte Header Extension\n case ExtensionProfiles.OneByte:\n {\n const end = currOffset + extensionLength;\n while (currOffset < end) {\n if (rawPacket[currOffset] === 0x00) {\n currOffset++;\n continue;\n }\n\n const extId = rawPacket[currOffset] >> 4;\n const len =\n (rawPacket[currOffset] & (rawPacket[currOffset] ^ 0xf0)) + 1; // and not &^\n currOffset++;\n if (extId === 0xf) {\n break;\n }\n const extension: Extension = {\n id: extId,\n payload: rawPacket.subarray(currOffset, currOffset + len),\n };\n h.extensions = [...h.extensions, extension];\n currOffset += len;\n }\n }\n break;\n // RFC 8285 RTP Two Byte Header Extension\n case ExtensionProfiles.TwoByte:\n {\n const end = currOffset + extensionLength;\n while (currOffset < end) {\n if (rawPacket[currOffset] === 0x00) {\n currOffset++;\n continue;\n }\n const extId = rawPacket[currOffset];\n currOffset++;\n const len = rawPacket[currOffset];\n currOffset++;\n\n const extension: Extension = {\n id: extId,\n payload: rawPacket.subarray(currOffset, currOffset + len),\n };\n h.extensions = [...h.extensions, extension];\n currOffset += len;\n }\n }\n break;\n default:\n {\n const extension: Extension = {\n id: 0,\n payload: rawPacket.subarray(\n currOffset,\n currOffset + extensionLength,\n ),\n };\n h.extensions = [...h.extensions, extension];\n currOffset += h.extensions[0].payload.length;\n }\n break;\n }\n }\n h.payloadOffset = currOffset;\n if (h.padding) {\n h.paddingSize = rawPacket[rawPacket.length - 1];\n }\n\n return h;\n }\n\n get serializeSize() {\n const { csrc, extensionProfile, extensions } = this;\n\n let size = 12 + csrc.length * csrcSize;\n\n if (extensions.length > 0 || this.extension === true) {\n let extSize = 4;\n switch (extensionProfile) {\n case ExtensionProfiles.OneByte:\n for (const extension of extensions) {\n extSize += 1 + extension.payload.length;\n }\n break;\n case ExtensionProfiles.TwoByte:\n for (const extension of extensions) {\n extSize += 2 + extension.payload.length;\n }\n break;\n default:\n extSize += extensions[0].payload.length;\n }\n size += Math.floor((extSize + 3) / 4) * 4;\n }\n\n return size;\n }\n\n serialize(size: number) {\n const buf = Buffer.alloc(size);\n let offset = 0;\n\n const v_p_x_cc = new BitWriter(8);\n v_p_x_cc.set(2, 0, this.version);\n if (this.padding) v_p_x_cc.set(1, 2, 1);\n if (this.extensions.length > 0) this.extension = true;\n if (this.extension) v_p_x_cc.set(1, 3, 1);\n v_p_x_cc.set(4, 4, this.csrc.length);\n buf.writeUInt8(v_p_x_cc.value, offset++);\n\n const m_pt = new BitWriter(8);\n if (this.marker) m_pt.set(1, 0, 1);\n m_pt.set(7, 1, this.payloadType);\n buf.writeUInt8(m_pt.value, offset++);\n\n buf.writeUInt16BE(this.sequenceNumber, seqNumOffset);\n offset += 2;\n buf.writeUInt32BE(this.timestamp, timestampOffset);\n offset += 4;\n buf.writeUInt32BE(this.ssrc, ssrcOffset);\n offset += 4;\n\n for (const csrc of this.csrc) {\n buf.writeUInt32BE(csrc, offset);\n offset += 4;\n }\n\n if (this.extension) {\n const extHeaderPos = offset;\n buf.writeUInt16BE(this.extensionProfile, offset);\n offset += 4;\n const startExtensionsPos = offset;\n\n switch (this.extensionProfile) {\n case ExtensionProfiles.OneByte:\n for (const extension of this.extensions) {\n buf.writeUInt8(\n (extension.id << 4) | (extension.payload.length - 1),\n offset++,\n );\n extension.payload.copy(buf, offset);\n offset += extension.payload.length;\n }\n break;\n case ExtensionProfiles.TwoByte: // 1バイトで収まらなくなった歴史的経緯\n for (const extension of this.extensions) {\n buf.writeUInt8(extension.id, offset++);\n buf.writeUInt8(extension.payload.length, offset++);\n extension.payload.copy(buf, offset);\n offset += extension.payload.length;\n }\n break;\n default: {\n const extLen = this.extensions[0].payload.length;\n if (extLen % 4 != 0) {\n throw new Error();\n }\n this.extensions[0].payload.copy(buf, offset);\n offset += extLen;\n }\n }\n\n const extSize = offset - startExtensionsPos;\n const roundedExtSize = Math.trunc((extSize + 3) / 4) * 4;\n\n buf.writeUInt16BE(Math.trunc(roundedExtSize / 4), extHeaderPos + 2);\n // padding 4 bytes boundaries\n for (let i = 0; i < roundedExtSize - extSize; i++) {\n buf.writeUInt8(0, offset);\n offset++;\n }\n }\n this.payloadOffset = offset;\n return buf;\n }\n}\n\nexport class RtpPacket {\n constructor(\n public header: RtpHeader,\n public payload: Buffer,\n ) {}\n\n get serializeSize() {\n return this.header.serializeSize + this.payload.length;\n }\n\n clone() {\n return new RtpPacket(new RtpHeader({ ...this.header }), this.payload);\n }\n\n serialize() {\n let buf = this.header.serialize(\n this.header.serializeSize + this.payload.length,\n );\n const { payloadOffset } = this.header;\n this.payload.copy(buf, payloadOffset);\n if (this.header.padding) {\n const padding = Buffer.alloc(this.header.paddingSize);\n padding.writeUInt8(this.header.paddingSize, this.header.paddingSize - 1);\n buf = Buffer.concat([buf, padding]);\n }\n\n return buf;\n }\n\n static deSerialize(buf: Buffer) {\n const header = RtpHeader.deSerialize(buf);\n const p = new RtpPacket(\n header,\n buf.subarray(header.payloadOffset, buf.length - header.paddingSize),\n );\n return p;\n }\n\n clear() {\n this.payload = null as any;\n }\n}\n"]}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.wrapRtx = exports.unwrapRtx = void 0;
3
+ exports.unwrapRtx = unwrapRtx;
4
+ exports.wrapRtx = wrapRtx;
4
5
  const jspack_1 = require("@shinyoshiaki/jspack");
5
6
  const rtp_1 = require("./rtp");
6
7
  function unwrapRtx(rtx, payloadType, ssrc) {
@@ -13,7 +14,6 @@ function unwrapRtx(rtx, payloadType, ssrc) {
13
14
  }), rtx.payload.subarray(2));
14
15
  return packet;
15
16
  }
16
- exports.unwrapRtx = unwrapRtx;
17
17
  function wrapRtx(packet, payloadType, sequenceNumber, ssrc) {
18
18
  const rtx = new rtp_1.RtpPacket(new rtp_1.RtpHeader({
19
19
  payloadType,
@@ -29,5 +29,4 @@ function wrapRtx(packet, payloadType, sequenceNumber, ssrc) {
29
29
  ]));
30
30
  return rtx;
31
31
  }
32
- exports.wrapRtx = wrapRtx;
33
32
  //# sourceMappingURL=rtx.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rtx.js","sourceRoot":"","sources":["../../../../../rtp/src/rtp/rtx.ts"],"names":[],"mappings":";;;AAAA,iDAA8C;AAE9C,+BAA6C;AAE7C,SAAgB,SAAS,CAAC,GAAc,EAAE,WAAmB,EAAE,IAAY;IACzE,MAAM,MAAM,GAAG,IAAI,eAAS,CAC1B,IAAI,eAAS,CAAC;QACZ,WAAW;QACX,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM;QACzB,cAAc,EAAE,eAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClE,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS;QAC/B,IAAI;KACL,CAAC,EACF,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CACxB,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC;AAZD,8BAYC;AAED,SAAgB,OAAO,CACrB,MAAiB,EACjB,WAAmB,EACnB,cAAsB,EACtB,IAAY;IAEZ,MAAM,GAAG,GAAG,IAAI,eAAS,CACvB,IAAI,eAAS,CAAC;QACZ,WAAW;QACX,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM;QAC5B,cAAc;QACd,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS;QAClC,IAAI;QACJ,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI;QACxB,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU;KACrC,CAAC,EACF,MAAM,CAAC,MAAM,CAAC;QACZ,MAAM,CAAC,IAAI,CAAC,eAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;QAC9D,MAAM,CAAC,OAAO;KACf,CAAC,CACH,CAAC;IACF,OAAO,GAAG,CAAC;AACb,CAAC;AAtBD,0BAsBC","sourcesContent":["import { jspack } from \"@shinyoshiaki/jspack\";\n\nimport { RtpHeader, RtpPacket } from \"./rtp\";\n\nexport function unwrapRtx(rtx: RtpPacket, payloadType: number, ssrc: number) {\n const packet = new RtpPacket(\n new RtpHeader({\n payloadType,\n marker: rtx.header.marker,\n sequenceNumber: jspack.Unpack(\"!H\", rtx.payload.subarray(0, 2))[0],\n timestamp: rtx.header.timestamp,\n ssrc,\n }),\n rtx.payload.subarray(2),\n );\n return packet;\n}\n\nexport function wrapRtx(\n packet: RtpPacket,\n payloadType: number,\n sequenceNumber: number,\n ssrc: number,\n) {\n const rtx = new RtpPacket(\n new RtpHeader({\n payloadType,\n marker: packet.header.marker,\n sequenceNumber,\n timestamp: packet.header.timestamp,\n ssrc,\n csrc: packet.header.csrc,\n extensions: packet.header.extensions,\n }),\n Buffer.concat([\n Buffer.from(jspack.Pack(\"!H\", [packet.header.sequenceNumber])),\n packet.payload,\n ]),\n );\n return rtx;\n}\n"]}
1
+ {"version":3,"file":"rtx.js","sourceRoot":"","sources":["../../../../../rtp/src/rtp/rtx.ts"],"names":[],"mappings":";;AAIA,8BAYC;AAED,0BAsBC;AAxCD,iDAA8C;AAE9C,+BAA6C;AAE7C,SAAgB,SAAS,CAAC,GAAc,EAAE,WAAmB,EAAE,IAAY;IACzE,MAAM,MAAM,GAAG,IAAI,eAAS,CAC1B,IAAI,eAAS,CAAC;QACZ,WAAW;QACX,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM;QACzB,cAAc,EAAE,eAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClE,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS;QAC/B,IAAI;KACL,CAAC,EACF,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CACxB,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAgB,OAAO,CACrB,MAAiB,EACjB,WAAmB,EACnB,cAAsB,EACtB,IAAY;IAEZ,MAAM,GAAG,GAAG,IAAI,eAAS,CACvB,IAAI,eAAS,CAAC;QACZ,WAAW;QACX,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM;QAC5B,cAAc;QACd,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS;QAClC,IAAI;QACJ,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI;QACxB,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU;KACrC,CAAC,EACF,MAAM,CAAC,MAAM,CAAC;QACZ,MAAM,CAAC,IAAI,CAAC,eAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;QAC9D,MAAM,CAAC,OAAO;KACf,CAAC,CACH,CAAC;IACF,OAAO,GAAG,CAAC;AACb,CAAC","sourcesContent":["import { jspack } from \"@shinyoshiaki/jspack\";\n\nimport { RtpHeader, RtpPacket } from \"./rtp\";\n\nexport function unwrapRtx(rtx: RtpPacket, payloadType: number, ssrc: number) {\n const packet = new RtpPacket(\n new RtpHeader({\n payloadType,\n marker: rtx.header.marker,\n sequenceNumber: jspack.Unpack(\"!H\", rtx.payload.subarray(0, 2))[0],\n timestamp: rtx.header.timestamp,\n ssrc,\n }),\n rtx.payload.subarray(2),\n );\n return packet;\n}\n\nexport function wrapRtx(\n packet: RtpPacket,\n payloadType: number,\n sequenceNumber: number,\n ssrc: number,\n) {\n const rtx = new RtpPacket(\n new RtpHeader({\n payloadType,\n marker: packet.header.marker,\n sequenceNumber,\n timestamp: packet.header.timestamp,\n ssrc,\n csrc: packet.header.csrc,\n extensions: packet.header.extensions,\n }),\n Buffer.concat([\n Buffer.from(jspack.Pack(\"!H\", [packet.header.sequenceNumber])),\n packet.payload,\n ]),\n );\n return rtx;\n}\n"]}
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import { CipherAesBase } from ".";
3
2
  import { RtcpHeader } from "../../rtcp/header";
4
3
  import { RtpHeader } from "../../rtp/rtp";
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import { CipherAesBase } from ".";
3
2
  import { RtcpHeader } from "../../rtcp/header";
4
3
  import { RtpHeader } from "../../rtp/rtp";
@@ -1,6 +1,5 @@
1
- /// <reference types="node" />
2
- import { RtcpHeader } from "../../rtcp/header";
3
- import { RtpHeader } from "../../rtp/rtp";
1
+ import type { RtcpHeader } from "../../rtcp/header";
2
+ import type { RtpHeader } from "../../rtp/rtp";
4
3
  export declare abstract class CipherAesBase {
5
4
  srtpSessionKey: Buffer;
6
5
  srtpSessionSalt: Buffer;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../rtp/src/srtp/cipher/index.ts"],"names":[],"mappings":";;;AAGA,MAAsB,aAAa;IACjC,YACS,cAAsB,EACtB,eAAuB,EACvB,eAAuB,EACvB,gBAAwB;QAH/B;;;;mBAAO,cAAc;WAAQ;QAC7B;;;;mBAAO,eAAe;WAAQ;QAC9B;;;;mBAAO,eAAe;WAAQ;QAC9B;;;;mBAAO,gBAAgB;WAAQ;IAC9B,CAAC;IAEJ,UAAU,CACR,MAAiB,EACjB,OAAe,EACf,eAAuB;QAEvB,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC;IAED,UAAU,CAAC,UAAkB,EAAE,eAAuB;QACpD,OAAO,EAAS,CAAC;IACnB,CAAC;IAED,WAAW,CAAC,OAAe,EAAE,UAAkB;QAC7C,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC;IAED,WAAW,CAAC,SAAiB;QAC3B,OAAO,EAAS,CAAC;IACnB,CAAC;CACF;AA3BD,sCA2BC","sourcesContent":["import { RtcpHeader } from \"../../rtcp/header\";\nimport { RtpHeader } from \"../../rtp/rtp\";\n\nexport abstract class CipherAesBase {\n constructor(\n public srtpSessionKey: Buffer,\n public srtpSessionSalt: Buffer,\n public srtcpSessionKey: Buffer,\n public srtcpSessionSalt: Buffer,\n ) {}\n\n encryptRtp(\n header: RtpHeader,\n payload: Buffer,\n rolloverCounter: number,\n ): Buffer {\n return Buffer.from([]);\n }\n\n decryptRtp(cipherText: Buffer, rolloverCounter: number): [Buffer, RtpHeader] {\n return [] as any;\n }\n\n encryptRTCP(rawRtcp: Buffer, srtcpIndex: number): Buffer {\n return Buffer.from([]);\n }\n\n decryptRTCP(encrypted: Buffer): [Buffer, RtcpHeader] {\n return [] as any;\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../rtp/src/srtp/cipher/index.ts"],"names":[],"mappings":";;;AAGA,MAAsB,aAAa;IACjC,YACS,cAAsB,EACtB,eAAuB,EACvB,eAAuB,EACvB,gBAAwB;QAH/B;;;;mBAAO,cAAc;WAAQ;QAC7B;;;;mBAAO,eAAe;WAAQ;QAC9B;;;;mBAAO,eAAe;WAAQ;QAC9B;;;;mBAAO,gBAAgB;WAAQ;IAC9B,CAAC;IAEJ,UAAU,CACR,MAAiB,EACjB,OAAe,EACf,eAAuB;QAEvB,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC;IAED,UAAU,CAAC,UAAkB,EAAE,eAAuB;QACpD,OAAO,EAAS,CAAC;IACnB,CAAC;IAED,WAAW,CAAC,OAAe,EAAE,UAAkB;QAC7C,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC;IAED,WAAW,CAAC,SAAiB;QAC3B,OAAO,EAAS,CAAC;IACnB,CAAC;CACF;AA3BD,sCA2BC","sourcesContent":["import type { RtcpHeader } from \"../../rtcp/header\";\nimport type { RtpHeader } from \"../../rtp/rtp\";\n\nexport abstract class CipherAesBase {\n constructor(\n public srtpSessionKey: Buffer,\n public srtpSessionSalt: Buffer,\n public srtcpSessionKey: Buffer,\n public srtcpSessionSalt: Buffer,\n ) {}\n\n encryptRtp(\n header: RtpHeader,\n payload: Buffer,\n rolloverCounter: number,\n ): Buffer {\n return Buffer.from([]);\n }\n\n decryptRtp(cipherText: Buffer, rolloverCounter: number): [Buffer, RtpHeader] {\n return [] as any;\n }\n\n encryptRTCP(rawRtcp: Buffer, srtcpIndex: number): Buffer {\n return Buffer.from([]);\n }\n\n decryptRTCP(encrypted: Buffer): [Buffer, RtcpHeader] {\n return [] as any;\n }\n}\n"]}
@@ -1,8 +1,6 @@
1
- /// <reference types="node" />
2
- /// <reference types="node" />
3
- import { Hmac } from "crypto";
4
- import { CipherAesBase } from "../cipher";
5
- import { Profile } from "../const";
1
+ import { type Hmac } from "crypto";
2
+ import type { CipherAesBase } from "../cipher";
3
+ import { type Profile } from "../const";
6
4
  export declare class Context {
7
5
  masterKey: Buffer;
8
6
  masterSalt: Buffer;
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../../../../rtp/src/srtp/context/context.ts"],"names":[],"mappings":"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","sourcesContent":["import { Hmac, createHmac } from \"crypto\";\nimport { AES } from \"aes-js\";\n\nimport { CipherAesBase } from \"../cipher\";\nimport { CipherAesCtr } from \"../cipher/ctr\";\nimport { CipherAesGcm } from \"../cipher/gcm\";\nimport {\n Profile,\n ProtectionProfileAeadAes128Gcm,\n ProtectionProfileAes128CmHmacSha1_80,\n} from \"../const\";\n\nexport class Context {\n srtpSSRCStates: { [ssrc: number]: SrtpSsrcState } = {};\n srtpSessionKey: Buffer;\n srtpSessionSalt: Buffer;\n srtpSessionAuthTag: Buffer;\n srtpSessionAuth: Hmac;\n srtcpSSRCStates: { [ssrc: number]: SrtcpSSRCState } = {};\n srtcpSessionKey: Buffer;\n srtcpSessionSalt: Buffer;\n srtcpSessionAuthTag: Buffer;\n srtcpSessionAuth: Hmac;\n\n cipher: CipherAesBase;\n\n constructor(\n public masterKey: Buffer,\n public masterSalt: Buffer,\n public profile: Profile,\n ) {\n {\n // aes-js plaintext require 16byte\n // so need to padding to 14 byte\n const diff = 14 - masterSalt.length;\n if (diff > 0) {\n this.masterSalt = Buffer.concat([masterSalt, Buffer.alloc(diff)]);\n }\n }\n\n this.srtpSessionKey = this.generateSessionKey(0);\n this.srtpSessionSalt = this.generateSessionSalt(2);\n this.srtpSessionAuthTag = this.generateSessionAuthTag(1);\n this.srtpSessionAuth = createHmac(\"sha1\", this.srtpSessionAuthTag);\n\n this.srtcpSessionKey = this.generateSessionKey(3);\n this.srtcpSessionSalt = this.generateSessionSalt(5);\n this.srtcpSessionAuthTag = this.generateSessionAuthTag(4);\n this.srtcpSessionAuth = createHmac(\"sha1\", this.srtcpSessionAuthTag);\n\n switch (profile) {\n case ProtectionProfileAes128CmHmacSha1_80:\n this.cipher = new CipherAesCtr(\n this.srtpSessionKey,\n this.srtpSessionSalt,\n this.srtcpSessionKey,\n this.srtcpSessionSalt,\n this.srtpSessionAuthTag,\n this.srtcpSessionAuthTag,\n );\n break;\n case ProtectionProfileAeadAes128Gcm:\n this.cipher = new CipherAesGcm(\n this.srtpSessionKey,\n this.srtpSessionSalt,\n this.srtcpSessionKey,\n this.srtcpSessionSalt,\n );\n break;\n }\n }\n\n generateSessionKey(label: number) {\n let sessionKey = Buffer.from(this.masterSalt);\n\n const labelAndIndexOverKdr = Buffer.from([\n label,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n ]);\n for (\n let i = labelAndIndexOverKdr.length - 1, j = sessionKey.length - 1;\n i >= 0;\n i--, j--\n ) {\n sessionKey[j] = sessionKey[j] ^ labelAndIndexOverKdr[i];\n }\n\n sessionKey = Buffer.concat([sessionKey, Buffer.from([0x00, 0x00])]);\n const block = new AES(this.masterKey);\n return Buffer.from(block.encrypt(sessionKey) as ArrayBuffer);\n }\n\n generateSessionSalt(label: number) {\n let sessionSalt = Buffer.from(this.masterSalt);\n const labelAndIndexOverKdr = Buffer.from([\n label,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n ]);\n for (\n let i = labelAndIndexOverKdr.length - 1, j = sessionSalt.length - 1;\n i >= 0;\n i--, j--\n ) {\n sessionSalt[j] = sessionSalt[j] ^ labelAndIndexOverKdr[i];\n }\n sessionSalt = Buffer.concat([sessionSalt, Buffer.from([0x00, 0x00])]);\n const block = new AES(this.masterKey);\n sessionSalt = Buffer.from(block.encrypt(sessionSalt) as ArrayBuffer);\n return sessionSalt.slice(0, 14);\n }\n\n generateSessionAuthTag(label: number) {\n const sessionAuthTag = Buffer.from(this.masterSalt);\n const labelAndIndexOverKdr = Buffer.from([\n label,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n ]);\n for (\n let i = labelAndIndexOverKdr.length - 1, j = sessionAuthTag.length - 1;\n i >= 0;\n i--, j--\n ) {\n sessionAuthTag[j] = sessionAuthTag[j] ^ labelAndIndexOverKdr[i];\n }\n let firstRun = Buffer.concat([sessionAuthTag, Buffer.from([0x00, 0x00])]);\n let secondRun = Buffer.concat([sessionAuthTag, Buffer.from([0x00, 0x01])]);\n const block = new AES(this.masterKey);\n firstRun = Buffer.from(block.encrypt(firstRun) as ArrayBuffer);\n secondRun = Buffer.from(block.encrypt(secondRun) as ArrayBuffer);\n return Buffer.concat([firstRun, secondRun.slice(0, 4)]);\n }\n\n getSrtpSsrcState(ssrc: number) {\n let s = this.srtpSSRCStates[ssrc];\n if (s) return s;\n s = {\n ssrc,\n rolloverCounter: 0,\n lastSequenceNumber: 0,\n };\n this.srtpSSRCStates[ssrc] = s;\n return s;\n }\n\n getSrtcpSsrcState(ssrc: number) {\n let s = this.srtcpSSRCStates[ssrc];\n if (s) return s;\n s = {\n srtcpIndex: 0,\n ssrc,\n };\n this.srtcpSSRCStates[ssrc] = s;\n return s;\n }\n\n // 3.3.1. Packet Index Determination, and ROC, s_l Update\n // In particular, out-of-order RTP packets with\n // sequence numbers close to 2^16 or zero must be properly handled.\n updateRolloverCount(sequenceNumber: number, s: SrtpSsrcState) {\n if (!s.rolloverHasProcessed) {\n s.rolloverHasProcessed = true;\n } else if (sequenceNumber === 0) {\n if (s.lastSequenceNumber > MaxROCDisorder) {\n s.rolloverCounter++;\n }\n } else if (\n s.lastSequenceNumber < MaxROCDisorder &&\n sequenceNumber > MaxSequenceNumber - MaxROCDisorder\n ) {\n // https://github.com/shinyoshiaki/werift-webrtc/issues/94\n if (s.rolloverCounter > 0) {\n s.rolloverCounter--;\n }\n } else if (\n sequenceNumber < MaxROCDisorder &&\n s.lastSequenceNumber > MaxSequenceNumber - MaxROCDisorder\n ) {\n s.rolloverCounter++;\n }\n s.lastSequenceNumber = sequenceNumber;\n }\n\n generateSrtpAuthTag(buf: Buffer, roc: number) {\n this.srtpSessionAuth = createHmac(\"sha1\", this.srtpSessionAuthTag);\n const rocRaw = Buffer.alloc(4);\n rocRaw.writeUInt32BE(roc);\n\n return this.srtpSessionAuth\n .update(buf)\n .update(rocRaw)\n .digest()\n .slice(0, 10);\n }\n\n index(ssrc: number) {\n const s = this.srtcpSSRCStates[ssrc];\n if (!s) {\n return 0;\n }\n return s.srtcpIndex;\n }\n\n setIndex(ssrc: number, index: number) {\n const s = this.getSrtcpSsrcState(ssrc);\n s.srtcpIndex = index % 0x7fffffff;\n }\n}\n\nexport interface SrtpSsrcState {\n ssrc: number;\n rolloverCounter: number;\n rolloverHasProcessed?: boolean;\n lastSequenceNumber: number;\n}\n\nexport type SrtcpSSRCState = {\n srtcpIndex: number;\n ssrc: number;\n};\n\nconst MaxROCDisorder = 100;\nconst MaxSequenceNumber = 65535;\n"]}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../../../../rtp/src/srtp/context/context.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Hmac, createHmac } from \"crypto\";\nimport { AES } from \"aes-js\";\n\nimport type { CipherAesBase } from \"../cipher\";\nimport { CipherAesCtr } from \"../cipher/ctr\";\nimport { CipherAesGcm } from \"../cipher/gcm\";\nimport {\n type Profile,\n ProtectionProfileAeadAes128Gcm,\n ProtectionProfileAes128CmHmacSha1_80,\n} from \"../const\";\n\nexport class Context {\n srtpSSRCStates: { [ssrc: number]: SrtpSsrcState } = {};\n srtpSessionKey: Buffer;\n srtpSessionSalt: Buffer;\n srtpSessionAuthTag: Buffer;\n srtpSessionAuth: Hmac;\n srtcpSSRCStates: { [ssrc: number]: SrtcpSSRCState } = {};\n srtcpSessionKey: Buffer;\n srtcpSessionSalt: Buffer;\n srtcpSessionAuthTag: Buffer;\n srtcpSessionAuth: Hmac;\n\n cipher: CipherAesBase;\n\n constructor(\n public masterKey: Buffer,\n public masterSalt: Buffer,\n public profile: Profile,\n ) {\n {\n // aes-js plaintext require 16byte\n // so need to padding to 14 byte\n const diff = 14 - masterSalt.length;\n if (diff > 0) {\n this.masterSalt = Buffer.concat([masterSalt, Buffer.alloc(diff)]);\n }\n }\n\n this.srtpSessionKey = this.generateSessionKey(0);\n this.srtpSessionSalt = this.generateSessionSalt(2);\n this.srtpSessionAuthTag = this.generateSessionAuthTag(1);\n this.srtpSessionAuth = createHmac(\"sha1\", this.srtpSessionAuthTag);\n\n this.srtcpSessionKey = this.generateSessionKey(3);\n this.srtcpSessionSalt = this.generateSessionSalt(5);\n this.srtcpSessionAuthTag = this.generateSessionAuthTag(4);\n this.srtcpSessionAuth = createHmac(\"sha1\", this.srtcpSessionAuthTag);\n\n switch (profile) {\n case ProtectionProfileAes128CmHmacSha1_80:\n this.cipher = new CipherAesCtr(\n this.srtpSessionKey,\n this.srtpSessionSalt,\n this.srtcpSessionKey,\n this.srtcpSessionSalt,\n this.srtpSessionAuthTag,\n this.srtcpSessionAuthTag,\n );\n break;\n case ProtectionProfileAeadAes128Gcm:\n this.cipher = new CipherAesGcm(\n this.srtpSessionKey,\n this.srtpSessionSalt,\n this.srtcpSessionKey,\n this.srtcpSessionSalt,\n );\n break;\n }\n }\n\n generateSessionKey(label: number) {\n let sessionKey = Buffer.from(this.masterSalt);\n\n const labelAndIndexOverKdr = Buffer.from([\n label,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n ]);\n for (\n let i = labelAndIndexOverKdr.length - 1, j = sessionKey.length - 1;\n i >= 0;\n i--, j--\n ) {\n sessionKey[j] = sessionKey[j] ^ labelAndIndexOverKdr[i];\n }\n\n sessionKey = Buffer.concat([sessionKey, Buffer.from([0x00, 0x00])]);\n const block = new AES(this.masterKey);\n return Buffer.from(block.encrypt(sessionKey) as ArrayBuffer);\n }\n\n generateSessionSalt(label: number) {\n let sessionSalt = Buffer.from(this.masterSalt);\n const labelAndIndexOverKdr = Buffer.from([\n label,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n ]);\n for (\n let i = labelAndIndexOverKdr.length - 1, j = sessionSalt.length - 1;\n i >= 0;\n i--, j--\n ) {\n sessionSalt[j] = sessionSalt[j] ^ labelAndIndexOverKdr[i];\n }\n sessionSalt = Buffer.concat([sessionSalt, Buffer.from([0x00, 0x00])]);\n const block = new AES(this.masterKey);\n sessionSalt = Buffer.from(block.encrypt(sessionSalt) as ArrayBuffer);\n return sessionSalt.slice(0, 14);\n }\n\n generateSessionAuthTag(label: number) {\n const sessionAuthTag = Buffer.from(this.masterSalt);\n const labelAndIndexOverKdr = Buffer.from([\n label,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n ]);\n for (\n let i = labelAndIndexOverKdr.length - 1, j = sessionAuthTag.length - 1;\n i >= 0;\n i--, j--\n ) {\n sessionAuthTag[j] = sessionAuthTag[j] ^ labelAndIndexOverKdr[i];\n }\n let firstRun = Buffer.concat([sessionAuthTag, Buffer.from([0x00, 0x00])]);\n let secondRun = Buffer.concat([sessionAuthTag, Buffer.from([0x00, 0x01])]);\n const block = new AES(this.masterKey);\n firstRun = Buffer.from(block.encrypt(firstRun) as ArrayBuffer);\n secondRun = Buffer.from(block.encrypt(secondRun) as ArrayBuffer);\n return Buffer.concat([firstRun, secondRun.slice(0, 4)]);\n }\n\n getSrtpSsrcState(ssrc: number) {\n let s = this.srtpSSRCStates[ssrc];\n if (s) return s;\n s = {\n ssrc,\n rolloverCounter: 0,\n lastSequenceNumber: 0,\n };\n this.srtpSSRCStates[ssrc] = s;\n return s;\n }\n\n getSrtcpSsrcState(ssrc: number) {\n let s = this.srtcpSSRCStates[ssrc];\n if (s) return s;\n s = {\n srtcpIndex: 0,\n ssrc,\n };\n this.srtcpSSRCStates[ssrc] = s;\n return s;\n }\n\n // 3.3.1. Packet Index Determination, and ROC, s_l Update\n // In particular, out-of-order RTP packets with\n // sequence numbers close to 2^16 or zero must be properly handled.\n updateRolloverCount(sequenceNumber: number, s: SrtpSsrcState) {\n if (!s.rolloverHasProcessed) {\n s.rolloverHasProcessed = true;\n } else if (sequenceNumber === 0) {\n if (s.lastSequenceNumber > MaxROCDisorder) {\n s.rolloverCounter++;\n }\n } else if (\n s.lastSequenceNumber < MaxROCDisorder &&\n sequenceNumber > MaxSequenceNumber - MaxROCDisorder\n ) {\n // https://github.com/shinyoshiaki/werift-webrtc/issues/94\n if (s.rolloverCounter > 0) {\n s.rolloverCounter--;\n }\n } else if (\n sequenceNumber < MaxROCDisorder &&\n s.lastSequenceNumber > MaxSequenceNumber - MaxROCDisorder\n ) {\n s.rolloverCounter++;\n }\n s.lastSequenceNumber = sequenceNumber;\n }\n\n generateSrtpAuthTag(buf: Buffer, roc: number) {\n this.srtpSessionAuth = createHmac(\"sha1\", this.srtpSessionAuthTag);\n const rocRaw = Buffer.alloc(4);\n rocRaw.writeUInt32BE(roc);\n\n return this.srtpSessionAuth\n .update(buf)\n .update(rocRaw)\n .digest()\n .slice(0, 10);\n }\n\n index(ssrc: number) {\n const s = this.srtcpSSRCStates[ssrc];\n if (!s) {\n return 0;\n }\n return s.srtcpIndex;\n }\n\n setIndex(ssrc: number, index: number) {\n const s = this.getSrtcpSsrcState(ssrc);\n s.srtcpIndex = index % 0x7fffffff;\n }\n}\n\nexport interface SrtpSsrcState {\n ssrc: number;\n rolloverCounter: number;\n rolloverHasProcessed?: boolean;\n lastSequenceNumber: number;\n}\n\nexport type SrtcpSSRCState = {\n srtcpIndex: number;\n ssrc: number;\n};\n\nconst MaxROCDisorder = 100;\nconst MaxSequenceNumber = 65535;\n"]}