werift 0.19.4 → 0.19.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (367) hide show
  1. package/lib/common/src/binary.d.ts +0 -1
  2. package/lib/common/src/binary.js +14 -14
  3. package/lib/common/src/binary.js.map +1 -1
  4. package/lib/common/src/network.d.ts +1 -2
  5. package/lib/common/src/network.js +4 -4
  6. package/lib/common/src/network.js.map +1 -1
  7. package/lib/common/src/number.js +10 -10
  8. package/lib/common/src/number.js.map +1 -1
  9. package/lib/dtls/src/cipher/create.d.ts +1 -1
  10. package/lib/dtls/src/cipher/create.js +2 -3
  11. package/lib/dtls/src/cipher/create.js.map +1 -1
  12. package/lib/dtls/src/cipher/ec.d.ts +0 -1
  13. package/lib/dtls/src/cipher/key-exchange.js +7 -7
  14. package/lib/dtls/src/cipher/key-exchange.js.map +1 -1
  15. package/lib/dtls/src/cipher/namedCurve.d.ts +1 -2
  16. package/lib/dtls/src/cipher/namedCurve.js +1 -2
  17. package/lib/dtls/src/cipher/namedCurve.js.map +1 -1
  18. package/lib/dtls/src/cipher/prf.d.ts +1 -2
  19. package/lib/dtls/src/cipher/prf.js +11 -12
  20. package/lib/dtls/src/cipher/prf.js.map +1 -1
  21. package/lib/dtls/src/cipher/suites/abstract.d.ts +1 -2
  22. package/lib/dtls/src/cipher/suites/abstract.js.map +1 -1
  23. package/lib/dtls/src/cipher/suites/aead.d.ts +1 -2
  24. package/lib/dtls/src/cipher/suites/aead.js.map +1 -1
  25. package/lib/dtls/src/client.d.ts +1 -1
  26. package/lib/dtls/src/client.js.map +1 -1
  27. package/lib/dtls/src/context/cipher.d.ts +6 -7
  28. package/lib/dtls/src/context/cipher.js +5 -3
  29. package/lib/dtls/src/context/cipher.js.map +1 -1
  30. package/lib/dtls/src/context/dtls.d.ts +5 -6
  31. package/lib/dtls/src/context/dtls.js +1 -2
  32. package/lib/dtls/src/context/dtls.js.map +1 -1
  33. package/lib/dtls/src/context/transport.d.ts +1 -2
  34. package/lib/dtls/src/context/transport.js.map +1 -1
  35. package/lib/dtls/src/flight/client/flight1.d.ts +4 -4
  36. package/lib/dtls/src/flight/client/flight1.js.map +1 -1
  37. package/lib/dtls/src/flight/client/flight3.d.ts +3 -3
  38. package/lib/dtls/src/flight/client/flight3.js.map +1 -1
  39. package/lib/dtls/src/flight/client/flight5.d.ts +4 -4
  40. package/lib/dtls/src/flight/client/flight5.js.map +1 -1
  41. package/lib/dtls/src/flight/flight.d.ts +3 -4
  42. package/lib/dtls/src/flight/flight.js.map +1 -1
  43. package/lib/dtls/src/flight/server/flight2.d.ts +4 -4
  44. package/lib/dtls/src/flight/server/flight2.js.map +1 -1
  45. package/lib/dtls/src/flight/server/flight4.d.ts +5 -5
  46. package/lib/dtls/src/flight/server/flight4.js.map +1 -1
  47. package/lib/dtls/src/flight/server/flight6.d.ts +4 -4
  48. package/lib/dtls/src/flight/server/flight6.js.map +1 -1
  49. package/lib/dtls/src/handshake/extensions/ellipticCurves.d.ts +1 -2
  50. package/lib/dtls/src/handshake/extensions/ellipticCurves.js.map +1 -1
  51. package/lib/dtls/src/handshake/extensions/renegotiationIndication.d.ts +0 -1
  52. package/lib/dtls/src/handshake/extensions/signature.d.ts +1 -2
  53. package/lib/dtls/src/handshake/extensions/signature.js.map +1 -1
  54. package/lib/dtls/src/handshake/extensions/useSrtp.d.ts +1 -2
  55. package/lib/dtls/src/handshake/extensions/useSrtp.js.map +1 -1
  56. package/lib/dtls/src/handshake/message/alert.d.ts +0 -1
  57. package/lib/dtls/src/handshake/message/alert.js.map +1 -1
  58. package/lib/dtls/src/handshake/message/certificate.d.ts +1 -2
  59. package/lib/dtls/src/handshake/message/certificate.js.map +1 -1
  60. package/lib/dtls/src/handshake/message/changeCipherSpec.d.ts +0 -1
  61. package/lib/dtls/src/handshake/message/client/certificateVerify.d.ts +2 -3
  62. package/lib/dtls/src/handshake/message/client/certificateVerify.js.map +1 -1
  63. package/lib/dtls/src/handshake/message/client/hello.d.ts +1 -2
  64. package/lib/dtls/src/handshake/message/client/hello.js.map +1 -1
  65. package/lib/dtls/src/handshake/message/client/keyExchange.d.ts +1 -2
  66. package/lib/dtls/src/handshake/message/client/keyExchange.js.map +1 -1
  67. package/lib/dtls/src/handshake/message/finished.d.ts +1 -2
  68. package/lib/dtls/src/handshake/message/finished.js.map +1 -1
  69. package/lib/dtls/src/handshake/message/server/certificateRequest.d.ts +2 -3
  70. package/lib/dtls/src/handshake/message/server/certificateRequest.js.map +1 -1
  71. package/lib/dtls/src/handshake/message/server/hello.d.ts +2 -3
  72. package/lib/dtls/src/handshake/message/server/hello.js.map +1 -1
  73. package/lib/dtls/src/handshake/message/server/helloDone.d.ts +1 -2
  74. package/lib/dtls/src/handshake/message/server/helloDone.js.map +1 -1
  75. package/lib/dtls/src/handshake/message/server/helloVerifyRequest.d.ts +1 -2
  76. package/lib/dtls/src/handshake/message/server/helloVerifyRequest.js.map +1 -1
  77. package/lib/dtls/src/handshake/message/server/keyExchange.d.ts +2 -3
  78. package/lib/dtls/src/handshake/message/server/keyExchange.js.map +1 -1
  79. package/lib/dtls/src/handshake/random.d.ts +0 -1
  80. package/lib/dtls/src/helper.d.ts +0 -1
  81. package/lib/dtls/src/helper.js +3 -3
  82. package/lib/dtls/src/helper.js.map +1 -1
  83. package/lib/dtls/src/record/builder.d.ts +2 -3
  84. package/lib/dtls/src/record/builder.js +2 -4
  85. package/lib/dtls/src/record/builder.js.map +1 -1
  86. package/lib/dtls/src/record/message/fragment.d.ts +1 -2
  87. package/lib/dtls/src/record/message/fragment.js.map +1 -1
  88. package/lib/dtls/src/record/message/header.d.ts +0 -1
  89. package/lib/dtls/src/record/message/plaintext.d.ts +0 -1
  90. package/lib/dtls/src/record/receive.d.ts +2 -3
  91. package/lib/dtls/src/record/receive.js.map +1 -1
  92. package/lib/dtls/src/server.d.ts +1 -1
  93. package/lib/dtls/src/server.js.map +1 -1
  94. package/lib/dtls/src/socket.d.ts +5 -6
  95. package/lib/dtls/src/socket.js +17 -23
  96. package/lib/dtls/src/socket.js.map +1 -1
  97. package/lib/dtls/src/transport.d.ts +1 -3
  98. package/lib/dtls/src/transport.js.map +1 -1
  99. package/lib/dtls/src/typings/domain.d.ts +2 -3
  100. package/lib/dtls/src/typings/domain.js.map +1 -1
  101. package/lib/dtls/src/util/binary.d.ts +0 -1
  102. package/lib/dtls/src/util/binary.js +1 -2
  103. package/lib/dtls/src/util/binary.js.map +1 -1
  104. package/lib/ice/src/candidate.js +3 -3
  105. package/lib/ice/src/candidate.js.map +1 -1
  106. package/lib/ice/src/dns/lookup.d.ts +1 -1
  107. package/lib/ice/src/dns/lookup.js +1 -0
  108. package/lib/ice/src/dns/lookup.js.map +1 -1
  109. package/lib/ice/src/exceptions.js.map +1 -1
  110. package/lib/ice/src/helper.d.ts +0 -1
  111. package/lib/ice/src/helper.js +5 -5
  112. package/lib/ice/src/helper.js.map +1 -1
  113. package/lib/ice/src/ice.d.ts +3 -2
  114. package/lib/ice/src/ice.js +25 -16
  115. package/lib/ice/src/ice.js.map +1 -1
  116. package/lib/ice/src/stun/attributes.d.ts +0 -1
  117. package/lib/ice/src/stun/attributes.js +5 -5
  118. package/lib/ice/src/stun/attributes.js.map +1 -1
  119. package/lib/ice/src/stun/message.d.ts +0 -1
  120. package/lib/ice/src/stun/message.js +2 -2
  121. package/lib/ice/src/stun/message.js.map +1 -1
  122. package/lib/ice/src/stun/protocol.d.ts +0 -1
  123. package/lib/ice/src/stun/transaction.d.ts +1 -1
  124. package/lib/ice/src/transport.d.ts +1 -4
  125. package/lib/ice/src/turn/protocol.d.ts +1 -2
  126. package/lib/ice/src/turn/protocol.js +5 -4
  127. package/lib/ice/src/turn/protocol.js.map +1 -1
  128. package/lib/ice/src/types/model.d.ts +0 -1
  129. package/lib/ice/src/utils.js +3 -4
  130. package/lib/ice/src/utils.js.map +1 -1
  131. package/lib/rtp/src/codec/av1.d.ts +1 -2
  132. package/lib/rtp/src/codec/av1.js +2 -2
  133. package/lib/rtp/src/codec/av1.js.map +1 -1
  134. package/lib/rtp/src/codec/base.d.ts +1 -2
  135. package/lib/rtp/src/codec/base.js.map +1 -1
  136. package/lib/rtp/src/codec/h264.d.ts +2 -3
  137. package/lib/rtp/src/codec/h264.js.map +1 -1
  138. package/lib/rtp/src/codec/index.d.ts +1 -2
  139. package/lib/rtp/src/codec/index.js +2 -2
  140. package/lib/rtp/src/codec/index.js.map +1 -1
  141. package/lib/rtp/src/codec/opus.d.ts +2 -3
  142. package/lib/rtp/src/codec/opus.js.map +1 -1
  143. package/lib/rtp/src/codec/vp8.d.ts +2 -3
  144. package/lib/rtp/src/codec/vp8.js +1 -1
  145. package/lib/rtp/src/codec/vp8.js.map +1 -1
  146. package/lib/rtp/src/codec/vp9.d.ts +2 -3
  147. package/lib/rtp/src/codec/vp9.js +1 -1
  148. package/lib/rtp/src/codec/vp9.js.map +1 -1
  149. package/lib/rtp/src/extra/container/mp4/h264.d.ts +0 -1
  150. package/lib/rtp/src/extra/container/mp4/h264.js +2 -2
  151. package/lib/rtp/src/extra/container/mp4/h264.js.map +1 -1
  152. package/lib/rtp/src/extra/container/mp4/mp4box.d.ts +1 -1
  153. package/lib/rtp/src/extra/container/mp4/mp4box.js +3 -3
  154. package/lib/rtp/src/extra/container/mp4/mp4box.js.map +1 -1
  155. package/lib/rtp/src/extra/container/ogg/parser.d.ts +0 -1
  156. package/lib/rtp/src/extra/container/webm/container.d.ts +0 -1
  157. package/lib/rtp/src/extra/container/webm/container.js +2 -3
  158. package/lib/rtp/src/extra/container/webm/container.js.map +1 -1
  159. package/lib/rtp/src/extra/container/webm/ebml/typedArrayUtils.js +2 -2
  160. package/lib/rtp/src/extra/container/webm/ebml/typedArrayUtils.js.map +1 -1
  161. package/lib/rtp/src/extra/processor/depacketizer.d.ts +2 -3
  162. package/lib/rtp/src/extra/processor/depacketizer.js.map +1 -1
  163. package/lib/rtp/src/extra/processor/depacketizerCallback.d.ts +1 -1
  164. package/lib/rtp/src/extra/processor/depacketizerCallback.js.map +1 -1
  165. package/lib/rtp/src/extra/processor/depacketizerTransformer.d.ts +2 -3
  166. package/lib/rtp/src/extra/processor/depacketizerTransformer.js.map +1 -1
  167. package/lib/rtp/src/extra/processor/dtx.d.ts +2 -3
  168. package/lib/rtp/src/extra/processor/dtx.js.map +1 -1
  169. package/lib/rtp/src/extra/processor/dtxCallback.js.map +1 -1
  170. package/lib/rtp/src/extra/processor/interface.d.ts +2 -2
  171. package/lib/rtp/src/extra/processor/jitterBuffer.d.ts +2 -2
  172. package/lib/rtp/src/extra/processor/jitterBuffer.js.map +1 -1
  173. package/lib/rtp/src/extra/processor/jitterBufferCallback.d.ts +1 -1
  174. package/lib/rtp/src/extra/processor/jitterBufferCallback.js.map +1 -1
  175. package/lib/rtp/src/extra/processor/jitterBufferTransformer.d.ts +1 -2
  176. package/lib/rtp/src/extra/processor/jitterBufferTransformer.js.map +1 -1
  177. package/lib/rtp/src/extra/processor/lipsync.d.ts +3 -4
  178. package/lib/rtp/src/extra/processor/lipsync.js +2 -2
  179. package/lib/rtp/src/extra/processor/lipsync.js.map +1 -1
  180. package/lib/rtp/src/extra/processor/lipsyncCallback.d.ts +1 -1
  181. package/lib/rtp/src/extra/processor/lipsyncCallback.js.map +1 -1
  182. package/lib/rtp/src/extra/processor/mp4.d.ts +2 -3
  183. package/lib/rtp/src/extra/processor/mp4.js.map +1 -1
  184. package/lib/rtp/src/extra/processor/mp4Callback.d.ts +2 -2
  185. package/lib/rtp/src/extra/processor/mp4Callback.js.map +1 -1
  186. package/lib/rtp/src/extra/processor/mute.d.ts +2 -3
  187. package/lib/rtp/src/extra/processor/mute.js.map +1 -1
  188. package/lib/rtp/src/extra/processor/muteCallback.d.ts +2 -2
  189. package/lib/rtp/src/extra/processor/muteCallback.js.map +1 -1
  190. package/lib/rtp/src/extra/processor/nack.d.ts +2 -2
  191. package/lib/rtp/src/extra/processor/nack.js.map +1 -1
  192. package/lib/rtp/src/extra/processor/nackHandlerCallback.js.map +1 -1
  193. package/lib/rtp/src/extra/processor/ntpTime.d.ts +2 -2
  194. package/lib/rtp/src/extra/processor/ntpTime.js.map +1 -1
  195. package/lib/rtp/src/extra/processor/ntpTimeCallback.d.ts +1 -1
  196. package/lib/rtp/src/extra/processor/ntpTimeCallback.js.map +1 -1
  197. package/lib/rtp/src/extra/processor/rtcpCallback.d.ts +2 -2
  198. package/lib/rtp/src/extra/processor/rtcpCallback.js.map +1 -1
  199. package/lib/rtp/src/extra/processor/rtpCallback.d.ts +1 -2
  200. package/lib/rtp/src/extra/processor/rtpCallback.js.map +1 -1
  201. package/lib/rtp/src/extra/processor/rtpStream.d.ts +2 -4
  202. package/lib/rtp/src/extra/processor/rtpStream.js.map +1 -1
  203. package/lib/rtp/src/extra/processor/rtpTime.d.ts +2 -2
  204. package/lib/rtp/src/extra/processor/rtpTime.js.map +1 -1
  205. package/lib/rtp/src/extra/processor/rtpTimeCallback.d.ts +1 -1
  206. package/lib/rtp/src/extra/processor/rtpTimeCallback.js.map +1 -1
  207. package/lib/rtp/src/extra/processor/webm.d.ts +2 -3
  208. package/lib/rtp/src/extra/processor/webm.js +2 -2
  209. package/lib/rtp/src/extra/processor/webm.js.map +1 -1
  210. package/lib/rtp/src/extra/processor/webmCallback.d.ts +2 -2
  211. package/lib/rtp/src/extra/processor/webmCallback.js.map +1 -1
  212. package/lib/rtp/src/extra/processor/webmStream.d.ts +2 -3
  213. package/lib/rtp/src/extra/processor/webmStream.js.map +1 -1
  214. package/lib/rtp/src/helper.d.ts +0 -1
  215. package/lib/rtp/src/helper.js +6 -6
  216. package/lib/rtp/src/helper.js.map +1 -1
  217. package/lib/rtp/src/index.d.ts +0 -1
  218. package/lib/rtp/src/rtcp/header.d.ts +0 -1
  219. package/lib/rtp/src/rtcp/psfb/fullIntraRequest.d.ts +0 -1
  220. package/lib/rtp/src/rtcp/psfb/index.d.ts +1 -2
  221. package/lib/rtp/src/rtcp/psfb/index.js.map +1 -1
  222. package/lib/rtp/src/rtcp/psfb/pictureLossIndication.d.ts +0 -1
  223. package/lib/rtp/src/rtcp/psfb/remb.d.ts +0 -1
  224. package/lib/rtp/src/rtcp/rr.d.ts +0 -1
  225. package/lib/rtp/src/rtcp/rtcp.d.ts +0 -1
  226. package/lib/rtp/src/rtcp/rtcp.js +2 -2
  227. package/lib/rtp/src/rtcp/rtcp.js.map +1 -1
  228. package/lib/rtp/src/rtcp/rtpfb/index.d.ts +1 -2
  229. package/lib/rtp/src/rtcp/rtpfb/index.js.map +1 -1
  230. package/lib/rtp/src/rtcp/rtpfb/nack.d.ts +0 -1
  231. package/lib/rtp/src/rtcp/rtpfb/twcc.d.ts +0 -1
  232. package/lib/rtp/src/rtcp/rtpfb/twcc.js +1 -2
  233. package/lib/rtp/src/rtcp/rtpfb/twcc.js.map +1 -1
  234. package/lib/rtp/src/rtcp/sdes.d.ts +1 -2
  235. package/lib/rtp/src/rtcp/sdes.js.map +1 -1
  236. package/lib/rtp/src/rtcp/sr.d.ts +0 -1
  237. package/lib/rtp/src/rtp/headerExtension.d.ts +1 -2
  238. package/lib/rtp/src/rtp/headerExtension.js +12 -12
  239. package/lib/rtp/src/rtp/headerExtension.js.map +1 -1
  240. package/lib/rtp/src/rtp/red/encoder.d.ts +0 -1
  241. package/lib/rtp/src/rtp/red/handler.d.ts +1 -1
  242. package/lib/rtp/src/rtp/red/handler.js.map +1 -1
  243. package/lib/rtp/src/rtp/red/packet.d.ts +0 -1
  244. package/lib/rtp/src/rtp/rtp.d.ts +0 -1
  245. package/lib/rtp/src/rtp/rtp.js.map +1 -1
  246. package/lib/rtp/src/rtp/rtx.js +2 -3
  247. package/lib/rtp/src/rtp/rtx.js.map +1 -1
  248. package/lib/rtp/src/srtp/cipher/ctr.d.ts +0 -1
  249. package/lib/rtp/src/srtp/cipher/gcm.d.ts +0 -1
  250. package/lib/rtp/src/srtp/cipher/index.d.ts +2 -3
  251. package/lib/rtp/src/srtp/cipher/index.js.map +1 -1
  252. package/lib/rtp/src/srtp/context/context.d.ts +3 -5
  253. package/lib/rtp/src/srtp/context/context.js.map +1 -1
  254. package/lib/rtp/src/srtp/context/srtcp.d.ts +2 -3
  255. package/lib/rtp/src/srtp/context/srtcp.js.map +1 -1
  256. package/lib/rtp/src/srtp/context/srtp.d.ts +1 -2
  257. package/lib/rtp/src/srtp/context/srtp.js.map +1 -1
  258. package/lib/rtp/src/srtp/session.d.ts +1 -2
  259. package/lib/rtp/src/srtp/session.js.map +1 -1
  260. package/lib/rtp/src/srtp/srtcp.d.ts +1 -2
  261. package/lib/rtp/src/srtp/srtcp.js.map +1 -1
  262. package/lib/rtp/src/srtp/srtp.d.ts +2 -3
  263. package/lib/rtp/src/srtp/srtp.js.map +1 -1
  264. package/lib/rtp/src/util.d.ts +0 -1
  265. package/lib/sctp/src/chunk.d.ts +0 -1
  266. package/lib/sctp/src/chunk.js +4 -4
  267. package/lib/sctp/src/chunk.js.map +1 -1
  268. package/lib/sctp/src/helper.js +2 -3
  269. package/lib/sctp/src/helper.js.map +1 -1
  270. package/lib/sctp/src/param.d.ts +0 -1
  271. package/lib/sctp/src/param.js.map +1 -1
  272. package/lib/sctp/src/sctp.d.ts +5 -6
  273. package/lib/sctp/src/sctp.js.map +1 -1
  274. package/lib/sctp/src/transport.d.ts +1 -3
  275. package/lib/sctp/src/transport.js.map +1 -1
  276. package/lib/webrtc/src/const.d.ts +1 -1
  277. package/lib/webrtc/src/const.js.map +1 -1
  278. package/lib/webrtc/src/dataChannel.d.ts +2 -3
  279. package/lib/webrtc/src/dataChannel.js.map +1 -1
  280. package/lib/webrtc/src/helper.d.ts +0 -1
  281. package/lib/webrtc/src/helper.js +3 -3
  282. package/lib/webrtc/src/helper.js.map +1 -1
  283. package/lib/webrtc/src/media/extension/rtcpFeedback.d.ts +1 -1
  284. package/lib/webrtc/src/media/extension/rtcpFeedback.js.map +1 -1
  285. package/lib/webrtc/src/media/extension/rtpExtension.js +7 -8
  286. package/lib/webrtc/src/media/extension/rtpExtension.js.map +1 -1
  287. package/lib/webrtc/src/media/parameters.d.ts +1 -1
  288. package/lib/webrtc/src/media/parameters.js.map +1 -1
  289. package/lib/webrtc/src/media/receiver/nack.d.ts +2 -2
  290. package/lib/webrtc/src/media/receiver/nack.js.map +1 -1
  291. package/lib/webrtc/src/media/receiver/receiverTwcc.d.ts +1 -1
  292. package/lib/webrtc/src/media/receiver/receiverTwcc.js.map +1 -1
  293. package/lib/webrtc/src/media/receiver/statistics.d.ts +1 -1
  294. package/lib/webrtc/src/media/receiver/statistics.js.map +1 -1
  295. package/lib/webrtc/src/media/router.d.ts +4 -4
  296. package/lib/webrtc/src/media/router.js.map +1 -1
  297. package/lib/webrtc/src/media/rtpReceiver.d.ts +7 -7
  298. package/lib/webrtc/src/media/rtpReceiver.js.map +1 -1
  299. package/lib/webrtc/src/media/rtpSender.d.ts +5 -6
  300. package/lib/webrtc/src/media/rtpSender.js.map +1 -1
  301. package/lib/webrtc/src/media/rtpTransceiver.d.ts +6 -6
  302. package/lib/webrtc/src/media/rtpTransceiver.js.map +1 -1
  303. package/lib/webrtc/src/media/sender/senderBWE.d.ts +1 -1
  304. package/lib/webrtc/src/media/sender/senderBWE.js.map +1 -1
  305. package/lib/webrtc/src/media/track.d.ts +3 -4
  306. package/lib/webrtc/src/media/track.js.map +1 -1
  307. package/lib/webrtc/src/nonstandard/index.d.ts +1 -0
  308. package/lib/webrtc/src/nonstandard/index.js +1 -0
  309. package/lib/webrtc/src/nonstandard/index.js.map +1 -1
  310. package/lib/webrtc/src/nonstandard/navigator.d.ts +4 -2
  311. package/lib/webrtc/src/nonstandard/navigator.js +6 -0
  312. package/lib/webrtc/src/nonstandard/navigator.js.map +1 -1
  313. package/lib/webrtc/src/nonstandard/recorder/index.d.ts +23 -7
  314. package/lib/webrtc/src/nonstandard/recorder/index.js +30 -27
  315. package/lib/webrtc/src/nonstandard/recorder/index.js.map +1 -1
  316. package/lib/webrtc/src/nonstandard/recorder/writer/index.d.ts +17 -5
  317. package/lib/webrtc/src/nonstandard/recorder/writer/index.js +3 -9
  318. package/lib/webrtc/src/nonstandard/recorder/writer/index.js.map +1 -1
  319. package/lib/webrtc/src/nonstandard/recorder/writer/webm.d.ts +1 -1
  320. package/lib/webrtc/src/nonstandard/recorder/writer/webm.js +23 -12
  321. package/lib/webrtc/src/nonstandard/recorder/writer/webm.js.map +1 -1
  322. package/lib/webrtc/src/nonstandard/userMedia.d.ts +4 -5
  323. package/lib/webrtc/src/nonstandard/userMedia.js.map +1 -1
  324. package/lib/webrtc/src/peerConnection.d.ts +10 -10
  325. package/lib/webrtc/src/peerConnection.js +15 -21
  326. package/lib/webrtc/src/peerConnection.js.map +1 -1
  327. package/lib/webrtc/src/sdp.d.ts +4 -4
  328. package/lib/webrtc/src/sdp.js +21 -21
  329. package/lib/webrtc/src/sdp.js.map +1 -1
  330. package/lib/webrtc/src/transport/dtls.d.ts +8 -8
  331. package/lib/webrtc/src/transport/dtls.js +16 -3
  332. package/lib/webrtc/src/transport/dtls.js.map +1 -1
  333. package/lib/webrtc/src/transport/ice.d.ts +1 -1
  334. package/lib/webrtc/src/transport/ice.js +3 -3
  335. package/lib/webrtc/src/transport/ice.js.map +1 -1
  336. package/lib/webrtc/src/transport/sctp.d.ts +1 -2
  337. package/lib/webrtc/src/transport/sctp.js +1 -1
  338. package/lib/webrtc/src/transport/sctp.js.map +1 -1
  339. package/lib/webrtc/src/utils.d.ts +3 -4
  340. package/lib/webrtc/src/utils.js +11 -8
  341. package/lib/webrtc/src/utils.js.map +1 -1
  342. package/package.json +12 -8
  343. package/src/const.ts +1 -1
  344. package/src/dataChannel.ts +2 -2
  345. package/src/media/extension/rtcpFeedback.ts +1 -1
  346. package/src/media/parameters.ts +1 -1
  347. package/src/media/receiver/nack.ts +9 -6
  348. package/src/media/receiver/receiverTwcc.ts +3 -3
  349. package/src/media/receiver/statistics.ts +1 -1
  350. package/src/media/router.ts +45 -39
  351. package/src/media/rtpReceiver.ts +30 -19
  352. package/src/media/rtpSender.ts +84 -71
  353. package/src/media/rtpTransceiver.ts +6 -6
  354. package/src/media/sender/senderBWE.ts +1 -1
  355. package/src/media/track.ts +3 -3
  356. package/src/nonstandard/index.ts +1 -0
  357. package/src/nonstandard/navigator.ts +3 -1
  358. package/src/nonstandard/recorder/index.ts +47 -19
  359. package/src/nonstandard/recorder/writer/index.ts +7 -4
  360. package/src/nonstandard/recorder/writer/webm.ts +25 -14
  361. package/src/nonstandard/userMedia.ts +1 -1
  362. package/src/peerConnection.ts +43 -51
  363. package/src/sdp.ts +108 -94
  364. package/src/transport/dtls.ts +28 -14
  365. package/src/transport/ice.ts +1 -1
  366. package/src/transport/sctp.ts +75 -67
  367. package/src/utils.ts +7 -5
@@ -15,8 +15,8 @@ export interface SimpleProcessorCallback<Input = any, Output = any> {
15
15
  }
16
16
  export declare const SimpleProcessorCallbackBase: <Input, Output, TBase extends new (...args: any[]) => Processor<Input, Output>>(Base: TBase) => {
17
17
  new (...args: any[]): {
18
- cb?: ((o: Output) => void) | undefined;
19
- destructor?: (() => void) | undefined;
18
+ cb?: (o: Output) => void;
19
+ destructor?: () => void;
20
20
  pipe: (cb: (o: Output) => void, destructor?: () => void) => any;
21
21
  input: (input: Input) => void;
22
22
  destroy: () => void;
@@ -1,5 +1,5 @@
1
- import { Processor } from "./interface";
2
- import { RtpOutput } from "./rtpCallback";
1
+ import type { Processor } from "./interface";
2
+ import type { RtpOutput } from "./rtpCallback";
3
3
  export type JitterBufferInput = RtpOutput;
4
4
  export interface JitterBufferOutput extends RtpOutput {
5
5
  isPacketLost?: {
@@ -1 +1 @@
1
- {"version":3,"file":"jitterBuffer.js","sourceRoot":"","sources":["../../../../../../rtp/src/extra/processor/jitterBuffer.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n RequireAtLeastOne,\n RtpPacket,\n uint16Add,\n uint16Gte,\n uint32Add,\n uint32Gt,\n} from \"../..\";\nimport { Processor } from \"./interface\";\nimport { RtpOutput } from \"./rtpCallback\";\n\nexport type JitterBufferInput = RtpOutput;\n\nexport interface JitterBufferOutput extends RtpOutput {\n isPacketLost?: { from: number; to: number };\n}\n\nexport class JitterBufferBase\n implements Processor<JitterBufferInput, JitterBufferOutput>\n{\n private options: JitterBufferOptions;\n /**uint16 */\n private presentSeqNum?: number;\n private rtpBuffer: { [sequenceNumber: number]: RtpPacket } = {};\n private get expectNextSeqNum() {\n return uint16Add(this.presentSeqNum!, 1);\n }\n private internalStats = {};\n\n constructor(\n public clockRate: number,\n options: Partial<JitterBufferOptions> = {},\n ) {\n this.options = {\n latency: options.latency ?? 200,\n bufferSize: options.bufferSize ?? 10000,\n };\n }\n\n toJSON() {\n return {\n ...this.internalStats,\n rtpBufferLength: Object.values(this.rtpBuffer).length,\n presentSeqNum: this.presentSeqNum,\n expectNextSeqNum: this.expectNextSeqNum,\n };\n }\n\n private stop() {\n this.rtpBuffer = {};\n }\n\n processInput(input: JitterBufferInput): JitterBufferOutput[] {\n const output: JitterBufferOutput[] = [];\n\n if (!input.rtp) {\n if (input.eol) {\n const packets = this.sortAndClearBuffer(this.rtpBuffer);\n for (const rtp of packets) {\n output.push({ rtp });\n }\n output.push({ eol: true });\n\n this.stop();\n }\n return output;\n }\n\n const { packets, timeoutSeqNum } = this.processRtp(input.rtp);\n\n if (timeoutSeqNum != undefined) {\n const isPacketLost = {\n from: this.expectNextSeqNum,\n to: timeoutSeqNum,\n };\n this.presentSeqNum = input.rtp.header.sequenceNumber;\n output.push({ isPacketLost });\n if (packets) {\n for (const rtp of [...packets, input.rtp]) {\n output.push({ rtp });\n }\n }\n this.internalStats[\"jitterBuffer\"] = new Date().toISOString();\n return output;\n } else {\n if (packets) {\n for (const rtp of packets) {\n output.push({ rtp });\n }\n this.internalStats[\"jitterBuffer\"] = new Date().toISOString();\n return output;\n }\n return [];\n }\n }\n\n private processRtp(rtp: RtpPacket): RequireAtLeastOne<{\n packets: RtpPacket[];\n timeoutSeqNum: number;\n nothing: undefined;\n }> {\n const { sequenceNumber, timestamp } = rtp.header;\n\n // init\n if (this.presentSeqNum == undefined) {\n this.presentSeqNum = sequenceNumber;\n return { packets: [rtp] };\n }\n\n // duplicate\n if (uint16Gte(this.presentSeqNum, sequenceNumber)) {\n this.internalStats[\"duplicate\"] = {\n count: (this.internalStats[\"duplicate\"]?.count ?? 0) + 1,\n sequenceNumber,\n timestamp: new Date().toISOString(),\n };\n return { nothing: undefined };\n }\n\n // expect\n if (sequenceNumber === this.expectNextSeqNum) {\n this.presentSeqNum = sequenceNumber;\n\n const rtpBuffer = this.resolveBuffer(uint16Add(sequenceNumber, 1));\n this.presentSeqNum =\n rtpBuffer.at(-1)?.header.sequenceNumber ?? this.presentSeqNum;\n\n this.disposeTimeoutPackets(timestamp);\n\n return { packets: [rtp, ...rtpBuffer] };\n }\n\n this.pushRtpBuffer(rtp);\n\n const { latestTimeoutSeqNum, sorted } =\n this.disposeTimeoutPackets(timestamp);\n\n if (latestTimeoutSeqNum) {\n return { timeoutSeqNum: latestTimeoutSeqNum, packets: sorted };\n } else {\n return { nothing: undefined };\n }\n }\n\n private pushRtpBuffer(rtp: RtpPacket) {\n if (Object.values(this.rtpBuffer).length > this.options.bufferSize) {\n this.internalStats[\"buffer_overflow\"] = {\n count: (this.internalStats[\"buffer_overflow\"]?.count ?? 0) + 1,\n timestamp: new Date().toISOString(),\n };\n return;\n }\n\n this.rtpBuffer[rtp.header.sequenceNumber] = rtp;\n }\n\n private resolveBuffer(seqNumFrom: number) {\n const resolve: RtpPacket[] = [];\n\n for (let index = seqNumFrom; ; index = uint16Add(index, 1)) {\n const rtp = this.rtpBuffer[index];\n if (rtp) {\n resolve.push(rtp);\n delete this.rtpBuffer[index];\n } else {\n break;\n }\n }\n\n return resolve;\n }\n\n private sortAndClearBuffer(rtpBuffer: {\n [sequenceNumber: number]: RtpPacket;\n }) {\n const buffer: RtpPacket[] = [];\n for (let index = this.presentSeqNum ?? 0; ; index = uint16Add(index, 1)) {\n const rtp = rtpBuffer[index];\n if (rtp) {\n buffer.push(rtp);\n delete rtpBuffer[index];\n }\n if (Object.values(rtpBuffer).length === 0) {\n break;\n }\n }\n return buffer;\n }\n\n private disposeTimeoutPackets(baseTimestamp: number) {\n let latestTimeoutSeqNum: number | undefined;\n\n const packets = Object.values(this.rtpBuffer)\n .map((rtp) => {\n const { timestamp, sequenceNumber } = rtp.header;\n\n if (uint32Gt(timestamp, baseTimestamp)) {\n return;\n }\n\n const elapsedSec =\n uint32Add(baseTimestamp, -timestamp) / this.clockRate;\n\n if (elapsedSec * 1000 > this.options.latency) {\n this.internalStats[\"timeout_packet\"] = {\n count: (this.internalStats[\"timeout_packet\"]?.count ?? 0) + 1,\n at: new Date().toISOString(),\n sequenceNumber,\n elapsedSec,\n baseTimestamp,\n timestamp,\n };\n\n if (latestTimeoutSeqNum == undefined) {\n latestTimeoutSeqNum = sequenceNumber;\n }\n // 現在のSeqNumとの差が最も大きいSeqNumを探す\n if (\n uint16Add(sequenceNumber, -this.presentSeqNum!) >\n uint16Add(latestTimeoutSeqNum, -this.presentSeqNum!)\n ) {\n latestTimeoutSeqNum = sequenceNumber;\n }\n\n const packet = this.rtpBuffer[sequenceNumber];\n delete this.rtpBuffer[sequenceNumber];\n return packet;\n }\n })\n .flatMap((p): RtpPacket => p as RtpPacket)\n .filter((p) => p);\n\n const sorted = this.sortAndClearBuffer(\n packets.reduce((acc, cur) => {\n acc[cur.header.sequenceNumber] = cur;\n return acc;\n }, {}),\n );\n\n return { latestTimeoutSeqNum, sorted };\n }\n}\n\nexport interface JitterBufferOptions {\n /**milliseconds */\n latency: number;\n bufferSize: number;\n}\n"]}
1
+ {"version":3,"file":"jitterBuffer.js","sourceRoot":"","sources":["../../../../../../rtp/src/extra/processor/jitterBuffer.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type RequireAtLeastOne,\n type RtpPacket,\n uint16Add,\n uint16Gte,\n uint32Add,\n uint32Gt,\n} from \"../..\";\nimport type { Processor } from \"./interface\";\nimport type { RtpOutput } from \"./rtpCallback\";\n\nexport type JitterBufferInput = RtpOutput;\n\nexport interface JitterBufferOutput extends RtpOutput {\n isPacketLost?: { from: number; to: number };\n}\n\nexport class JitterBufferBase\n implements Processor<JitterBufferInput, JitterBufferOutput>\n{\n private options: JitterBufferOptions;\n /**uint16 */\n private presentSeqNum?: number;\n private rtpBuffer: { [sequenceNumber: number]: RtpPacket } = {};\n private get expectNextSeqNum() {\n return uint16Add(this.presentSeqNum!, 1);\n }\n private internalStats = {};\n\n constructor(\n public clockRate: number,\n options: Partial<JitterBufferOptions> = {},\n ) {\n this.options = {\n latency: options.latency ?? 200,\n bufferSize: options.bufferSize ?? 10000,\n };\n }\n\n toJSON() {\n return {\n ...this.internalStats,\n rtpBufferLength: Object.values(this.rtpBuffer).length,\n presentSeqNum: this.presentSeqNum,\n expectNextSeqNum: this.expectNextSeqNum,\n };\n }\n\n private stop() {\n this.rtpBuffer = {};\n }\n\n processInput(input: JitterBufferInput): JitterBufferOutput[] {\n const output: JitterBufferOutput[] = [];\n\n if (!input.rtp) {\n if (input.eol) {\n const packets = this.sortAndClearBuffer(this.rtpBuffer);\n for (const rtp of packets) {\n output.push({ rtp });\n }\n output.push({ eol: true });\n\n this.stop();\n }\n return output;\n }\n\n const { packets, timeoutSeqNum } = this.processRtp(input.rtp);\n\n if (timeoutSeqNum != undefined) {\n const isPacketLost = {\n from: this.expectNextSeqNum,\n to: timeoutSeqNum,\n };\n this.presentSeqNum = input.rtp.header.sequenceNumber;\n output.push({ isPacketLost });\n if (packets) {\n for (const rtp of [...packets, input.rtp]) {\n output.push({ rtp });\n }\n }\n this.internalStats[\"jitterBuffer\"] = new Date().toISOString();\n return output;\n } else {\n if (packets) {\n for (const rtp of packets) {\n output.push({ rtp });\n }\n this.internalStats[\"jitterBuffer\"] = new Date().toISOString();\n return output;\n }\n return [];\n }\n }\n\n private processRtp(rtp: RtpPacket): RequireAtLeastOne<{\n packets: RtpPacket[];\n timeoutSeqNum: number;\n nothing: undefined;\n }> {\n const { sequenceNumber, timestamp } = rtp.header;\n\n // init\n if (this.presentSeqNum == undefined) {\n this.presentSeqNum = sequenceNumber;\n return { packets: [rtp] };\n }\n\n // duplicate\n if (uint16Gte(this.presentSeqNum, sequenceNumber)) {\n this.internalStats[\"duplicate\"] = {\n count: (this.internalStats[\"duplicate\"]?.count ?? 0) + 1,\n sequenceNumber,\n timestamp: new Date().toISOString(),\n };\n return { nothing: undefined };\n }\n\n // expect\n if (sequenceNumber === this.expectNextSeqNum) {\n this.presentSeqNum = sequenceNumber;\n\n const rtpBuffer = this.resolveBuffer(uint16Add(sequenceNumber, 1));\n this.presentSeqNum =\n rtpBuffer.at(-1)?.header.sequenceNumber ?? this.presentSeqNum;\n\n this.disposeTimeoutPackets(timestamp);\n\n return { packets: [rtp, ...rtpBuffer] };\n }\n\n this.pushRtpBuffer(rtp);\n\n const { latestTimeoutSeqNum, sorted } =\n this.disposeTimeoutPackets(timestamp);\n\n if (latestTimeoutSeqNum) {\n return { timeoutSeqNum: latestTimeoutSeqNum, packets: sorted };\n } else {\n return { nothing: undefined };\n }\n }\n\n private pushRtpBuffer(rtp: RtpPacket) {\n if (Object.values(this.rtpBuffer).length > this.options.bufferSize) {\n this.internalStats[\"buffer_overflow\"] = {\n count: (this.internalStats[\"buffer_overflow\"]?.count ?? 0) + 1,\n timestamp: new Date().toISOString(),\n };\n return;\n }\n\n this.rtpBuffer[rtp.header.sequenceNumber] = rtp;\n }\n\n private resolveBuffer(seqNumFrom: number) {\n const resolve: RtpPacket[] = [];\n\n for (let index = seqNumFrom; ; index = uint16Add(index, 1)) {\n const rtp = this.rtpBuffer[index];\n if (rtp) {\n resolve.push(rtp);\n delete this.rtpBuffer[index];\n } else {\n break;\n }\n }\n\n return resolve;\n }\n\n private sortAndClearBuffer(rtpBuffer: {\n [sequenceNumber: number]: RtpPacket;\n }) {\n const buffer: RtpPacket[] = [];\n for (let index = this.presentSeqNum ?? 0; ; index = uint16Add(index, 1)) {\n const rtp = rtpBuffer[index];\n if (rtp) {\n buffer.push(rtp);\n delete rtpBuffer[index];\n }\n if (Object.values(rtpBuffer).length === 0) {\n break;\n }\n }\n return buffer;\n }\n\n private disposeTimeoutPackets(baseTimestamp: number) {\n let latestTimeoutSeqNum: number | undefined;\n\n const packets = Object.values(this.rtpBuffer)\n .map((rtp) => {\n const { timestamp, sequenceNumber } = rtp.header;\n\n if (uint32Gt(timestamp, baseTimestamp)) {\n return;\n }\n\n const elapsedSec =\n uint32Add(baseTimestamp, -timestamp) / this.clockRate;\n\n if (elapsedSec * 1000 > this.options.latency) {\n this.internalStats[\"timeout_packet\"] = {\n count: (this.internalStats[\"timeout_packet\"]?.count ?? 0) + 1,\n at: new Date().toISOString(),\n sequenceNumber,\n elapsedSec,\n baseTimestamp,\n timestamp,\n };\n\n if (latestTimeoutSeqNum == undefined) {\n latestTimeoutSeqNum = sequenceNumber;\n }\n // 現在のSeqNumとの差が最も大きいSeqNumを探す\n if (\n uint16Add(sequenceNumber, -this.presentSeqNum!) >\n uint16Add(latestTimeoutSeqNum, -this.presentSeqNum!)\n ) {\n latestTimeoutSeqNum = sequenceNumber;\n }\n\n const packet = this.rtpBuffer[sequenceNumber];\n delete this.rtpBuffer[sequenceNumber];\n return packet;\n }\n })\n .flatMap((p): RtpPacket => p as RtpPacket)\n .filter((p) => p);\n\n const sorted = this.sortAndClearBuffer(\n packets.reduce((acc, cur) => {\n acc[cur.header.sequenceNumber] = cur;\n return acc;\n }, {}),\n );\n\n return { latestTimeoutSeqNum, sorted };\n }\n}\n\nexport interface JitterBufferOptions {\n /**milliseconds */\n latency: number;\n bufferSize: number;\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { JitterBufferBase, JitterBufferOutput } from "./jitterBuffer";
1
+ import { JitterBufferBase, type JitterBufferOutput } from "./jitterBuffer";
2
2
  declare const JitterBufferCallback_base: {
3
3
  new (...args: any[]): {
4
4
  cb?: ((o: JitterBufferOutput) => void) | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"jitterBufferCallback.js","sourceRoot":"","sources":["../../../../../../rtp/src/extra/processor/jitterBufferCallback.ts"],"names":[],"mappings":";;;AAAA,2CAA0D;AAC1D,iDAIwB;AAExB,MAAa,oBAAqB,SAAQ,IAAA,uCAA2B,EAInE,+BAAgB,CAAC;CAAG;AAJtB,oDAIsB","sourcesContent":["import { SimpleProcessorCallbackBase } from \"./interface\";\nimport {\n JitterBufferBase,\n JitterBufferInput,\n JitterBufferOutput,\n} from \"./jitterBuffer\";\n\nexport class JitterBufferCallback extends SimpleProcessorCallbackBase<\n JitterBufferInput,\n JitterBufferOutput,\n typeof JitterBufferBase\n>(JitterBufferBase) {}\n"]}
1
+ {"version":3,"file":"jitterBufferCallback.js","sourceRoot":"","sources":["../../../../../../rtp/src/extra/processor/jitterBufferCallback.ts"],"names":[],"mappings":";;;AAAA,2CAA0D;AAC1D,iDAIwB;AAExB,MAAa,oBAAqB,SAAQ,IAAA,uCAA2B,EAInE,+BAAgB,CAAC;CAAG;AAJtB,oDAIsB","sourcesContent":["import { SimpleProcessorCallbackBase } from \"./interface\";\nimport {\n JitterBufferBase,\n type JitterBufferInput,\n type JitterBufferOutput,\n} from \"./jitterBuffer\";\n\nexport class JitterBufferCallback extends SimpleProcessorCallbackBase<\n JitterBufferInput,\n JitterBufferOutput,\n typeof JitterBufferBase\n>(JitterBufferBase) {}\n"]}
@@ -1,6 +1,5 @@
1
- /// <reference types="node" />
2
1
  import { TransformStream } from "stream/web";
3
- import { JitterBufferBase, JitterBufferInput, JitterBufferOptions, JitterBufferOutput } from "./jitterBuffer";
2
+ import { JitterBufferBase, type JitterBufferInput, type JitterBufferOptions, type JitterBufferOutput } from "./jitterBuffer";
4
3
  export declare const jitterBufferTransformer: (clockRate: number, options?: Partial<JitterBufferOptions> | undefined) => TransformStream<import("./rtpCallback").RtpOutput, JitterBufferOutput>;
5
4
  export declare class JitterBufferTransformer extends JitterBufferBase {
6
5
  clockRate: number;
@@ -1 +1 @@
1
- {"version":3,"file":"jitterBufferTransformer.js","sourceRoot":"","sources":["../../../../../../rtp/src/extra/processor/jitterBufferTransformer.ts"],"names":[],"mappings":";;;AAAA,oCAA6C;AAE7C,iDAKwB;AAEjB,MAAM,uBAAuB,GAAG,CACrC,GAAG,IAA2D,EAC9D,EAAE,CAAC,IAAI,uBAAuB,CAAC,GAAG,IAAI,CAAC,CAAC,SAAS,CAAC;AAFvC,QAAA,uBAAuB,2BAEgB;AAEpD,MAAa,uBAAwB,SAAQ,+BAAgB;IAG3D,YACS,SAAiB,EACxB,UAAwC,EAAE;QAE1C,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAH1B;;;;mBAAO,SAAS;WAAQ;QAH1B;;;;;WAAkE;QAQhE,IAAI,CAAC,SAAS,GAAG,IAAI,qBAAe,CAAC;YACnC,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;gBAC3B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC3C,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACtB,CAAC;YACH,CAAC;SACF,CAAC,CAAC;IACL,CAAC;CACF;AAjBD,0DAiBC","sourcesContent":["import { TransformStream } from \"stream/web\";\n\nimport {\n JitterBufferBase,\n JitterBufferInput,\n JitterBufferOptions,\n JitterBufferOutput,\n} from \"./jitterBuffer\";\n\nexport const jitterBufferTransformer = (\n ...args: ConstructorParameters<typeof JitterBufferTransformer>\n) => new JitterBufferTransformer(...args).transform;\n\nexport class JitterBufferTransformer extends JitterBufferBase {\n transform: TransformStream<JitterBufferInput, JitterBufferOutput>;\n\n constructor(\n public clockRate: number,\n options: Partial<JitterBufferOptions> = {},\n ) {\n super(clockRate, options);\n\n this.transform = new TransformStream({\n transform: (input, output) => {\n for (const res of this.processInput(input)) {\n output.enqueue(res);\n }\n },\n });\n }\n}\n"]}
1
+ {"version":3,"file":"jitterBufferTransformer.js","sourceRoot":"","sources":["../../../../../../rtp/src/extra/processor/jitterBufferTransformer.ts"],"names":[],"mappings":";;;AAAA,oCAA6C;AAE7C,iDAKwB;AAEjB,MAAM,uBAAuB,GAAG,CACrC,GAAG,IAA2D,EAC9D,EAAE,CAAC,IAAI,uBAAuB,CAAC,GAAG,IAAI,CAAC,CAAC,SAAS,CAAC;AAFvC,QAAA,uBAAuB,2BAEgB;AAEpD,MAAa,uBAAwB,SAAQ,+BAAgB;IAG3D,YACS,SAAiB,EACxB,UAAwC,EAAE;QAE1C,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAH1B;;;;mBAAO,SAAS;WAAQ;QAH1B;;;;;WAAkE;QAQhE,IAAI,CAAC,SAAS,GAAG,IAAI,qBAAe,CAAC;YACnC,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;gBAC3B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC3C,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACtB,CAAC;YACH,CAAC;SACF,CAAC,CAAC;IACL,CAAC;CACF;AAjBD,0DAiBC","sourcesContent":["import { TransformStream } from \"stream/web\";\n\nimport {\n JitterBufferBase,\n type JitterBufferInput,\n type JitterBufferOptions,\n type JitterBufferOutput,\n} from \"./jitterBuffer\";\n\nexport const jitterBufferTransformer = (\n ...args: ConstructorParameters<typeof JitterBufferTransformer>\n) => new JitterBufferTransformer(...args).transform;\n\nexport class JitterBufferTransformer extends JitterBufferBase {\n transform: TransformStream<JitterBufferInput, JitterBufferOutput>;\n\n constructor(\n public clockRate: number,\n options: Partial<JitterBufferOptions> = {},\n ) {\n super(clockRate, options);\n\n this.transform = new TransformStream({\n transform: (input, output) => {\n for (const res of this.processInput(input)) {\n output.enqueue(res);\n }\n },\n });\n }\n}\n"]}
@@ -1,7 +1,6 @@
1
- /// <reference types="node" />
2
- import { CodecFrame } from "./depacketizer";
3
- import { AVProcessor } from "./interface";
4
- import { MediaKind } from "./webm";
1
+ import type { CodecFrame } from "./depacketizer";
2
+ import type { AVProcessor } from "./interface";
3
+ import type { MediaKind } from "./webm";
5
4
  export type LipsyncInput = {
6
5
  frame?: CodecFrame;
7
6
  eol?: boolean;
@@ -209,8 +209,8 @@ class LipsyncBase {
209
209
  return {
210
210
  ...this.internalStats,
211
211
  id: this.id,
212
- audioBufferLength: this.audioBuffer.flatMap((v) => v).length,
213
- videoBufferLength: this.videoBuffer.flatMap((v) => v).length,
212
+ audioBufferLength: this.audioBuffer.flat().length,
213
+ videoBufferLength: this.videoBuffer.flat().length,
214
214
  baseTime: this.baseTime,
215
215
  lastCommittedTimeSec: this.lastCommittedTime / 1000,
216
216
  };
@@ -1 +1 @@
1
- {"version":3,"file":"lipsync.js","sourceRoot":"","sources":["../../../../../../rtp/src/extra/processor/lipsync.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from \"crypto\";\n\nimport { int } from \"../..\";\nimport { CodecFrame } from \"./depacketizer\";\nimport { AVProcessor } from \"./interface\";\nimport { MediaKind } from \"./webm\";\n\nexport type LipsyncInput = {\n frame?: CodecFrame;\n eol?: boolean;\n};\n\nexport type LipsyncOutput = {\n frame?: CodecFrame;\n eol?: boolean;\n};\n\nexport class LipsyncBase implements AVProcessor<LipsyncInput> {\n private id = randomUUID();\n bufferLength: number;\n /**ms */\n baseTime?: number;\n audioBuffer: {\n frame: CodecFrame;\n kind: MediaKind;\n [key: string]: any;\n }[][];\n videoBuffer: { frame: CodecFrame; kind: MediaKind }[][];\n stopped = false;\n /**ms */\n private interval: number;\n /**ms */\n private bufferDuration: number;\n private ptime: number;\n private index = 0;\n private currentTimestamp!: number;\n /**ms */\n private lastCommittedTime = 0;\n private lastExecutionTime = 0;\n private internalStats = {};\n /**ms */\n private lastFrameReceivedAt = 0;\n\n constructor(\n private audioOutput: (output: LipsyncOutput) => void,\n private videoOutput: (output: LipsyncOutput) => void,\n private options: Partial<LipSyncOptions> = {},\n ) {\n this.interval = this.options.syncInterval ?? 500;\n this.bufferDuration = this.interval / 2;\n this.bufferLength = (this.options.bufferLength ?? 10) * 2;\n this.audioBuffer = [...new Array(this.bufferLength)].map(() => []);\n this.videoBuffer = [...new Array(this.bufferLength)].map(() => []);\n this.ptime = this.options.ptime ?? 20;\n }\n\n toJSON(): Record<string, any> {\n return {\n ...this.internalStats,\n id: this.id,\n audioBufferLength: this.audioBuffer.flatMap((v) => v).length,\n videoBufferLength: this.videoBuffer.flatMap((v) => v).length,\n baseTime: this.baseTime,\n lastCommittedTimeSec: this.lastCommittedTime / 1000,\n };\n }\n\n private executeTask() {\n const audioBuffer = this.audioBuffer[this.index].sort(\n (a, b) => a.frame.time - b.frame.time,\n );\n\n if (this.options.fillDummyAudioPacket) {\n const last = audioBuffer.at(-1);\n const expect = last\n ? last.frame.time +\n // offset\n this.ptime\n : this.currentTimestamp;\n\n // パケット間の損失/muteはdtxプラグインでダミーパケットを挿入する\n // interval中のパケットが途中から無いもしくはinterval中にパケットが無い場合はここでダミーパケットを挿入する\n const audioDiff = this.currentTimestamp + this.bufferDuration - expect;\n if (audioDiff > 0) {\n for (\n let time = expect;\n time < this.currentTimestamp + this.bufferDuration;\n time += this.ptime\n ) {\n audioBuffer.push({\n frame: {\n time,\n data: this.options.fillDummyAudioPacket,\n isKeyframe: true,\n },\n kind: \"audio\",\n });\n this.internalStats[\"pushDummyPacket\"] = {\n count: (this.internalStats[\"pushDummyPacket\"]?.count ?? 0) + 1,\n at: new Date().toISOString(),\n time,\n };\n }\n }\n }\n this.currentTimestamp += this.bufferDuration;\n const joined = [...audioBuffer, ...this.videoBuffer[this.index]].filter(\n (b) => b.frame.time >= this.lastCommittedTime,\n );\n const sorted = joined.sort((a, b) => a.frame.time - b.frame.time);\n this.audioBuffer[this.index] = [];\n this.videoBuffer[this.index] = [];\n\n for (const output of sorted) {\n if (output.kind === \"audio\") {\n this.audioOutput(output);\n } else {\n this.videoOutput(output);\n }\n this.internalStats[\"lipsync\"] = new Date().toISOString();\n this.lastCommittedTime = output.frame.time;\n }\n\n this.index++;\n if (this.index === this.bufferLength) {\n this.index = 0;\n }\n }\n\n private stop() {\n this.stopped = true;\n this.audioBuffer = [];\n this.videoBuffer = [];\n }\n\n processAudioInput = ({ frame, eol }: LipsyncInput) => {\n if (!frame) {\n this.audioOutput({ eol });\n this.stop();\n this.audioOutput = undefined as any;\n return;\n }\n\n this.processInput(frame, this.audioBuffer, \"audio\");\n };\n\n processVideoInput = ({ frame, eol }: LipsyncInput) => {\n if (!frame) {\n this.videoOutput({ eol });\n this.stop();\n this.videoOutput = undefined as any;\n return;\n }\n\n this.processInput(frame, this.videoBuffer, \"video\");\n };\n\n private processInput = (\n frame: CodecFrame,\n buffer: {\n frame: CodecFrame;\n kind: MediaKind;\n }[][],\n kind: MediaKind,\n ) => {\n if (this.stopped) {\n return;\n }\n\n if (this.baseTime == undefined) {\n this.baseTime = frame.time;\n this.currentTimestamp = this.baseTime;\n this.lastExecutionTime = this.baseTime;\n this.lastCommittedTime = this.baseTime;\n this.lastFrameReceivedAt = Date.now();\n }\n\n // 過去のフレームを捨てる\n if (frame.time < this.lastCommittedTime) {\n return;\n }\n\n // NTPの同期ずれが疑われるので捨てる\n const now = Date.now();\n const gap = 5000; // RTCP SR interval;\n const lastCommittedElapsed = frame.time - this.lastCommittedTime;\n const lastFrameReceivedElapsed = now - this.lastFrameReceivedAt;\n if (gap < lastFrameReceivedElapsed && lastCommittedElapsed < gap) {\n this.internalStats[\"invalidFrameTime\"] = {\n count: (this.internalStats[\"invalidFrameTime\"]?.count ?? 0) + 1,\n at: new Date().toISOString(),\n lastCommittedElapsed,\n lastFrameReceivedElapsed,\n };\n return;\n }\n this.lastFrameReceivedAt = now;\n\n const elapsed = frame.time - this.baseTime;\n const index = int(elapsed / this.bufferDuration) % this.bufferLength;\n buffer[index].push({\n frame,\n kind,\n });\n\n const diff = frame.time - this.lastExecutionTime;\n if (diff >= this.interval) {\n const times = int(diff / this.bufferDuration) - 1;\n this.lastExecutionTime = this.currentTimestamp;\n for (let i = 0; i < times; i++) {\n this.executeTask();\n this.lastExecutionTime += this.bufferDuration;\n }\n }\n return;\n };\n}\n\nexport interface LipSyncOptions {\n /**ms */\n syncInterval: number;\n /**\n * int\n * @description syncInterval * bufferLength = max packet lifetime\n * */\n bufferLength: number;\n fillDummyAudioPacket: Buffer;\n ptime: number;\n}\n"]}
1
+ {"version":3,"file":"lipsync.js","sourceRoot":"","sources":["../../../../../../rtp/src/extra/processor/lipsync.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from \"crypto\";\n\nimport { int } from \"../..\";\nimport type { CodecFrame } from \"./depacketizer\";\nimport type { AVProcessor } from \"./interface\";\nimport type { MediaKind } from \"./webm\";\n\nexport type LipsyncInput = {\n frame?: CodecFrame;\n eol?: boolean;\n};\n\nexport type LipsyncOutput = {\n frame?: CodecFrame;\n eol?: boolean;\n};\n\nexport class LipsyncBase implements AVProcessor<LipsyncInput> {\n private id = randomUUID();\n bufferLength: number;\n /**ms */\n baseTime?: number;\n audioBuffer: {\n frame: CodecFrame;\n kind: MediaKind;\n [key: string]: any;\n }[][];\n videoBuffer: { frame: CodecFrame; kind: MediaKind }[][];\n stopped = false;\n /**ms */\n private interval: number;\n /**ms */\n private bufferDuration: number;\n private ptime: number;\n private index = 0;\n private currentTimestamp!: number;\n /**ms */\n private lastCommittedTime = 0;\n private lastExecutionTime = 0;\n private internalStats = {};\n /**ms */\n private lastFrameReceivedAt = 0;\n\n constructor(\n private audioOutput: (output: LipsyncOutput) => void,\n private videoOutput: (output: LipsyncOutput) => void,\n private options: Partial<LipSyncOptions> = {},\n ) {\n this.interval = this.options.syncInterval ?? 500;\n this.bufferDuration = this.interval / 2;\n this.bufferLength = (this.options.bufferLength ?? 10) * 2;\n this.audioBuffer = [...new Array(this.bufferLength)].map(() => []);\n this.videoBuffer = [...new Array(this.bufferLength)].map(() => []);\n this.ptime = this.options.ptime ?? 20;\n }\n\n toJSON(): Record<string, any> {\n return {\n ...this.internalStats,\n id: this.id,\n audioBufferLength: this.audioBuffer.flat().length,\n videoBufferLength: this.videoBuffer.flat().length,\n baseTime: this.baseTime,\n lastCommittedTimeSec: this.lastCommittedTime / 1000,\n };\n }\n\n private executeTask() {\n const audioBuffer = this.audioBuffer[this.index].sort(\n (a, b) => a.frame.time - b.frame.time,\n );\n\n if (this.options.fillDummyAudioPacket) {\n const last = audioBuffer.at(-1);\n const expect = last\n ? last.frame.time +\n // offset\n this.ptime\n : this.currentTimestamp;\n\n // パケット間の損失/muteはdtxプラグインでダミーパケットを挿入する\n // interval中のパケットが途中から無いもしくはinterval中にパケットが無い場合はここでダミーパケットを挿入する\n const audioDiff = this.currentTimestamp + this.bufferDuration - expect;\n if (audioDiff > 0) {\n for (\n let time = expect;\n time < this.currentTimestamp + this.bufferDuration;\n time += this.ptime\n ) {\n audioBuffer.push({\n frame: {\n time,\n data: this.options.fillDummyAudioPacket,\n isKeyframe: true,\n },\n kind: \"audio\",\n });\n this.internalStats[\"pushDummyPacket\"] = {\n count: (this.internalStats[\"pushDummyPacket\"]?.count ?? 0) + 1,\n at: new Date().toISOString(),\n time,\n };\n }\n }\n }\n this.currentTimestamp += this.bufferDuration;\n const joined = [...audioBuffer, ...this.videoBuffer[this.index]].filter(\n (b) => b.frame.time >= this.lastCommittedTime,\n );\n const sorted = joined.sort((a, b) => a.frame.time - b.frame.time);\n this.audioBuffer[this.index] = [];\n this.videoBuffer[this.index] = [];\n\n for (const output of sorted) {\n if (output.kind === \"audio\") {\n this.audioOutput(output);\n } else {\n this.videoOutput(output);\n }\n this.internalStats[\"lipsync\"] = new Date().toISOString();\n this.lastCommittedTime = output.frame.time;\n }\n\n this.index++;\n if (this.index === this.bufferLength) {\n this.index = 0;\n }\n }\n\n private stop() {\n this.stopped = true;\n this.audioBuffer = [];\n this.videoBuffer = [];\n }\n\n processAudioInput = ({ frame, eol }: LipsyncInput) => {\n if (!frame) {\n this.audioOutput({ eol });\n this.stop();\n this.audioOutput = undefined as any;\n return;\n }\n\n this.processInput(frame, this.audioBuffer, \"audio\");\n };\n\n processVideoInput = ({ frame, eol }: LipsyncInput) => {\n if (!frame) {\n this.videoOutput({ eol });\n this.stop();\n this.videoOutput = undefined as any;\n return;\n }\n\n this.processInput(frame, this.videoBuffer, \"video\");\n };\n\n private processInput = (\n frame: CodecFrame,\n buffer: {\n frame: CodecFrame;\n kind: MediaKind;\n }[][],\n kind: MediaKind,\n ) => {\n if (this.stopped) {\n return;\n }\n\n if (this.baseTime == undefined) {\n this.baseTime = frame.time;\n this.currentTimestamp = this.baseTime;\n this.lastExecutionTime = this.baseTime;\n this.lastCommittedTime = this.baseTime;\n this.lastFrameReceivedAt = Date.now();\n }\n\n // 過去のフレームを捨てる\n if (frame.time < this.lastCommittedTime) {\n return;\n }\n\n // NTPの同期ずれが疑われるので捨てる\n const now = Date.now();\n const gap = 5000; // RTCP SR interval;\n const lastCommittedElapsed = frame.time - this.lastCommittedTime;\n const lastFrameReceivedElapsed = now - this.lastFrameReceivedAt;\n if (gap < lastFrameReceivedElapsed && lastCommittedElapsed < gap) {\n this.internalStats[\"invalidFrameTime\"] = {\n count: (this.internalStats[\"invalidFrameTime\"]?.count ?? 0) + 1,\n at: new Date().toISOString(),\n lastCommittedElapsed,\n lastFrameReceivedElapsed,\n };\n return;\n }\n this.lastFrameReceivedAt = now;\n\n const elapsed = frame.time - this.baseTime;\n const index = int(elapsed / this.bufferDuration) % this.bufferLength;\n buffer[index].push({\n frame,\n kind,\n });\n\n const diff = frame.time - this.lastExecutionTime;\n if (diff >= this.interval) {\n const times = int(diff / this.bufferDuration) - 1;\n this.lastExecutionTime = this.currentTimestamp;\n for (let i = 0; i < times; i++) {\n this.executeTask();\n this.lastExecutionTime += this.bufferDuration;\n }\n }\n return;\n };\n}\n\nexport interface LipSyncOptions {\n /**ms */\n syncInterval: number;\n /**\n * int\n * @description syncInterval * bufferLength = max packet lifetime\n * */\n bufferLength: number;\n fillDummyAudioPacket: Buffer;\n ptime: number;\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { LipSyncOptions, LipsyncBase, LipsyncInput, LipsyncOutput } from "./lipsync";
1
+ import { type LipSyncOptions, LipsyncBase, type LipsyncInput, type LipsyncOutput } from "./lipsync";
2
2
  export declare class LipsyncCallback extends LipsyncBase {
3
3
  private audioCb?;
4
4
  private audioDestructor?;
@@ -1 +1 @@
1
- {"version":3,"file":"lipsyncCallback.js","sourceRoot":"","sources":["../../../../../../rtp/src/extra/processor/lipsyncCallback.ts"],"names":[],"mappings":";;;AAAA,uCAKmB;AAEnB,MAAa,eAAgB,SAAQ,qBAAW;IAK9C,YAAY,UAAmC,EAAE;QAC/C,KAAK,CACH,CAAC,MAAM,EAAE,EAAE;YACT,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACvB,CAAC;QACH,CAAC,EACD,CAAC,MAAM,EAAE,EAAE;YACT,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACvB,CAAC;QACH,CAAC,EACD,OAAO,CACR,CAAC;QAjBI;;;;;WAAyC;QACzC;;;;;WAA6B;QAC7B;;;;;WAAyC;QACzC;;;;;WAA6B;QAiBrC;;;;mBAAY,CAAC,EAAkC,EAAE,UAAuB,EAAE,EAAE;gBAC1E,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;gBAClB,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC;YACpC,CAAC;WAAC;QACF;;;;mBAAY,CAAC,EAAkC,EAAE,UAAuB,EAAE,EAAE;gBAC1E,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;gBAClB,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC;YACpC,CAAC;WAAC;QAEF;;;;mBAAa,CAAC,KAAmB,EAAE,EAAE;gBACnC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAChC,CAAC;WAAC;QACF;;;;mBAAa,CAAC,KAAmB,EAAE,EAAE;gBACnC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAChC,CAAC;WAAC;QAEF;;;;mBAAU,GAAG,EAAE;gBACb,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;oBACzB,IAAI,CAAC,eAAe,EAAE,CAAC;oBACvB,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;gBACnC,CAAC;gBACD,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;oBACzB,IAAI,CAAC,eAAe,EAAE,CAAC;oBACvB,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;gBACnC,CAAC;gBACD,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;gBACzB,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;YAC3B,CAAC;WAAC;IA7BF,CAAC;CA8BF;AAjDD,0CAiDC","sourcesContent":["import {\n LipSyncOptions,\n LipsyncBase,\n LipsyncInput,\n LipsyncOutput,\n} from \"./lipsync\";\n\nexport class LipsyncCallback extends LipsyncBase {\n private audioCb?: (input: LipsyncOutput) => void;\n private audioDestructor?: () => void;\n private videoCb?: (input: LipsyncOutput) => void;\n private videoDestructor?: () => void;\n constructor(options: Partial<LipSyncOptions> = {}) {\n super(\n (output) => {\n if (this.audioCb) {\n this.audioCb(output);\n }\n },\n (output) => {\n if (this.videoCb) {\n this.videoCb(output);\n }\n },\n options,\n );\n }\n\n pipeAudio = (cb: (input: LipsyncOutput) => void, destructor?: () => void) => {\n this.audioCb = cb;\n this.audioDestructor = destructor;\n };\n pipeVideo = (cb: (input: LipsyncOutput) => void, destructor?: () => void) => {\n this.videoCb = cb;\n this.videoDestructor = destructor;\n };\n\n inputAudio = (input: LipsyncInput) => {\n this.processAudioInput(input);\n };\n inputVideo = (input: LipsyncInput) => {\n this.processVideoInput(input);\n };\n\n destroy = () => {\n if (this.audioDestructor) {\n this.audioDestructor();\n this.audioDestructor = undefined;\n }\n if (this.videoDestructor) {\n this.videoDestructor();\n this.videoDestructor = undefined;\n }\n this.audioCb = undefined;\n this.videoCb = undefined;\n };\n}\n"]}
1
+ {"version":3,"file":"lipsyncCallback.js","sourceRoot":"","sources":["../../../../../../rtp/src/extra/processor/lipsyncCallback.ts"],"names":[],"mappings":";;;AAAA,uCAKmB;AAEnB,MAAa,eAAgB,SAAQ,qBAAW;IAK9C,YAAY,UAAmC,EAAE;QAC/C,KAAK,CACH,CAAC,MAAM,EAAE,EAAE;YACT,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACvB,CAAC;QACH,CAAC,EACD,CAAC,MAAM,EAAE,EAAE;YACT,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACvB,CAAC;QACH,CAAC,EACD,OAAO,CACR,CAAC;QAjBI;;;;;WAAyC;QACzC;;;;;WAA6B;QAC7B;;;;;WAAyC;QACzC;;;;;WAA6B;QAiBrC;;;;mBAAY,CAAC,EAAkC,EAAE,UAAuB,EAAE,EAAE;gBAC1E,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;gBAClB,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC;YACpC,CAAC;WAAC;QACF;;;;mBAAY,CAAC,EAAkC,EAAE,UAAuB,EAAE,EAAE;gBAC1E,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;gBAClB,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC;YACpC,CAAC;WAAC;QAEF;;;;mBAAa,CAAC,KAAmB,EAAE,EAAE;gBACnC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAChC,CAAC;WAAC;QACF;;;;mBAAa,CAAC,KAAmB,EAAE,EAAE;gBACnC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAChC,CAAC;WAAC;QAEF;;;;mBAAU,GAAG,EAAE;gBACb,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;oBACzB,IAAI,CAAC,eAAe,EAAE,CAAC;oBACvB,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;gBACnC,CAAC;gBACD,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;oBACzB,IAAI,CAAC,eAAe,EAAE,CAAC;oBACvB,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;gBACnC,CAAC;gBACD,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;gBACzB,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;YAC3B,CAAC;WAAC;IA7BF,CAAC;CA8BF;AAjDD,0CAiDC","sourcesContent":["import {\n type LipSyncOptions,\n LipsyncBase,\n type LipsyncInput,\n type LipsyncOutput,\n} from \"./lipsync\";\n\nexport class LipsyncCallback extends LipsyncBase {\n private audioCb?: (input: LipsyncOutput) => void;\n private audioDestructor?: () => void;\n private videoCb?: (input: LipsyncOutput) => void;\n private videoDestructor?: () => void;\n constructor(options: Partial<LipSyncOptions> = {}) {\n super(\n (output) => {\n if (this.audioCb) {\n this.audioCb(output);\n }\n },\n (output) => {\n if (this.videoCb) {\n this.videoCb(output);\n }\n },\n options,\n );\n }\n\n pipeAudio = (cb: (input: LipsyncOutput) => void, destructor?: () => void) => {\n this.audioCb = cb;\n this.audioDestructor = destructor;\n };\n pipeVideo = (cb: (input: LipsyncOutput) => void, destructor?: () => void) => {\n this.videoCb = cb;\n this.videoDestructor = destructor;\n };\n\n inputAudio = (input: LipsyncInput) => {\n this.processAudioInput(input);\n };\n inputVideo = (input: LipsyncInput) => {\n this.processVideoInput(input);\n };\n\n destroy = () => {\n if (this.audioDestructor) {\n this.audioDestructor();\n this.audioDestructor = undefined;\n }\n if (this.videoDestructor) {\n this.videoDestructor();\n this.videoDestructor = undefined;\n }\n this.audioCb = undefined;\n this.videoCb = undefined;\n };\n}\n"]}
@@ -1,7 +1,6 @@
1
- /// <reference types="node" />
2
1
  import Event from "rx.mini";
3
- import { DataType, Mp4SupportedCodec } from "../container/mp4";
4
- import { AVProcessor } from "./interface";
2
+ import { type DataType, type Mp4SupportedCodec } from "../container/mp4";
3
+ import type { AVProcessor } from "./interface";
5
4
  export type Mp4Input = {
6
5
  frame?: {
7
6
  data: Buffer;
@@ -1 +1 @@
1
- {"version":3,"file":"mp4.js","sourceRoot":"","sources":["../../../../../../rtp/src/extra/processor/mp4.ts"],"names":[],"mappings":"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","sourcesContent":["import Event from \"rx.mini\";\n\nimport { OpusRtpPayload, buffer2ArrayBuffer } from \"../..\";\nimport {\n DataType,\n Mp4Container,\n Mp4SupportedCodec,\n annexb2avcc,\n} from \"../container/mp4\";\nimport { AVProcessor } from \"./interface\";\n\nexport type Mp4Input = {\n frame?: {\n data: Buffer;\n isKeyframe: boolean;\n /**ms */\n time: number;\n };\n eol?: boolean;\n};\n\nexport interface Mp4Output {\n type: DataType;\n timestamp: number;\n duration: number;\n data: Uint8Array;\n eol?: boolean;\n kind: \"audio\" | \"video\";\n}\n\nexport interface MP4Option {\n /**ms */\n duration?: number;\n encryptionKey?: Buffer;\n strictTimestamp?: boolean;\n}\n\nexport class MP4Base implements AVProcessor<Mp4Input> {\n private internalStats = {};\n private container: Mp4Container;\n stopped = false;\n onStopped = new Event();\n\n constructor(\n public tracks: Track[],\n private output: (output: Mp4Output) => void,\n private options: MP4Option = {},\n ) {\n this.container = new Mp4Container({\n track: {\n audio: !!this.tracks.find((t) => t.kind === \"audio\"),\n video: !!this.tracks.find((t) => t.kind === \"video\"),\n },\n });\n this.container.onData.subscribe((data) => {\n this.output(data);\n });\n }\n\n toJSON(): Record<string, any> {\n return {\n ...this.internalStats,\n };\n }\n\n processAudioInput = ({ frame }: Mp4Input) => {\n const track = this.tracks.find((t) => t.kind === \"audio\")!;\n\n if (frame) {\n if (!this.container.audioTrack) {\n this.container.write({\n codec: track.codec,\n description: buffer2ArrayBuffer(OpusRtpPayload.createCodecPrivate()),\n numberOfChannels: 2,\n sampleRate: track.clockRate,\n track: \"audio\",\n });\n } else {\n this.container.write({\n byteLength: frame.data.length,\n duration: null,\n timestamp: frame.time * 1000,\n type: \"key\",\n copyTo: (destination: Uint8Array) => {\n frame.data.copy(destination);\n },\n track: \"audio\",\n });\n }\n }\n };\n\n processVideoInput = ({ frame }: Mp4Input) => {\n const track = this.tracks.find((t) => t.kind === \"video\")!;\n\n if (frame) {\n if (!this.container.videoTrack) {\n if (frame.isKeyframe) {\n const avcc = annexb2avcc(frame.data);\n\n const [displayAspectWidth, displayAspectHeight] = computeRatio(\n track.width!,\n track.height!,\n );\n\n this.container.write({\n codec: track.codec,\n codedWidth: track.width,\n codedHeight: track.height,\n description: avcc.buffer,\n displayAspectWidth,\n displayAspectHeight,\n track: \"video\",\n });\n this.container.write({\n byteLength: frame.data.length,\n duration: null,\n timestamp: frame.time * 1000,\n type: \"key\",\n copyTo: (destination: Uint8Array) => {\n frame.data.copy(destination);\n },\n track: \"video\",\n });\n }\n } else {\n this.container.write({\n byteLength: frame.data.length,\n duration: null,\n timestamp: frame.time * 1000,\n type: frame.isKeyframe ? \"key\" : \"delta\",\n copyTo: (destination: Uint8Array) => {\n frame.data.copy(destination);\n },\n track: \"video\",\n });\n }\n }\n };\n\n protected start() {}\n\n stop() {}\n}\n\nfunction computeRatio(a: number, b: number) {\n function gcd(x: number, y: number) {\n while (y !== 0) {\n const temp = y;\n y = x % y;\n x = temp;\n }\n return x;\n }\n\n const divisor = gcd(a, b);\n return [a / divisor, b / divisor];\n}\n\nexport interface Track {\n width?: number;\n height?: number;\n kind: \"audio\" | \"video\";\n codec: Mp4SupportedCodec;\n clockRate: number;\n trackNumber: number;\n}\n"]}
1
+ {"version":3,"file":"mp4.js","sourceRoot":"","sources":["../../../../../../rtp/src/extra/processor/mp4.ts"],"names":[],"mappings":"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","sourcesContent":["import Event from \"rx.mini\";\n\nimport { OpusRtpPayload, buffer2ArrayBuffer } from \"../..\";\nimport {\n type DataType,\n Mp4Container,\n type Mp4SupportedCodec,\n annexb2avcc,\n} from \"../container/mp4\";\nimport type { AVProcessor } from \"./interface\";\n\nexport type Mp4Input = {\n frame?: {\n data: Buffer;\n isKeyframe: boolean;\n /**ms */\n time: number;\n };\n eol?: boolean;\n};\n\nexport interface Mp4Output {\n type: DataType;\n timestamp: number;\n duration: number;\n data: Uint8Array;\n eol?: boolean;\n kind: \"audio\" | \"video\";\n}\n\nexport interface MP4Option {\n /**ms */\n duration?: number;\n encryptionKey?: Buffer;\n strictTimestamp?: boolean;\n}\n\nexport class MP4Base implements AVProcessor<Mp4Input> {\n private internalStats = {};\n private container: Mp4Container;\n stopped = false;\n onStopped = new Event();\n\n constructor(\n public tracks: Track[],\n private output: (output: Mp4Output) => void,\n private options: MP4Option = {},\n ) {\n this.container = new Mp4Container({\n track: {\n audio: !!this.tracks.find((t) => t.kind === \"audio\"),\n video: !!this.tracks.find((t) => t.kind === \"video\"),\n },\n });\n this.container.onData.subscribe((data) => {\n this.output(data);\n });\n }\n\n toJSON(): Record<string, any> {\n return {\n ...this.internalStats,\n };\n }\n\n processAudioInput = ({ frame }: Mp4Input) => {\n const track = this.tracks.find((t) => t.kind === \"audio\")!;\n\n if (frame) {\n if (!this.container.audioTrack) {\n this.container.write({\n codec: track.codec,\n description: buffer2ArrayBuffer(OpusRtpPayload.createCodecPrivate()),\n numberOfChannels: 2,\n sampleRate: track.clockRate,\n track: \"audio\",\n });\n } else {\n this.container.write({\n byteLength: frame.data.length,\n duration: null,\n timestamp: frame.time * 1000,\n type: \"key\",\n copyTo: (destination: Uint8Array) => {\n frame.data.copy(destination);\n },\n track: \"audio\",\n });\n }\n }\n };\n\n processVideoInput = ({ frame }: Mp4Input) => {\n const track = this.tracks.find((t) => t.kind === \"video\")!;\n\n if (frame) {\n if (!this.container.videoTrack) {\n if (frame.isKeyframe) {\n const avcc = annexb2avcc(frame.data);\n\n const [displayAspectWidth, displayAspectHeight] = computeRatio(\n track.width!,\n track.height!,\n );\n\n this.container.write({\n codec: track.codec,\n codedWidth: track.width,\n codedHeight: track.height,\n description: avcc.buffer,\n displayAspectWidth,\n displayAspectHeight,\n track: \"video\",\n });\n this.container.write({\n byteLength: frame.data.length,\n duration: null,\n timestamp: frame.time * 1000,\n type: \"key\",\n copyTo: (destination: Uint8Array) => {\n frame.data.copy(destination);\n },\n track: \"video\",\n });\n }\n } else {\n this.container.write({\n byteLength: frame.data.length,\n duration: null,\n timestamp: frame.time * 1000,\n type: frame.isKeyframe ? \"key\" : \"delta\",\n copyTo: (destination: Uint8Array) => {\n frame.data.copy(destination);\n },\n track: \"video\",\n });\n }\n }\n };\n\n protected start() {}\n\n stop() {}\n}\n\nfunction computeRatio(a: number, b: number) {\n function gcd(x: number, y: number) {\n while (y !== 0) {\n const temp = y;\n y = x % y;\n x = temp;\n }\n return x;\n }\n\n const divisor = gcd(a, b);\n return [a / divisor, b / divisor];\n}\n\nexport interface Track {\n width?: number;\n height?: number;\n kind: \"audio\" | \"video\";\n codec: Mp4SupportedCodec;\n clockRate: number;\n trackNumber: number;\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { MP4Base, Mp4Input, Mp4Output, Track } from "./mp4";
2
- import { WebmOption } from "./webm";
1
+ import { MP4Base, type Mp4Input, type Mp4Output, type Track } from "./mp4";
2
+ import type { WebmOption } from "./webm";
3
3
  export declare class MP4Callback extends MP4Base {
4
4
  private cb?;
5
5
  private queue;
@@ -1 +1 @@
1
- {"version":3,"file":"mp4Callback.js","sourceRoot":"","sources":["../../../../../../rtp/src/extra/processor/mp4Callback.ts"],"names":[],"mappings":";;;;AAAA,0CAAyC;AAEzC,6BAAqC;AACrC,+BAA4D;AAG5D,MAAa,WAAY,SAAQ,aAAO;IAGtC,YAAY,MAAe,EAAE,UAAsB,EAAE;QACnD,KAAK,CACH,MAAM,EACN,KAAK,EAAE,MAAM,EAAE,EAAE;YACf,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;YACnB,IAAI,EAAE,EAAE,CAAC;gBACP,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC,EACD,OAAO,CACR,CAAC;QAZI;;;;;WAAyC;QACzC;;;;mBAAQ,IAAI,gBAAY,EAAE;WAAC;QAcnC;;;;mBAAO,CAAC,EAAuC,EAAE,EAAE;gBACjD,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,CAAC;WAAC;QAEF;;;;mBAAa,CAAC,KAAe,EAAE,EAAE;gBAC/B,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAChC,CAAC;WAAC;QACF;;;;mBAAa,CAAC,KAAe,EAAE,EAAE;gBAC/B,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAChC,CAAC;WAAC;QAEF;;;;mBAAU,GAAG,EAAE;gBACb,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC;gBACpB,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACtB,CAAC;WAAC;IAjBF,CAAC;;AAdH,kCA4CC;;AAXQ;;;;WAAmB,CAAC,IAAY,EAAE,EAAE;QACzC,MAAM,KAAK,GAAG,IAAI,gBAAY,EAAE,CAAC;QACjC,OAAO,KAAK,EAAE,KAAgB,EAAE,EAAE;YAChC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;gBAC1B,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;oBACf,MAAM,IAAA,qBAAU,EAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBACrC,CAAC;qBAAM,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;gBACvB,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;IACJ,CAAC;EAVsB,CAUrB","sourcesContent":["import { appendFile } from \"fs/promises\";\n\nimport { PromiseQueue } from \"../..\";\nimport { MP4Base, Mp4Input, Mp4Output, Track } from \"./mp4\";\nimport { WebmOption } from \"./webm\";\n\nexport class MP4Callback extends MP4Base {\n private cb?: (input: Mp4Output) => Promise<void>;\n private queue = new PromiseQueue();\n constructor(tracks: Track[], options: WebmOption = {}) {\n super(\n tracks,\n async (output) => {\n const cb = this.cb;\n if (cb) {\n await this.queue.push(() => cb(output));\n }\n },\n options,\n );\n }\n\n pipe = (cb: (input: Mp4Output) => Promise<void>) => {\n this.cb = cb;\n this.start();\n };\n\n inputAudio = (input: Mp4Input) => {\n this.processAudioInput(input);\n };\n inputVideo = (input: Mp4Input) => {\n this.processVideoInput(input);\n };\n\n destroy = () => {\n this.cb = undefined;\n this.queue.cancel();\n };\n\n static saveToFileSystem = (path: string) => {\n const queue = new PromiseQueue();\n return async (value: Mp4Output) => {\n await queue.push(async () => {\n if (value.data) {\n await appendFile(path, value.data);\n } else if (value.eol) {\n }\n });\n };\n };\n}\n"]}
1
+ {"version":3,"file":"mp4Callback.js","sourceRoot":"","sources":["../../../../../../rtp/src/extra/processor/mp4Callback.ts"],"names":[],"mappings":";;;;AAAA,0CAAyC;AAEzC,6BAAqC;AACrC,+BAA2E;AAG3E,MAAa,WAAY,SAAQ,aAAO;IAGtC,YAAY,MAAe,EAAE,UAAsB,EAAE;QACnD,KAAK,CACH,MAAM,EACN,KAAK,EAAE,MAAM,EAAE,EAAE;YACf,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;YACnB,IAAI,EAAE,EAAE,CAAC;gBACP,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC,EACD,OAAO,CACR,CAAC;QAZI;;;;;WAAyC;QACzC;;;;mBAAQ,IAAI,gBAAY,EAAE;WAAC;QAcnC;;;;mBAAO,CAAC,EAAuC,EAAE,EAAE;gBACjD,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,CAAC;WAAC;QAEF;;;;mBAAa,CAAC,KAAe,EAAE,EAAE;gBAC/B,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAChC,CAAC;WAAC;QACF;;;;mBAAa,CAAC,KAAe,EAAE,EAAE;gBAC/B,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAChC,CAAC;WAAC;QAEF;;;;mBAAU,GAAG,EAAE;gBACb,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC;gBACpB,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACtB,CAAC;WAAC;IAjBF,CAAC;;AAdH,kCA4CC;;AAXQ;;;;WAAmB,CAAC,IAAY,EAAE,EAAE;QACzC,MAAM,KAAK,GAAG,IAAI,gBAAY,EAAE,CAAC;QACjC,OAAO,KAAK,EAAE,KAAgB,EAAE,EAAE;YAChC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;gBAC1B,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;oBACf,MAAM,IAAA,qBAAU,EAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBACrC,CAAC;qBAAM,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;gBACvB,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;IACJ,CAAC;EAVsB,CAUrB","sourcesContent":["import { appendFile } from \"fs/promises\";\n\nimport { PromiseQueue } from \"../..\";\nimport { MP4Base, type Mp4Input, type Mp4Output, type Track } from \"./mp4\";\nimport type { WebmOption } from \"./webm\";\n\nexport class MP4Callback extends MP4Base {\n private cb?: (input: Mp4Output) => Promise<void>;\n private queue = new PromiseQueue();\n constructor(tracks: Track[], options: WebmOption = {}) {\n super(\n tracks,\n async (output) => {\n const cb = this.cb;\n if (cb) {\n await this.queue.push(() => cb(output));\n }\n },\n options,\n );\n }\n\n pipe = (cb: (input: Mp4Output) => Promise<void>) => {\n this.cb = cb;\n this.start();\n };\n\n inputAudio = (input: Mp4Input) => {\n this.processAudioInput(input);\n };\n inputVideo = (input: Mp4Input) => {\n this.processVideoInput(input);\n };\n\n destroy = () => {\n this.cb = undefined;\n this.queue.cancel();\n };\n\n static saveToFileSystem = (path: string) => {\n const queue = new PromiseQueue();\n return async (value: Mp4Output) => {\n await queue.push(async () => {\n if (value.data) {\n await appendFile(path, value.data);\n } else if (value.eol) {\n }\n });\n };\n };\n}\n"]}
@@ -1,6 +1,5 @@
1
- /// <reference types="node" />
2
- import { DepacketizerOutput } from "./depacketizer";
3
- import { Processor } from "./interface";
1
+ import type { DepacketizerOutput } from "./depacketizer";
2
+ import type { Processor } from "./interface";
4
3
  export type MuteInput = DepacketizerOutput;
5
4
  export type MuteOutput = MuteInput;
6
5
  export declare class MuteHandlerBase implements Processor<MuteInput, MuteOutput> {
@@ -1 +1 @@
1
- {"version":3,"file":"mute.js","sourceRoot":"","sources":["../../../../../../rtp/src/extra/processor/mute.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from \"crypto\";\n\nimport { int } from \"../..\";\nimport { CodecFrame, DepacketizerOutput } from \"./depacketizer\";\nimport { Processor } from \"./interface\";\n\nexport type MuteInput = DepacketizerOutput;\n\nexport type MuteOutput = MuteInput;\n\nexport class MuteHandlerBase implements Processor<MuteInput, MuteOutput> {\n readonly id = randomUUID();\n private buffer: CodecFrame[][];\n private index = 0;\n private ended = false;\n private baseTime?: number;\n private currentTimestamp!: number;\n private internalStats = {};\n /**ms */\n private lastCommittedTime = 0;\n private lastExecutionTime = 0;\n /**ms */\n private interval: number;\n private bufferDuration: number;\n private bufferLength: number;\n /**ms */\n private lastFrameReceivedAt = 0;\n\n constructor(\n private output: (o: MuteOutput) => void,\n private props: {\n ptime: number;\n dummyPacket: Buffer;\n /**ms\n * @description intervalごとに無音区間に空パケットを挿入する\n */\n interval: number;\n bufferLength: number;\n },\n ) {\n this.interval = props.interval;\n this.bufferDuration = this.interval / 2;\n this.bufferLength = this.props.bufferLength * 2;\n this.buffer = [...new Array(this.bufferLength)].map(() => []);\n }\n\n toJSON(): Record<string, any> {\n return { ...this.internalStats, id: this.id };\n }\n\n private executeTask() {\n const { ptime, dummyPacket } = this.props;\n\n const buffer = this.buffer[this.index].sort((a, b) => a.time - b.time);\n const last = buffer.at(-1);\n const expect = last\n ? last.time +\n // offset\n ptime\n : this.currentTimestamp;\n\n if (expect < this.currentTimestamp + this.bufferDuration) {\n for (\n let time = expect;\n time < this.currentTimestamp + this.bufferDuration;\n time += ptime\n ) {\n buffer.push({\n time,\n data: dummyPacket,\n isKeyframe: true,\n });\n }\n }\n this.currentTimestamp += this.bufferDuration;\n this.internalStats[\"mute\"] = new Date().toISOString();\n\n this.buffer[this.index] = [];\n buffer.forEach((frame) => {\n this.output({ frame });\n this.lastCommittedTime = frame.time;\n });\n\n this.index++;\n if (this.index === this.bufferLength) {\n this.index = 0;\n }\n }\n\n private stop() {\n this.ended = true;\n this.buffer = [];\n this.output = undefined as any;\n }\n\n processInput = ({ frame, eol }: MuteInput): MuteOutput[] => {\n if (!frame) {\n this.stop();\n return [{ eol }];\n }\n\n if (this.ended) {\n return [];\n }\n\n if (this.baseTime == undefined) {\n this.baseTime = frame.time;\n this.currentTimestamp = this.baseTime;\n this.lastExecutionTime = this.baseTime;\n this.lastCommittedTime = this.baseTime;\n this.lastFrameReceivedAt = Date.now();\n }\n\n // 過去のフレームを捨てる\n if (frame.time < this.lastCommittedTime) {\n return [];\n }\n\n // NTPの同期ずれが疑われるので捨てる\n const now = Date.now();\n const gap = 5000; // RTCP SR interval;\n const lastCommittedElapsed = frame.time - this.lastCommittedTime;\n const lastFrameReceivedElapsed = now - this.lastFrameReceivedAt;\n if (gap < lastFrameReceivedElapsed && lastCommittedElapsed < gap) {\n this.internalStats[\"invalidFrameTime\"] = {\n count: (this.internalStats[\"invalidFrameTime\"]?.count ?? 0) + 1,\n at: new Date().toISOString(),\n lastCommittedElapsed,\n lastFrameReceivedElapsed,\n };\n return [];\n }\n this.lastFrameReceivedAt = now;\n\n const elapsed = frame.time - this.baseTime;\n const index = int(elapsed / this.bufferDuration) % this.bufferLength;\n this.buffer[index].push(frame);\n\n const lastExecution = frame.time - this.lastExecutionTime;\n if (lastExecution >= this.interval) {\n const times = int(lastExecution / this.bufferDuration) - 1;\n this.lastExecutionTime = this.currentTimestamp;\n for (let i = 0; i < times; i++) {\n this.executeTask();\n this.lastExecutionTime += this.bufferDuration;\n }\n }\n\n return [];\n };\n}\n"]}
1
+ {"version":3,"file":"mute.js","sourceRoot":"","sources":["../../../../../../rtp/src/extra/processor/mute.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from \"crypto\";\n\nimport { int } from \"../..\";\nimport type { CodecFrame, DepacketizerOutput } from \"./depacketizer\";\nimport type { Processor } from \"./interface\";\n\nexport type MuteInput = DepacketizerOutput;\n\nexport type MuteOutput = MuteInput;\n\nexport class MuteHandlerBase implements Processor<MuteInput, MuteOutput> {\n readonly id = randomUUID();\n private buffer: CodecFrame[][];\n private index = 0;\n private ended = false;\n private baseTime?: number;\n private currentTimestamp!: number;\n private internalStats = {};\n /**ms */\n private lastCommittedTime = 0;\n private lastExecutionTime = 0;\n /**ms */\n private interval: number;\n private bufferDuration: number;\n private bufferLength: number;\n /**ms */\n private lastFrameReceivedAt = 0;\n\n constructor(\n private output: (o: MuteOutput) => void,\n private props: {\n ptime: number;\n dummyPacket: Buffer;\n /**ms\n * @description intervalごとに無音区間に空パケットを挿入する\n */\n interval: number;\n bufferLength: number;\n },\n ) {\n this.interval = props.interval;\n this.bufferDuration = this.interval / 2;\n this.bufferLength = this.props.bufferLength * 2;\n this.buffer = [...new Array(this.bufferLength)].map(() => []);\n }\n\n toJSON(): Record<string, any> {\n return { ...this.internalStats, id: this.id };\n }\n\n private executeTask() {\n const { ptime, dummyPacket } = this.props;\n\n const buffer = this.buffer[this.index].sort((a, b) => a.time - b.time);\n const last = buffer.at(-1);\n const expect = last\n ? last.time +\n // offset\n ptime\n : this.currentTimestamp;\n\n if (expect < this.currentTimestamp + this.bufferDuration) {\n for (\n let time = expect;\n time < this.currentTimestamp + this.bufferDuration;\n time += ptime\n ) {\n buffer.push({\n time,\n data: dummyPacket,\n isKeyframe: true,\n });\n }\n }\n this.currentTimestamp += this.bufferDuration;\n this.internalStats[\"mute\"] = new Date().toISOString();\n\n this.buffer[this.index] = [];\n buffer.forEach((frame) => {\n this.output({ frame });\n this.lastCommittedTime = frame.time;\n });\n\n this.index++;\n if (this.index === this.bufferLength) {\n this.index = 0;\n }\n }\n\n private stop() {\n this.ended = true;\n this.buffer = [];\n this.output = undefined as any;\n }\n\n processInput = ({ frame, eol }: MuteInput): MuteOutput[] => {\n if (!frame) {\n this.stop();\n return [{ eol }];\n }\n\n if (this.ended) {\n return [];\n }\n\n if (this.baseTime == undefined) {\n this.baseTime = frame.time;\n this.currentTimestamp = this.baseTime;\n this.lastExecutionTime = this.baseTime;\n this.lastCommittedTime = this.baseTime;\n this.lastFrameReceivedAt = Date.now();\n }\n\n // 過去のフレームを捨てる\n if (frame.time < this.lastCommittedTime) {\n return [];\n }\n\n // NTPの同期ずれが疑われるので捨てる\n const now = Date.now();\n const gap = 5000; // RTCP SR interval;\n const lastCommittedElapsed = frame.time - this.lastCommittedTime;\n const lastFrameReceivedElapsed = now - this.lastFrameReceivedAt;\n if (gap < lastFrameReceivedElapsed && lastCommittedElapsed < gap) {\n this.internalStats[\"invalidFrameTime\"] = {\n count: (this.internalStats[\"invalidFrameTime\"]?.count ?? 0) + 1,\n at: new Date().toISOString(),\n lastCommittedElapsed,\n lastFrameReceivedElapsed,\n };\n return [];\n }\n this.lastFrameReceivedAt = now;\n\n const elapsed = frame.time - this.baseTime;\n const index = int(elapsed / this.bufferDuration) % this.bufferLength;\n this.buffer[index].push(frame);\n\n const lastExecution = frame.time - this.lastExecutionTime;\n if (lastExecution >= this.interval) {\n const times = int(lastExecution / this.bufferDuration) - 1;\n this.lastExecutionTime = this.currentTimestamp;\n for (let i = 0; i < times; i++) {\n this.executeTask();\n this.lastExecutionTime += this.bufferDuration;\n }\n }\n\n return [];\n };\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { SimpleProcessorCallback } from "./interface";
2
- import { MuteHandlerBase, MuteInput, MuteOutput } from "./mute";
1
+ import type { SimpleProcessorCallback } from "./interface";
2
+ import { MuteHandlerBase, type MuteInput, type MuteOutput } from "./mute";
3
3
  export declare class MuteCallback extends MuteHandlerBase implements SimpleProcessorCallback<MuteInput, MuteOutput> {
4
4
  private cb?;
5
5
  destructor?: () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"muteCallback.js","sourceRoot":"","sources":["../../../../../../rtp/src/extra/processor/muteCallback.ts"],"names":[],"mappings":";;;AACA,iCAAgE;AAEhE,MAAa,YACX,SAAQ,sBAAe;IAMvB,YAAY,KAAuD;QACjE,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;YACV,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;gBACZ,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACb,CAAC;QACH,CAAC,EAAE,KAAK,CAAC,CAAC;QARJ;;;;;WAAiC;QACzC;;;;;WAAwB;QAUxB;;;;mBAAO,CAAC,EAA+B,EAAE,UAAuB,EAAE,EAAE;gBAClE,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;gBAC7B,OAAO,IAAI,CAAC;YACd,CAAC;WAAC;QAEF;;;;mBAAQ,CAAC,KAAgB,EAAE,EAAE;gBAC3B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC9C,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;wBACZ,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;oBAClB,CAAC;gBACH,CAAC;YACH,CAAC;WAAC;QAEF;;;;mBAAU,GAAG,EAAE;gBACb,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;oBACpB,IAAI,CAAC,UAAU,EAAE,CAAC;oBAClB,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;gBAC9B,CAAC;gBACD,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC;YACtB,CAAC;WAAC;IAtBF,CAAC;CAuBF;AApCD,oCAoCC","sourcesContent":["import { SimpleProcessorCallback } from \"./interface\";\nimport { MuteHandlerBase, MuteInput, MuteOutput } from \"./mute\";\n\nexport class MuteCallback\n extends MuteHandlerBase\n implements SimpleProcessorCallback<MuteInput, MuteOutput>\n{\n private cb?: (input: MuteOutput) => void;\n destructor?: () => void;\n\n constructor(props: ConstructorParameters<typeof MuteHandlerBase>[1]) {\n super((o) => {\n if (this.cb) {\n this.cb(o);\n }\n }, props);\n }\n\n pipe = (cb: (input: MuteOutput) => void, destructor?: () => void) => {\n this.cb = cb;\n this.destructor = destructor;\n return this;\n };\n\n input = (input: MuteInput) => {\n for (const output of this.processInput(input)) {\n if (this.cb) {\n this.cb(output);\n }\n }\n };\n\n destroy = () => {\n if (this.destructor) {\n this.destructor();\n this.destructor = undefined;\n }\n this.cb = undefined;\n };\n}\n"]}
1
+ {"version":3,"file":"muteCallback.js","sourceRoot":"","sources":["../../../../../../rtp/src/extra/processor/muteCallback.ts"],"names":[],"mappings":";;;AACA,iCAA0E;AAE1E,MAAa,YACX,SAAQ,sBAAe;IAMvB,YAAY,KAAuD;QACjE,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;YACV,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;gBACZ,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACb,CAAC;QACH,CAAC,EAAE,KAAK,CAAC,CAAC;QARJ;;;;;WAAiC;QACzC;;;;;WAAwB;QAUxB;;;;mBAAO,CAAC,EAA+B,EAAE,UAAuB,EAAE,EAAE;gBAClE,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;gBAC7B,OAAO,IAAI,CAAC;YACd,CAAC;WAAC;QAEF;;;;mBAAQ,CAAC,KAAgB,EAAE,EAAE;gBAC3B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC9C,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;wBACZ,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;oBAClB,CAAC;gBACH,CAAC;YACH,CAAC;WAAC;QAEF;;;;mBAAU,GAAG,EAAE;gBACb,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;oBACpB,IAAI,CAAC,UAAU,EAAE,CAAC;oBAClB,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;gBAC9B,CAAC;gBACD,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC;YACtB,CAAC;WAAC;IAtBF,CAAC;CAuBF;AApCD,oCAoCC","sourcesContent":["import type { SimpleProcessorCallback } from \"./interface\";\nimport { MuteHandlerBase, type MuteInput, type MuteOutput } from \"./mute\";\n\nexport class MuteCallback\n extends MuteHandlerBase\n implements SimpleProcessorCallback<MuteInput, MuteOutput>\n{\n private cb?: (input: MuteOutput) => void;\n destructor?: () => void;\n\n constructor(props: ConstructorParameters<typeof MuteHandlerBase>[1]) {\n super((o) => {\n if (this.cb) {\n this.cb(o);\n }\n }, props);\n }\n\n pipe = (cb: (input: MuteOutput) => void, destructor?: () => void) => {\n this.cb = cb;\n this.destructor = destructor;\n return this;\n };\n\n input = (input: MuteInput) => {\n for (const output of this.processInput(input)) {\n if (this.cb) {\n this.cb(output);\n }\n }\n };\n\n destroy = () => {\n if (this.destructor) {\n this.destructor();\n this.destructor = undefined;\n }\n this.cb = undefined;\n };\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  import Event from "rx.mini";
2
2
  import { GenericNack, RtcpTransportLayerFeedback } from "../..";
3
- import { Processor } from "./interface";
4
- import { RtpOutput } from "./rtpCallback";
3
+ import type { Processor } from "./interface";
4
+ import type { RtpOutput } from "./rtpCallback";
5
5
  export type NackHandlerInput = RtpOutput;
6
6
  export type NackHandlerOutput = RtpOutput;
7
7
  export declare class NackHandlerBase implements Processor<NackHandlerInput, NackHandlerOutput> {
@@ -1 +1 @@
1
- {"version":3,"file":"nack.js","sourceRoot":"","sources":["../../../../../../rtp/src/extra/processor/nack.ts"],"names":[],"mappings":"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","sourcesContent":["import debug from \"debug\";\nimport Event from \"rx.mini\";\n\nimport {\n GenericNack,\n RtcpTransportLayerFeedback,\n RtpPacket,\n timer,\n uint16Add,\n} from \"../..\";\nimport { Processor } from \"./interface\";\nimport { RtpOutput } from \"./rtpCallback\";\n\nconst log = debug(\"werift-rtp : packages/rtp/src/processor/nack.ts\");\n\nconst LOST_SIZE = 30 * 5;\n\nexport type NackHandlerInput = RtpOutput;\n\nexport type NackHandlerOutput = RtpOutput;\n\nexport class NackHandlerBase\n implements Processor<NackHandlerInput, NackHandlerOutput>\n{\n private newEstSeqNum = 0;\n private _lost: { [seqNum: number]: number } = {};\n private clearNackInterval?: () => void;\n private internalStats = {};\n\n readonly onNackSent = new Event<[GenericNack]>();\n readonly onPacketLost = new Event<[number]>();\n mediaSourceSsrc?: number;\n readonly retryCount = 10;\n stopped = false;\n\n constructor(\n private senderSsrc: number,\n private onNack: (rtcp: RtcpTransportLayerFeedback) => Promise<void>,\n ) {}\n\n toJSON(): Record<string, any> {\n return {\n ...this.internalStats,\n newEstSeqNum: this.newEstSeqNum,\n lostLength: Object.values(this._lost).length,\n senderSsrc: this.senderSsrc,\n mediaSourceSsrc: this.mediaSourceSsrc,\n };\n }\n\n private get lostSeqNumbers() {\n return Object.keys(this._lost).map(Number).sort();\n }\n\n private getLost(seq: number) {\n return this._lost[seq];\n }\n\n private setLost(seq: number, count: number) {\n this._lost[seq] = count;\n\n if (this.clearNackInterval || this.stopped) {\n return;\n }\n this.clearNackInterval = timer.setInterval(async () => {\n try {\n await this.sendNack();\n if (!Object.keys(this._lost).length) {\n this.clearNackInterval?.();\n this.clearNackInterval = undefined;\n }\n } catch (error) {\n log(\"failed to send nack\", error);\n }\n }, 5);\n }\n\n private removeLost(sequenceNumber: number) {\n delete this._lost[sequenceNumber];\n }\n\n processInput = (input: RtpOutput) => {\n if (input.rtp) {\n this.addPacket(input.rtp);\n this.internalStats[\"nackHandler\"] = new Date().toISOString();\n return [input];\n }\n\n this.stop();\n return [input];\n };\n\n private addPacket(packet: RtpPacket) {\n const { sequenceNumber, ssrc } = packet.header;\n this.mediaSourceSsrc = ssrc;\n\n if (this.newEstSeqNum === 0) {\n this.newEstSeqNum = sequenceNumber;\n return;\n }\n\n if (this.getLost(sequenceNumber)) {\n // log(\"packetLoss resolved\", { sequenceNumber });\n this.removeLost(sequenceNumber);\n return;\n }\n\n if (sequenceNumber === uint16Add(this.newEstSeqNum, 1)) {\n this.newEstSeqNum = sequenceNumber;\n } else if (sequenceNumber > uint16Add(this.newEstSeqNum, 1)) {\n // packet lost detected\n for (\n let seq = uint16Add(this.newEstSeqNum, 1);\n seq < sequenceNumber;\n seq++\n ) {\n this.setLost(seq, 1);\n }\n // this.receiver.sendRtcpPLI(this.mediaSourceSsrc);\n\n this.newEstSeqNum = sequenceNumber;\n this.pruneLost();\n }\n }\n\n private pruneLost() {\n if (this.lostSeqNumbers.length > LOST_SIZE) {\n this._lost = Object.entries(this._lost)\n .slice(-LOST_SIZE)\n .reduce((acc, [key, v]) => {\n acc[key] = v;\n return acc;\n }, {} as { [seqNum: number]: number });\n }\n }\n\n private stop() {\n this.stopped = true;\n this._lost = {};\n this.clearNackInterval?.();\n this.onNackSent.allUnsubscribe();\n this.onPacketLost.allUnsubscribe();\n this.onNack = undefined as any;\n }\n\n private updateRetryCount() {\n this.lostSeqNumbers.forEach((seq) => {\n const count = this._lost[seq]++;\n if (count > this.retryCount) {\n this.removeLost(seq);\n this.onPacketLost.execute(seq);\n }\n });\n }\n\n private sendNack = () =>\n new Promise((r, f) => {\n if (this.lostSeqNumbers.length > 0 && this.mediaSourceSsrc) {\n this.internalStats[\"count\"] = (this.internalStats[\"count\"] ?? 0) + 1;\n\n const nack = new GenericNack({\n senderSsrc: this.senderSsrc,\n mediaSourceSsrc: this.mediaSourceSsrc,\n lost: this.lostSeqNumbers,\n });\n\n const rtcp = new RtcpTransportLayerFeedback({\n feedback: nack,\n });\n this.onNack(rtcp).then(r).catch(f);\n\n this.updateRetryCount();\n this.onNackSent.execute(nack);\n }\n });\n}\n"]}
1
+ {"version":3,"file":"nack.js","sourceRoot":"","sources":["../../../../../../rtp/src/extra/processor/nack.ts"],"names":[],"mappings":"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","sourcesContent":["import debug from \"debug\";\nimport Event from \"rx.mini\";\n\nimport {\n GenericNack,\n RtcpTransportLayerFeedback,\n type RtpPacket,\n timer,\n uint16Add,\n} from \"../..\";\nimport type { Processor } from \"./interface\";\nimport type { RtpOutput } from \"./rtpCallback\";\n\nconst log = debug(\"werift-rtp : packages/rtp/src/processor/nack.ts\");\n\nconst LOST_SIZE = 30 * 5;\n\nexport type NackHandlerInput = RtpOutput;\n\nexport type NackHandlerOutput = RtpOutput;\n\nexport class NackHandlerBase\n implements Processor<NackHandlerInput, NackHandlerOutput>\n{\n private newEstSeqNum = 0;\n private _lost: { [seqNum: number]: number } = {};\n private clearNackInterval?: () => void;\n private internalStats = {};\n\n readonly onNackSent = new Event<[GenericNack]>();\n readonly onPacketLost = new Event<[number]>();\n mediaSourceSsrc?: number;\n readonly retryCount = 10;\n stopped = false;\n\n constructor(\n private senderSsrc: number,\n private onNack: (rtcp: RtcpTransportLayerFeedback) => Promise<void>,\n ) {}\n\n toJSON(): Record<string, any> {\n return {\n ...this.internalStats,\n newEstSeqNum: this.newEstSeqNum,\n lostLength: Object.values(this._lost).length,\n senderSsrc: this.senderSsrc,\n mediaSourceSsrc: this.mediaSourceSsrc,\n };\n }\n\n private get lostSeqNumbers() {\n return Object.keys(this._lost).map(Number).sort();\n }\n\n private getLost(seq: number) {\n return this._lost[seq];\n }\n\n private setLost(seq: number, count: number) {\n this._lost[seq] = count;\n\n if (this.clearNackInterval || this.stopped) {\n return;\n }\n this.clearNackInterval = timer.setInterval(async () => {\n try {\n await this.sendNack();\n if (!Object.keys(this._lost).length) {\n this.clearNackInterval?.();\n this.clearNackInterval = undefined;\n }\n } catch (error) {\n log(\"failed to send nack\", error);\n }\n }, 5);\n }\n\n private removeLost(sequenceNumber: number) {\n delete this._lost[sequenceNumber];\n }\n\n processInput = (input: RtpOutput) => {\n if (input.rtp) {\n this.addPacket(input.rtp);\n this.internalStats[\"nackHandler\"] = new Date().toISOString();\n return [input];\n }\n\n this.stop();\n return [input];\n };\n\n private addPacket(packet: RtpPacket) {\n const { sequenceNumber, ssrc } = packet.header;\n this.mediaSourceSsrc = ssrc;\n\n if (this.newEstSeqNum === 0) {\n this.newEstSeqNum = sequenceNumber;\n return;\n }\n\n if (this.getLost(sequenceNumber)) {\n // log(\"packetLoss resolved\", { sequenceNumber });\n this.removeLost(sequenceNumber);\n return;\n }\n\n if (sequenceNumber === uint16Add(this.newEstSeqNum, 1)) {\n this.newEstSeqNum = sequenceNumber;\n } else if (sequenceNumber > uint16Add(this.newEstSeqNum, 1)) {\n // packet lost detected\n for (\n let seq = uint16Add(this.newEstSeqNum, 1);\n seq < sequenceNumber;\n seq++\n ) {\n this.setLost(seq, 1);\n }\n // this.receiver.sendRtcpPLI(this.mediaSourceSsrc);\n\n this.newEstSeqNum = sequenceNumber;\n this.pruneLost();\n }\n }\n\n private pruneLost() {\n if (this.lostSeqNumbers.length > LOST_SIZE) {\n this._lost = Object.entries(this._lost)\n .slice(-LOST_SIZE)\n .reduce(\n (acc, [key, v]) => {\n acc[key] = v;\n return acc;\n },\n {} as { [seqNum: number]: number },\n );\n }\n }\n\n private stop() {\n this.stopped = true;\n this._lost = {};\n this.clearNackInterval?.();\n this.onNackSent.allUnsubscribe();\n this.onPacketLost.allUnsubscribe();\n this.onNack = undefined as any;\n }\n\n private updateRetryCount() {\n this.lostSeqNumbers.forEach((seq) => {\n const count = this._lost[seq]++;\n if (count > this.retryCount) {\n this.removeLost(seq);\n this.onPacketLost.execute(seq);\n }\n });\n }\n\n private sendNack = () =>\n new Promise((r, f) => {\n if (this.lostSeqNumbers.length > 0 && this.mediaSourceSsrc) {\n this.internalStats[\"count\"] = (this.internalStats[\"count\"] ?? 0) + 1;\n\n const nack = new GenericNack({\n senderSsrc: this.senderSsrc,\n mediaSourceSsrc: this.mediaSourceSsrc,\n lost: this.lostSeqNumbers,\n });\n\n const rtcp = new RtcpTransportLayerFeedback({\n feedback: nack,\n });\n this.onNack(rtcp).then(r).catch(f);\n\n this.updateRetryCount();\n this.onNackSent.execute(nack);\n }\n });\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"nackHandlerCallback.js","sourceRoot":"","sources":["../../../../../../rtp/src/extra/processor/nackHandlerCallback.ts"],"names":[],"mappings":";;;AAAA,2CAA0D;AAC1D,iCAA8E;AAE9E,MAAa,mBAAoB,SAAQ,IAAA,uCAA2B,EAIlE,sBAAe,CAAC;CAAG;AAJrB,kDAIqB","sourcesContent":["import { SimpleProcessorCallbackBase } from \"./interface\";\nimport { NackHandlerBase, NackHandlerInput, NackHandlerOutput } from \"./nack\";\n\nexport class NackHandlerCallback extends SimpleProcessorCallbackBase<\n NackHandlerInput,\n NackHandlerOutput,\n typeof NackHandlerBase\n>(NackHandlerBase) {}\n"]}
1
+ {"version":3,"file":"nackHandlerCallback.js","sourceRoot":"","sources":["../../../../../../rtp/src/extra/processor/nackHandlerCallback.ts"],"names":[],"mappings":";;;AAAA,2CAA0D;AAC1D,iCAIgB;AAEhB,MAAa,mBAAoB,SAAQ,IAAA,uCAA2B,EAIlE,sBAAe,CAAC;CAAG;AAJrB,kDAIqB","sourcesContent":["import { SimpleProcessorCallbackBase } from \"./interface\";\nimport {\n NackHandlerBase,\n type NackHandlerInput,\n type NackHandlerOutput,\n} from \"./nack\";\n\nexport class NackHandlerCallback extends SimpleProcessorCallbackBase<\n NackHandlerInput,\n NackHandlerOutput,\n typeof NackHandlerBase\n>(NackHandlerBase) {}\n"]}
@@ -1,5 +1,5 @@
1
- import { RtcpPacket, RtpPacket } from "../..";
2
- import { Processor } from "./interface";
1
+ import { type RtcpPacket, type RtpPacket } from "../..";
2
+ import type { Processor } from "./interface";
3
3
  export type NtpTimeInput = {
4
4
  rtp?: RtpPacket;
5
5
  eol?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"ntpTime.js","sourceRoot":"","sources":["../../../../../../rtp/src/extra/processor/ntpTime.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from \"crypto\";\n\nimport { RtcpPacket, RtcpSrPacket, RtpPacket, ntpTime2Sec } from \"../..\";\nimport { Processor } from \"./interface\";\nimport { Max32Uint } from \"./webm\";\n\nexport type NtpTimeInput = {\n rtp?: RtpPacket;\n eol?: boolean;\n rtcp?: RtcpPacket;\n};\n\nexport interface NtpTimeOutput {\n rtp?: RtpPacket;\n /**ms */\n time?: number;\n eol?: boolean;\n}\n\nexport class NtpTimeBase implements Processor<NtpTimeInput, NtpTimeOutput> {\n readonly id = randomUUID();\n private baseNtpTimestamp?: bigint;\n private baseRtpTimestamp?: number;\n private latestNtpTimestamp?: bigint;\n private latestRtpTimestamp?: number;\n private currentElapsed = 0;\n private buffer: RtpPacket[] = [];\n private internalStats = {};\n started = false;\n\n constructor(public clockRate: number) {}\n\n toJSON(): Record<string, any> {\n return {\n ...this.internalStats,\n id: this.id,\n baseRtpTimestamp: this.baseRtpTimestamp,\n latestRtpTimestamp: this.latestRtpTimestamp,\n baseNtpTimestamp:\n this.baseNtpTimestamp && ntpTime2Sec(this.baseNtpTimestamp),\n latestNtpTimestamp:\n this.latestNtpTimestamp && ntpTime2Sec(this.latestNtpTimestamp),\n bufferLength: this.buffer.length,\n currentElapsed: this.currentElapsed,\n clockRate: this.clockRate,\n };\n }\n\n private stop() {\n this.buffer = [];\n this.internalStats = {};\n }\n\n processInput({ rtcp, rtp, eol }: NtpTimeInput): NtpTimeOutput[] {\n if (eol) {\n this.stop();\n return [{ eol: true }];\n }\n\n if (rtcp && rtcp.type === RtcpSrPacket.type) {\n const { ntpTimestamp, rtpTimestamp } = rtcp.senderInfo;\n this.latestNtpTimestamp = ntpTimestamp;\n this.latestRtpTimestamp = rtpTimestamp;\n\n if (this.baseNtpTimestamp == undefined) {\n this.baseNtpTimestamp = ntpTimestamp;\n this.baseRtpTimestamp = rtpTimestamp;\n }\n\n this.internalStats[\"ntpReceived\"] = new Date().toISOString();\n this.started = true;\n }\n\n if (rtp) {\n this.buffer.push(rtp);\n this.internalStats[\"payloadType\"] = rtp.header.payloadType;\n\n const res: NtpTimeOutput[] = [];\n\n if (\n this.baseRtpTimestamp == undefined ||\n this.baseNtpTimestamp == undefined ||\n this.latestNtpTimestamp == undefined ||\n this.latestRtpTimestamp == undefined\n ) {\n return [];\n }\n\n for (const rtp of this.buffer) {\n const ntp = this.updateNtp(rtp.header.timestamp);\n const ms = ntp * 1000;\n const time = Math.round(ms);\n res.push({ rtp, time });\n\n this.internalStats[\"timeSource\"] =\n new Date().toISOString() + \" time:\" + time;\n }\n this.buffer = [];\n return res;\n }\n\n return [];\n }\n\n /**\n *\n * @param rtpTimestamp\n * @returns sec\n */\n private calcNtp({\n rtpTimestamp,\n baseNtpTimestamp,\n baseRtpTimestamp,\n elapsedOffset,\n }: {\n rtpTimestamp: number;\n baseRtpTimestamp: number;\n baseNtpTimestamp: bigint;\n elapsedOffset: number;\n }) {\n const rotate =\n Math.abs(rtpTimestamp - baseRtpTimestamp) > (Max32Uint / 4) * 3;\n\n const elapsed = rotate\n ? rtpTimestamp + Max32Uint - baseRtpTimestamp\n : rtpTimestamp - baseRtpTimestamp;\n const elapsedSec = elapsed / this.clockRate;\n\n // sec\n const ntp = ntpTime2Sec(baseNtpTimestamp) + elapsedOffset + elapsedSec;\n return { ntp, elapsedSec };\n }\n\n private updateNtp(rtpTimestamp: number) {\n this.internalStats[\"inputRtp\"] = rtpTimestamp;\n\n const base = this.calcNtp({\n rtpTimestamp,\n baseNtpTimestamp: this.baseNtpTimestamp!,\n baseRtpTimestamp: this.baseRtpTimestamp!,\n elapsedOffset: this.currentElapsed,\n });\n const latest = this.calcNtp({\n rtpTimestamp,\n baseNtpTimestamp: this.latestNtpTimestamp!,\n baseRtpTimestamp: this.latestRtpTimestamp!,\n elapsedOffset: 0,\n });\n\n this.internalStats[\"calcBaseNtp\"] = base.ntp;\n this.internalStats[\"calcLatestNtp\"] = latest.ntp;\n\n if (base.ntp < latest.ntp) {\n // update baseNtp\n this.baseNtpTimestamp = this.latestNtpTimestamp;\n this.baseRtpTimestamp = this.latestRtpTimestamp;\n this.currentElapsed = 0;\n this.internalStats[\"calcNtp\"] = latest.ntp;\n return latest.ntp;\n } else {\n this.currentElapsed += base.elapsedSec;\n this.baseRtpTimestamp = rtpTimestamp;\n this.internalStats[\"calcNtp\"] = base.ntp;\n return base.ntp;\n }\n }\n}\n"]}
1
+ {"version":3,"file":"ntpTime.js","sourceRoot":"","sources":["../../../../../../rtp/src/extra/processor/ntpTime.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from \"crypto\";\n\nimport {\n type RtcpPacket,\n RtcpSrPacket,\n type RtpPacket,\n ntpTime2Sec,\n} from \"../..\";\nimport type { Processor } from \"./interface\";\nimport { Max32Uint } from \"./webm\";\n\nexport type NtpTimeInput = {\n rtp?: RtpPacket;\n eol?: boolean;\n rtcp?: RtcpPacket;\n};\n\nexport interface NtpTimeOutput {\n rtp?: RtpPacket;\n /**ms */\n time?: number;\n eol?: boolean;\n}\n\nexport class NtpTimeBase implements Processor<NtpTimeInput, NtpTimeOutput> {\n readonly id = randomUUID();\n private baseNtpTimestamp?: bigint;\n private baseRtpTimestamp?: number;\n private latestNtpTimestamp?: bigint;\n private latestRtpTimestamp?: number;\n private currentElapsed = 0;\n private buffer: RtpPacket[] = [];\n private internalStats = {};\n started = false;\n\n constructor(public clockRate: number) {}\n\n toJSON(): Record<string, any> {\n return {\n ...this.internalStats,\n id: this.id,\n baseRtpTimestamp: this.baseRtpTimestamp,\n latestRtpTimestamp: this.latestRtpTimestamp,\n baseNtpTimestamp:\n this.baseNtpTimestamp && ntpTime2Sec(this.baseNtpTimestamp),\n latestNtpTimestamp:\n this.latestNtpTimestamp && ntpTime2Sec(this.latestNtpTimestamp),\n bufferLength: this.buffer.length,\n currentElapsed: this.currentElapsed,\n clockRate: this.clockRate,\n };\n }\n\n private stop() {\n this.buffer = [];\n this.internalStats = {};\n }\n\n processInput({ rtcp, rtp, eol }: NtpTimeInput): NtpTimeOutput[] {\n if (eol) {\n this.stop();\n return [{ eol: true }];\n }\n\n if (rtcp && rtcp.type === RtcpSrPacket.type) {\n const { ntpTimestamp, rtpTimestamp } = rtcp.senderInfo;\n this.latestNtpTimestamp = ntpTimestamp;\n this.latestRtpTimestamp = rtpTimestamp;\n\n if (this.baseNtpTimestamp == undefined) {\n this.baseNtpTimestamp = ntpTimestamp;\n this.baseRtpTimestamp = rtpTimestamp;\n }\n\n this.internalStats[\"ntpReceived\"] = new Date().toISOString();\n this.started = true;\n }\n\n if (rtp) {\n this.buffer.push(rtp);\n this.internalStats[\"payloadType\"] = rtp.header.payloadType;\n\n const res: NtpTimeOutput[] = [];\n\n if (\n this.baseRtpTimestamp == undefined ||\n this.baseNtpTimestamp == undefined ||\n this.latestNtpTimestamp == undefined ||\n this.latestRtpTimestamp == undefined\n ) {\n return [];\n }\n\n for (const rtp of this.buffer) {\n const ntp = this.updateNtp(rtp.header.timestamp);\n const ms = ntp * 1000;\n const time = Math.round(ms);\n res.push({ rtp, time });\n\n this.internalStats[\"timeSource\"] =\n new Date().toISOString() + \" time:\" + time;\n }\n this.buffer = [];\n return res;\n }\n\n return [];\n }\n\n /**\n *\n * @param rtpTimestamp\n * @returns sec\n */\n private calcNtp({\n rtpTimestamp,\n baseNtpTimestamp,\n baseRtpTimestamp,\n elapsedOffset,\n }: {\n rtpTimestamp: number;\n baseRtpTimestamp: number;\n baseNtpTimestamp: bigint;\n elapsedOffset: number;\n }) {\n const rotate =\n Math.abs(rtpTimestamp - baseRtpTimestamp) > (Max32Uint / 4) * 3;\n\n const elapsed = rotate\n ? rtpTimestamp + Max32Uint - baseRtpTimestamp\n : rtpTimestamp - baseRtpTimestamp;\n const elapsedSec = elapsed / this.clockRate;\n\n // sec\n const ntp = ntpTime2Sec(baseNtpTimestamp) + elapsedOffset + elapsedSec;\n return { ntp, elapsedSec };\n }\n\n private updateNtp(rtpTimestamp: number) {\n this.internalStats[\"inputRtp\"] = rtpTimestamp;\n\n const base = this.calcNtp({\n rtpTimestamp,\n baseNtpTimestamp: this.baseNtpTimestamp!,\n baseRtpTimestamp: this.baseRtpTimestamp!,\n elapsedOffset: this.currentElapsed,\n });\n const latest = this.calcNtp({\n rtpTimestamp,\n baseNtpTimestamp: this.latestNtpTimestamp!,\n baseRtpTimestamp: this.latestRtpTimestamp!,\n elapsedOffset: 0,\n });\n\n this.internalStats[\"calcBaseNtp\"] = base.ntp;\n this.internalStats[\"calcLatestNtp\"] = latest.ntp;\n\n if (base.ntp < latest.ntp) {\n // update baseNtp\n this.baseNtpTimestamp = this.latestNtpTimestamp;\n this.baseRtpTimestamp = this.latestRtpTimestamp;\n this.currentElapsed = 0;\n this.internalStats[\"calcNtp\"] = latest.ntp;\n return latest.ntp;\n } else {\n this.currentElapsed += base.elapsedSec;\n this.baseRtpTimestamp = rtpTimestamp;\n this.internalStats[\"calcNtp\"] = base.ntp;\n return base.ntp;\n }\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { NtpTimeBase, NtpTimeInput, NtpTimeOutput } from "./ntpTime";
1
+ import { NtpTimeBase, type NtpTimeInput, type NtpTimeOutput } from "./ntpTime";
2
2
  declare const NtpTimeCallback_base: {
3
3
  new (...args: any[]): {
4
4
  cb?: ((o: NtpTimeOutput) => void) | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"ntpTimeCallback.js","sourceRoot":"","sources":["../../../../../../rtp/src/extra/processor/ntpTimeCallback.ts"],"names":[],"mappings":";;;AAAA,2CAA0D;AAC1D,uCAAqE;AAErE,MAAa,eAAgB,SAAQ,IAAA,uCAA2B,EAI9D,qBAAW,CAAC;CAAG;AAJjB,0CAIiB","sourcesContent":["import { SimpleProcessorCallbackBase } from \"./interface\";\nimport { NtpTimeBase, NtpTimeInput, NtpTimeOutput } from \"./ntpTime\";\n\nexport class NtpTimeCallback extends SimpleProcessorCallbackBase<\n NtpTimeInput,\n NtpTimeOutput,\n typeof NtpTimeBase\n>(NtpTimeBase) {}\n"]}
1
+ {"version":3,"file":"ntpTimeCallback.js","sourceRoot":"","sources":["../../../../../../rtp/src/extra/processor/ntpTimeCallback.ts"],"names":[],"mappings":";;;AAAA,2CAA0D;AAC1D,uCAA+E;AAE/E,MAAa,eAAgB,SAAQ,IAAA,uCAA2B,EAI9D,qBAAW,CAAC;CAAG;AAJjB,0CAIiB","sourcesContent":["import { SimpleProcessorCallbackBase } from \"./interface\";\nimport { NtpTimeBase, type NtpTimeInput, type NtpTimeOutput } from \"./ntpTime\";\n\nexport class NtpTimeCallback extends SimpleProcessorCallbackBase<\n NtpTimeInput,\n NtpTimeOutput,\n typeof NtpTimeBase\n>(NtpTimeBase) {}\n"]}
@@ -1,6 +1,6 @@
1
1
  import Event from "rx.mini";
2
- import { RtcpPacket } from "../..";
3
- import { SimpleProcessorCallback } from "./interface";
2
+ import type { RtcpPacket } from "../..";
3
+ import type { SimpleProcessorCallback } from "./interface";
4
4
  export type RtcpInput = RtcpPacket;
5
5
  export interface RtcpOutput {
6
6
  rtcp?: RtcpPacket;
@@ -1 +1 @@
1
- {"version":3,"file":"rtcpCallback.js","sourceRoot":"","sources":["../../../../../../rtp/src/extra/processor/rtcpCallback.ts"],"names":[],"mappings":";;;;;;AAAA,sDAA4B;AAY5B,MAAa,kBAAkB;IAA/B;QAGU;;;;;WAAiC;QACjC;;;;;WAAwB;QAChC;;;;mBAAY,IAAI,iBAAK,EAAE;WAAC;QAYxB;;;;mBAAQ,CAAC,IAAe,EAAE,EAAE;gBAC1B,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;oBACZ,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;gBACpB,CAAC;YACH,CAAC;WAAC;QASF;;;;mBAAU,GAAG,EAAE;gBACb,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;oBACpB,IAAI,CAAC,UAAU,EAAE,CAAC;oBAClB,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;gBAC9B,CAAC;gBACD,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC;gBACpB,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC;YAClC,CAAC;WAAC;IACJ,CAAC;IA/BC,MAAM;QACJ,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC,EAA+B,EAAE,UAAuB;QAC3D,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAQD,IAAI;QACF,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACZ,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QACzB,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;CAUF;AAtCD,gDAsCC","sourcesContent":["import Event from \"rx.mini\";\n\nimport { RtcpPacket } from \"../..\";\nimport { SimpleProcessorCallback } from \"./interface\";\n\nexport type RtcpInput = RtcpPacket;\n\nexport interface RtcpOutput {\n rtcp?: RtcpPacket;\n eol?: boolean;\n}\n\nexport class RtcpSourceCallback\n implements SimpleProcessorCallback<RtcpInput, RtcpOutput>\n{\n private cb?: (chunk: RtcpOutput) => void;\n private destructor?: () => void;\n onStopped = new Event();\n\n toJSON() {\n return {};\n }\n\n pipe(cb: (chunk: RtcpOutput) => void, destructor?: () => void) {\n this.cb = cb;\n this.destructor = destructor;\n return this;\n }\n\n input = (rtcp: RtcpInput) => {\n if (this.cb) {\n this.cb({ rtcp });\n }\n };\n\n stop() {\n if (this.cb) {\n this.cb({ eol: true });\n }\n this.onStopped.execute();\n }\n\n destroy = () => {\n if (this.destructor) {\n this.destructor();\n this.destructor = undefined;\n }\n this.cb = undefined;\n this.onStopped.allUnsubscribe();\n };\n}\n"]}
1
+ {"version":3,"file":"rtcpCallback.js","sourceRoot":"","sources":["../../../../../../rtp/src/extra/processor/rtcpCallback.ts"],"names":[],"mappings":";;;;;;AAAA,sDAA4B;AAY5B,MAAa,kBAAkB;IAA/B;QAGU;;;;;WAAiC;QACjC;;;;;WAAwB;QAChC;;;;mBAAY,IAAI,iBAAK,EAAE;WAAC;QAYxB;;;;mBAAQ,CAAC,IAAe,EAAE,EAAE;gBAC1B,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;oBACZ,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;gBACpB,CAAC;YACH,CAAC;WAAC;QASF;;;;mBAAU,GAAG,EAAE;gBACb,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;oBACpB,IAAI,CAAC,UAAU,EAAE,CAAC;oBAClB,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;gBAC9B,CAAC;gBACD,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC;gBACpB,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC;YAClC,CAAC;WAAC;IACJ,CAAC;IA/BC,MAAM;QACJ,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC,EAA+B,EAAE,UAAuB;QAC3D,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAQD,IAAI;QACF,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACZ,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QACzB,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;CAUF;AAtCD,gDAsCC","sourcesContent":["import Event from \"rx.mini\";\n\nimport type { RtcpPacket } from \"../..\";\nimport type { SimpleProcessorCallback } from \"./interface\";\n\nexport type RtcpInput = RtcpPacket;\n\nexport interface RtcpOutput {\n rtcp?: RtcpPacket;\n eol?: boolean;\n}\n\nexport class RtcpSourceCallback\n implements SimpleProcessorCallback<RtcpInput, RtcpOutput>\n{\n private cb?: (chunk: RtcpOutput) => void;\n private destructor?: () => void;\n onStopped = new Event();\n\n toJSON() {\n return {};\n }\n\n pipe(cb: (chunk: RtcpOutput) => void, destructor?: () => void) {\n this.cb = cb;\n this.destructor = destructor;\n return this;\n }\n\n input = (rtcp: RtcpInput) => {\n if (this.cb) {\n this.cb({ rtcp });\n }\n };\n\n stop() {\n if (this.cb) {\n this.cb({ eol: true });\n }\n this.onStopped.execute();\n }\n\n destroy = () => {\n if (this.destructor) {\n this.destructor();\n this.destructor = undefined;\n }\n this.cb = undefined;\n this.onStopped.allUnsubscribe();\n };\n}\n"]}
@@ -1,7 +1,6 @@
1
- /// <reference types="node" />
2
1
  import Event from "rx.mini";
3
2
  import { RtpPacket } from "../..";
4
- import { SimpleProcessorCallback } from "./interface";
3
+ import type { SimpleProcessorCallback } from "./interface";
5
4
  export type RtpInput = Buffer | RtpPacket;
6
5
  export interface RtpOutput {
7
6
  rtp?: RtpPacket;