werift 0.17.6 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (338) hide show
  1. package/lib/common/src/binary.d.ts +1 -0
  2. package/lib/common/src/binary.js +74 -21
  3. package/lib/common/src/binary.js.map +1 -1
  4. package/lib/common/src/log.js +18 -0
  5. package/lib/common/src/log.js.map +1 -1
  6. package/lib/common/src/network.d.ts +1 -1
  7. package/lib/common/src/network.js +1 -0
  8. package/lib/common/src/network.js.map +1 -1
  9. package/lib/common/src/promise.js +22 -7
  10. package/lib/common/src/promise.js.map +1 -1
  11. package/lib/common/src/type.d.ts +1 -1
  12. package/lib/dtls/src/cipher/const.d.ts +7 -7
  13. package/lib/dtls/src/cipher/key-exchange.js +24 -1
  14. package/lib/dtls/src/cipher/key-exchange.js.map +1 -1
  15. package/lib/dtls/src/cipher/suites/abstract.d.ts +2 -2
  16. package/lib/dtls/src/cipher/suites/abstract.js +36 -2
  17. package/lib/dtls/src/cipher/suites/abstract.js.map +1 -1
  18. package/lib/dtls/src/cipher/suites/aead.js +60 -6
  19. package/lib/dtls/src/cipher/suites/aead.js.map +1 -1
  20. package/lib/dtls/src/client.js +62 -51
  21. package/lib/dtls/src/client.js.map +1 -1
  22. package/lib/dtls/src/context/cipher.js +151 -59
  23. package/lib/dtls/src/context/cipher.js.map +1 -1
  24. package/lib/dtls/src/context/dtls.js +90 -14
  25. package/lib/dtls/src/context/dtls.js.map +1 -1
  26. package/lib/dtls/src/context/srtp.d.ts +1 -1
  27. package/lib/dtls/src/context/srtp.js +8 -0
  28. package/lib/dtls/src/context/srtp.js.map +1 -1
  29. package/lib/dtls/src/context/transport.js +14 -2
  30. package/lib/dtls/src/context/transport.js.map +1 -1
  31. package/lib/dtls/src/flight/client/flight1.js +6 -1
  32. package/lib/dtls/src/flight/client/flight1.js.map +1 -1
  33. package/lib/dtls/src/flight/client/flight5.js +12 -2
  34. package/lib/dtls/src/flight/client/flight5.js.map +1 -1
  35. package/lib/dtls/src/flight/flight.d.ts +1 -1
  36. package/lib/dtls/src/flight/flight.js +42 -7
  37. package/lib/dtls/src/flight/flight.js.map +1 -1
  38. package/lib/dtls/src/flight/server/flight2.js +4 -2
  39. package/lib/dtls/src/flight/server/flight2.js.map +1 -1
  40. package/lib/dtls/src/flight/server/flight4.js +12 -2
  41. package/lib/dtls/src/flight/server/flight4.js.map +1 -1
  42. package/lib/dtls/src/flight/server/flight6.js +6 -1
  43. package/lib/dtls/src/flight/server/flight6.js.map +1 -1
  44. package/lib/dtls/src/handshake/extensions/ellipticCurves.js +27 -7
  45. package/lib/dtls/src/handshake/extensions/ellipticCurves.js.map +1 -1
  46. package/lib/dtls/src/handshake/extensions/extendedMasterSecret.js +6 -1
  47. package/lib/dtls/src/handshake/extensions/extendedMasterSecret.js.map +1 -1
  48. package/lib/dtls/src/handshake/extensions/renegotiationIndication.js +27 -7
  49. package/lib/dtls/src/handshake/extensions/renegotiationIndication.js.map +1 -1
  50. package/lib/dtls/src/handshake/extensions/signature.js +27 -7
  51. package/lib/dtls/src/handshake/extensions/signature.js.map +1 -1
  52. package/lib/dtls/src/handshake/extensions/useSrtp.js +39 -9
  53. package/lib/dtls/src/handshake/extensions/useSrtp.js.map +1 -1
  54. package/lib/dtls/src/handshake/message/alert.js +21 -6
  55. package/lib/dtls/src/handshake/message/alert.js.map +1 -1
  56. package/lib/dtls/src/handshake/message/certificate.js +26 -5
  57. package/lib/dtls/src/handshake/message/certificate.js.map +1 -1
  58. package/lib/dtls/src/handshake/message/changeCipherSpec.js +14 -4
  59. package/lib/dtls/src/handshake/message/changeCipherSpec.js.map +1 -1
  60. package/lib/dtls/src/handshake/message/client/certificateVerify.js +33 -7
  61. package/lib/dtls/src/handshake/message/client/certificateVerify.js.map +1 -1
  62. package/lib/dtls/src/handshake/message/client/hello.js +68 -18
  63. package/lib/dtls/src/handshake/message/client/hello.js.map +1 -1
  64. package/lib/dtls/src/handshake/message/client/keyExchange.js +26 -5
  65. package/lib/dtls/src/handshake/message/client/keyExchange.js.map +1 -1
  66. package/lib/dtls/src/handshake/message/finished.js +18 -2
  67. package/lib/dtls/src/handshake/message/finished.js.map +1 -1
  68. package/lib/dtls/src/handshake/message/server/certificateRequest.js +40 -9
  69. package/lib/dtls/src/handshake/message/server/certificateRequest.js.map +1 -1
  70. package/lib/dtls/src/handshake/message/server/hello.js +60 -14
  71. package/lib/dtls/src/handshake/message/server/hello.js.map +1 -1
  72. package/lib/dtls/src/handshake/message/server/helloDone.js +18 -2
  73. package/lib/dtls/src/handshake/message/server/helloDone.js.map +1 -1
  74. package/lib/dtls/src/handshake/message/server/helloVerifyRequest.js +33 -7
  75. package/lib/dtls/src/handshake/message/server/helloVerifyRequest.js.map +1 -1
  76. package/lib/dtls/src/handshake/message/server/keyExchange.js +75 -19
  77. package/lib/dtls/src/handshake/message/server/keyExchange.js.map +1 -1
  78. package/lib/dtls/src/handshake/random.js +21 -6
  79. package/lib/dtls/src/handshake/random.js.map +1 -1
  80. package/lib/dtls/src/record/builder.d.ts +1 -1
  81. package/lib/dtls/src/record/message/fragment.js +49 -14
  82. package/lib/dtls/src/record/message/fragment.js.map +1 -1
  83. package/lib/dtls/src/record/message/header.js +84 -24
  84. package/lib/dtls/src/record/message/header.js.map +1 -1
  85. package/lib/dtls/src/record/message/plaintext.js +21 -6
  86. package/lib/dtls/src/record/message/plaintext.js.map +1 -1
  87. package/lib/dtls/src/server.js +59 -42
  88. package/lib/dtls/src/server.js.map +1 -1
  89. package/lib/dtls/src/socket.js +153 -64
  90. package/lib/dtls/src/socket.js.map +1 -1
  91. package/lib/dtls/src/transport.js +38 -11
  92. package/lib/dtls/src/transport.js.map +1 -1
  93. package/lib/dtls/src/typings/domain.d.ts +4 -4
  94. package/lib/ice/src/candidate.js +66 -11
  95. package/lib/ice/src/candidate.js.map +1 -1
  96. package/lib/ice/src/dns/lookup.js +12 -1
  97. package/lib/ice/src/dns/lookup.js.map +1 -1
  98. package/lib/ice/src/exceptions.js +27 -2
  99. package/lib/ice/src/exceptions.js.map +1 -1
  100. package/lib/ice/src/helper.d.ts +1 -1
  101. package/lib/ice/src/helper.js +12 -2
  102. package/lib/ice/src/helper.js.map +1 -1
  103. package/lib/ice/src/ice.d.ts +9 -3
  104. package/lib/ice/src/ice.js +407 -155
  105. package/lib/ice/src/ice.js.map +1 -1
  106. package/lib/ice/src/stun/attributes.d.ts +3 -3
  107. package/lib/ice/src/stun/attributes.js +6 -1
  108. package/lib/ice/src/stun/attributes.js.map +1 -1
  109. package/lib/ice/src/stun/message.d.ts +4 -0
  110. package/lib/ice/src/stun/message.js +24 -3
  111. package/lib/ice/src/stun/message.js.map +1 -1
  112. package/lib/ice/src/stun/protocol.js +64 -15
  113. package/lib/ice/src/stun/protocol.js.map +1 -1
  114. package/lib/ice/src/stun/transaction.js +99 -36
  115. package/lib/ice/src/stun/transaction.js.map +1 -1
  116. package/lib/ice/src/transport.js +57 -21
  117. package/lib/ice/src/transport.js.map +1 -1
  118. package/lib/ice/src/turn/protocol.js +176 -40
  119. package/lib/ice/src/turn/protocol.js.map +1 -1
  120. package/lib/ice/src/types/model.d.ts +1 -1
  121. package/lib/rtp/src/codec/av1.d.ts +1 -1
  122. package/lib/rtp/src/codec/av1.js +118 -30
  123. package/lib/rtp/src/codec/av1.js.map +1 -1
  124. package/lib/rtp/src/codec/base.js +8 -0
  125. package/lib/rtp/src/codec/base.js.map +1 -1
  126. package/lib/rtp/src/codec/h264.js +55 -0
  127. package/lib/rtp/src/codec/h264.js.map +1 -1
  128. package/lib/rtp/src/codec/index.d.ts +2 -0
  129. package/lib/rtp/src/codec/index.js +12 -2
  130. package/lib/rtp/src/codec/index.js.map +1 -1
  131. package/lib/rtp/src/codec/opus.js +8 -0
  132. package/lib/rtp/src/codec/opus.js.map +1 -1
  133. package/lib/rtp/src/codec/vp8.js +102 -3
  134. package/lib/rtp/src/codec/vp8.js.map +1 -1
  135. package/lib/rtp/src/codec/vp9.js +164 -7
  136. package/lib/rtp/src/codec/vp9.js.map +1 -1
  137. package/lib/rtp/src/container/ebml/ebml.js +30 -3
  138. package/lib/rtp/src/container/ebml/ebml.js.map +1 -1
  139. package/lib/rtp/src/container/webm.d.ts +1 -1
  140. package/lib/rtp/src/container/webm.js +44 -13
  141. package/lib/rtp/src/container/webm.js.map +1 -1
  142. package/lib/rtp/src/processor/depacketizer.d.ts +16 -8
  143. package/lib/rtp/src/processor/depacketizer.js +59 -22
  144. package/lib/rtp/src/processor/depacketizer.js.map +1 -1
  145. package/lib/rtp/src/processor/depacketizerCallback.js +24 -8
  146. package/lib/rtp/src/processor/depacketizerCallback.js.map +1 -1
  147. package/lib/rtp/src/processor/depacketizerTransformer.d.ts +2 -2
  148. package/lib/rtp/src/processor/depacketizerTransformer.js +6 -0
  149. package/lib/rtp/src/processor/depacketizerTransformer.js.map +1 -1
  150. package/lib/rtp/src/processor/index.d.ts +4 -2
  151. package/lib/rtp/src/processor/index.js +4 -2
  152. package/lib/rtp/src/processor/index.js.map +1 -1
  153. package/lib/rtp/src/processor/interface.d.ts +4 -0
  154. package/lib/rtp/src/processor/interface.js.map +1 -1
  155. package/lib/rtp/src/processor/jitterBuffer.d.ts +2 -1
  156. package/lib/rtp/src/processor/jitterBuffer.js +40 -8
  157. package/lib/rtp/src/processor/jitterBuffer.js.map +1 -1
  158. package/lib/rtp/src/processor/jitterBufferCallback.js +30 -9
  159. package/lib/rtp/src/processor/jitterBufferCallback.js.map +1 -1
  160. package/lib/rtp/src/processor/jitterBufferTransformer.js +12 -1
  161. package/lib/rtp/src/processor/jitterBufferTransformer.js.map +1 -1
  162. package/lib/rtp/src/processor/lipsync.d.ts +42 -0
  163. package/lib/rtp/src/processor/lipsync.js +178 -0
  164. package/lib/rtp/src/processor/lipsync.js.map +1 -0
  165. package/lib/rtp/src/processor/lipsyncCallback.d.ts +10 -0
  166. package/lib/rtp/src/processor/lipsyncCallback.js +59 -0
  167. package/lib/rtp/src/processor/lipsyncCallback.js.map +1 -0
  168. package/lib/rtp/src/processor/ntpTime.d.ts +24 -0
  169. package/lib/rtp/src/processor/ntpTime.js +91 -0
  170. package/lib/rtp/src/processor/ntpTime.js.map +1 -0
  171. package/lib/rtp/src/processor/ntpTimeCallback.d.ts +7 -0
  172. package/lib/rtp/src/processor/ntpTimeCallback.js +36 -0
  173. package/lib/rtp/src/processor/ntpTimeCallback.js.map +1 -0
  174. package/lib/rtp/src/processor/source/index.d.ts +1 -0
  175. package/lib/rtp/src/processor/source/index.js +1 -0
  176. package/lib/rtp/src/processor/source/index.js.map +1 -1
  177. package/lib/rtp/src/processor/source/rtcpCallback.d.ts +12 -0
  178. package/lib/rtp/src/processor/source/rtcpCallback.js +33 -0
  179. package/lib/rtp/src/processor/source/rtcpCallback.js.map +1 -0
  180. package/lib/rtp/src/processor/source/rtpCallback.js +28 -12
  181. package/lib/rtp/src/processor/source/rtpCallback.js.map +1 -1
  182. package/lib/rtp/src/processor/source/rtpStream.js +38 -10
  183. package/lib/rtp/src/processor/source/rtpStream.js.map +1 -1
  184. package/lib/rtp/src/processor/webm.d.ts +11 -4
  185. package/lib/rtp/src/processor/webm.js +169 -46
  186. package/lib/rtp/src/processor/webm.js.map +1 -1
  187. package/lib/rtp/src/processor/webmCallback.d.ts +5 -3
  188. package/lib/rtp/src/processor/webmCallback.js +52 -8
  189. package/lib/rtp/src/processor/webmCallback.js.map +1 -1
  190. package/lib/rtp/src/processor/webmStream.d.ts +2 -2
  191. package/lib/rtp/src/processor/webmStream.js +24 -0
  192. package/lib/rtp/src/processor/webmStream.js.map +1 -1
  193. package/lib/rtp/src/processor_old/base.d.ts +18 -0
  194. package/lib/rtp/src/processor_old/base.js +51 -0
  195. package/lib/rtp/src/processor_old/base.js.map +1 -0
  196. package/lib/rtp/src/processor_old/lipsync.d.ts +30 -0
  197. package/lib/rtp/src/processor_old/lipsync.js +119 -0
  198. package/lib/rtp/src/processor_old/lipsync.js.map +1 -0
  199. package/lib/rtp/src/rtcp/header.js +30 -5
  200. package/lib/rtp/src/rtcp/header.js.map +1 -1
  201. package/lib/rtp/src/rtcp/psfb/fullIntraRequest.d.ts +1 -1
  202. package/lib/rtp/src/rtcp/psfb/fullIntraRequest.js +30 -3
  203. package/lib/rtp/src/rtcp/psfb/fullIntraRequest.js.map +1 -1
  204. package/lib/rtp/src/rtcp/psfb/index.d.ts +1 -1
  205. package/lib/rtp/src/rtcp/psfb/index.js +18 -2
  206. package/lib/rtp/src/rtcp/psfb/index.js.map +1 -1
  207. package/lib/rtp/src/rtcp/psfb/pictureLossIndication.js +30 -3
  208. package/lib/rtp/src/rtcp/psfb/pictureLossIndication.js.map +1 -1
  209. package/lib/rtp/src/rtcp/psfb/remb.js +66 -5
  210. package/lib/rtp/src/rtcp/psfb/remb.js.map +1 -1
  211. package/lib/rtp/src/rtcp/rr.js +68 -4
  212. package/lib/rtp/src/rtcp/rr.js.map +1 -1
  213. package/lib/rtp/src/rtcp/rtcp.d.ts +1 -1
  214. package/lib/rtp/src/rtcp/rtpfb/index.d.ts +1 -1
  215. package/lib/rtp/src/rtcp/rtpfb/index.js +24 -2
  216. package/lib/rtp/src/rtcp/rtpfb/index.js.map +1 -1
  217. package/lib/rtp/src/rtcp/rtpfb/nack.d.ts +5 -0
  218. package/lib/rtp/src/rtcp/rtpfb/nack.js +43 -3
  219. package/lib/rtp/src/rtcp/rtpfb/nack.js.map +1 -1
  220. package/lib/rtp/src/rtcp/rtpfb/twcc.js +154 -11
  221. package/lib/rtp/src/rtcp/rtpfb/twcc.js.map +1 -1
  222. package/lib/rtp/src/rtcp/sdes.js +42 -4
  223. package/lib/rtp/src/rtcp/sdes.js.map +1 -1
  224. package/lib/rtp/src/rtcp/sr.js +56 -5
  225. package/lib/rtp/src/rtcp/sr.js.map +1 -1
  226. package/lib/rtp/src/rtp/red/encoder.js +18 -3
  227. package/lib/rtp/src/rtp/red/encoder.js.map +1 -1
  228. package/lib/rtp/src/rtp/red/handler.js +12 -2
  229. package/lib/rtp/src/rtp/red/handler.js.map +1 -1
  230. package/lib/rtp/src/rtp/red/packet.js +18 -2
  231. package/lib/rtp/src/rtp/red/packet.js.map +1 -1
  232. package/lib/rtp/src/rtp/rtp.d.ts +3 -3
  233. package/lib/rtp/src/rtp/rtp.js +104 -17
  234. package/lib/rtp/src/rtp/rtp.js.map +1 -1
  235. package/lib/rtp/src/srtp/cipher/ctr.js +26 -10
  236. package/lib/rtp/src/srtp/cipher/ctr.js.map +1 -1
  237. package/lib/rtp/src/srtp/cipher/gcm.d.ts +3 -0
  238. package/lib/rtp/src/srtp/cipher/gcm.js +40 -20
  239. package/lib/rtp/src/srtp/cipher/gcm.js.map +1 -1
  240. package/lib/rtp/src/srtp/cipher/index.js +24 -4
  241. package/lib/rtp/src/srtp/cipher/index.js.map +1 -1
  242. package/lib/rtp/src/srtp/const.d.ts +1 -1
  243. package/lib/rtp/src/srtp/context/context.d.ts +1 -1
  244. package/lib/rtp/src/srtp/context/context.js +84 -5
  245. package/lib/rtp/src/srtp/context/context.js.map +1 -1
  246. package/lib/rtp/src/srtp/session.d.ts +2 -2
  247. package/lib/rtp/src/srtp/session.js +24 -1
  248. package/lib/rtp/src/srtp/session.js.map +1 -1
  249. package/lib/rtp/src/srtp/srtcp.js +15 -5
  250. package/lib/rtp/src/srtp/srtcp.js.map +1 -1
  251. package/lib/rtp/src/srtp/srtp.js +15 -5
  252. package/lib/rtp/src/srtp/srtp.js.map +1 -1
  253. package/lib/sctp/src/chunk.js +349 -69
  254. package/lib/sctp/src/chunk.js.map +1 -1
  255. package/lib/sctp/src/helper.d.ts +1 -1
  256. package/lib/sctp/src/param.d.ts +3 -3
  257. package/lib/sctp/src/param.js +66 -11
  258. package/lib/sctp/src/param.js.map +1 -1
  259. package/lib/sctp/src/sctp.d.ts +1 -1
  260. package/lib/sctp/src/sctp.js +479 -138
  261. package/lib/sctp/src/sctp.js.map +1 -1
  262. package/lib/sctp/src/transport.js +31 -10
  263. package/lib/sctp/src/transport.js.map +1 -1
  264. package/lib/webrtc/src/dataChannel.d.ts +1 -1
  265. package/lib/webrtc/src/dataChannel.js +145 -15
  266. package/lib/webrtc/src/dataChannel.js.map +1 -1
  267. package/lib/webrtc/src/helper.js +37 -12
  268. package/lib/webrtc/src/helper.js.map +1 -1
  269. package/lib/webrtc/src/media/parameters.d.ts +1 -1
  270. package/lib/webrtc/src/media/parameters.js +124 -3
  271. package/lib/webrtc/src/media/parameters.js.map +1 -1
  272. package/lib/webrtc/src/media/receiver/nack.d.ts +4 -4
  273. package/lib/webrtc/src/media/receiver/nack.js +85 -33
  274. package/lib/webrtc/src/media/receiver/nack.js.map +1 -1
  275. package/lib/webrtc/src/media/receiver/receiverTwcc.d.ts +1 -1
  276. package/lib/webrtc/src/media/receiver/receiverTwcc.js +42 -6
  277. package/lib/webrtc/src/media/receiver/receiverTwcc.js.map +1 -1
  278. package/lib/webrtc/src/media/receiver/statistics.js +61 -5
  279. package/lib/webrtc/src/media/receiver/statistics.js.map +1 -1
  280. package/lib/webrtc/src/media/router.d.ts +1 -1
  281. package/lib/webrtc/src/media/router.js +108 -83
  282. package/lib/webrtc/src/media/router.js.map +1 -1
  283. package/lib/webrtc/src/media/rtpReceiver.js +188 -33
  284. package/lib/webrtc/src/media/rtpReceiver.js.map +1 -1
  285. package/lib/webrtc/src/media/rtpSender.js +279 -42
  286. package/lib/webrtc/src/media/rtpSender.js.map +1 -1
  287. package/lib/webrtc/src/media/rtpTransceiver.d.ts +2 -2
  288. package/lib/webrtc/src/media/rtpTransceiver.js +102 -18
  289. package/lib/webrtc/src/media/rtpTransceiver.js.map +1 -1
  290. package/lib/webrtc/src/media/sender/cumulativeResult.js +36 -6
  291. package/lib/webrtc/src/media/sender/cumulativeResult.js.map +1 -1
  292. package/lib/webrtc/src/media/sender/senderBWE.js +57 -12
  293. package/lib/webrtc/src/media/sender/senderBWE.js.map +1 -1
  294. package/lib/webrtc/src/media/track.js +135 -24
  295. package/lib/webrtc/src/media/track.js.map +1 -1
  296. package/lib/webrtc/src/nonstandard/recorder/index.d.ts +7 -4
  297. package/lib/webrtc/src/nonstandard/recorder/index.js +50 -6
  298. package/lib/webrtc/src/nonstandard/recorder/index.js.map +1 -1
  299. package/lib/webrtc/src/nonstandard/recorder/writer/index.js +12 -2
  300. package/lib/webrtc/src/nonstandard/recorder/writer/index.js.map +1 -1
  301. package/lib/webrtc/src/nonstandard/recorder/writer/webm.d.ts +2 -2
  302. package/lib/webrtc/src/nonstandard/recorder/writer/webm.js +39 -35
  303. package/lib/webrtc/src/nonstandard/recorder/writer/webm.js.map +1 -1
  304. package/lib/webrtc/src/nonstandard/userMedia.js +158 -56
  305. package/lib/webrtc/src/nonstandard/userMedia.js.map +1 -1
  306. package/lib/webrtc/src/peerConnection.d.ts +2 -2
  307. package/lib/webrtc/src/peerConnection.js +260 -58
  308. package/lib/webrtc/src/peerConnection.js.map +1 -1
  309. package/lib/webrtc/src/sdp.js +287 -24
  310. package/lib/webrtc/src/sdp.js.map +1 -1
  311. package/lib/webrtc/src/transport/dtls.d.ts +3 -3
  312. package/lib/webrtc/src/transport/dtls.js +185 -30
  313. package/lib/webrtc/src/transport/dtls.js.map +1 -1
  314. package/lib/webrtc/src/transport/ice.d.ts +2 -2
  315. package/lib/webrtc/src/transport/ice.js +193 -25
  316. package/lib/webrtc/src/transport/ice.js.map +1 -1
  317. package/lib/webrtc/src/transport/sctp.js +193 -101
  318. package/lib/webrtc/src/transport/sctp.js.map +1 -1
  319. package/lib/webrtc/src/types/domain.d.ts +3 -3
  320. package/lib/webrtc/src/types/util.d.ts +2 -2
  321. package/lib/webrtc/src/utils.js +12 -2
  322. package/lib/webrtc/src/utils.js.map +1 -1
  323. package/package.json +15 -15
  324. package/src/dataChannel.ts +3 -1
  325. package/src/media/receiver/nack.ts +23 -19
  326. package/src/media/rtpReceiver.ts +5 -0
  327. package/src/media/rtpSender.ts +22 -19
  328. package/src/nonstandard/recorder/index.ts +12 -4
  329. package/src/nonstandard/recorder/writer/webm.ts +42 -50
  330. package/src/transport/dtls.ts +7 -3
  331. package/src/transport/ice.ts +6 -3
  332. package/src/transport/sctp.ts +3 -1
  333. package/lib/rtp/src/processor/avBuffer.d.ts +0 -36
  334. package/lib/rtp/src/processor/avBuffer.js +0 -107
  335. package/lib/rtp/src/processor/avBuffer.js.map +0 -1
  336. package/lib/rtp/src/processor/avBufferCallback.d.ts +0 -10
  337. package/lib/rtp/src/processor/avBufferCallback.js +0 -27
  338. package/lib/rtp/src/processor/avBufferCallback.js.map +0 -1
@@ -9,9 +9,24 @@ const src_1 = require("../../../common/src");
9
9
  const rtcp_1 = require("./rtcp");
10
10
  class RtcpRrPacket {
11
11
  constructor(props = {}) {
12
- this.ssrc = 0;
13
- this.reports = [];
14
- this.type = RtcpRrPacket.type;
12
+ Object.defineProperty(this, "ssrc", {
13
+ enumerable: true,
14
+ configurable: true,
15
+ writable: true,
16
+ value: 0
17
+ });
18
+ Object.defineProperty(this, "reports", {
19
+ enumerable: true,
20
+ configurable: true,
21
+ writable: true,
22
+ value: []
23
+ });
24
+ Object.defineProperty(this, "type", {
25
+ enumerable: true,
26
+ configurable: true,
27
+ writable: true,
28
+ value: RtcpRrPacket.type
29
+ });
15
30
  Object.assign(this, props);
16
31
  }
17
32
  serialize() {
@@ -34,9 +49,58 @@ class RtcpRrPacket {
34
49
  }
35
50
  }
36
51
  exports.RtcpRrPacket = RtcpRrPacket;
37
- RtcpRrPacket.type = 201;
52
+ Object.defineProperty(RtcpRrPacket, "type", {
53
+ enumerable: true,
54
+ configurable: true,
55
+ writable: true,
56
+ value: 201
57
+ });
38
58
  class RtcpReceiverInfo {
39
59
  constructor(props = {}) {
60
+ Object.defineProperty(this, "ssrc", {
61
+ enumerable: true,
62
+ configurable: true,
63
+ writable: true,
64
+ value: void 0
65
+ });
66
+ Object.defineProperty(this, "fractionLost", {
67
+ enumerable: true,
68
+ configurable: true,
69
+ writable: true,
70
+ value: void 0
71
+ });
72
+ Object.defineProperty(this, "packetsLost", {
73
+ enumerable: true,
74
+ configurable: true,
75
+ writable: true,
76
+ value: void 0
77
+ });
78
+ Object.defineProperty(this, "highestSequence", {
79
+ enumerable: true,
80
+ configurable: true,
81
+ writable: true,
82
+ value: void 0
83
+ });
84
+ Object.defineProperty(this, "jitter", {
85
+ enumerable: true,
86
+ configurable: true,
87
+ writable: true,
88
+ value: void 0
89
+ });
90
+ /**last SR */
91
+ Object.defineProperty(this, "lsr", {
92
+ enumerable: true,
93
+ configurable: true,
94
+ writable: true,
95
+ value: void 0
96
+ });
97
+ /**delay since last SR */
98
+ Object.defineProperty(this, "dlsr", {
99
+ enumerable: true,
100
+ configurable: true,
101
+ writable: true,
102
+ value: void 0
103
+ });
40
104
  Object.assign(this, props);
41
105
  }
42
106
  serialize() {
@@ -1 +1 @@
1
- {"version":3,"file":"rr.js","sourceRoot":"","sources":["../../../../../rtp/src/rtcp/rr.ts"],"names":[],"mappings":";;;;;;AAAA,yDAAiC;AAEjC,6CAAiE;AACjE,iCAA6C;AAE7C,MAAa,YAAY;IAMvB,YAAY,QAA+B,EAAE;QAL7C,SAAI,GAAW,CAAC,CAAC;QACjB,YAAO,GAAuB,EAAE,CAAC;QAExB,SAAI,GAAG,YAAY,CAAC,IAAI,CAAC;QAGhC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,SAAS;QACP,IAAI,OAAO,GAAG,IAAA,kBAAY,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7C,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;YACtB,OAAO;YACP,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;SACpD,CAAC,CAAC;QACH,OAAO,0BAAmB,CAAC,SAAS,CAClC,YAAY,CAAC,IAAI,EACjB,IAAI,CAAC,OAAO,CAAC,MAAM,EACnB,OAAO,EACP,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAC/B,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,IAAY,EAAE,KAAa;QAC5C,MAAM,CAAC,IAAI,CAAC,GAAG,IAAA,kBAAY,EAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,MAAM,OAAO,GAAuB,EAAE,CAAC;QACvC,IAAA,eAAK,EAAC,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;YACxB,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YACtE,GAAG,IAAI,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,YAAY,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IAC7C,CAAC;;AAjCH,oCAkCC;AA/BiB,iBAAI,GAAG,GAAG,CAAC;AAiC7B,MAAa,gBAAgB;IAW3B,YAAY,QAAmC,EAAE;QAC/C,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,SAAS;QACP,OAAO,IAAA,kBAAY,EACjB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACrB;YACE,IAAI,CAAC,IAAI;YACT,IAAI,CAAC,YAAY;YACjB,IAAI,CAAC,WAAW;YAChB,IAAI,CAAC,eAAe;YACpB,IAAI,CAAC,MAAM;YACX,IAAI,CAAC,GAAG;YACR,IAAI,CAAC,IAAI;SACV,CACF,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,IAAY;QAC7B,MAAM,CACJ,IAAI,EACJ,YAAY,EACZ,WAAW,EACX,eAAe,EACf,MAAM,EACN,GAAG,EACH,IAAI,EACL,GAAG,IAAA,kBAAY,EAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAE9C,OAAO,IAAI,gBAAgB,CAAC;YAC1B,IAAI;YACJ,YAAY;YACZ,WAAW;YACX,eAAe;YACf,MAAM;YACN,GAAG;YACH,IAAI;SACL,CAAC,CAAC;IACL,CAAC;CACF;AAnDD,4CAmDC","sourcesContent":["import range from \"lodash/range\";\n\nimport { bufferReader, bufferWriter } from \"../../../common/src\";\nimport { RtcpPacketConverter } from \"./rtcp\";\n\nexport class RtcpRrPacket {\n ssrc: number = 0;\n reports: RtcpReceiverInfo[] = [];\n static readonly type = 201;\n readonly type = RtcpRrPacket.type;\n\n constructor(props: Partial<RtcpRrPacket> = {}) {\n Object.assign(this, props);\n }\n\n serialize() {\n let payload = bufferWriter([4], [this.ssrc]);\n payload = Buffer.concat([\n payload,\n ...this.reports.map((report) => report.serialize()),\n ]);\n return RtcpPacketConverter.serialize(\n RtcpRrPacket.type,\n this.reports.length,\n payload,\n Math.floor(payload.length / 4)\n );\n }\n\n static deSerialize(data: Buffer, count: number) {\n const [ssrc] = bufferReader(data, [4]);\n let pos = 4;\n const reports: RtcpReceiverInfo[] = [];\n range(count).forEach(() => {\n reports.push(RtcpReceiverInfo.deSerialize(data.slice(pos, pos + 24)));\n pos += 24;\n });\n return new RtcpRrPacket({ ssrc, reports });\n }\n}\n\nexport class RtcpReceiverInfo {\n ssrc!: number;\n fractionLost!: number;\n packetsLost!: number;\n highestSequence!: number;\n jitter!: number;\n /**last SR */\n lsr!: number;\n /**delay since last SR */\n dlsr!: number;\n\n constructor(props: Partial<RtcpReceiverInfo> = {}) {\n Object.assign(this, props);\n }\n\n serialize() {\n return bufferWriter(\n [4, 1, 3, 4, 4, 4, 4],\n [\n this.ssrc,\n this.fractionLost,\n this.packetsLost,\n this.highestSequence,\n this.jitter,\n this.lsr,\n this.dlsr,\n ]\n );\n }\n\n static deSerialize(data: Buffer) {\n const [\n ssrc,\n fractionLost,\n packetsLost,\n highestSequence,\n jitter,\n lsr,\n dlsr,\n ] = bufferReader(data, [4, 1, 3, 4, 4, 4, 4]);\n\n return new RtcpReceiverInfo({\n ssrc,\n fractionLost,\n packetsLost,\n highestSequence,\n jitter,\n lsr,\n dlsr,\n });\n }\n}\n"]}
1
+ {"version":3,"file":"rr.js","sourceRoot":"","sources":["../../../../../rtp/src/rtcp/rr.ts"],"names":[],"mappings":"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","sourcesContent":["import range from \"lodash/range\";\n\nimport { bufferReader, bufferWriter } from \"../../../common/src\";\nimport { RtcpPacketConverter } from \"./rtcp\";\n\nexport class RtcpRrPacket {\n ssrc: number = 0;\n reports: RtcpReceiverInfo[] = [];\n static readonly type = 201;\n readonly type = RtcpRrPacket.type;\n\n constructor(props: Partial<RtcpRrPacket> = {}) {\n Object.assign(this, props);\n }\n\n serialize() {\n let payload = bufferWriter([4], [this.ssrc]);\n payload = Buffer.concat([\n payload,\n ...this.reports.map((report) => report.serialize()),\n ]);\n return RtcpPacketConverter.serialize(\n RtcpRrPacket.type,\n this.reports.length,\n payload,\n Math.floor(payload.length / 4)\n );\n }\n\n static deSerialize(data: Buffer, count: number) {\n const [ssrc] = bufferReader(data, [4]);\n let pos = 4;\n const reports: RtcpReceiverInfo[] = [];\n range(count).forEach(() => {\n reports.push(RtcpReceiverInfo.deSerialize(data.slice(pos, pos + 24)));\n pos += 24;\n });\n return new RtcpRrPacket({ ssrc, reports });\n }\n}\n\nexport class RtcpReceiverInfo {\n ssrc!: number;\n fractionLost!: number;\n packetsLost!: number;\n highestSequence!: number;\n jitter!: number;\n /**last SR */\n lsr!: number;\n /**delay since last SR */\n dlsr!: number;\n\n constructor(props: Partial<RtcpReceiverInfo> = {}) {\n Object.assign(this, props);\n }\n\n serialize() {\n return bufferWriter(\n [4, 1, 3, 4, 4, 4, 4],\n [\n this.ssrc,\n this.fractionLost,\n this.packetsLost,\n this.highestSequence,\n this.jitter,\n this.lsr,\n this.dlsr,\n ]\n );\n }\n\n static deSerialize(data: Buffer) {\n const [\n ssrc,\n fractionLost,\n packetsLost,\n highestSequence,\n jitter,\n lsr,\n dlsr,\n ] = bufferReader(data, [4, 1, 3, 4, 4, 4, 4]);\n\n return new RtcpReceiverInfo({\n ssrc,\n fractionLost,\n packetsLost,\n highestSequence,\n jitter,\n lsr,\n dlsr,\n });\n }\n}\n"]}
@@ -4,7 +4,7 @@ import { RtcpRrPacket } from "./rr";
4
4
  import { RtcpTransportLayerFeedback } from "./rtpfb";
5
5
  import { RtcpSourceDescriptionPacket } from "./sdes";
6
6
  import { RtcpSrPacket } from "./sr";
7
- export declare type RtcpPacket = RtcpRrPacket | RtcpSrPacket | RtcpPayloadSpecificFeedback | RtcpSourceDescriptionPacket | RtcpTransportLayerFeedback;
7
+ export type RtcpPacket = RtcpRrPacket | RtcpSrPacket | RtcpPayloadSpecificFeedback | RtcpSourceDescriptionPacket | RtcpTransportLayerFeedback;
8
8
  export declare class RtcpPacketConverter {
9
9
  static serialize(type: number, count: number, payload: Buffer, length: number): Buffer;
10
10
  static deSerialize(data: Buffer): RtcpPacket[];
@@ -2,7 +2,7 @@
2
2
  import { RtcpHeader } from "../header";
3
3
  import { GenericNack } from "./nack";
4
4
  import { TransportWideCC } from "./twcc";
5
- declare type Feedback = GenericNack | TransportWideCC;
5
+ type Feedback = GenericNack | TransportWideCC;
6
6
  export declare class RtcpTransportLayerFeedback {
7
7
  static readonly type = 205;
8
8
  readonly type = 205;
@@ -10,7 +10,24 @@ const twcc_1 = require("./twcc");
10
10
  const log = (0, debug_1.default)("werift-rtp:packages/rtp/rtcp/rtpfb/index");
11
11
  class RtcpTransportLayerFeedback {
12
12
  constructor(props = {}) {
13
- this.type = RtcpTransportLayerFeedback.type;
13
+ Object.defineProperty(this, "type", {
14
+ enumerable: true,
15
+ configurable: true,
16
+ writable: true,
17
+ value: RtcpTransportLayerFeedback.type
18
+ });
19
+ Object.defineProperty(this, "feedback", {
20
+ enumerable: true,
21
+ configurable: true,
22
+ writable: true,
23
+ value: void 0
24
+ });
25
+ Object.defineProperty(this, "header", {
26
+ enumerable: true,
27
+ configurable: true,
28
+ writable: true,
29
+ value: void 0
30
+ });
14
31
  Object.assign(this, props);
15
32
  }
16
33
  serialize() {
@@ -34,5 +51,10 @@ class RtcpTransportLayerFeedback {
34
51
  }
35
52
  }
36
53
  exports.RtcpTransportLayerFeedback = RtcpTransportLayerFeedback;
37
- RtcpTransportLayerFeedback.type = 205;
54
+ Object.defineProperty(RtcpTransportLayerFeedback, "type", {
55
+ enumerable: true,
56
+ configurable: true,
57
+ writable: true,
58
+ value: 205
59
+ });
38
60
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../rtp/src/rtcp/rtpfb/index.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAG1B,iCAAqC;AACrC,iCAAyC;AAEzC,MAAM,GAAG,GAAG,IAAA,eAAK,EAAC,0CAA0C,CAAC,CAAC;AAgB9D,MAAa,0BAA0B;IAMrC,YAAY,QAA6C,EAAE;QAJlD,SAAI,GAAG,0BAA0B,CAAC,IAAI,CAAC;QAK9C,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,SAAS;QACP,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;QAC1C,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,IAAY,EAAE,MAAkB;QACjD,IAAI,QAA8B,CAAC;QAEnC,QAAQ,MAAM,CAAC,KAAK,EAAE;YACpB,KAAK,kBAAW,CAAC,KAAK;gBACpB,QAAQ,GAAG,kBAAW,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBACjD,MAAM;YACR,KAAK,sBAAe,CAAC,KAAK;gBACxB,QAAQ,GAAG,sBAAe,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBACrD,MAAM;YACR;gBACE,GAAG,CAAC,sBAAsB,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC1C,MAAM;SACT;QAED,OAAO,IAAI,0BAA0B,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9D,CAAC;;AA/BH,gEAgCC;AA/BiB,+BAAI,GAAG,GAAG,CAAC","sourcesContent":["import debug from \"debug\";\n\nimport { RtcpHeader } from \"../header\";\nimport { GenericNack } from \"./nack\";\nimport { TransportWideCC } from \"./twcc\";\n\nconst log = debug(\"werift-rtp:packages/rtp/rtcp/rtpfb/index\");\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| FMT | PT | length |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// | SSRC of packet sender |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// | SSRC of media source |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// : Feedback Control Information (FCI) :\n// : :\n\ntype Feedback = GenericNack | TransportWideCC;\n\nexport class RtcpTransportLayerFeedback {\n static readonly type = 205;\n readonly type = RtcpTransportLayerFeedback.type;\n feedback!: Feedback;\n header!: RtcpHeader;\n\n constructor(props: Partial<RtcpTransportLayerFeedback> = {}) {\n Object.assign(this, props);\n }\n\n serialize() {\n const payload = this.feedback.serialize();\n return payload;\n }\n\n static deSerialize(data: Buffer, header: RtcpHeader) {\n let feedback: Feedback | undefined;\n\n switch (header.count) {\n case GenericNack.count:\n feedback = GenericNack.deSerialize(data, header);\n break;\n case TransportWideCC.count:\n feedback = TransportWideCC.deSerialize(data, header);\n break;\n default:\n log(\"unknown rtpfb packet\", header.count);\n break;\n }\n\n return new RtcpTransportLayerFeedback({ feedback, header });\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../rtp/src/rtcp/rtpfb/index.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAG1B,iCAAqC;AACrC,iCAAyC;AAEzC,MAAM,GAAG,GAAG,IAAA,eAAK,EAAC,0CAA0C,CAAC,CAAC;AAgB9D,MAAa,0BAA0B;IAMrC,YAAY,QAA6C,EAAE;QAJ3D;;;;mBAAgB,0BAA0B,CAAC,IAAI;WAAC;QAChD;;;;;WAAoB;QACpB;;;;;WAAoB;QAGlB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,SAAS;QACP,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;QAC1C,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,IAAY,EAAE,MAAkB;QACjD,IAAI,QAA8B,CAAC;QAEnC,QAAQ,MAAM,CAAC,KAAK,EAAE;YACpB,KAAK,kBAAW,CAAC,KAAK;gBACpB,QAAQ,GAAG,kBAAW,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBACjD,MAAM;YACR,KAAK,sBAAe,CAAC,KAAK;gBACxB,QAAQ,GAAG,sBAAe,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBACrD,MAAM;YACR;gBACE,GAAG,CAAC,sBAAsB,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC1C,MAAM;SACT;QAED,OAAO,IAAI,0BAA0B,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9D,CAAC;;AA/BH,gEAgCC;AA/BQ;;;;WAAgB,GAAG;GAAC","sourcesContent":["import debug from \"debug\";\n\nimport { RtcpHeader } from \"../header\";\nimport { GenericNack } from \"./nack\";\nimport { TransportWideCC } from \"./twcc\";\n\nconst log = debug(\"werift-rtp:packages/rtp/rtcp/rtpfb/index\");\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| FMT | PT | length |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// | SSRC of packet sender |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// | SSRC of media source |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// : Feedback Control Information (FCI) :\n// : :\n\ntype Feedback = GenericNack | TransportWideCC;\n\nexport class RtcpTransportLayerFeedback {\n static readonly type = 205;\n readonly type = RtcpTransportLayerFeedback.type;\n feedback!: Feedback;\n header!: RtcpHeader;\n\n constructor(props: Partial<RtcpTransportLayerFeedback> = {}) {\n Object.assign(this, props);\n }\n\n serialize() {\n const payload = this.feedback.serialize();\n return payload;\n }\n\n static deSerialize(data: Buffer, header: RtcpHeader) {\n let feedback: Feedback | undefined;\n\n switch (header.count) {\n case GenericNack.count:\n feedback = GenericNack.deSerialize(data, header);\n break;\n case TransportWideCC.count:\n feedback = TransportWideCC.deSerialize(data, header);\n break;\n default:\n log(\"unknown rtpfb packet\", header.count);\n break;\n }\n\n return new RtcpTransportLayerFeedback({ feedback, header });\n }\n}\n"]}
@@ -7,6 +7,11 @@ export declare class GenericNack {
7
7
  senderSsrc: number;
8
8
  mediaSourceSsrc: number;
9
9
  lost: number[];
10
+ toJSON(): {
11
+ lost: number[];
12
+ senderSsrc: number;
13
+ mediaSourceSsrc: number;
14
+ };
10
15
  constructor(props?: Partial<GenericNack>);
11
16
  static deSerialize(data: Buffer, header: RtcpHeader): GenericNack;
12
17
  serialize(): Buffer;
@@ -16,9 +16,44 @@ const _1 = require(".");
16
16
  // Packet ID (PID)
17
17
  // bitmask of following lost packets (BLP):
18
18
  class GenericNack {
19
+ toJSON() {
20
+ return {
21
+ lost: this.lost,
22
+ senderSsrc: this.senderSsrc,
23
+ mediaSourceSsrc: this.mediaSourceSsrc,
24
+ };
25
+ }
19
26
  constructor(props = {}) {
20
- this.count = GenericNack.count;
21
- this.lost = [];
27
+ Object.defineProperty(this, "count", {
28
+ enumerable: true,
29
+ configurable: true,
30
+ writable: true,
31
+ value: GenericNack.count
32
+ });
33
+ Object.defineProperty(this, "header", {
34
+ enumerable: true,
35
+ configurable: true,
36
+ writable: true,
37
+ value: void 0
38
+ });
39
+ Object.defineProperty(this, "senderSsrc", {
40
+ enumerable: true,
41
+ configurable: true,
42
+ writable: true,
43
+ value: void 0
44
+ });
45
+ Object.defineProperty(this, "mediaSourceSsrc", {
46
+ enumerable: true,
47
+ configurable: true,
48
+ writable: true,
49
+ value: void 0
50
+ });
51
+ Object.defineProperty(this, "lost", {
52
+ enumerable: true,
53
+ configurable: true,
54
+ writable: true,
55
+ value: []
56
+ });
22
57
  Object.assign(this, props);
23
58
  if (!this.header) {
24
59
  this.header = new header_1.RtcpHeader({
@@ -74,5 +109,10 @@ class GenericNack {
74
109
  }
75
110
  }
76
111
  exports.GenericNack = GenericNack;
77
- GenericNack.count = 1;
112
+ Object.defineProperty(GenericNack, "count", {
113
+ enumerable: true,
114
+ configurable: true,
115
+ writable: true,
116
+ value: 1
117
+ });
78
118
  //# sourceMappingURL=nack.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"nack.js","sourceRoot":"","sources":["../../../../../../rtp/src/rtcp/rtpfb/nack.ts"],"names":[],"mappings":"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","sourcesContent":["import range from \"lodash/range\";\n\nimport { bufferReader, bufferWriter } from \"../../../../common/src\";\nimport { RtcpHeader } from \"../header\";\nimport { RtcpTransportLayerFeedback } 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// | PID | BLP |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n\n// Packet ID (PID)\n// bitmask of following lost packets (BLP):\n\nexport class GenericNack {\n static count = 1;\n readonly count = GenericNack.count;\n header!: RtcpHeader;\n senderSsrc!: number;\n mediaSourceSsrc!: number;\n lost: number[] = [];\n\n constructor(props: Partial<GenericNack> = {}) {\n Object.assign(this, props);\n if (!this.header) {\n this.header = new RtcpHeader({\n type: RtcpTransportLayerFeedback.type,\n count: this.count,\n version: 2,\n });\n }\n }\n\n static deSerialize(data: Buffer, header: RtcpHeader) {\n const [senderSsrc, mediaSourceSsrc] = bufferReader(data, [4, 4]);\n const lost = range(8, data.length, 4)\n .map((pos) => {\n const lost: number[] = [];\n const [pid, blp] = bufferReader(data.subarray(pos), [2, 2]);\n lost.push(pid);\n range(0, 16).forEach((diff) => {\n if ((blp >> diff) & 1) {\n lost.push(pid + diff + 1);\n }\n });\n return lost;\n })\n .flatMap((v) => v);\n\n return new GenericNack({\n header,\n senderSsrc,\n mediaSourceSsrc,\n lost,\n });\n }\n\n serialize() {\n const ssrcPair = bufferWriter(\n [4, 4],\n [this.senderSsrc, this.mediaSourceSsrc]\n );\n\n const fci: Buffer[] = [];\n if (this.lost.length > 0) {\n let headPid = this.lost[0],\n blp = 0;\n this.lost.slice(1).forEach((pid) => {\n const diff = pid - headPid - 1;\n if (diff >= 0 && diff < 16) {\n blp |= 1 << diff;\n } else {\n fci.push(bufferWriter([2, 2], [headPid, blp]));\n headPid = pid;\n blp = 0;\n }\n });\n fci.push(bufferWriter([2, 2], [headPid, blp]));\n }\n const buf = Buffer.concat([ssrcPair, Buffer.concat(fci)]);\n this.header.length = buf.length / 4;\n return Buffer.concat([this.header.serialize(), buf]);\n }\n}\n"]}
1
+ {"version":3,"file":"nack.js","sourceRoot":"","sources":["../../../../../../rtp/src/rtcp/rtpfb/nack.ts"],"names":[],"mappings":"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","sourcesContent":["import range from \"lodash/range\";\n\nimport { bufferReader, bufferWriter } from \"../../../../common/src\";\nimport { RtcpHeader } from \"../header\";\nimport { RtcpTransportLayerFeedback } 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// | PID | BLP |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n\n// Packet ID (PID)\n// bitmask of following lost packets (BLP):\n\nexport class GenericNack {\n static count = 1;\n readonly count = GenericNack.count;\n header!: RtcpHeader;\n senderSsrc!: number;\n mediaSourceSsrc!: number;\n lost: number[] = [];\n\n toJSON() {\n return {\n lost: this.lost,\n senderSsrc: this.senderSsrc,\n mediaSourceSsrc: this.mediaSourceSsrc,\n };\n }\n\n constructor(props: Partial<GenericNack> = {}) {\n Object.assign(this, props);\n if (!this.header) {\n this.header = new RtcpHeader({\n type: RtcpTransportLayerFeedback.type,\n count: this.count,\n version: 2,\n });\n }\n }\n\n static deSerialize(data: Buffer, header: RtcpHeader) {\n const [senderSsrc, mediaSourceSsrc] = bufferReader(data, [4, 4]);\n const lost = range(8, data.length, 4)\n .map((pos) => {\n const lost: number[] = [];\n const [pid, blp] = bufferReader(data.subarray(pos), [2, 2]);\n lost.push(pid);\n range(0, 16).forEach((diff) => {\n if ((blp >> diff) & 1) {\n lost.push(pid + diff + 1);\n }\n });\n return lost;\n })\n .flatMap((v) => v);\n\n return new GenericNack({\n header,\n senderSsrc,\n mediaSourceSsrc,\n lost,\n });\n }\n\n serialize() {\n const ssrcPair = bufferWriter(\n [4, 4],\n [this.senderSsrc, this.mediaSourceSsrc]\n );\n\n const fci: Buffer[] = [];\n if (this.lost.length > 0) {\n let headPid = this.lost[0],\n blp = 0;\n this.lost.slice(1).forEach((pid) => {\n const diff = pid - headPid - 1;\n if (diff >= 0 && diff < 16) {\n blp |= 1 << diff;\n } else {\n fci.push(bufferWriter([2, 2], [headPid, blp]));\n headPid = pid;\n blp = 0;\n }\n });\n fci.push(bufferWriter([2, 2], [headPid, blp]));\n }\n const buf = Buffer.concat([ssrcPair, Buffer.concat(fci)]);\n this.header.length = buf.length / 4;\n return Buffer.concat([this.header.serialize(), buf]);\n }\n}\n"]}
@@ -40,10 +40,73 @@ const log = (0, debug_1.default)("werift/rtp/rtcp/rtpfb/twcc");
40
40
  */
41
41
  class TransportWideCC {
42
42
  constructor(props = {}) {
43
- this.count = TransportWideCC.count;
44
- this.length = 2;
45
- this.packetChunks = [];
46
- this.recvDeltas = [];
43
+ Object.defineProperty(this, "count", {
44
+ enumerable: true,
45
+ configurable: true,
46
+ writable: true,
47
+ value: TransportWideCC.count
48
+ });
49
+ Object.defineProperty(this, "length", {
50
+ enumerable: true,
51
+ configurable: true,
52
+ writable: true,
53
+ value: 2
54
+ });
55
+ Object.defineProperty(this, "senderSsrc", {
56
+ enumerable: true,
57
+ configurable: true,
58
+ writable: true,
59
+ value: void 0
60
+ });
61
+ Object.defineProperty(this, "mediaSourceSsrc", {
62
+ enumerable: true,
63
+ configurable: true,
64
+ writable: true,
65
+ value: void 0
66
+ });
67
+ Object.defineProperty(this, "baseSequenceNumber", {
68
+ enumerable: true,
69
+ configurable: true,
70
+ writable: true,
71
+ value: void 0
72
+ });
73
+ Object.defineProperty(this, "packetStatusCount", {
74
+ enumerable: true,
75
+ configurable: true,
76
+ writable: true,
77
+ value: void 0
78
+ });
79
+ /** 24bit multiples of 64ms */
80
+ Object.defineProperty(this, "referenceTime", {
81
+ enumerable: true,
82
+ configurable: true,
83
+ writable: true,
84
+ value: void 0
85
+ });
86
+ Object.defineProperty(this, "fbPktCount", {
87
+ enumerable: true,
88
+ configurable: true,
89
+ writable: true,
90
+ value: void 0
91
+ });
92
+ Object.defineProperty(this, "packetChunks", {
93
+ enumerable: true,
94
+ configurable: true,
95
+ writable: true,
96
+ value: []
97
+ });
98
+ Object.defineProperty(this, "recvDeltas", {
99
+ enumerable: true,
100
+ configurable: true,
101
+ writable: true,
102
+ value: []
103
+ });
104
+ Object.defineProperty(this, "header", {
105
+ enumerable: true,
106
+ configurable: true,
107
+ writable: true,
108
+ value: void 0
109
+ });
47
110
  Object.assign(this, props);
48
111
  if (!this.header) {
49
112
  this.header = new header_1.RtcpHeader({
@@ -188,13 +251,37 @@ class TransportWideCC {
188
251
  }
189
252
  }
190
253
  exports.TransportWideCC = TransportWideCC;
191
- TransportWideCC.count = 15;
254
+ Object.defineProperty(TransportWideCC, "count", {
255
+ enumerable: true,
256
+ configurable: true,
257
+ writable: true,
258
+ value: 15
259
+ });
192
260
  // 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
193
261
  // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
194
262
  // |T| S | Run Length |
195
263
  // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
196
264
  class RunLengthChunk {
197
265
  constructor(props = {}) {
266
+ Object.defineProperty(this, "type", {
267
+ enumerable: true,
268
+ configurable: true,
269
+ writable: true,
270
+ value: void 0
271
+ });
272
+ Object.defineProperty(this, "packetStatus", {
273
+ enumerable: true,
274
+ configurable: true,
275
+ writable: true,
276
+ value: void 0
277
+ });
278
+ /** 13bit */
279
+ Object.defineProperty(this, "runLength", {
280
+ enumerable: true,
281
+ configurable: true,
282
+ writable: true,
283
+ value: void 0
284
+ });
198
285
  Object.assign(this, props);
199
286
  this.type = PacketChunk.TypeTCCRunLengthChunk;
200
287
  }
@@ -227,7 +314,24 @@ exports.RunLengthChunk = RunLengthChunk;
227
314
  // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
228
315
  class StatusVectorChunk {
229
316
  constructor(props = {}) {
230
- this.symbolList = [];
317
+ Object.defineProperty(this, "type", {
318
+ enumerable: true,
319
+ configurable: true,
320
+ writable: true,
321
+ value: void 0
322
+ });
323
+ Object.defineProperty(this, "symbolSize", {
324
+ enumerable: true,
325
+ configurable: true,
326
+ writable: true,
327
+ value: void 0
328
+ });
329
+ Object.defineProperty(this, "symbolList", {
330
+ enumerable: true,
331
+ configurable: true,
332
+ writable: true,
333
+ value: []
334
+ });
231
335
  Object.assign(this, props);
232
336
  }
233
337
  static deSerialize(data) {
@@ -262,7 +366,26 @@ class StatusVectorChunk {
262
366
  exports.StatusVectorChunk = StatusVectorChunk;
263
367
  class RecvDelta {
264
368
  constructor(props = {}) {
265
- this.parsed = false; // todo refactor
369
+ /**optional (If undefined, it will be set automatically.)*/
370
+ Object.defineProperty(this, "type", {
371
+ enumerable: true,
372
+ configurable: true,
373
+ writable: true,
374
+ value: void 0
375
+ });
376
+ /**micro sec */
377
+ Object.defineProperty(this, "delta", {
378
+ enumerable: true,
379
+ configurable: true,
380
+ writable: true,
381
+ value: void 0
382
+ });
383
+ Object.defineProperty(this, "parsed", {
384
+ enumerable: true,
385
+ configurable: true,
386
+ writable: true,
387
+ value: false
388
+ }); // todo refactor
266
389
  Object.assign(this, props);
267
390
  }
268
391
  static deSerialize(data) {
@@ -332,10 +455,30 @@ var PacketStatus;
332
455
  })(PacketStatus = exports.PacketStatus || (exports.PacketStatus = {}));
333
456
  class PacketResult {
334
457
  constructor(props) {
335
- this.sequenceNumber = 0;
336
- this.delta = 0;
337
- this.received = false;
338
- this.receivedAtMs = 0;
458
+ Object.defineProperty(this, "sequenceNumber", {
459
+ enumerable: true,
460
+ configurable: true,
461
+ writable: true,
462
+ value: 0
463
+ });
464
+ Object.defineProperty(this, "delta", {
465
+ enumerable: true,
466
+ configurable: true,
467
+ writable: true,
468
+ value: 0
469
+ });
470
+ Object.defineProperty(this, "received", {
471
+ enumerable: true,
472
+ configurable: true,
473
+ writable: true,
474
+ value: false
475
+ });
476
+ Object.defineProperty(this, "receivedAtMs", {
477
+ enumerable: true,
478
+ configurable: true,
479
+ writable: true,
480
+ value: 0
481
+ });
339
482
  Object.assign(this, props);
340
483
  }
341
484
  }
@@ -1 +1 @@
1
- {"version":3,"file":"twcc.js","sourceRoot":"","sources":["../../../../../../rtp/src/rtcp/rtpfb/twcc.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,yDAAiC;AAEjC,gDAKgC;AAChC,sCAAuC;AAEvC,MAAM,GAAG,GAAG,IAAA,eAAK,EAAC,4BAA4B,CAAC,CAAC;AAEhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,MAAa,eAAe;IAgB1B,YAAY,QAAkC,EAAE;QAdhD,UAAK,GAAG,eAAe,CAAC,KAAK,CAAC;QAC9B,WAAM,GAAG,CAAC,CAAC;QASX,iBAAY,GAA2C,EAAE,CAAC;QAC1D,eAAU,GAAgB,EAAE,CAAC;QAI3B,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,IAAI,CAAC,MAAM,GAAG,IAAI,mBAAU,CAAC;gBAC3B,IAAI,EAAE,GAAG;gBACT,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,OAAO,EAAE,CAAC;aACX,CAAC,CAAC;SACJ;IACH,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,IAAY,EAAE,MAAkB;QACjD,MAAM,CACJ,UAAU,EACV,SAAS,EACT,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,UAAU,EACX,GAAG,IAAA,kBAAY,EAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,YAAY,GAA2C,EAAE,CAAC;QAChE,MAAM,UAAU,GAAgB,EAAE,CAAC;QAEnC,IAAI,eAAe,GAAG,EAAE,CAAC;QACzB,KAAK,IAAI,kBAAkB,GAAG,CAAC,EAAE,kBAAkB,GAAG,iBAAiB,GAAI;YACzE,MAAM,IAAI,GAAG,IAAA,YAAM,EACjB,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EACnD,CAAC,EACD,CAAC,CACF,CAAC;YACF,IAAI,aAA6D,CAAC;YAClE,QAAQ,IAAI,EAAE;gBACZ,KAAK,WAAW,CAAC,qBAAqB;oBACpC;wBACE,MAAM,YAAY,GAAG,cAAc,CAAC,WAAW,CAC7C,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,eAAe,GAAG,CAAC,CAAC,CACjD,CAAC;wBACF,aAAa,GAAG,YAAY,CAAC;wBAC7B,MAAM,qBAAqB,GAAG,IAAI,CAAC,GAAG,CACpC,iBAAiB,GAAG,kBAAkB,EACtC,YAAY,CAAC,SAAS,CACvB,CAAC;wBACF,IACE,YAAY,CAAC,YAAY;4BACvB,YAAY,CAAC,+BAA+B;4BAC9C,YAAY,CAAC,YAAY;gCACvB,YAAY,CAAC,+BAA+B,EAC9C;4BACA,IAAA,eAAK,EAAC,qBAAqB,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;gCACxC,UAAU,CAAC,IAAI,CACb,IAAI,SAAS,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,YAAmB,EAAE,CAAC,CAC1D,CAAC;4BACJ,CAAC,CAAC,CAAC;yBACJ;wBACD,kBAAkB,IAAI,qBAAqB,CAAC;qBAC7C;oBACD,MAAM;gBACR,KAAK,WAAW,CAAC,wBAAwB;oBACvC;wBACE,MAAM,YAAY,GAAG,iBAAiB,CAAC,WAAW,CAChD,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,eAAe,GAAG,CAAC,CAAC,CACjD,CAAC;wBACF,aAAa,GAAG,YAAY,CAAC;wBAC7B,IAAI,YAAY,CAAC,UAAU,KAAK,CAAC,EAAE;4BACjC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;gCACpC,IAAI,CAAC,KAAK,YAAY,CAAC,+BAA+B,EAAE;oCACtD,UAAU,CAAC,IAAI,CACb,IAAI,SAAS,CAAC;wCACZ,IAAI,EAAE,YAAY,CAAC,+BAA+B;qCACnD,CAAC,CACH,CAAC;iCACH;4BACH,CAAC,CAAC,CAAC;yBACJ;wBACD,IAAI,YAAY,CAAC,UAAU,KAAK,CAAC,EAAE;4BACjC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;gCACpC,IACE,CAAC,KAAK,YAAY,CAAC,+BAA+B;oCAClD,CAAC,KAAK,YAAY,CAAC,+BAA+B,EAClD;oCACA,UAAU,CAAC,IAAI,CACb,IAAI,SAAS,CAAC;wCACZ,IAAI,EAAE,CAAC;qCACR,CAAC,CACH,CAAC;iCACH;4BACH,CAAC,CAAC,CAAC;yBACJ;wBACD,kBAAkB,IAAI,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC;qBACtD;oBACD,MAAM;aACT;YACD,IAAI,CAAC,aAAa;gBAAE,MAAM,IAAI,KAAK,EAAE,CAAC;YACtC,eAAe,IAAI,CAAC,CAAC;YACrB,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;SAClC;QAED,IAAI,YAAY,GAAG,eAAe,CAAC;QACnC,UAAU,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAC3B,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC,+BAA+B,EAAE;gBAC/D,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC9D,YAAY,EAAE,CAAC;aAChB;YACD,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC,+BAA+B,EAAE;gBAC/D,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC9D,YAAY,IAAI,CAAC,CAAC;aACnB;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,eAAe,CAAC;YACzB,UAAU;YACV,eAAe,EAAE,SAAS;YAC1B,kBAAkB;YAClB,iBAAiB;YACjB,aAAa;YACb,UAAU;YACV,UAAU;YACV,YAAY;YACZ,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IAED,SAAS;QACP,MAAM,QAAQ,GAAG,IAAA,kBAAY,EAC3B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAClB;YACE,IAAI,CAAC,UAAU;YACf,IAAI,CAAC,eAAe;YACpB,IAAI,CAAC,kBAAkB;YACvB,IAAI,CAAC,iBAAiB;YACtB,IAAI,CAAC,aAAa;YAClB,IAAI,CAAC,UAAU;SAChB,CACF,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAC1B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CACpD,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAC1B,IAAI,CAAC,UAAU;aACZ,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACb,IAAI;gBACF,OAAO,KAAK,CAAC,SAAS,EAAE,CAAC;aAC1B;YAAC,OAAO,KAAU,EAAE;gBACnB,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBACpB,OAAO,SAAS,CAAC;aAClB;QACH,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAa,CAChC,CAAC;QAEF,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;QAEtD,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE;YAC/C,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAClC,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACnC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;YAE7C,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YACnE,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;SAC/D;QAED,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAChD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,aAAa;QACf,MAAM,qBAAqB,GAAG,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;QAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY;aAC9B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,cAAc,CAAC;aAC1C,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAE,KAAwB,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;aACxE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAErB,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC;QACvD,IAAI,mBAAmB,GAAG,aAAa,CAAC;QAExC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC5C,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,SAAS,EAAE;gBAClC,SAAS;aACV;YACD,mBAAmB,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;YACvD,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;YAC/B,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC;YAClD,QAAQ,EAAE,CAAC;SACZ;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;;AA7MH,0CA8MC;AA7MQ,qBAAK,GAAG,EAAE,CAAC;AA+MpB,mCAAmC;AACnC,oCAAoC;AACpC,oCAAoC;AACpC,oCAAoC;AACpC,MAAa,cAAc;IAMzB,YAAY,QAAiC,EAAE;QAC7C,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,qBAAqB,CAAC;IAChD,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,IAAY;QAC7B,MAAM,YAAY,GAAG,IAAA,YAAM,EAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,CAAC,IAAA,YAAM,EAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAEzD,OAAO,IAAI,cAAc,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,SAAS;QACP,MAAM,GAAG,GAAG,IAAI,gBAAU,CAAC,EAAE,CAAC;aAC3B,GAAG,CAAC,CAAC,CAAC;aACN,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;aACzB,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC;QAElC,OAAO,GAAG,CAAC;IACb,CAAC;IAED,OAAO,CAAC,qBAA6B;QACnC,MAAM,QAAQ,GACZ,IAAI,CAAC,YAAY,KAAK,YAAY,CAAC,+BAA+B;YAClE,IAAI,CAAC,YAAY,KAAK,YAAY,CAAC,+BAA+B,CAAC;QAErE,MAAM,OAAO,GAAmB,EAAE,CAAC;QACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE;YACxC,OAAO,CAAC,IAAI,CACV,IAAI,YAAY,CAAC,EAAE,cAAc,EAAE,EAAE,qBAAqB,EAAE,QAAQ,EAAE,CAAC,CACxE,CAAC;SACH;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AAxCD,wCAwCC;AAED,mCAAmC;AACnC,oCAAoC;AACpC,oCAAoC;AACpC,oCAAoC;AACpC,MAAa,iBAAiB;IAK5B,YAAY,QAAoC,EAAE;QAFlD,eAAU,GAAa,EAAE,CAAC;QAGxB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,IAAY;QAC7B,MAAM,IAAI,GAAG,WAAW,CAAC,wBAAwB,CAAC;QAClD,IAAI,UAAU,GAAG,IAAA,YAAM,EAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACvC,MAAM,UAAU,GAAa,EAAE,CAAC;QAEhC,QAAQ,UAAU,EAAE;YAClB,KAAK,CAAC;gBACJ,IAAA,eAAK,EAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAA,YAAM,EAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBACvE,IAAA,eAAK,EAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAA,YAAM,EAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnE,MAAM;YACR,KAAK,CAAC;gBACJ,IAAA,eAAK,EAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAA,YAAM,EAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxE,IAAA,eAAK,EAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAA,YAAM,EAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpE,MAAM;YACR;gBACE,UAAU,GAAG,CAAC,IAAA,YAAM,EAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;SACvD;QAED,OAAO,IAAI,iBAAiB,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,SAAS;QACP,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAE5B,MAAM,MAAM,GAAG,IAAI,gBAAU,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9D,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE3C,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YAC5B,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAChC,OAAO,GAAG,CAAC;IACb,CAAC;CACF;AA1CD,8CA0CC;AAED,MAAa,SAAS;IAQpB,YAAY,QAA4B,EAAE;QA0B1C,WAAM,GAAG,KAAK,CAAC,CAAC,gBAAgB;QAzB9B,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,IAAY;QAC7B,IAAI,IAAwB,CAAC;QAC7B,IAAI,KAAyB,CAAC;QAE9B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YACrB,IAAI,GAAG,YAAY,CAAC,+BAA+B,CAAC;YACpD,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;SACvB;aAAM,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YAC5B,IAAI,GAAG,YAAY,CAAC,+BAA+B,CAAC;YACpD,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;SAClC;QAED,IAAI,IAAI,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,EAAE,CAAC;QAEjE,OAAO,IAAI,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,WAAW,CAAC,IAAY;QACtB,MAAM,GAAG,GAAG,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;IACzB,CAAC;IAGD,UAAU;QACR,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;QAE1C,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,GAAG,EAAE;YACtC,IAAI,IAAI,CAAC,KAAK,GAAG,KAAK;gBAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,WAAW;YACvD,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,KAAK;gBAAE,IAAI,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,WAAW;YACzD,IAAI,CAAC,IAAI,CAAC,IAAI;gBAAE,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC,+BAA+B,CAAC;SAC1E;aAAM;YACL,IAAI,CAAC,IAAI,CAAC,IAAI;gBAAE,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC,+BAA+B,CAAC;SAC1E;QACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACrB,CAAC;IAED,SAAS;QACP,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,IAAI,CAAC,UAAU,EAAE,CAAC;QACpC,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,+BAA+B,EAAE;YAC9D,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC5B,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC3B,OAAO,GAAG,CAAC;SACZ;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,+BAA+B,EAAE;YACrE,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC5B,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC7B,OAAO,GAAG,CAAC;SACZ;QAED,MAAM,IAAI,KAAK,CAAC,sBAAsB,GAAG,IAAI,CAAC,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IACzE,CAAC;CACF;AA9DD,8BA8DC;AAED,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,+EAAqB,CAAA;IACrB,qFAAwB,CAAA;IACxB,mFAAuB,CAAA;AACzB,CAAC,EAJW,WAAW,GAAX,mBAAW,KAAX,mBAAW,QAItB;AAED,IAAY,YAKX;AALD,WAAY,YAAY;IACtB,uFAAwB,CAAA;IACxB,qGAA+B,CAAA;IAC/B,qGAA+B,CAAA;IAC/B,yGAAiC,CAAA;AACnC,CAAC,EALW,YAAY,GAAZ,oBAAY,KAAZ,oBAAY,QAKvB;AAED,MAAa,YAAY;IAKvB,YAAY,KAA4B;QAJxC,mBAAc,GAAG,CAAC,CAAC;QACnB,UAAK,GAAG,CAAC,CAAC;QACV,aAAQ,GAAG,KAAK,CAAC;QACjB,iBAAY,GAAG,CAAC,CAAC;QAEf,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;CACF;AARD,oCAQC","sourcesContent":["import debug from \"debug\";\nimport range from \"lodash/range\";\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 range(packetNumberToProcess).forEach(() => {\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 .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 switch (symbolSize) {\n case 0:\n range(6).forEach((_, i) => symbolList.push(getBit(data[0], 2 + i, 1)));\n range(8).forEach((_, i) => symbolList.push(getBit(data[1], i, 1)));\n break;\n case 1:\n range(3).forEach((i) => symbolList.push(getBit(data[0], 2 + i * 2, 2)));\n range(4).forEach((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,\n TypeTCCStatusVectorChunk,\n packetStatusChunkLength,\n}\n\nexport enum PacketStatus {\n TypeTCCPacketNotReceived,\n TypeTCCPacketReceivedSmallDelta,\n TypeTCCPacketReceivedLargeDelta,\n TypeTCCPacketReceivedWithoutDelta,\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\";\nimport range from \"lodash/range\";\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 range(packetNumberToProcess).forEach(() => {\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 .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 switch (symbolSize) {\n case 0:\n range(6).forEach((_, i) => symbolList.push(getBit(data[0], 2 + i, 1)));\n range(8).forEach((_, i) => symbolList.push(getBit(data[1], i, 1)));\n break;\n case 1:\n range(3).forEach((i) => symbolList.push(getBit(data[0], 2 + i * 2, 2)));\n range(4).forEach((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,\n TypeTCCStatusVectorChunk,\n packetStatusChunkLength,\n}\n\nexport enum PacketStatus {\n TypeTCCPacketNotReceived,\n TypeTCCPacketReceivedSmallDelta,\n TypeTCCPacketReceivedLargeDelta,\n TypeTCCPacketReceivedWithoutDelta,\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"]}