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
@@ -5,8 +5,18 @@ const src_1 = require("../../../common/src");
5
5
  const rtcp_1 = require("./rtcp");
6
6
  class RtcpSourceDescriptionPacket {
7
7
  constructor(props) {
8
- this.type = RtcpSourceDescriptionPacket.type;
9
- this.chunks = [];
8
+ Object.defineProperty(this, "type", {
9
+ enumerable: true,
10
+ configurable: true,
11
+ writable: true,
12
+ value: RtcpSourceDescriptionPacket.type
13
+ });
14
+ Object.defineProperty(this, "chunks", {
15
+ enumerable: true,
16
+ configurable: true,
17
+ writable: true,
18
+ value: []
19
+ });
10
20
  Object.assign(this, props);
11
21
  }
12
22
  get length() {
@@ -31,10 +41,26 @@ class RtcpSourceDescriptionPacket {
31
41
  }
32
42
  }
33
43
  exports.RtcpSourceDescriptionPacket = RtcpSourceDescriptionPacket;
34
- RtcpSourceDescriptionPacket.type = 202;
44
+ Object.defineProperty(RtcpSourceDescriptionPacket, "type", {
45
+ enumerable: true,
46
+ configurable: true,
47
+ writable: true,
48
+ value: 202
49
+ });
35
50
  class SourceDescriptionChunk {
36
51
  constructor(props = {}) {
37
- this.items = [];
52
+ Object.defineProperty(this, "source", {
53
+ enumerable: true,
54
+ configurable: true,
55
+ writable: true,
56
+ value: void 0
57
+ });
58
+ Object.defineProperty(this, "items", {
59
+ enumerable: true,
60
+ configurable: true,
61
+ writable: true,
62
+ value: []
63
+ });
38
64
  Object.assign(this, props);
39
65
  }
40
66
  get length() {
@@ -69,6 +95,18 @@ class SourceDescriptionChunk {
69
95
  exports.SourceDescriptionChunk = SourceDescriptionChunk;
70
96
  class SourceDescriptionItem {
71
97
  constructor(props) {
98
+ Object.defineProperty(this, "type", {
99
+ enumerable: true,
100
+ configurable: true,
101
+ writable: true,
102
+ value: void 0
103
+ });
104
+ Object.defineProperty(this, "text", {
105
+ enumerable: true,
106
+ configurable: true,
107
+ writable: true,
108
+ value: void 0
109
+ });
72
110
  Object.assign(this, props);
73
111
  }
74
112
  get length() {
@@ -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 { 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"]}
@@ -46,9 +46,30 @@ const rtcp_1 = require("./rtcp");
46
46
  // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
47
47
  class RtcpSrPacket {
48
48
  constructor(props) {
49
- this.ssrc = 0;
50
- this.reports = [];
51
- this.type = RtcpSrPacket.type;
49
+ Object.defineProperty(this, "ssrc", {
50
+ enumerable: true,
51
+ configurable: true,
52
+ writable: true,
53
+ value: 0
54
+ });
55
+ Object.defineProperty(this, "senderInfo", {
56
+ enumerable: true,
57
+ configurable: true,
58
+ writable: true,
59
+ value: void 0
60
+ });
61
+ Object.defineProperty(this, "reports", {
62
+ enumerable: true,
63
+ configurable: true,
64
+ writable: true,
65
+ value: []
66
+ });
67
+ Object.defineProperty(this, "type", {
68
+ enumerable: true,
69
+ configurable: true,
70
+ writable: true,
71
+ value: RtcpSrPacket.type
72
+ });
52
73
  Object.assign(this, props);
53
74
  }
54
75
  serialize() {
@@ -70,13 +91,43 @@ class RtcpSrPacket {
70
91
  reports.push(rr_1.RtcpReceiverInfo.deSerialize(payload.slice(pos, pos + 24)));
71
92
  pos += 24;
72
93
  }
73
- return new RtcpSrPacket({ ssrc, senderInfo, reports });
94
+ const packet = new RtcpSrPacket({ ssrc, senderInfo, reports });
95
+ return packet;
74
96
  }
75
97
  }
76
98
  exports.RtcpSrPacket = RtcpSrPacket;
77
- RtcpSrPacket.type = 200;
99
+ Object.defineProperty(RtcpSrPacket, "type", {
100
+ enumerable: true,
101
+ configurable: true,
102
+ writable: true,
103
+ value: 200
104
+ });
78
105
  class RtcpSenderInfo {
79
106
  constructor(props = {}) {
107
+ Object.defineProperty(this, "ntpTimestamp", {
108
+ enumerable: true,
109
+ configurable: true,
110
+ writable: true,
111
+ value: void 0
112
+ });
113
+ Object.defineProperty(this, "rtpTimestamp", {
114
+ enumerable: true,
115
+ configurable: true,
116
+ writable: true,
117
+ value: void 0
118
+ });
119
+ Object.defineProperty(this, "packetCount", {
120
+ enumerable: true,
121
+ configurable: true,
122
+ writable: true,
123
+ value: void 0
124
+ });
125
+ Object.defineProperty(this, "octetCount", {
126
+ enumerable: true,
127
+ configurable: true,
128
+ writable: true,
129
+ value: void 0
130
+ });
80
131
  Object.assign(this, props);
81
132
  }
82
133
  serialize() {
@@ -1 +1 @@
1
- {"version":3,"file":"sr.js","sourceRoot":"","sources":["../../../../../rtp/src/rtcp/sr.ts"],"names":[],"mappings":"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","sourcesContent":["import range from \"lodash/range\";\n\nimport { bufferReader, bufferWriter } from \"../../../common/src\";\nimport { RtcpReceiverInfo } from \"./rr\";\nimport { RtcpPacketConverter } from \"./rtcp\";\n\n// https://datatracker.ietf.org/doc/html/rfc3550#section-6.4.1\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// header |V=2|P| RC | PT=SR=200 | length |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// | SSRC of sender |\n// +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+\n// sender | NTP timestamp, most significant word |\n// info +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// | NTP timestamp, least significant word |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// | RTP timestamp |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// | sender's packet count |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// | sender's octet count |\n// +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+\n// report | SSRC_1 (SSRC of first source) |\n// block +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// 1 | fraction lost | cumulative number of packets lost |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// | extended highest sequence number received |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// | interarrival jitter |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// | last SR (LSR) |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// | delay since last SR (DLSR) |\n// +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+\n// report | SSRC_2 (SSRC of second source) |\n// block +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// 2 : ... :\n// +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+\n// | profile-specific extensions |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n\nexport class RtcpSrPacket {\n ssrc: number = 0;\n senderInfo!: RtcpSenderInfo;\n reports: RtcpReceiverInfo[] = [];\n static readonly type = 200;\n readonly type = RtcpSrPacket.type;\n\n constructor(props: Pick<RtcpSrPacket, \"senderInfo\"> & Partial<RtcpSrPacket>) {\n Object.assign(this, props);\n }\n\n serialize() {\n let payload = Buffer.alloc(4);\n payload.writeUInt32BE(this.ssrc);\n payload = Buffer.concat([payload, this.senderInfo.serialize()]);\n payload = Buffer.concat([\n payload,\n ...this.reports.map((report) => report.serialize()),\n ]);\n return RtcpPacketConverter.serialize(\n RtcpSrPacket.type,\n this.reports.length,\n payload,\n Math.floor(payload.length / 4)\n );\n }\n\n static deSerialize(payload: Buffer, count: number) {\n const ssrc = payload.readUInt32BE();\n const senderInfo = RtcpSenderInfo.deSerialize(payload.slice(4, 24));\n let pos = 24;\n const reports: RtcpReceiverInfo[] = [];\n for (const _ of range(count)) {\n reports.push(RtcpReceiverInfo.deSerialize(payload.slice(pos, pos + 24)));\n pos += 24;\n }\n return new RtcpSrPacket({ ssrc, senderInfo, reports });\n }\n}\n\nexport class RtcpSenderInfo {\n ntpTimestamp!: bigint;\n rtpTimestamp!: number;\n packetCount!: number;\n octetCount!: number;\n\n constructor(props: Partial<RtcpSenderInfo> = {}) {\n Object.assign(this, props);\n }\n\n serialize() {\n return bufferWriter(\n [8, 4, 4, 4],\n [this.ntpTimestamp, this.rtpTimestamp, this.packetCount, this.octetCount]\n );\n }\n\n static deSerialize(data: Buffer) {\n const [ntpTimestamp, rtpTimestamp, packetCount, octetCount] = bufferReader(\n data,\n [8, 4, 4, 4]\n );\n\n return new RtcpSenderInfo({\n ntpTimestamp,\n rtpTimestamp,\n packetCount,\n octetCount,\n });\n }\n}\n"]}
1
+ {"version":3,"file":"sr.js","sourceRoot":"","sources":["../../../../../rtp/src/rtcp/sr.ts"],"names":[],"mappings":"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","sourcesContent":["import range from \"lodash/range\";\n\nimport { bufferReader, bufferWriter } from \"../../../common/src\";\nimport { RtcpReceiverInfo } from \"./rr\";\nimport { RtcpPacketConverter } from \"./rtcp\";\n\n// https://datatracker.ietf.org/doc/html/rfc3550#section-6.4.1\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// header |V=2|P| RC | PT=SR=200 | length |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// | SSRC of sender |\n// +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+\n// sender | NTP timestamp, most significant word |\n// info +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// | NTP timestamp, least significant word |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// | RTP timestamp |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// | sender's packet count |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// | sender's octet count |\n// +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+\n// report | SSRC_1 (SSRC of first source) |\n// block +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// 1 | fraction lost | cumulative number of packets lost |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// | extended highest sequence number received |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// | interarrival jitter |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// | last SR (LSR) |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// | delay since last SR (DLSR) |\n// +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+\n// report | SSRC_2 (SSRC of second source) |\n// block +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n// 2 : ... :\n// +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+\n// | profile-specific extensions |\n// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n\nexport class RtcpSrPacket {\n ssrc: number = 0;\n senderInfo!: RtcpSenderInfo;\n reports: RtcpReceiverInfo[] = [];\n static readonly type = 200;\n readonly type = RtcpSrPacket.type;\n\n constructor(props: Pick<RtcpSrPacket, \"senderInfo\"> & Partial<RtcpSrPacket>) {\n Object.assign(this, props);\n }\n\n serialize() {\n let payload = Buffer.alloc(4);\n payload.writeUInt32BE(this.ssrc);\n payload = Buffer.concat([payload, this.senderInfo.serialize()]);\n payload = Buffer.concat([\n payload,\n ...this.reports.map((report) => report.serialize()),\n ]);\n return RtcpPacketConverter.serialize(\n RtcpSrPacket.type,\n this.reports.length,\n payload,\n Math.floor(payload.length / 4)\n );\n }\n\n static deSerialize(payload: Buffer, count: number) {\n const ssrc = payload.readUInt32BE();\n const senderInfo = RtcpSenderInfo.deSerialize(payload.slice(4, 24));\n let pos = 24;\n const reports: RtcpReceiverInfo[] = [];\n for (const _ of range(count)) {\n reports.push(RtcpReceiverInfo.deSerialize(payload.slice(pos, pos + 24)));\n pos += 24;\n }\n const packet = new RtcpSrPacket({ ssrc, senderInfo, reports });\n return packet;\n }\n}\n\nexport class RtcpSenderInfo {\n ntpTimestamp!: bigint;\n rtpTimestamp!: number;\n packetCount!: number;\n octetCount!: number;\n\n constructor(props: Partial<RtcpSenderInfo> = {}) {\n Object.assign(this, props);\n }\n\n serialize() {\n return bufferWriter(\n [8, 4, 4, 4],\n [this.ntpTimestamp, this.rtpTimestamp, this.packetCount, this.octetCount]\n );\n }\n\n static deSerialize(data: Buffer) {\n const [ntpTimestamp, rtpTimestamp, packetCount, octetCount] = bufferReader(\n data,\n [8, 4, 4, 4]\n );\n\n return new RtcpSenderInfo({\n ntpTimestamp,\n rtpTimestamp,\n packetCount,\n octetCount,\n });\n }\n}\n"]}
@@ -5,9 +5,24 @@ const src_1 = require("../../../../common/src");
5
5
  const packet_1 = require("./packet");
6
6
  class RedEncoder {
7
7
  constructor(distance = 1) {
8
- this.distance = distance;
9
- this.cache = [];
10
- this.cacheSize = 10;
8
+ Object.defineProperty(this, "distance", {
9
+ enumerable: true,
10
+ configurable: true,
11
+ writable: true,
12
+ value: distance
13
+ });
14
+ Object.defineProperty(this, "cache", {
15
+ enumerable: true,
16
+ configurable: true,
17
+ writable: true,
18
+ value: []
19
+ });
20
+ Object.defineProperty(this, "cacheSize", {
21
+ enumerable: true,
22
+ configurable: true,
23
+ writable: true,
24
+ value: 10
25
+ });
11
26
  }
12
27
  push(payload) {
13
28
  this.cache.push(payload);
@@ -1 +1 @@
1
- {"version":3,"file":"encoder.js","sourceRoot":"","sources":["../../../../../../rtp/src/rtp/red/encoder.ts"],"names":[],"mappings":";;;AAAA,gDAAmD;AACnD,qCAA+B;AAE/B,MAAa,UAAU;IAIrB,YAAmB,WAAW,CAAC;QAAZ,aAAQ,GAAR,QAAQ,CAAI;QAHvB,UAAK,GAA4D,EAAE,CAAC;QAC5E,cAAS,GAAG,EAAE,CAAC;IAEmB,CAAC;IAEnC,IAAI,CAAC,OAA8D;QACjE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzB,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;YACtC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;SACpB;IACH,CAAC;IAED,KAAK;QACH,MAAM,GAAG,GAAG,IAAI,YAAG,EAAE,CAAC;QACtB,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC;QAEjE,MAAM,cAAc,GAAG,iBAAiB,CAAC,GAAG,EAAE,CAAC;QAC/C,IAAI,CAAC,cAAc,EAAE;YACnB,OAAO,GAAG,CAAC;SACZ;QAED,iBAAiB,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;YACtC,MAAM,eAAe,GAAG,IAAA,eAAS,EAC/B,cAAc,CAAC,SAAS,EACxB,CAAC,SAAS,CAAC,SAAS,CACrB,CAAC;YACF,IAAI,eAAe,GAAG,SAAS,EAAE;gBAC/B,OAAO;aACR;YACD,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;gBACd,KAAK,EAAE,SAAS,CAAC,KAAK;gBACtB,OAAO,EAAE,SAAS,CAAC,OAAO;gBAC1B,eAAe;aAChB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;YACd,KAAK,EAAE,cAAc,CAAC,KAAK;YAC3B,OAAO,EAAE,cAAc,CAAC,OAAO;SAChC,CAAC,CAAC;QACH,OAAO,GAAG,CAAC;IACb,CAAC;CACF;AA1CD,gCA0CC;AAED,MAAM,SAAS,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC","sourcesContent":["import { uint32Add } from \"../../../../common/src\";\nimport { Red } from \"./packet\";\n\nexport class RedEncoder {\n private cache: { block: Buffer; timestamp: number; blockPT: number }[] = [];\n cacheSize = 10;\n\n constructor(public distance = 1) {}\n\n push(payload: { block: Buffer; timestamp: number; blockPT: number }) {\n this.cache.push(payload);\n if (this.cache.length > this.cacheSize) {\n this.cache.shift();\n }\n }\n\n build() {\n const red = new Red();\n const redundantPayloads = this.cache.slice(-(this.distance + 1));\n\n const presentPayload = redundantPayloads.pop();\n if (!presentPayload) {\n return red;\n }\n\n redundantPayloads.forEach((redundant) => {\n const timestampOffset = uint32Add(\n presentPayload.timestamp,\n -redundant.timestamp\n );\n if (timestampOffset > Max14Uint) {\n return;\n }\n red.blocks.push({\n block: redundant.block,\n blockPT: redundant.blockPT,\n timestampOffset,\n });\n });\n red.blocks.push({\n block: presentPayload.block,\n blockPT: presentPayload.blockPT,\n });\n return red;\n }\n}\n\nconst Max14Uint = (0x01 << 14) - 1;\n"]}
1
+ {"version":3,"file":"encoder.js","sourceRoot":"","sources":["../../../../../../rtp/src/rtp/red/encoder.ts"],"names":[],"mappings":";;;AAAA,gDAAmD;AACnD,qCAA+B;AAE/B,MAAa,UAAU;IAIrB,YAAmB,WAAW,CAAC;;;;;mBAAZ;;QAHnB;;;;mBAAyE,EAAE;WAAC;QAC5E;;;;mBAAY,EAAE;WAAC;IAEmB,CAAC;IAEnC,IAAI,CAAC,OAA8D;QACjE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzB,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;YACtC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;SACpB;IACH,CAAC;IAED,KAAK;QACH,MAAM,GAAG,GAAG,IAAI,YAAG,EAAE,CAAC;QACtB,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC;QAEjE,MAAM,cAAc,GAAG,iBAAiB,CAAC,GAAG,EAAE,CAAC;QAC/C,IAAI,CAAC,cAAc,EAAE;YACnB,OAAO,GAAG,CAAC;SACZ;QAED,iBAAiB,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;YACtC,MAAM,eAAe,GAAG,IAAA,eAAS,EAC/B,cAAc,CAAC,SAAS,EACxB,CAAC,SAAS,CAAC,SAAS,CACrB,CAAC;YACF,IAAI,eAAe,GAAG,SAAS,EAAE;gBAC/B,OAAO;aACR;YACD,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;gBACd,KAAK,EAAE,SAAS,CAAC,KAAK;gBACtB,OAAO,EAAE,SAAS,CAAC,OAAO;gBAC1B,eAAe;aAChB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;YACd,KAAK,EAAE,cAAc,CAAC,KAAK;YAC3B,OAAO,EAAE,cAAc,CAAC,OAAO;SAChC,CAAC,CAAC;QACH,OAAO,GAAG,CAAC;IACb,CAAC;CACF;AA1CD,gCA0CC;AAED,MAAM,SAAS,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC","sourcesContent":["import { uint32Add } from \"../../../../common/src\";\nimport { Red } from \"./packet\";\n\nexport class RedEncoder {\n private cache: { block: Buffer; timestamp: number; blockPT: number }[] = [];\n cacheSize = 10;\n\n constructor(public distance = 1) {}\n\n push(payload: { block: Buffer; timestamp: number; blockPT: number }) {\n this.cache.push(payload);\n if (this.cache.length > this.cacheSize) {\n this.cache.shift();\n }\n }\n\n build() {\n const red = new Red();\n const redundantPayloads = this.cache.slice(-(this.distance + 1));\n\n const presentPayload = redundantPayloads.pop();\n if (!presentPayload) {\n return red;\n }\n\n redundantPayloads.forEach((redundant) => {\n const timestampOffset = uint32Add(\n presentPayload.timestamp,\n -redundant.timestamp\n );\n if (timestampOffset > Max14Uint) {\n return;\n }\n red.blocks.push({\n block: redundant.block,\n blockPT: redundant.blockPT,\n timestampOffset,\n });\n });\n red.blocks.push({\n block: presentPayload.block,\n blockPT: presentPayload.blockPT,\n });\n return red;\n }\n}\n\nconst Max14Uint = (0x01 << 14) - 1;\n"]}
@@ -13,8 +13,18 @@ const __1 = require("../..");
13
13
  // +-+-+-+-+-+-+-+-+
14
14
  class RedHandler {
15
15
  constructor() {
16
- this.size = 150;
17
- this.sequenceNumbers = [];
16
+ Object.defineProperty(this, "size", {
17
+ enumerable: true,
18
+ configurable: true,
19
+ writable: true,
20
+ value: 150
21
+ });
22
+ Object.defineProperty(this, "sequenceNumbers", {
23
+ enumerable: true,
24
+ configurable: true,
25
+ writable: true,
26
+ value: []
27
+ });
18
28
  }
19
29
  push(red, base) {
20
30
  const packets = [];
@@ -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,SAAI,GAAG,GAAG,CAAC;QACpB,oBAAe,GAAa,EAAE,CAAC;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;gBACnB,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;aACH;iBAAM;gBACL,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;aACH;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;gBAC1D,OAAO,KAAK,CAAC;aACd;iBAAM;gBACL,kBAAkB;gBAClB,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE;oBAC3C,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;iBAC9B;gBACD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;gBACnD,OAAO,IAAI,CAAC;aACb;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,6BAAwE;AAExE,iEAAiE;AACjE,mEAAmE;AACnE,oEAAoE;AACpE,oEAAoE;AACpE,oEAAoE;AAEpE,kBAAkB;AAClB,oBAAoB;AACpB,oBAAoB;AACpB,oBAAoB;AAEpB,MAAa,UAAU;IAAvB;QACE;;;;mBAAwB,GAAG;WAAC;QAC5B;;;;mBAAoC,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;gBACnB,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;aACH;iBAAM;gBACL,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;aACH;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;gBAC1D,OAAO,KAAK,CAAC;aACd;iBAAM;gBACL,kBAAkB;gBAClB,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE;oBAC3C,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;iBAC9B;gBACD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;gBACnD,OAAO,IAAI,CAAC;aACb;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"]}
@@ -16,7 +16,18 @@ const log = (0, debug_1.debug)("packages/rtp/src/rtp/red/packet.ts");
16
16
  // +-+-+-+-+-+-+-+-+
17
17
  class Red {
18
18
  constructor() {
19
- this.blocks = [];
19
+ Object.defineProperty(this, "header", {
20
+ enumerable: true,
21
+ configurable: true,
22
+ writable: true,
23
+ value: void 0
24
+ });
25
+ Object.defineProperty(this, "blocks", {
26
+ enumerable: true,
27
+ configurable: true,
28
+ writable: true,
29
+ value: []
30
+ });
20
31
  }
21
32
  static deSerialize(bufferOrArrayBuffer) {
22
33
  const buf = bufferOrArrayBuffer instanceof ArrayBuffer
@@ -63,7 +74,12 @@ class Red {
63
74
  exports.Red = Red;
64
75
  class RedHeader {
65
76
  constructor() {
66
- this.fields = [];
77
+ Object.defineProperty(this, "fields", {
78
+ enumerable: true,
79
+ configurable: true,
80
+ writable: true,
81
+ value: []
82
+ });
67
83
  }
68
84
  static deSerialize(buf) {
69
85
  let offset = 0;
@@ -1 +1 @@
1
- {"version":3,"file":"packet.js","sourceRoot":"","sources":["../../../../../../rtp/src/rtp/red/packet.ts"],"names":[],"mappings":"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","sourcesContent":["// rfc2198\n\nimport { debug } from \"debug\";\n\nimport { BitStream } from \"../../../../common/src\";\n\nconst log = debug(\"packages/rtp/src/rtp/red/packet.ts\");\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 Red {\n header!: RedHeader;\n blocks: {\n block: Buffer;\n blockPT: number;\n /**14bit */\n timestampOffset?: number;\n }[] = [];\n\n static deSerialize(bufferOrArrayBuffer: Buffer | ArrayBuffer) {\n const buf =\n bufferOrArrayBuffer instanceof ArrayBuffer\n ? Buffer.from(bufferOrArrayBuffer)\n : bufferOrArrayBuffer;\n\n const red = new Red();\n let offset = 0;\n [red.header, offset] = RedHeader.deSerialize(buf);\n\n red.header.fields.forEach(({ blockLength, timestampOffset, blockPT }) => {\n if (blockLength && timestampOffset) {\n const block = buf.subarray(offset, offset + blockLength);\n red.blocks.push({ block, blockPT, timestampOffset });\n offset += blockLength;\n } else {\n const block = buf.subarray(offset);\n red.blocks.push({ block, blockPT });\n }\n });\n\n return red;\n }\n\n serialize() {\n this.header = new RedHeader();\n\n for (const { timestampOffset, blockPT, block } of this.blocks) {\n if (timestampOffset) {\n this.header.fields.push({\n fBit: 1,\n blockPT,\n blockLength: block.length,\n timestampOffset,\n });\n } else {\n this.header.fields.push({ fBit: 0, blockPT });\n }\n }\n\n let buf = this.header.serialize();\n for (const { block } of this.blocks) {\n buf = Buffer.concat([buf, block]);\n }\n\n return buf;\n }\n}\n\nexport class RedHeader {\n fields: RedHeaderField[] = [];\n\n static deSerialize(buf: Buffer) {\n let offset = 0;\n const header = new RedHeader();\n\n for (;;) {\n const field: RedHeaderField = {} as any;\n header.fields.push(field);\n\n const bitStream = new BitStream(buf.subarray(offset));\n field.fBit = bitStream.readBits(1);\n field.blockPT = bitStream.readBits(7);\n\n offset++;\n\n if (field.fBit === 0) {\n break;\n }\n\n field.timestampOffset = bitStream.readBits(14);\n field.blockLength = bitStream.readBits(10);\n\n offset += 3;\n }\n\n return [header, offset] as const;\n }\n\n serialize() {\n let buf = Buffer.alloc(0);\n for (const field of this.fields) {\n try {\n if (field.timestampOffset && field.blockLength) {\n const bitStream = new BitStream(Buffer.alloc(4))\n .writeBits(1, field.fBit)\n .writeBits(7, field.blockPT)\n .writeBits(14, field.timestampOffset)\n .writeBits(10, field.blockLength);\n buf = Buffer.concat([buf, bitStream.uint8Array]);\n } else {\n const bitStream = new BitStream(Buffer.alloc(1))\n .writeBits(1, 0)\n .writeBits(7, field.blockPT);\n buf = Buffer.concat([buf, bitStream.uint8Array]);\n }\n } catch (error: any) {\n log(error?.message);\n continue;\n }\n }\n return buf;\n }\n}\n\ninterface RedHeaderField {\n /**ヘッダーの最初のビットは、別のヘッダーブロックが続くかどうかを示す。 1の場合は、さらにヘッダーブロックが続き、0の場合は、これが最後のヘッダーブロックとなります。 */\n fBit: number;\n blockPT: number;\n /**14bit */\n timestampOffset?: number;\n /**10bit */\n blockLength?: number;\n}\n"]}
1
+ {"version":3,"file":"packet.js","sourceRoot":"","sources":["../../../../../../rtp/src/rtp/red/packet.ts"],"names":[],"mappings":";AAAA,UAAU;;;AAEV,iCAA8B;AAE9B,gDAAmD;AAEnD,MAAM,GAAG,GAAG,IAAA,aAAK,EAAC,oCAAoC,CAAC,CAAC;AAExD,iEAAiE;AACjE,mEAAmE;AACnE,oEAAoE;AACpE,oEAAoE;AACpE,oEAAoE;AAEpE,kBAAkB;AAClB,oBAAoB;AACpB,oBAAoB;AACpB,oBAAoB;AAEpB,MAAa,GAAG;IAAhB;QACE;;;;;WAAmB;QACnB;;;;mBAKM,EAAE;WAAC;IAiDX,CAAC;IA/CC,MAAM,CAAC,WAAW,CAAC,mBAAyC;QAC1D,MAAM,GAAG,GACP,mBAAmB,YAAY,WAAW;YACxC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC;YAClC,CAAC,CAAC,mBAAmB,CAAC;QAE1B,MAAM,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;QACtB,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAElD,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,WAAW,EAAE,eAAe,EAAE,OAAO,EAAE,EAAE,EAAE;YACtE,IAAI,WAAW,IAAI,eAAe,EAAE;gBAClC,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAAC,CAAC;gBACzD,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC;gBACrD,MAAM,IAAI,WAAW,CAAC;aACvB;iBAAM;gBACL,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBACnC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;aACrC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,GAAG,CAAC;IACb,CAAC;IAED,SAAS;QACP,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAE9B,KAAK,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE;YAC7D,IAAI,eAAe,EAAE;gBACnB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;oBACtB,IAAI,EAAE,CAAC;oBACP,OAAO;oBACP,WAAW,EAAE,KAAK,CAAC,MAAM;oBACzB,eAAe;iBAChB,CAAC,CAAC;aACJ;iBAAM;gBACL,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;aAC/C;SACF;QAED,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QAClC,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE;YACnC,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;SACnC;QAED,OAAO,GAAG,CAAC;IACb,CAAC;CACF;AAxDD,kBAwDC;AAED,MAAa,SAAS;IAAtB;QACE;;;;mBAA2B,EAAE;WAAC;IAqDhC,CAAC;IAnDC,MAAM,CAAC,WAAW,CAAC,GAAW;QAC5B,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAE/B,SAAS;YACP,MAAM,KAAK,GAAmB,EAAS,CAAC;YACxC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAE1B,MAAM,SAAS,GAAG,IAAI,eAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;YACtD,KAAK,CAAC,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACnC,KAAK,CAAC,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAEtC,MAAM,EAAE,CAAC;YAET,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE;gBACpB,MAAM;aACP;YAED,KAAK,CAAC,eAAe,GAAG,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC/C,KAAK,CAAC,WAAW,GAAG,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAE3C,MAAM,IAAI,CAAC,CAAC;SACb;QAED,OAAO,CAAC,MAAM,EAAE,MAAM,CAAU,CAAC;IACnC,CAAC;IAED,SAAS;QACP,IAAI,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;YAC/B,IAAI;gBACF,IAAI,KAAK,CAAC,eAAe,IAAI,KAAK,CAAC,WAAW,EAAE;oBAC9C,MAAM,SAAS,GAAG,IAAI,eAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;yBAC7C,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC;yBACxB,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC;yBAC3B,SAAS,CAAC,EAAE,EAAE,KAAK,CAAC,eAAe,CAAC;yBACpC,SAAS,CAAC,EAAE,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;oBACpC,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;iBAClD;qBAAM;oBACL,MAAM,SAAS,GAAG,IAAI,eAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;yBAC7C,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;yBACf,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;oBAC/B,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;iBAClD;aACF;YAAC,OAAO,KAAU,EAAE;gBACnB,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBACpB,SAAS;aACV;SACF;QACD,OAAO,GAAG,CAAC;IACb,CAAC;CACF;AAtDD,8BAsDC","sourcesContent":["// rfc2198\n\nimport { debug } from \"debug\";\n\nimport { BitStream } from \"../../../../common/src\";\n\nconst log = debug(\"packages/rtp/src/rtp/red/packet.ts\");\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 Red {\n header!: RedHeader;\n blocks: {\n block: Buffer;\n blockPT: number;\n /**14bit */\n timestampOffset?: number;\n }[] = [];\n\n static deSerialize(bufferOrArrayBuffer: Buffer | ArrayBuffer) {\n const buf =\n bufferOrArrayBuffer instanceof ArrayBuffer\n ? Buffer.from(bufferOrArrayBuffer)\n : bufferOrArrayBuffer;\n\n const red = new Red();\n let offset = 0;\n [red.header, offset] = RedHeader.deSerialize(buf);\n\n red.header.fields.forEach(({ blockLength, timestampOffset, blockPT }) => {\n if (blockLength && timestampOffset) {\n const block = buf.subarray(offset, offset + blockLength);\n red.blocks.push({ block, blockPT, timestampOffset });\n offset += blockLength;\n } else {\n const block = buf.subarray(offset);\n red.blocks.push({ block, blockPT });\n }\n });\n\n return red;\n }\n\n serialize() {\n this.header = new RedHeader();\n\n for (const { timestampOffset, blockPT, block } of this.blocks) {\n if (timestampOffset) {\n this.header.fields.push({\n fBit: 1,\n blockPT,\n blockLength: block.length,\n timestampOffset,\n });\n } else {\n this.header.fields.push({ fBit: 0, blockPT });\n }\n }\n\n let buf = this.header.serialize();\n for (const { block } of this.blocks) {\n buf = Buffer.concat([buf, block]);\n }\n\n return buf;\n }\n}\n\nexport class RedHeader {\n fields: RedHeaderField[] = [];\n\n static deSerialize(buf: Buffer) {\n let offset = 0;\n const header = new RedHeader();\n\n for (;;) {\n const field: RedHeaderField = {} as any;\n header.fields.push(field);\n\n const bitStream = new BitStream(buf.subarray(offset));\n field.fBit = bitStream.readBits(1);\n field.blockPT = bitStream.readBits(7);\n\n offset++;\n\n if (field.fBit === 0) {\n break;\n }\n\n field.timestampOffset = bitStream.readBits(14);\n field.blockLength = bitStream.readBits(10);\n\n offset += 3;\n }\n\n return [header, offset] as const;\n }\n\n serialize() {\n let buf = Buffer.alloc(0);\n for (const field of this.fields) {\n try {\n if (field.timestampOffset && field.blockLength) {\n const bitStream = new BitStream(Buffer.alloc(4))\n .writeBits(1, field.fBit)\n .writeBits(7, field.blockPT)\n .writeBits(14, field.timestampOffset)\n .writeBits(10, field.blockLength);\n buf = Buffer.concat([buf, bitStream.uint8Array]);\n } else {\n const bitStream = new BitStream(Buffer.alloc(1))\n .writeBits(1, 0)\n .writeBits(7, field.blockPT);\n buf = Buffer.concat([buf, bitStream.uint8Array]);\n }\n } catch (error: any) {\n log(error?.message);\n continue;\n }\n }\n return buf;\n }\n}\n\ninterface RedHeaderField {\n /**ヘッダーの最初のビットは、別のヘッダーブロックが続くかどうかを示す。 1の場合は、さらにヘッダーブロックが続き、0の場合は、これが最後のヘッダーブロックとなります。 */\n fBit: number;\n blockPT: number;\n /**14bit */\n timestampOffset?: number;\n /**10bit */\n blockLength?: number;\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  /// <reference types="node" />
2
- export declare type Extension = {
2
+ export type Extension = {
3
3
  id: number;
4
4
  payload: Buffer;
5
5
  };
@@ -7,7 +7,7 @@ export declare const ExtensionProfiles: {
7
7
  readonly OneByte: 48862;
8
8
  readonly TwoByte: 4096;
9
9
  };
10
- declare type ExtensionProfile = typeof ExtensionProfiles[keyof typeof ExtensionProfiles];
10
+ type ExtensionProfile = typeof ExtensionProfiles[keyof typeof ExtensionProfiles];
11
11
  export declare class RtpHeader {
12
12
  version: number;
13
13
  padding: boolean;
@@ -18,7 +18,7 @@ export declare class RtpHeader {
18
18
  payloadType: number;
19
19
  /**16bit */
20
20
  sequenceNumber: number;
21
- /**32bit milliseconds/1000 */
21
+ /**32bit microsec (milli/1000) */
22
22
  timestamp: number;
23
23
  ssrc: number;
24
24
  csrcLength: number;
@@ -27,22 +27,99 @@ const csrcSize = 4;
27
27
  */
28
28
  class RtpHeader {
29
29
  constructor(props = {}) {
30
- this.version = 2;
31
- this.padding = false;
32
- this.paddingSize = 0;
33
- this.extension = false;
34
- this.marker = false;
35
- this.payloadOffset = 0;
36
- this.payloadType = 0;
30
+ Object.defineProperty(this, "version", {
31
+ enumerable: true,
32
+ configurable: true,
33
+ writable: true,
34
+ value: 2
35
+ });
36
+ Object.defineProperty(this, "padding", {
37
+ enumerable: true,
38
+ configurable: true,
39
+ writable: true,
40
+ value: false
41
+ });
42
+ Object.defineProperty(this, "paddingSize", {
43
+ enumerable: true,
44
+ configurable: true,
45
+ writable: true,
46
+ value: 0
47
+ });
48
+ Object.defineProperty(this, "extension", {
49
+ enumerable: true,
50
+ configurable: true,
51
+ writable: true,
52
+ value: false
53
+ });
54
+ Object.defineProperty(this, "marker", {
55
+ enumerable: true,
56
+ configurable: true,
57
+ writable: true,
58
+ value: false
59
+ });
60
+ Object.defineProperty(this, "payloadOffset", {
61
+ enumerable: true,
62
+ configurable: true,
63
+ writable: true,
64
+ value: 0
65
+ });
66
+ Object.defineProperty(this, "payloadType", {
67
+ enumerable: true,
68
+ configurable: true,
69
+ writable: true,
70
+ value: 0
71
+ });
37
72
  /**16bit */
38
- this.sequenceNumber = 0;
39
- /**32bit milliseconds/1000 */
40
- this.timestamp = 0;
41
- this.ssrc = 0;
42
- this.csrcLength = 0;
43
- this.csrc = [];
44
- this.extensionProfile = exports.ExtensionProfiles.OneByte;
45
- this.extensions = [];
73
+ Object.defineProperty(this, "sequenceNumber", {
74
+ enumerable: true,
75
+ configurable: true,
76
+ writable: true,
77
+ value: 0
78
+ });
79
+ /**32bit microsec (milli/1000) */
80
+ Object.defineProperty(this, "timestamp", {
81
+ enumerable: true,
82
+ configurable: true,
83
+ writable: true,
84
+ value: 0
85
+ });
86
+ Object.defineProperty(this, "ssrc", {
87
+ enumerable: true,
88
+ configurable: true,
89
+ writable: true,
90
+ value: 0
91
+ });
92
+ Object.defineProperty(this, "csrcLength", {
93
+ enumerable: true,
94
+ configurable: true,
95
+ writable: true,
96
+ value: 0
97
+ });
98
+ Object.defineProperty(this, "csrc", {
99
+ enumerable: true,
100
+ configurable: true,
101
+ writable: true,
102
+ value: []
103
+ });
104
+ Object.defineProperty(this, "extensionProfile", {
105
+ enumerable: true,
106
+ configurable: true,
107
+ writable: true,
108
+ value: exports.ExtensionProfiles.OneByte
109
+ });
110
+ /**deserialize only */
111
+ Object.defineProperty(this, "extensionLength", {
112
+ enumerable: true,
113
+ configurable: true,
114
+ writable: true,
115
+ value: void 0
116
+ });
117
+ Object.defineProperty(this, "extensions", {
118
+ enumerable: true,
119
+ configurable: true,
120
+ writable: true,
121
+ value: []
122
+ });
46
123
  Object.assign(this, props);
47
124
  }
48
125
  static deSerialize(rawPacket) {
@@ -238,8 +315,18 @@ class RtpHeader {
238
315
  exports.RtpHeader = RtpHeader;
239
316
  class RtpPacket {
240
317
  constructor(header, payload) {
241
- this.header = header;
242
- this.payload = payload;
318
+ Object.defineProperty(this, "header", {
319
+ enumerable: true,
320
+ configurable: true,
321
+ writable: true,
322
+ value: header
323
+ });
324
+ Object.defineProperty(this, "payload", {
325
+ enumerable: true,
326
+ configurable: true,
327
+ writable: true,
328
+ value: payload
329
+ });
243
330
  }
244
331
  get serializeSize() {
245
332
  return this.header.serializeSize + this.payload.length;
@@ -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: number = 2;\n padding: boolean = false;\n paddingSize: number = 0;\n extension: boolean = false;\n marker: boolean = false;\n payloadOffset: number = 0;\n payloadType: number = 0;\n /**16bit */\n sequenceNumber: number = 0;\n /**32bit milliseconds/1000 */\n timestamp: number = 0;\n ssrc: number = 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 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: number = 2;\n padding: boolean = false;\n paddingSize: number = 0;\n extension: boolean = false;\n marker: boolean = false;\n payloadOffset: number = 0;\n payloadType: number = 0;\n /**16bit */\n sequenceNumber: number = 0;\n /**32bit microsec (milli/1000) */\n timestamp: number = 0;\n ssrc: number = 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 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"]}