werift 0.17.6 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (338) hide show
  1. package/lib/common/src/binary.d.ts +1 -0
  2. package/lib/common/src/binary.js +74 -21
  3. package/lib/common/src/binary.js.map +1 -1
  4. package/lib/common/src/log.js +18 -0
  5. package/lib/common/src/log.js.map +1 -1
  6. package/lib/common/src/network.d.ts +1 -1
  7. package/lib/common/src/network.js +1 -0
  8. package/lib/common/src/network.js.map +1 -1
  9. package/lib/common/src/promise.js +22 -7
  10. package/lib/common/src/promise.js.map +1 -1
  11. package/lib/common/src/type.d.ts +1 -1
  12. package/lib/dtls/src/cipher/const.d.ts +7 -7
  13. package/lib/dtls/src/cipher/key-exchange.js +24 -1
  14. package/lib/dtls/src/cipher/key-exchange.js.map +1 -1
  15. package/lib/dtls/src/cipher/suites/abstract.d.ts +2 -2
  16. package/lib/dtls/src/cipher/suites/abstract.js +36 -2
  17. package/lib/dtls/src/cipher/suites/abstract.js.map +1 -1
  18. package/lib/dtls/src/cipher/suites/aead.js +60 -6
  19. package/lib/dtls/src/cipher/suites/aead.js.map +1 -1
  20. package/lib/dtls/src/client.js +62 -51
  21. package/lib/dtls/src/client.js.map +1 -1
  22. package/lib/dtls/src/context/cipher.js +151 -59
  23. package/lib/dtls/src/context/cipher.js.map +1 -1
  24. package/lib/dtls/src/context/dtls.js +90 -14
  25. package/lib/dtls/src/context/dtls.js.map +1 -1
  26. package/lib/dtls/src/context/srtp.d.ts +1 -1
  27. package/lib/dtls/src/context/srtp.js +8 -0
  28. package/lib/dtls/src/context/srtp.js.map +1 -1
  29. package/lib/dtls/src/context/transport.js +14 -2
  30. package/lib/dtls/src/context/transport.js.map +1 -1
  31. package/lib/dtls/src/flight/client/flight1.js +6 -1
  32. package/lib/dtls/src/flight/client/flight1.js.map +1 -1
  33. package/lib/dtls/src/flight/client/flight5.js +12 -2
  34. package/lib/dtls/src/flight/client/flight5.js.map +1 -1
  35. package/lib/dtls/src/flight/flight.d.ts +1 -1
  36. package/lib/dtls/src/flight/flight.js +42 -7
  37. package/lib/dtls/src/flight/flight.js.map +1 -1
  38. package/lib/dtls/src/flight/server/flight2.js +4 -2
  39. package/lib/dtls/src/flight/server/flight2.js.map +1 -1
  40. package/lib/dtls/src/flight/server/flight4.js +12 -2
  41. package/lib/dtls/src/flight/server/flight4.js.map +1 -1
  42. package/lib/dtls/src/flight/server/flight6.js +6 -1
  43. package/lib/dtls/src/flight/server/flight6.js.map +1 -1
  44. package/lib/dtls/src/handshake/extensions/ellipticCurves.js +27 -7
  45. package/lib/dtls/src/handshake/extensions/ellipticCurves.js.map +1 -1
  46. package/lib/dtls/src/handshake/extensions/extendedMasterSecret.js +6 -1
  47. package/lib/dtls/src/handshake/extensions/extendedMasterSecret.js.map +1 -1
  48. package/lib/dtls/src/handshake/extensions/renegotiationIndication.js +27 -7
  49. package/lib/dtls/src/handshake/extensions/renegotiationIndication.js.map +1 -1
  50. package/lib/dtls/src/handshake/extensions/signature.js +27 -7
  51. package/lib/dtls/src/handshake/extensions/signature.js.map +1 -1
  52. package/lib/dtls/src/handshake/extensions/useSrtp.js +39 -9
  53. package/lib/dtls/src/handshake/extensions/useSrtp.js.map +1 -1
  54. package/lib/dtls/src/handshake/message/alert.js +21 -6
  55. package/lib/dtls/src/handshake/message/alert.js.map +1 -1
  56. package/lib/dtls/src/handshake/message/certificate.js +26 -5
  57. package/lib/dtls/src/handshake/message/certificate.js.map +1 -1
  58. package/lib/dtls/src/handshake/message/changeCipherSpec.js +14 -4
  59. package/lib/dtls/src/handshake/message/changeCipherSpec.js.map +1 -1
  60. package/lib/dtls/src/handshake/message/client/certificateVerify.js +33 -7
  61. package/lib/dtls/src/handshake/message/client/certificateVerify.js.map +1 -1
  62. package/lib/dtls/src/handshake/message/client/hello.js +68 -18
  63. package/lib/dtls/src/handshake/message/client/hello.js.map +1 -1
  64. package/lib/dtls/src/handshake/message/client/keyExchange.js +26 -5
  65. package/lib/dtls/src/handshake/message/client/keyExchange.js.map +1 -1
  66. package/lib/dtls/src/handshake/message/finished.js +18 -2
  67. package/lib/dtls/src/handshake/message/finished.js.map +1 -1
  68. package/lib/dtls/src/handshake/message/server/certificateRequest.js +40 -9
  69. package/lib/dtls/src/handshake/message/server/certificateRequest.js.map +1 -1
  70. package/lib/dtls/src/handshake/message/server/hello.js +60 -14
  71. package/lib/dtls/src/handshake/message/server/hello.js.map +1 -1
  72. package/lib/dtls/src/handshake/message/server/helloDone.js +18 -2
  73. package/lib/dtls/src/handshake/message/server/helloDone.js.map +1 -1
  74. package/lib/dtls/src/handshake/message/server/helloVerifyRequest.js +33 -7
  75. package/lib/dtls/src/handshake/message/server/helloVerifyRequest.js.map +1 -1
  76. package/lib/dtls/src/handshake/message/server/keyExchange.js +75 -19
  77. package/lib/dtls/src/handshake/message/server/keyExchange.js.map +1 -1
  78. package/lib/dtls/src/handshake/random.js +21 -6
  79. package/lib/dtls/src/handshake/random.js.map +1 -1
  80. package/lib/dtls/src/record/builder.d.ts +1 -1
  81. package/lib/dtls/src/record/message/fragment.js +49 -14
  82. package/lib/dtls/src/record/message/fragment.js.map +1 -1
  83. package/lib/dtls/src/record/message/header.js +84 -24
  84. package/lib/dtls/src/record/message/header.js.map +1 -1
  85. package/lib/dtls/src/record/message/plaintext.js +21 -6
  86. package/lib/dtls/src/record/message/plaintext.js.map +1 -1
  87. package/lib/dtls/src/server.js +59 -42
  88. package/lib/dtls/src/server.js.map +1 -1
  89. package/lib/dtls/src/socket.js +153 -64
  90. package/lib/dtls/src/socket.js.map +1 -1
  91. package/lib/dtls/src/transport.js +38 -11
  92. package/lib/dtls/src/transport.js.map +1 -1
  93. package/lib/dtls/src/typings/domain.d.ts +4 -4
  94. package/lib/ice/src/candidate.js +66 -11
  95. package/lib/ice/src/candidate.js.map +1 -1
  96. package/lib/ice/src/dns/lookup.js +12 -1
  97. package/lib/ice/src/dns/lookup.js.map +1 -1
  98. package/lib/ice/src/exceptions.js +27 -2
  99. package/lib/ice/src/exceptions.js.map +1 -1
  100. package/lib/ice/src/helper.d.ts +1 -1
  101. package/lib/ice/src/helper.js +12 -2
  102. package/lib/ice/src/helper.js.map +1 -1
  103. package/lib/ice/src/ice.d.ts +9 -3
  104. package/lib/ice/src/ice.js +407 -155
  105. package/lib/ice/src/ice.js.map +1 -1
  106. package/lib/ice/src/stun/attributes.d.ts +3 -3
  107. package/lib/ice/src/stun/attributes.js +6 -1
  108. package/lib/ice/src/stun/attributes.js.map +1 -1
  109. package/lib/ice/src/stun/message.d.ts +4 -0
  110. package/lib/ice/src/stun/message.js +24 -3
  111. package/lib/ice/src/stun/message.js.map +1 -1
  112. package/lib/ice/src/stun/protocol.js +64 -15
  113. package/lib/ice/src/stun/protocol.js.map +1 -1
  114. package/lib/ice/src/stun/transaction.js +99 -36
  115. package/lib/ice/src/stun/transaction.js.map +1 -1
  116. package/lib/ice/src/transport.js +57 -21
  117. package/lib/ice/src/transport.js.map +1 -1
  118. package/lib/ice/src/turn/protocol.js +176 -40
  119. package/lib/ice/src/turn/protocol.js.map +1 -1
  120. package/lib/ice/src/types/model.d.ts +1 -1
  121. package/lib/rtp/src/codec/av1.d.ts +1 -1
  122. package/lib/rtp/src/codec/av1.js +118 -30
  123. package/lib/rtp/src/codec/av1.js.map +1 -1
  124. package/lib/rtp/src/codec/base.js +8 -0
  125. package/lib/rtp/src/codec/base.js.map +1 -1
  126. package/lib/rtp/src/codec/h264.js +55 -0
  127. package/lib/rtp/src/codec/h264.js.map +1 -1
  128. package/lib/rtp/src/codec/index.d.ts +2 -0
  129. package/lib/rtp/src/codec/index.js +12 -2
  130. package/lib/rtp/src/codec/index.js.map +1 -1
  131. package/lib/rtp/src/codec/opus.js +8 -0
  132. package/lib/rtp/src/codec/opus.js.map +1 -1
  133. package/lib/rtp/src/codec/vp8.js +102 -3
  134. package/lib/rtp/src/codec/vp8.js.map +1 -1
  135. package/lib/rtp/src/codec/vp9.js +164 -7
  136. package/lib/rtp/src/codec/vp9.js.map +1 -1
  137. package/lib/rtp/src/container/ebml/ebml.js +30 -3
  138. package/lib/rtp/src/container/ebml/ebml.js.map +1 -1
  139. package/lib/rtp/src/container/webm.d.ts +1 -1
  140. package/lib/rtp/src/container/webm.js +44 -13
  141. package/lib/rtp/src/container/webm.js.map +1 -1
  142. package/lib/rtp/src/processor/depacketizer.d.ts +16 -8
  143. package/lib/rtp/src/processor/depacketizer.js +59 -22
  144. package/lib/rtp/src/processor/depacketizer.js.map +1 -1
  145. package/lib/rtp/src/processor/depacketizerCallback.js +24 -8
  146. package/lib/rtp/src/processor/depacketizerCallback.js.map +1 -1
  147. package/lib/rtp/src/processor/depacketizerTransformer.d.ts +2 -2
  148. package/lib/rtp/src/processor/depacketizerTransformer.js +6 -0
  149. package/lib/rtp/src/processor/depacketizerTransformer.js.map +1 -1
  150. package/lib/rtp/src/processor/index.d.ts +4 -2
  151. package/lib/rtp/src/processor/index.js +4 -2
  152. package/lib/rtp/src/processor/index.js.map +1 -1
  153. package/lib/rtp/src/processor/interface.d.ts +4 -0
  154. package/lib/rtp/src/processor/interface.js.map +1 -1
  155. package/lib/rtp/src/processor/jitterBuffer.d.ts +2 -1
  156. package/lib/rtp/src/processor/jitterBuffer.js +40 -8
  157. package/lib/rtp/src/processor/jitterBuffer.js.map +1 -1
  158. package/lib/rtp/src/processor/jitterBufferCallback.js +30 -9
  159. package/lib/rtp/src/processor/jitterBufferCallback.js.map +1 -1
  160. package/lib/rtp/src/processor/jitterBufferTransformer.js +12 -1
  161. package/lib/rtp/src/processor/jitterBufferTransformer.js.map +1 -1
  162. package/lib/rtp/src/processor/lipsync.d.ts +42 -0
  163. package/lib/rtp/src/processor/lipsync.js +178 -0
  164. package/lib/rtp/src/processor/lipsync.js.map +1 -0
  165. package/lib/rtp/src/processor/lipsyncCallback.d.ts +10 -0
  166. package/lib/rtp/src/processor/lipsyncCallback.js +59 -0
  167. package/lib/rtp/src/processor/lipsyncCallback.js.map +1 -0
  168. package/lib/rtp/src/processor/ntpTime.d.ts +24 -0
  169. package/lib/rtp/src/processor/ntpTime.js +91 -0
  170. package/lib/rtp/src/processor/ntpTime.js.map +1 -0
  171. package/lib/rtp/src/processor/ntpTimeCallback.d.ts +7 -0
  172. package/lib/rtp/src/processor/ntpTimeCallback.js +36 -0
  173. package/lib/rtp/src/processor/ntpTimeCallback.js.map +1 -0
  174. package/lib/rtp/src/processor/source/index.d.ts +1 -0
  175. package/lib/rtp/src/processor/source/index.js +1 -0
  176. package/lib/rtp/src/processor/source/index.js.map +1 -1
  177. package/lib/rtp/src/processor/source/rtcpCallback.d.ts +12 -0
  178. package/lib/rtp/src/processor/source/rtcpCallback.js +33 -0
  179. package/lib/rtp/src/processor/source/rtcpCallback.js.map +1 -0
  180. package/lib/rtp/src/processor/source/rtpCallback.js +28 -12
  181. package/lib/rtp/src/processor/source/rtpCallback.js.map +1 -1
  182. package/lib/rtp/src/processor/source/rtpStream.js +38 -10
  183. package/lib/rtp/src/processor/source/rtpStream.js.map +1 -1
  184. package/lib/rtp/src/processor/webm.d.ts +11 -4
  185. package/lib/rtp/src/processor/webm.js +169 -46
  186. package/lib/rtp/src/processor/webm.js.map +1 -1
  187. package/lib/rtp/src/processor/webmCallback.d.ts +5 -3
  188. package/lib/rtp/src/processor/webmCallback.js +52 -8
  189. package/lib/rtp/src/processor/webmCallback.js.map +1 -1
  190. package/lib/rtp/src/processor/webmStream.d.ts +2 -2
  191. package/lib/rtp/src/processor/webmStream.js +24 -0
  192. package/lib/rtp/src/processor/webmStream.js.map +1 -1
  193. package/lib/rtp/src/processor_old/base.d.ts +18 -0
  194. package/lib/rtp/src/processor_old/base.js +51 -0
  195. package/lib/rtp/src/processor_old/base.js.map +1 -0
  196. package/lib/rtp/src/processor_old/lipsync.d.ts +30 -0
  197. package/lib/rtp/src/processor_old/lipsync.js +119 -0
  198. package/lib/rtp/src/processor_old/lipsync.js.map +1 -0
  199. package/lib/rtp/src/rtcp/header.js +30 -5
  200. package/lib/rtp/src/rtcp/header.js.map +1 -1
  201. package/lib/rtp/src/rtcp/psfb/fullIntraRequest.d.ts +1 -1
  202. package/lib/rtp/src/rtcp/psfb/fullIntraRequest.js +30 -3
  203. package/lib/rtp/src/rtcp/psfb/fullIntraRequest.js.map +1 -1
  204. package/lib/rtp/src/rtcp/psfb/index.d.ts +1 -1
  205. package/lib/rtp/src/rtcp/psfb/index.js +18 -2
  206. package/lib/rtp/src/rtcp/psfb/index.js.map +1 -1
  207. package/lib/rtp/src/rtcp/psfb/pictureLossIndication.js +30 -3
  208. package/lib/rtp/src/rtcp/psfb/pictureLossIndication.js.map +1 -1
  209. package/lib/rtp/src/rtcp/psfb/remb.js +66 -5
  210. package/lib/rtp/src/rtcp/psfb/remb.js.map +1 -1
  211. package/lib/rtp/src/rtcp/rr.js +68 -4
  212. package/lib/rtp/src/rtcp/rr.js.map +1 -1
  213. package/lib/rtp/src/rtcp/rtcp.d.ts +1 -1
  214. package/lib/rtp/src/rtcp/rtpfb/index.d.ts +1 -1
  215. package/lib/rtp/src/rtcp/rtpfb/index.js +24 -2
  216. package/lib/rtp/src/rtcp/rtpfb/index.js.map +1 -1
  217. package/lib/rtp/src/rtcp/rtpfb/nack.d.ts +5 -0
  218. package/lib/rtp/src/rtcp/rtpfb/nack.js +43 -3
  219. package/lib/rtp/src/rtcp/rtpfb/nack.js.map +1 -1
  220. package/lib/rtp/src/rtcp/rtpfb/twcc.js +154 -11
  221. package/lib/rtp/src/rtcp/rtpfb/twcc.js.map +1 -1
  222. package/lib/rtp/src/rtcp/sdes.js +42 -4
  223. package/lib/rtp/src/rtcp/sdes.js.map +1 -1
  224. package/lib/rtp/src/rtcp/sr.js +56 -5
  225. package/lib/rtp/src/rtcp/sr.js.map +1 -1
  226. package/lib/rtp/src/rtp/red/encoder.js +18 -3
  227. package/lib/rtp/src/rtp/red/encoder.js.map +1 -1
  228. package/lib/rtp/src/rtp/red/handler.js +12 -2
  229. package/lib/rtp/src/rtp/red/handler.js.map +1 -1
  230. package/lib/rtp/src/rtp/red/packet.js +18 -2
  231. package/lib/rtp/src/rtp/red/packet.js.map +1 -1
  232. package/lib/rtp/src/rtp/rtp.d.ts +3 -3
  233. package/lib/rtp/src/rtp/rtp.js +104 -17
  234. package/lib/rtp/src/rtp/rtp.js.map +1 -1
  235. package/lib/rtp/src/srtp/cipher/ctr.js +26 -10
  236. package/lib/rtp/src/srtp/cipher/ctr.js.map +1 -1
  237. package/lib/rtp/src/srtp/cipher/gcm.d.ts +3 -0
  238. package/lib/rtp/src/srtp/cipher/gcm.js +40 -20
  239. package/lib/rtp/src/srtp/cipher/gcm.js.map +1 -1
  240. package/lib/rtp/src/srtp/cipher/index.js +24 -4
  241. package/lib/rtp/src/srtp/cipher/index.js.map +1 -1
  242. package/lib/rtp/src/srtp/const.d.ts +1 -1
  243. package/lib/rtp/src/srtp/context/context.d.ts +1 -1
  244. package/lib/rtp/src/srtp/context/context.js +84 -5
  245. package/lib/rtp/src/srtp/context/context.js.map +1 -1
  246. package/lib/rtp/src/srtp/session.d.ts +2 -2
  247. package/lib/rtp/src/srtp/session.js +24 -1
  248. package/lib/rtp/src/srtp/session.js.map +1 -1
  249. package/lib/rtp/src/srtp/srtcp.js +15 -5
  250. package/lib/rtp/src/srtp/srtcp.js.map +1 -1
  251. package/lib/rtp/src/srtp/srtp.js +15 -5
  252. package/lib/rtp/src/srtp/srtp.js.map +1 -1
  253. package/lib/sctp/src/chunk.js +349 -69
  254. package/lib/sctp/src/chunk.js.map +1 -1
  255. package/lib/sctp/src/helper.d.ts +1 -1
  256. package/lib/sctp/src/param.d.ts +3 -3
  257. package/lib/sctp/src/param.js +66 -11
  258. package/lib/sctp/src/param.js.map +1 -1
  259. package/lib/sctp/src/sctp.d.ts +1 -1
  260. package/lib/sctp/src/sctp.js +479 -138
  261. package/lib/sctp/src/sctp.js.map +1 -1
  262. package/lib/sctp/src/transport.js +31 -10
  263. package/lib/sctp/src/transport.js.map +1 -1
  264. package/lib/webrtc/src/dataChannel.d.ts +1 -1
  265. package/lib/webrtc/src/dataChannel.js +145 -15
  266. package/lib/webrtc/src/dataChannel.js.map +1 -1
  267. package/lib/webrtc/src/helper.js +37 -12
  268. package/lib/webrtc/src/helper.js.map +1 -1
  269. package/lib/webrtc/src/media/parameters.d.ts +1 -1
  270. package/lib/webrtc/src/media/parameters.js +124 -3
  271. package/lib/webrtc/src/media/parameters.js.map +1 -1
  272. package/lib/webrtc/src/media/receiver/nack.d.ts +4 -4
  273. package/lib/webrtc/src/media/receiver/nack.js +85 -33
  274. package/lib/webrtc/src/media/receiver/nack.js.map +1 -1
  275. package/lib/webrtc/src/media/receiver/receiverTwcc.d.ts +1 -1
  276. package/lib/webrtc/src/media/receiver/receiverTwcc.js +42 -6
  277. package/lib/webrtc/src/media/receiver/receiverTwcc.js.map +1 -1
  278. package/lib/webrtc/src/media/receiver/statistics.js +61 -5
  279. package/lib/webrtc/src/media/receiver/statistics.js.map +1 -1
  280. package/lib/webrtc/src/media/router.d.ts +1 -1
  281. package/lib/webrtc/src/media/router.js +108 -83
  282. package/lib/webrtc/src/media/router.js.map +1 -1
  283. package/lib/webrtc/src/media/rtpReceiver.js +188 -33
  284. package/lib/webrtc/src/media/rtpReceiver.js.map +1 -1
  285. package/lib/webrtc/src/media/rtpSender.js +279 -42
  286. package/lib/webrtc/src/media/rtpSender.js.map +1 -1
  287. package/lib/webrtc/src/media/rtpTransceiver.d.ts +2 -2
  288. package/lib/webrtc/src/media/rtpTransceiver.js +102 -18
  289. package/lib/webrtc/src/media/rtpTransceiver.js.map +1 -1
  290. package/lib/webrtc/src/media/sender/cumulativeResult.js +36 -6
  291. package/lib/webrtc/src/media/sender/cumulativeResult.js.map +1 -1
  292. package/lib/webrtc/src/media/sender/senderBWE.js +57 -12
  293. package/lib/webrtc/src/media/sender/senderBWE.js.map +1 -1
  294. package/lib/webrtc/src/media/track.js +135 -24
  295. package/lib/webrtc/src/media/track.js.map +1 -1
  296. package/lib/webrtc/src/nonstandard/recorder/index.d.ts +7 -4
  297. package/lib/webrtc/src/nonstandard/recorder/index.js +50 -6
  298. package/lib/webrtc/src/nonstandard/recorder/index.js.map +1 -1
  299. package/lib/webrtc/src/nonstandard/recorder/writer/index.js +12 -2
  300. package/lib/webrtc/src/nonstandard/recorder/writer/index.js.map +1 -1
  301. package/lib/webrtc/src/nonstandard/recorder/writer/webm.d.ts +2 -2
  302. package/lib/webrtc/src/nonstandard/recorder/writer/webm.js +39 -35
  303. package/lib/webrtc/src/nonstandard/recorder/writer/webm.js.map +1 -1
  304. package/lib/webrtc/src/nonstandard/userMedia.js +158 -56
  305. package/lib/webrtc/src/nonstandard/userMedia.js.map +1 -1
  306. package/lib/webrtc/src/peerConnection.d.ts +2 -2
  307. package/lib/webrtc/src/peerConnection.js +260 -58
  308. package/lib/webrtc/src/peerConnection.js.map +1 -1
  309. package/lib/webrtc/src/sdp.js +287 -24
  310. package/lib/webrtc/src/sdp.js.map +1 -1
  311. package/lib/webrtc/src/transport/dtls.d.ts +3 -3
  312. package/lib/webrtc/src/transport/dtls.js +185 -30
  313. package/lib/webrtc/src/transport/dtls.js.map +1 -1
  314. package/lib/webrtc/src/transport/ice.d.ts +2 -2
  315. package/lib/webrtc/src/transport/ice.js +193 -25
  316. package/lib/webrtc/src/transport/ice.js.map +1 -1
  317. package/lib/webrtc/src/transport/sctp.js +193 -101
  318. package/lib/webrtc/src/transport/sctp.js.map +1 -1
  319. package/lib/webrtc/src/types/domain.d.ts +3 -3
  320. package/lib/webrtc/src/types/util.d.ts +2 -2
  321. package/lib/webrtc/src/utils.js +12 -2
  322. package/lib/webrtc/src/utils.js.map +1 -1
  323. package/package.json +15 -15
  324. package/src/dataChannel.ts +3 -1
  325. package/src/media/receiver/nack.ts +23 -19
  326. package/src/media/rtpReceiver.ts +5 -0
  327. package/src/media/rtpSender.ts +22 -19
  328. package/src/nonstandard/recorder/index.ts +12 -4
  329. package/src/nonstandard/recorder/writer/webm.ts +42 -50
  330. package/src/transport/dtls.ts +7 -3
  331. package/src/transport/ice.ts +6 -3
  332. package/src/transport/sctp.ts +3 -1
  333. package/lib/rtp/src/processor/avBuffer.d.ts +0 -36
  334. package/lib/rtp/src/processor/avBuffer.js +0 -107
  335. package/lib/rtp/src/processor/avBuffer.js.map +0 -1
  336. package/lib/rtp/src/processor/avBufferCallback.d.ts +0 -10
  337. package/lib/rtp/src/processor/avBufferCallback.js +0 -27
  338. package/lib/rtp/src/processor/avBufferCallback.js.map +0 -1
@@ -31,30 +31,114 @@ const rx_mini_1 = __importDefault(require("rx.mini"));
31
31
  const uuid = __importStar(require("uuid"));
32
32
  const const_1 = require("../const");
33
33
  class RTCRtpTransceiver {
34
- constructor(kind, dtlsTransport, receiver, sender,
35
- /**RFC 8829 4.2.4. direction the transceiver was initialized with */
36
- _direction) {
37
- this.kind = kind;
38
- this.receiver = receiver;
39
- this.sender = sender;
40
- this._direction = _direction;
41
- this.id = uuid.v4();
42
- this.onTrack = new rx_mini_1.default();
43
- /**should not be reused because it has been used for sending before. */
44
- this.usedForSender = false;
45
- this._codecs = [];
46
- this.headerExtensions = [];
47
- this.options = {};
48
- this.stopping = false;
49
- this.stopped = false;
50
- this.setDtlsTransport(dtlsTransport);
51
- }
52
34
  set codecs(codecs) {
53
35
  this._codecs = codecs;
54
36
  }
55
37
  get codecs() {
56
38
  return this._codecs;
57
39
  }
40
+ constructor(kind, dtlsTransport, receiver, sender,
41
+ /**RFC 8829 4.2.4. direction the transceiver was initialized with */
42
+ _direction) {
43
+ Object.defineProperty(this, "kind", {
44
+ enumerable: true,
45
+ configurable: true,
46
+ writable: true,
47
+ value: kind
48
+ });
49
+ Object.defineProperty(this, "receiver", {
50
+ enumerable: true,
51
+ configurable: true,
52
+ writable: true,
53
+ value: receiver
54
+ });
55
+ Object.defineProperty(this, "sender", {
56
+ enumerable: true,
57
+ configurable: true,
58
+ writable: true,
59
+ value: sender
60
+ });
61
+ Object.defineProperty(this, "_direction", {
62
+ enumerable: true,
63
+ configurable: true,
64
+ writable: true,
65
+ value: _direction
66
+ });
67
+ Object.defineProperty(this, "id", {
68
+ enumerable: true,
69
+ configurable: true,
70
+ writable: true,
71
+ value: uuid.v4()
72
+ });
73
+ Object.defineProperty(this, "onTrack", {
74
+ enumerable: true,
75
+ configurable: true,
76
+ writable: true,
77
+ value: new rx_mini_1.default()
78
+ });
79
+ Object.defineProperty(this, "mid", {
80
+ enumerable: true,
81
+ configurable: true,
82
+ writable: true,
83
+ value: void 0
84
+ });
85
+ Object.defineProperty(this, "mLineIndex", {
86
+ enumerable: true,
87
+ configurable: true,
88
+ writable: true,
89
+ value: void 0
90
+ });
91
+ /**should not be reused because it has been used for sending before. */
92
+ Object.defineProperty(this, "usedForSender", {
93
+ enumerable: true,
94
+ configurable: true,
95
+ writable: true,
96
+ value: false
97
+ });
98
+ Object.defineProperty(this, "_currentDirection", {
99
+ enumerable: true,
100
+ configurable: true,
101
+ writable: true,
102
+ value: void 0
103
+ });
104
+ Object.defineProperty(this, "offerDirection", {
105
+ enumerable: true,
106
+ configurable: true,
107
+ writable: true,
108
+ value: void 0
109
+ });
110
+ Object.defineProperty(this, "_codecs", {
111
+ enumerable: true,
112
+ configurable: true,
113
+ writable: true,
114
+ value: []
115
+ });
116
+ Object.defineProperty(this, "headerExtensions", {
117
+ enumerable: true,
118
+ configurable: true,
119
+ writable: true,
120
+ value: []
121
+ });
122
+ Object.defineProperty(this, "options", {
123
+ enumerable: true,
124
+ configurable: true,
125
+ writable: true,
126
+ value: {}
127
+ });
128
+ Object.defineProperty(this, "stopping", {
129
+ enumerable: true,
130
+ configurable: true,
131
+ writable: true,
132
+ value: false
133
+ });
134
+ Object.defineProperty(this, "stopped", {
135
+ enumerable: true,
136
+ configurable: true,
137
+ writable: true,
138
+ value: false
139
+ });
140
+ this.setDtlsTransport(dtlsTransport);
141
+ }
58
142
  get dtlsTransport() {
59
143
  return this.receiver.dtlsTransport;
60
144
  }
@@ -1 +1 @@
1
- {"version":3,"file":"rtpTransceiver.js","sourceRoot":"","sources":["../../../../src/media/rtpTransceiver.ts"],"names":[],"mappings":"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","sourcesContent":["import Event from \"rx.mini\";\nimport * as uuid from \"uuid\";\n\nimport { RTCDtlsTransport } from \"..\";\nimport { SenderDirections } from \"../const\";\nimport { Kind } from \"../types/domain\";\nimport {\n RTCRtpCodecParameters,\n RTCRtpHeaderExtensionParameters,\n} from \"./parameters\";\nimport { RTCRtpReceiver } from \"./rtpReceiver\";\nimport { RTCRtpSender } from \"./rtpSender\";\nimport { MediaStreamTrack } from \"./track\";\n\nexport class RTCRtpTransceiver {\n readonly id = uuid.v4();\n readonly onTrack = new Event<[MediaStreamTrack, RTCRtpTransceiver]>();\n mid?: string;\n mLineIndex?: number;\n /**should not be reused because it has been used for sending before. */\n usedForSender = false;\n private _currentDirection?: Direction;\n offerDirection!: Direction;\n _codecs: RTCRtpCodecParameters[] = [];\n set codecs(codecs: RTCRtpCodecParameters[]) {\n this._codecs = codecs;\n }\n get codecs() {\n return this._codecs;\n }\n headerExtensions: RTCRtpHeaderExtensionParameters[] = [];\n options: Partial<TransceiverOptions> = {};\n stopping = false;\n stopped = false;\n\n constructor(\n public readonly kind: Kind,\n dtlsTransport: RTCDtlsTransport,\n public receiver: RTCRtpReceiver,\n public sender: RTCRtpSender,\n /**RFC 8829 4.2.4. direction the transceiver was initialized with */\n private _direction: Direction\n ) {\n this.setDtlsTransport(dtlsTransport);\n }\n\n get dtlsTransport() {\n return this.receiver.dtlsTransport;\n }\n\n /**RFC 8829 4.2.4. setDirectionに渡された最後の値を示します */\n get direction() {\n return this._direction;\n }\n\n setDirection(direction: Direction) {\n this._direction = direction;\n if (SenderDirections.includes(this._currentDirection ?? \"\")) {\n this.usedForSender = true;\n }\n }\n\n /**RFC 8829 4.2.5. last negotiated direction */\n get currentDirection(): Direction | undefined {\n return this._currentDirection;\n }\n\n setCurrentDirection(direction: Direction | undefined) {\n this._currentDirection = direction;\n }\n\n setDtlsTransport(dtls: RTCDtlsTransport) {\n this.receiver.setDtlsTransport(dtls);\n this.sender.setDtlsTransport(dtls);\n }\n\n get msid() {\n return `${this.sender.streamId} ${this.sender.trackId}`;\n }\n\n addTrack(track: MediaStreamTrack) {\n const res = this.receiver.addTrack(track);\n if (res) {\n this.onTrack.execute(track, this);\n }\n }\n\n // todo impl\n // https://www.w3.org/TR/webrtc/#methods-8\n stop() {\n if (this.stopping) {\n return;\n }\n\n // todo Stop sending and receiving with transceiver.\n\n this.stopping = true;\n }\n\n getPayloadType(mimeType: string) {\n return this.codecs.find((codec) =>\n codec.mimeType.toLowerCase().includes(mimeType.toLowerCase())\n )?.payloadType;\n }\n}\n\nexport const Inactive = \"inactive\";\nexport const Sendonly = \"sendonly\";\nexport const Recvonly = \"recvonly\";\nexport const Sendrecv = \"sendrecv\";\n\nexport const Directions = [Inactive, Sendonly, Recvonly, Sendrecv] as const;\n\nexport type Direction = typeof Directions[number];\n\ntype SimulcastDirection = \"send\" | \"recv\";\n\nexport interface TransceiverOptions {\n direction: Direction;\n simulcast: { direction: SimulcastDirection; rid: string }[];\n}\n"]}
1
+ {"version":3,"file":"rtpTransceiver.js","sourceRoot":"","sources":["../../../../src/media/rtpTransceiver.ts"],"names":[],"mappings":"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","sourcesContent":["import Event from \"rx.mini\";\nimport * as uuid from \"uuid\";\n\nimport { RTCDtlsTransport } from \"..\";\nimport { SenderDirections } from \"../const\";\nimport { Kind } from \"../types/domain\";\nimport {\n RTCRtpCodecParameters,\n RTCRtpHeaderExtensionParameters,\n} from \"./parameters\";\nimport { RTCRtpReceiver } from \"./rtpReceiver\";\nimport { RTCRtpSender } from \"./rtpSender\";\nimport { MediaStreamTrack } from \"./track\";\n\nexport class RTCRtpTransceiver {\n readonly id = uuid.v4();\n readonly onTrack = new Event<[MediaStreamTrack, RTCRtpTransceiver]>();\n mid?: string;\n mLineIndex?: number;\n /**should not be reused because it has been used for sending before. */\n usedForSender = false;\n private _currentDirection?: Direction;\n offerDirection!: Direction;\n _codecs: RTCRtpCodecParameters[] = [];\n set codecs(codecs: RTCRtpCodecParameters[]) {\n this._codecs = codecs;\n }\n get codecs() {\n return this._codecs;\n }\n headerExtensions: RTCRtpHeaderExtensionParameters[] = [];\n options: Partial<TransceiverOptions> = {};\n stopping = false;\n stopped = false;\n\n constructor(\n public readonly kind: Kind,\n dtlsTransport: RTCDtlsTransport,\n public receiver: RTCRtpReceiver,\n public sender: RTCRtpSender,\n /**RFC 8829 4.2.4. direction the transceiver was initialized with */\n private _direction: Direction\n ) {\n this.setDtlsTransport(dtlsTransport);\n }\n\n get dtlsTransport() {\n return this.receiver.dtlsTransport;\n }\n\n /**RFC 8829 4.2.4. setDirectionに渡された最後の値を示します */\n get direction() {\n return this._direction;\n }\n\n setDirection(direction: Direction) {\n this._direction = direction;\n if (SenderDirections.includes(this._currentDirection ?? \"\")) {\n this.usedForSender = true;\n }\n }\n\n /**RFC 8829 4.2.5. last negotiated direction */\n get currentDirection(): Direction | undefined {\n return this._currentDirection;\n }\n\n setCurrentDirection(direction: Direction | undefined) {\n this._currentDirection = direction;\n }\n\n setDtlsTransport(dtls: RTCDtlsTransport) {\n this.receiver.setDtlsTransport(dtls);\n this.sender.setDtlsTransport(dtls);\n }\n\n get msid() {\n return `${this.sender.streamId} ${this.sender.trackId}`;\n }\n\n addTrack(track: MediaStreamTrack) {\n const res = this.receiver.addTrack(track);\n if (res) {\n this.onTrack.execute(track, this);\n }\n }\n\n // todo impl\n // https://www.w3.org/TR/webrtc/#methods-8\n stop() {\n if (this.stopping) {\n return;\n }\n\n // todo Stop sending and receiving with transceiver.\n\n this.stopping = true;\n }\n\n getPayloadType(mimeType: string) {\n return this.codecs.find((codec) =>\n codec.mimeType.toLowerCase().includes(mimeType.toLowerCase())\n )?.payloadType;\n }\n}\n\nexport const Inactive = \"inactive\";\nexport const Sendonly = \"sendonly\";\nexport const Recvonly = \"recvonly\";\nexport const Sendrecv = \"sendrecv\";\n\nexport const Directions = [Inactive, Sendonly, Recvonly, Sendrecv] as const;\n\nexport type Direction = typeof Directions[number];\n\ntype SimulcastDirection = \"send\" | \"recv\";\n\nexport interface TransceiverOptions {\n direction: Direction;\n simulcast: { direction: SimulcastDirection; rid: string }[];\n}\n"]}
@@ -5,13 +5,43 @@ const helper_1 = require("../../../../rtp/src/helper");
5
5
  // refer by mediasoup
6
6
  class CumulativeResult {
7
7
  constructor() {
8
- this.numPackets = 0;
8
+ Object.defineProperty(this, "numPackets", {
9
+ enumerable: true,
10
+ configurable: true,
11
+ writable: true,
12
+ value: 0
13
+ });
9
14
  /**byte */
10
- this.totalSize = 0;
11
- this.firstPacketSentAtMs = 0;
12
- this.lastPacketSentAtMs = 0;
13
- this.firstPacketReceivedAtMs = 0;
14
- this.lastPacketReceivedAtMs = 0;
15
+ Object.defineProperty(this, "totalSize", {
16
+ enumerable: true,
17
+ configurable: true,
18
+ writable: true,
19
+ value: 0
20
+ });
21
+ Object.defineProperty(this, "firstPacketSentAtMs", {
22
+ enumerable: true,
23
+ configurable: true,
24
+ writable: true,
25
+ value: 0
26
+ });
27
+ Object.defineProperty(this, "lastPacketSentAtMs", {
28
+ enumerable: true,
29
+ configurable: true,
30
+ writable: true,
31
+ value: 0
32
+ });
33
+ Object.defineProperty(this, "firstPacketReceivedAtMs", {
34
+ enumerable: true,
35
+ configurable: true,
36
+ writable: true,
37
+ value: 0
38
+ });
39
+ Object.defineProperty(this, "lastPacketReceivedAtMs", {
40
+ enumerable: true,
41
+ configurable: true,
42
+ writable: true,
43
+ value: 0
44
+ });
15
45
  }
16
46
  /**
17
47
  *
@@ -1 +1 @@
1
- {"version":3,"file":"cumulativeResult.js","sourceRoot":"","sources":["../../../../../src/media/sender/cumulativeResult.ts"],"names":[],"mappings":";;;AAAA,uDAAiD;AAEjD,qBAAqB;AACrB,MAAa,gBAAgB;IAA7B;QACE,eAAU,GAAG,CAAC,CAAC;QACf,UAAU;QACV,cAAS,GAAG,CAAC,CAAC;QACd,wBAAmB,GAAG,CAAC,CAAC;QACxB,uBAAkB,GAAG,CAAC,CAAC;QACvB,4BAAuB,GAAG,CAAC,CAAC;QAC5B,2BAAsB,GAAG,CAAC,CAAC;IAkD7B,CAAC;IAhDC;;;;;OAKG;IACH,SAAS,CAAC,IAAY,EAAE,QAAgB,EAAE,YAAoB;QAC5D,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,EAAE;YACzB,IAAI,CAAC,mBAAmB,GAAG,QAAQ,CAAC;YACpC,IAAI,CAAC,uBAAuB,GAAG,YAAY,CAAC;YAC5C,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC;YACnC,IAAI,CAAC,sBAAsB,GAAG,YAAY,CAAC;SAC5C;aAAM;YACL,IAAI,QAAQ,GAAG,IAAI,CAAC,mBAAmB;gBACrC,IAAI,CAAC,mBAAmB,GAAG,QAAQ,CAAC;YACtC,IAAI,YAAY,GAAG,IAAI,CAAC,uBAAuB;gBAC7C,IAAI,CAAC,uBAAuB,GAAG,YAAY,CAAC;YAC9C,IAAI,QAAQ,GAAG,IAAI,CAAC,kBAAkB;gBACpC,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC;YACrC,IAAI,YAAY,GAAG,IAAI,CAAC,sBAAsB;gBAC5C,IAAI,CAAC,sBAAsB,GAAG,YAAY,CAAC;SAC9C;QAED,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC;IACzB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QACpB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,uBAAuB,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,sBAAsB,GAAG,CAAC,CAAC;IAClC,CAAC;IAED,IAAI,cAAc;QAChB,MAAM,cAAc,GAClB,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,uBAAuB,CAAC;QAC7D,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;QAC7D,OAAO,IAAA,YAAG,EAAC,OAAO,CAAC,CAAC;IACtB,CAAC;IAED,IAAI,WAAW;QACb,MAAM,cAAc,GAAG,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,CAAC;QAC1E,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;QAC7D,OAAO,IAAA,YAAG,EAAC,OAAO,CAAC,CAAC;IACtB,CAAC;CACF;AAzDD,4CAyDC","sourcesContent":["import { Int } from \"../../../../rtp/src/helper\";\n\n// refer by mediasoup\nexport class CumulativeResult {\n numPackets = 0;\n /**byte */\n totalSize = 0;\n firstPacketSentAtMs = 0;\n lastPacketSentAtMs = 0;\n firstPacketReceivedAtMs = 0;\n lastPacketReceivedAtMs = 0;\n\n /**\n *\n * @param size byte\n * @param sentAtMs\n * @param receivedAtMs\n */\n addPacket(size: number, sentAtMs: number, receivedAtMs: number) {\n if (this.numPackets === 0) {\n this.firstPacketSentAtMs = sentAtMs;\n this.firstPacketReceivedAtMs = receivedAtMs;\n this.lastPacketSentAtMs = sentAtMs;\n this.lastPacketReceivedAtMs = receivedAtMs;\n } else {\n if (sentAtMs < this.firstPacketSentAtMs)\n this.firstPacketSentAtMs = sentAtMs;\n if (receivedAtMs < this.firstPacketReceivedAtMs)\n this.firstPacketReceivedAtMs = receivedAtMs;\n if (sentAtMs > this.lastPacketSentAtMs)\n this.lastPacketSentAtMs = sentAtMs;\n if (receivedAtMs > this.lastPacketReceivedAtMs)\n this.lastPacketReceivedAtMs = receivedAtMs;\n }\n\n this.numPackets++;\n this.totalSize += size;\n }\n\n reset() {\n this.numPackets = 0;\n this.totalSize = 0;\n this.firstPacketSentAtMs = 0;\n this.lastPacketSentAtMs = 0;\n this.firstPacketReceivedAtMs = 0;\n this.lastPacketReceivedAtMs = 0;\n }\n\n get receiveBitrate() {\n const recvIntervalMs =\n this.lastPacketReceivedAtMs - this.firstPacketReceivedAtMs;\n const bitrate = (this.totalSize / recvIntervalMs) * 8 * 1000;\n return Int(bitrate);\n }\n\n get sendBitrate() {\n const sendIntervalMs = this.lastPacketSentAtMs - this.firstPacketSentAtMs;\n const bitrate = (this.totalSize / sendIntervalMs) * 8 * 1000;\n return Int(bitrate);\n }\n}\n"]}
1
+ {"version":3,"file":"cumulativeResult.js","sourceRoot":"","sources":["../../../../../src/media/sender/cumulativeResult.ts"],"names":[],"mappings":";;;AAAA,uDAAiD;AAEjD,qBAAqB;AACrB,MAAa,gBAAgB;IAA7B;QACE;;;;mBAAa,CAAC;WAAC;QACf,UAAU;QACV;;;;mBAAY,CAAC;WAAC;QACd;;;;mBAAsB,CAAC;WAAC;QACxB;;;;mBAAqB,CAAC;WAAC;QACvB;;;;mBAA0B,CAAC;WAAC;QAC5B;;;;mBAAyB,CAAC;WAAC;IAkD7B,CAAC;IAhDC;;;;;OAKG;IACH,SAAS,CAAC,IAAY,EAAE,QAAgB,EAAE,YAAoB;QAC5D,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,EAAE;YACzB,IAAI,CAAC,mBAAmB,GAAG,QAAQ,CAAC;YACpC,IAAI,CAAC,uBAAuB,GAAG,YAAY,CAAC;YAC5C,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC;YACnC,IAAI,CAAC,sBAAsB,GAAG,YAAY,CAAC;SAC5C;aAAM;YACL,IAAI,QAAQ,GAAG,IAAI,CAAC,mBAAmB;gBACrC,IAAI,CAAC,mBAAmB,GAAG,QAAQ,CAAC;YACtC,IAAI,YAAY,GAAG,IAAI,CAAC,uBAAuB;gBAC7C,IAAI,CAAC,uBAAuB,GAAG,YAAY,CAAC;YAC9C,IAAI,QAAQ,GAAG,IAAI,CAAC,kBAAkB;gBACpC,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC;YACrC,IAAI,YAAY,GAAG,IAAI,CAAC,sBAAsB;gBAC5C,IAAI,CAAC,sBAAsB,GAAG,YAAY,CAAC;SAC9C;QAED,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC;IACzB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QACpB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,uBAAuB,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,sBAAsB,GAAG,CAAC,CAAC;IAClC,CAAC;IAED,IAAI,cAAc;QAChB,MAAM,cAAc,GAClB,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,uBAAuB,CAAC;QAC7D,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;QAC7D,OAAO,IAAA,YAAG,EAAC,OAAO,CAAC,CAAC;IACtB,CAAC;IAED,IAAI,WAAW;QACb,MAAM,cAAc,GAAG,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,CAAC;QAC1E,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;QAC7D,OAAO,IAAA,YAAG,EAAC,OAAO,CAAC,CAAC;IACtB,CAAC;CACF;AAzDD,4CAyDC","sourcesContent":["import { Int } from \"../../../../rtp/src/helper\";\n\n// refer by mediasoup\nexport class CumulativeResult {\n numPackets = 0;\n /**byte */\n totalSize = 0;\n firstPacketSentAtMs = 0;\n lastPacketSentAtMs = 0;\n firstPacketReceivedAtMs = 0;\n lastPacketReceivedAtMs = 0;\n\n /**\n *\n * @param size byte\n * @param sentAtMs\n * @param receivedAtMs\n */\n addPacket(size: number, sentAtMs: number, receivedAtMs: number) {\n if (this.numPackets === 0) {\n this.firstPacketSentAtMs = sentAtMs;\n this.firstPacketReceivedAtMs = receivedAtMs;\n this.lastPacketSentAtMs = sentAtMs;\n this.lastPacketReceivedAtMs = receivedAtMs;\n } else {\n if (sentAtMs < this.firstPacketSentAtMs)\n this.firstPacketSentAtMs = sentAtMs;\n if (receivedAtMs < this.firstPacketReceivedAtMs)\n this.firstPacketReceivedAtMs = receivedAtMs;\n if (sentAtMs > this.lastPacketSentAtMs)\n this.lastPacketSentAtMs = sentAtMs;\n if (receivedAtMs > this.lastPacketReceivedAtMs)\n this.lastPacketReceivedAtMs = receivedAtMs;\n }\n\n this.numPackets++;\n this.totalSize += size;\n }\n\n reset() {\n this.numPackets = 0;\n this.totalSize = 0;\n this.firstPacketSentAtMs = 0;\n this.lastPacketSentAtMs = 0;\n this.firstPacketReceivedAtMs = 0;\n this.lastPacketReceivedAtMs = 0;\n }\n\n get receiveBitrate() {\n const recvIntervalMs =\n this.lastPacketReceivedAtMs - this.firstPacketReceivedAtMs;\n const bitrate = (this.totalSize / recvIntervalMs) * 8 * 1000;\n return Int(bitrate);\n }\n\n get sendBitrate() {\n const sendIntervalMs = this.lastPacketSentAtMs - this.firstPacketSentAtMs;\n const bitrate = (this.totalSize / sendIntervalMs) * 8 * 1000;\n return Int(bitrate);\n }\n}\n"]}
@@ -11,18 +11,6 @@ const cumulativeResult_1 = require("./cumulativeResult");
11
11
  const COUNTER_MAX = 20;
12
12
  const SCORE_MAX = 10;
13
13
  class SenderBandwidthEstimator {
14
- constructor() {
15
- this.congestion = false;
16
- this.onAvailableBitrate = new rx_mini_1.default();
17
- /**congestion occur or not */
18
- this.onCongestion = new rx_mini_1.default();
19
- this.onCongestionScore = new rx_mini_1.default();
20
- this.congestionCounter = 0;
21
- this.cumulativeResult = new cumulativeResult_1.CumulativeResult();
22
- this.sentInfos = {};
23
- this._congestionScore = 1;
24
- this._availableBitrate = 0;
25
- }
26
14
  /**1~10 big is worth*/
27
15
  get congestionScore() {
28
16
  return this._congestionScore;
@@ -38,6 +26,63 @@ class SenderBandwidthEstimator {
38
26
  this._availableBitrate = v;
39
27
  this.onAvailableBitrate.execute(v);
40
28
  }
29
+ constructor() {
30
+ Object.defineProperty(this, "congestion", {
31
+ enumerable: true,
32
+ configurable: true,
33
+ writable: true,
34
+ value: false
35
+ });
36
+ Object.defineProperty(this, "onAvailableBitrate", {
37
+ enumerable: true,
38
+ configurable: true,
39
+ writable: true,
40
+ value: new rx_mini_1.default()
41
+ });
42
+ /**congestion occur or not */
43
+ Object.defineProperty(this, "onCongestion", {
44
+ enumerable: true,
45
+ configurable: true,
46
+ writable: true,
47
+ value: new rx_mini_1.default()
48
+ });
49
+ Object.defineProperty(this, "onCongestionScore", {
50
+ enumerable: true,
51
+ configurable: true,
52
+ writable: true,
53
+ value: new rx_mini_1.default()
54
+ });
55
+ Object.defineProperty(this, "congestionCounter", {
56
+ enumerable: true,
57
+ configurable: true,
58
+ writable: true,
59
+ value: 0
60
+ });
61
+ Object.defineProperty(this, "cumulativeResult", {
62
+ enumerable: true,
63
+ configurable: true,
64
+ writable: true,
65
+ value: new cumulativeResult_1.CumulativeResult()
66
+ });
67
+ Object.defineProperty(this, "sentInfos", {
68
+ enumerable: true,
69
+ configurable: true,
70
+ writable: true,
71
+ value: {}
72
+ });
73
+ Object.defineProperty(this, "_congestionScore", {
74
+ enumerable: true,
75
+ configurable: true,
76
+ writable: true,
77
+ value: 1
78
+ });
79
+ Object.defineProperty(this, "_availableBitrate", {
80
+ enumerable: true,
81
+ configurable: true,
82
+ writable: true,
83
+ value: 0
84
+ });
85
+ }
41
86
  receiveTWCC(feedback) {
42
87
  const nowMs = (0, utils_1.milliTime)();
43
88
  const elapsedMs = nowMs - this.cumulativeResult.firstPacketSentAtMs;
@@ -1 +1 @@
1
- {"version":3,"file":"senderBWE.js","sourceRoot":"","sources":["../../../../../src/media/sender/senderBWE.ts"],"names":[],"mappings":"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","sourcesContent":["import Event from \"rx.mini\";\n\nimport { TransportWideCC } from \"../../../../rtp/src\";\nimport { Int } from \"../../../../rtp/src/helper\";\nimport { milliTime } from \"../../utils\";\nimport { CumulativeResult } from \"./cumulativeResult\";\n\nconst COUNTER_MAX = 20;\nconst SCORE_MAX = 10;\n\nexport class SenderBandwidthEstimator {\n congestion = false;\n\n readonly onAvailableBitrate = new Event<[number]>();\n /**congestion occur or not */\n readonly onCongestion = new Event<[boolean]>();\n readonly onCongestionScore = new Event<[number]>();\n\n private congestionCounter = 0;\n private cumulativeResult = new CumulativeResult();\n private sentInfos: { [key: number]: SentInfo } = {};\n private _congestionScore = 1;\n /**1~10 big is worth*/\n get congestionScore() {\n return this._congestionScore;\n }\n set congestionScore(v: number) {\n this._congestionScore = v;\n this.onCongestionScore.execute(v);\n }\n private _availableBitrate: number = 0;\n get availableBitrate() {\n return this._availableBitrate;\n }\n set availableBitrate(v: number) {\n this._availableBitrate = v;\n this.onAvailableBitrate.execute(v);\n }\n\n constructor() {}\n\n receiveTWCC(feedback: TransportWideCC) {\n const nowMs = milliTime();\n const elapsedMs = nowMs - this.cumulativeResult.firstPacketSentAtMs;\n if (elapsedMs > 1000) {\n this.cumulativeResult.reset();\n\n // Congestion may be occurring.\n\n if (this.congestionCounter < COUNTER_MAX) {\n this.congestionCounter++;\n } else if (this.congestionScore < SCORE_MAX) {\n this.congestionScore++;\n }\n\n if (this.congestionCounter >= COUNTER_MAX && !this.congestion) {\n this.congestion = true;\n this.onCongestion.execute(this.congestion);\n }\n }\n\n for (const result of feedback.packetResults) {\n if (!result.received) continue;\n\n const wideSeq = result.sequenceNumber;\n const info = this.sentInfos[wideSeq];\n if (!info) continue;\n if (!result.receivedAtMs) continue;\n\n this.cumulativeResult.addPacket(\n info.size,\n info.sendingAtMs,\n result.receivedAtMs\n );\n }\n\n if (elapsedMs >= 100 && this.cumulativeResult.numPackets >= 20) {\n this.availableBitrate = Math.min(\n this.cumulativeResult.sendBitrate,\n this.cumulativeResult.receiveBitrate\n );\n this.cumulativeResult.reset();\n\n if (this.congestionCounter > -COUNTER_MAX) {\n const maxBonus = Int(COUNTER_MAX / 2) + 1;\n const minBonus = Int(COUNTER_MAX / 4) + 1;\n const bonus =\n maxBonus - ((maxBonus - minBonus) / 10) * this.congestionScore;\n\n this.congestionCounter = this.congestionCounter - bonus;\n }\n\n if (this.congestionCounter <= -COUNTER_MAX) {\n if (this.congestionScore > 1) {\n this.congestionScore--;\n this.onCongestion.execute(false);\n }\n this.congestionCounter = 0;\n }\n\n if (this.congestionCounter <= 0 && this.congestion) {\n this.congestion = false;\n this.onCongestion.execute(this.congestion);\n }\n }\n }\n\n rtpPacketSent(sentInfo: SentInfo) {\n Object.keys(sentInfo)\n .map((v) => Number(v))\n .sort()\n .filter((seq) => seq < sentInfo.wideSeq)\n .forEach((seq) => {\n delete this.sentInfos[seq];\n });\n this.sentInfos[sentInfo.wideSeq] = sentInfo;\n }\n}\n\nexport interface SentInfo {\n wideSeq: number;\n /**\n * byte\n */\n size: number;\n isProbation?: boolean;\n sendingAtMs: number;\n sentAtMs: number;\n}\n"]}
1
+ {"version":3,"file":"senderBWE.js","sourceRoot":"","sources":["../../../../../src/media/sender/senderBWE.ts"],"names":[],"mappings":"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","sourcesContent":["import Event from \"rx.mini\";\n\nimport { TransportWideCC } from \"../../../../rtp/src\";\nimport { Int } from \"../../../../rtp/src/helper\";\nimport { milliTime } from \"../../utils\";\nimport { CumulativeResult } from \"./cumulativeResult\";\n\nconst COUNTER_MAX = 20;\nconst SCORE_MAX = 10;\n\nexport class SenderBandwidthEstimator {\n congestion = false;\n\n readonly onAvailableBitrate = new Event<[number]>();\n /**congestion occur or not */\n readonly onCongestion = new Event<[boolean]>();\n readonly onCongestionScore = new Event<[number]>();\n\n private congestionCounter = 0;\n private cumulativeResult = new CumulativeResult();\n private sentInfos: { [key: number]: SentInfo } = {};\n private _congestionScore = 1;\n /**1~10 big is worth*/\n get congestionScore() {\n return this._congestionScore;\n }\n set congestionScore(v: number) {\n this._congestionScore = v;\n this.onCongestionScore.execute(v);\n }\n private _availableBitrate: number = 0;\n get availableBitrate() {\n return this._availableBitrate;\n }\n set availableBitrate(v: number) {\n this._availableBitrate = v;\n this.onAvailableBitrate.execute(v);\n }\n\n constructor() {}\n\n receiveTWCC(feedback: TransportWideCC) {\n const nowMs = milliTime();\n const elapsedMs = nowMs - this.cumulativeResult.firstPacketSentAtMs;\n if (elapsedMs > 1000) {\n this.cumulativeResult.reset();\n\n // Congestion may be occurring.\n\n if (this.congestionCounter < COUNTER_MAX) {\n this.congestionCounter++;\n } else if (this.congestionScore < SCORE_MAX) {\n this.congestionScore++;\n }\n\n if (this.congestionCounter >= COUNTER_MAX && !this.congestion) {\n this.congestion = true;\n this.onCongestion.execute(this.congestion);\n }\n }\n\n for (const result of feedback.packetResults) {\n if (!result.received) continue;\n\n const wideSeq = result.sequenceNumber;\n const info = this.sentInfos[wideSeq];\n if (!info) continue;\n if (!result.receivedAtMs) continue;\n\n this.cumulativeResult.addPacket(\n info.size,\n info.sendingAtMs,\n result.receivedAtMs\n );\n }\n\n if (elapsedMs >= 100 && this.cumulativeResult.numPackets >= 20) {\n this.availableBitrate = Math.min(\n this.cumulativeResult.sendBitrate,\n this.cumulativeResult.receiveBitrate\n );\n this.cumulativeResult.reset();\n\n if (this.congestionCounter > -COUNTER_MAX) {\n const maxBonus = Int(COUNTER_MAX / 2) + 1;\n const minBonus = Int(COUNTER_MAX / 4) + 1;\n const bonus =\n maxBonus - ((maxBonus - minBonus) / 10) * this.congestionScore;\n\n this.congestionCounter = this.congestionCounter - bonus;\n }\n\n if (this.congestionCounter <= -COUNTER_MAX) {\n if (this.congestionScore > 1) {\n this.congestionScore--;\n this.onCongestion.execute(false);\n }\n this.congestionCounter = 0;\n }\n\n if (this.congestionCounter <= 0 && this.congestion) {\n this.congestion = false;\n this.onCongestion.execute(this.congestion);\n }\n }\n }\n\n rtpPacketSent(sentInfo: SentInfo) {\n Object.keys(sentInfo)\n .map((v) => Number(v))\n .sort()\n .filter((seq) => seq < sentInfo.wideSeq)\n .forEach((seq) => {\n delete this.sentInfos[seq];\n });\n this.sentInfos[sentInfo.wideSeq] = sentInfo;\n }\n}\n\nexport interface SentInfo {\n wideSeq: number;\n /**\n * byte\n */\n size: number;\n isProbation?: boolean;\n sendingAtMs: number;\n sentAtMs: number;\n}\n"]}
@@ -11,32 +11,132 @@ const helper_1 = require("../helper");
11
11
  class MediaStreamTrack extends helper_1.EventTarget {
12
12
  constructor(props) {
13
13
  super();
14
- this.uuid = (0, uuid_1.v4)();
15
- this.remote = false;
14
+ Object.defineProperty(this, "uuid", {
15
+ enumerable: true,
16
+ configurable: true,
17
+ writable: true,
18
+ value: (0, uuid_1.v4)()
19
+ });
20
+ /**MediaStream ID*/
21
+ Object.defineProperty(this, "streamId", {
22
+ enumerable: true,
23
+ configurable: true,
24
+ writable: true,
25
+ value: void 0
26
+ });
27
+ Object.defineProperty(this, "remote", {
28
+ enumerable: true,
29
+ configurable: true,
30
+ writable: true,
31
+ value: false
32
+ });
33
+ Object.defineProperty(this, "label", {
34
+ enumerable: true,
35
+ configurable: true,
36
+ writable: true,
37
+ value: void 0
38
+ });
39
+ Object.defineProperty(this, "kind", {
40
+ enumerable: true,
41
+ configurable: true,
42
+ writable: true,
43
+ value: void 0
44
+ });
45
+ Object.defineProperty(this, "id", {
46
+ enumerable: true,
47
+ configurable: true,
48
+ writable: true,
49
+ value: void 0
50
+ });
51
+ /**mediaSsrc */
52
+ Object.defineProperty(this, "ssrc", {
53
+ enumerable: true,
54
+ configurable: true,
55
+ writable: true,
56
+ value: void 0
57
+ });
58
+ Object.defineProperty(this, "rid", {
59
+ enumerable: true,
60
+ configurable: true,
61
+ writable: true,
62
+ value: void 0
63
+ });
64
+ Object.defineProperty(this, "header", {
65
+ enumerable: true,
66
+ configurable: true,
67
+ writable: true,
68
+ value: void 0
69
+ });
70
+ Object.defineProperty(this, "codec", {
71
+ enumerable: true,
72
+ configurable: true,
73
+ writable: true,
74
+ value: void 0
75
+ });
16
76
  /**todo impl */
17
- this.enabled = true;
18
- this.onReceiveRtp = new rx_mini_1.default();
19
- this.onReceiveRtcp = new rx_mini_1.default();
20
- this.onSourceChanged = new rx_mini_1.default();
21
- this.stopped = false;
22
- this.muted = true;
23
- this.stop = () => {
24
- this.stopped = true;
25
- this.muted = true;
26
- this.onReceiveRtp.complete();
27
- };
28
- this.writeRtp = (rtp) => {
29
- if (this.remote) {
30
- throw new Error("this is remoteTrack");
77
+ Object.defineProperty(this, "enabled", {
78
+ enumerable: true,
79
+ configurable: true,
80
+ writable: true,
81
+ value: true
82
+ });
83
+ Object.defineProperty(this, "onReceiveRtp", {
84
+ enumerable: true,
85
+ configurable: true,
86
+ writable: true,
87
+ value: new rx_mini_1.default()
88
+ });
89
+ Object.defineProperty(this, "onReceiveRtcp", {
90
+ enumerable: true,
91
+ configurable: true,
92
+ writable: true,
93
+ value: new rx_mini_1.default()
94
+ });
95
+ Object.defineProperty(this, "onSourceChanged", {
96
+ enumerable: true,
97
+ configurable: true,
98
+ writable: true,
99
+ value: new rx_mini_1.default()
100
+ });
101
+ Object.defineProperty(this, "stopped", {
102
+ enumerable: true,
103
+ configurable: true,
104
+ writable: true,
105
+ value: false
106
+ });
107
+ Object.defineProperty(this, "muted", {
108
+ enumerable: true,
109
+ configurable: true,
110
+ writable: true,
111
+ value: true
112
+ });
113
+ Object.defineProperty(this, "stop", {
114
+ enumerable: true,
115
+ configurable: true,
116
+ writable: true,
117
+ value: () => {
118
+ this.stopped = true;
119
+ this.muted = true;
120
+ this.onReceiveRtp.complete();
31
121
  }
32
- if (this.stopped) {
33
- return;
122
+ });
123
+ Object.defineProperty(this, "writeRtp", {
124
+ enumerable: true,
125
+ configurable: true,
126
+ writable: true,
127
+ value: (rtp) => {
128
+ if (this.remote) {
129
+ throw new Error("this is remoteTrack");
130
+ }
131
+ if (this.stopped) {
132
+ return;
133
+ }
134
+ const packet = Buffer.isBuffer(rtp) ? src_1.RtpPacket.deSerialize(rtp) : rtp;
135
+ packet.header.payloadType =
136
+ this.codec?.payloadType ?? packet.header.payloadType;
137
+ this.onReceiveRtp.execute(packet);
34
138
  }
35
- const packet = Buffer.isBuffer(rtp) ? src_1.RtpPacket.deSerialize(rtp) : rtp;
36
- packet.header.payloadType =
37
- this.codec?.payloadType ?? packet.header.payloadType;
38
- this.onReceiveRtp.execute(packet);
39
- };
139
+ });
40
140
  Object.assign(this, props);
41
141
  this.onReceiveRtp.subscribe((rtp) => {
42
142
  this.muted = false;
@@ -48,7 +148,18 @@ class MediaStreamTrack extends helper_1.EventTarget {
48
148
  exports.MediaStreamTrack = MediaStreamTrack;
49
149
  class MediaStream {
50
150
  constructor(props) {
51
- this.tracks = [];
151
+ Object.defineProperty(this, "id", {
152
+ enumerable: true,
153
+ configurable: true,
154
+ writable: true,
155
+ value: void 0
156
+ });
157
+ Object.defineProperty(this, "tracks", {
158
+ enumerable: true,
159
+ configurable: true,
160
+ writable: true,
161
+ value: []
162
+ });
52
163
  Object.assign(this, props);
53
164
  }
54
165
  addTrack(track) {
@@ -1 +1 @@
1
- {"version":3,"file":"track.js","sourceRoot":"","sources":["../../../../src/media/track.ts"],"names":[],"mappings":";;;;;;AAAA,sDAA4B;AAC5B,+BAA0B;AAE1B,0CAAoE;AACpE,sCAAwC;AAIxC,MAAa,gBAAiB,SAAQ,oBAAW;IAyB/C,YACE,KAAiE;QAEjE,KAAK,EAAE,CAAC;QA3BD,SAAI,GAAG,IAAA,SAAE,GAAE,CAAC;QAGrB,WAAM,GAAG,KAAK,CAAC;QASf,eAAe;QACf,YAAO,GAAG,IAAI,CAAC;QAEN,iBAAY,GAAG,IAAI,iBAAK,EAAe,CAAC;QACxC,kBAAa,GAAG,IAAI,iBAAK,EAAgB,CAAC;QAC1C,oBAAe,GAAG,IAAI,iBAAK,EAEjC,CAAC;QAEJ,YAAO,GAAG,KAAK,CAAC;QAChB,UAAK,GAAG,IAAI,CAAC;QAgBb,SAAI,GAAG,GAAG,EAAE;YACV,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;QAC/B,CAAC,CAAC;QAEF,aAAQ,GAAG,CAAC,GAAuB,EAAE,EAAE;YACrC,IAAI,IAAI,CAAC,MAAM,EAAE;gBACf,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;aACxC;YACD,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB,OAAO;aACR;YAED,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,eAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YACvE,MAAM,CAAC,MAAM,CAAC,WAAW;gBACvB,IAAI,CAAC,KAAK,EAAE,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;YACvD,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC,CAAC;QA5BA,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAE3B,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE;YAClC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACnB,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,KAAK,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;IAClE,CAAC;CAqBF;AA1DD,4CA0DC;AAED,MAAa,WAAW;IAItB,YAAY,KAAqD;QAFjE,WAAM,GAAuB,EAAE,CAAC;QAG9B,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,QAAQ,CAAC,KAAuB;QAC9B,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC;QACzB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CACF;AAhBD,kCAgBC","sourcesContent":["import Event from \"rx.mini\";\nimport { v4 } from \"uuid\";\n\nimport { RtcpPacket, RtpHeader, RtpPacket } from \"../../../rtp/src\";\nimport { EventTarget } from \"../helper\";\nimport { Kind } from \"../types/domain\";\nimport { RTCRtpCodecParameters } from \"./parameters\";\n\nexport class MediaStreamTrack extends EventTarget {\n readonly uuid = v4();\n /**MediaStream ID*/\n streamId?: string;\n remote = false;\n label: string;\n kind!: Kind;\n id?: string;\n /**mediaSsrc */\n ssrc?: number;\n rid?: string;\n header?: RtpHeader;\n codec?: RTCRtpCodecParameters;\n /**todo impl */\n enabled = true;\n\n readonly onReceiveRtp = new Event<[RtpPacket]>();\n readonly onReceiveRtcp = new Event<[RtcpPacket]>();\n readonly onSourceChanged = new Event<\n [Pick<RtpHeader, \"sequenceNumber\" | \"timestamp\">]\n >();\n\n stopped = false;\n muted = true;\n\n constructor(\n props: Partial<MediaStreamTrack> & Pick<MediaStreamTrack, \"kind\">\n ) {\n super();\n Object.assign(this, props);\n\n this.onReceiveRtp.subscribe((rtp) => {\n this.muted = false;\n this.header = rtp.header;\n });\n\n this.label = `${this.remote ? \"remote\" : \"local\"} ${this.kind}`;\n }\n\n stop = () => {\n this.stopped = true;\n this.muted = true;\n this.onReceiveRtp.complete();\n };\n\n writeRtp = (rtp: RtpPacket | Buffer) => {\n if (this.remote) {\n throw new Error(\"this is remoteTrack\");\n }\n if (this.stopped) {\n return;\n }\n\n const packet = Buffer.isBuffer(rtp) ? RtpPacket.deSerialize(rtp) : rtp;\n packet.header.payloadType =\n this.codec?.payloadType ?? packet.header.payloadType;\n this.onReceiveRtp.execute(packet);\n };\n}\n\nexport class MediaStream {\n id!: string;\n tracks: MediaStreamTrack[] = [];\n\n constructor(props: Partial<MediaStream> & Pick<MediaStream, \"id\">) {\n Object.assign(this, props);\n }\n\n addTrack(track: MediaStreamTrack) {\n track.streamId = this.id;\n this.tracks.push(track);\n }\n\n getTracks() {\n return this.tracks;\n }\n}\n"]}
1
+ {"version":3,"file":"track.js","sourceRoot":"","sources":["../../../../src/media/track.ts"],"names":[],"mappings":";;;;;;AAAA,sDAA4B;AAC5B,+BAA0B;AAE1B,0CAAoE;AACpE,sCAAwC;AAIxC,MAAa,gBAAiB,SAAQ,oBAAW;IAyB/C,YACE,KAAiE;QAEjE,KAAK,EAAE,CAAC;QA3BV;;;;mBAAgB,IAAA,SAAE,GAAE;WAAC;QACrB,mBAAmB;QACnB;;;;;WAAkB;QAClB;;;;mBAAS,KAAK;WAAC;QACf;;;;;WAAc;QACd;;;;;WAAY;QACZ;;;;;WAAY;QACZ,eAAe;QACf;;;;;WAAc;QACd;;;;;WAAa;QACb;;;;;WAAmB;QACnB;;;;;WAA8B;QAC9B,eAAe;QACf;;;;mBAAU,IAAI;WAAC;QAEf;;;;mBAAwB,IAAI,iBAAK,EAAe;WAAC;QACjD;;;;mBAAyB,IAAI,iBAAK,EAAgB;WAAC;QACnD;;;;mBAA2B,IAAI,iBAAK,EAEjC;WAAC;QAEJ;;;;mBAAU,KAAK;WAAC;QAChB;;;;mBAAQ,IAAI;WAAC;QAgBb;;;;mBAAO,GAAG,EAAE;gBACV,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;gBACpB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;gBAClB,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;YAC/B,CAAC;WAAC;QAEF;;;;mBAAW,CAAC,GAAuB,EAAE,EAAE;gBACrC,IAAI,IAAI,CAAC,MAAM,EAAE;oBACf,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;iBACxC;gBACD,IAAI,IAAI,CAAC,OAAO,EAAE;oBAChB,OAAO;iBACR;gBAED,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,eAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;gBACvE,MAAM,CAAC,MAAM,CAAC,WAAW;oBACvB,IAAI,CAAC,KAAK,EAAE,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;gBACvD,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACpC,CAAC;WAAC;QA5BA,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAE3B,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE;YAClC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACnB,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,KAAK,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;IAClE,CAAC;CAqBF;AA1DD,4CA0DC;AAED,MAAa,WAAW;IAItB,YAAY,KAAqD;QAHjE;;;;;WAAY;QACZ;;;;mBAA6B,EAAE;WAAC;QAG9B,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,QAAQ,CAAC,KAAuB;QAC9B,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC;QACzB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CACF;AAhBD,kCAgBC","sourcesContent":["import Event from \"rx.mini\";\nimport { v4 } from \"uuid\";\n\nimport { RtcpPacket, RtpHeader, RtpPacket } from \"../../../rtp/src\";\nimport { EventTarget } from \"../helper\";\nimport { Kind } from \"../types/domain\";\nimport { RTCRtpCodecParameters } from \"./parameters\";\n\nexport class MediaStreamTrack extends EventTarget {\n readonly uuid = v4();\n /**MediaStream ID*/\n streamId?: string;\n remote = false;\n label: string;\n kind!: Kind;\n id?: string;\n /**mediaSsrc */\n ssrc?: number;\n rid?: string;\n header?: RtpHeader;\n codec?: RTCRtpCodecParameters;\n /**todo impl */\n enabled = true;\n\n readonly onReceiveRtp = new Event<[RtpPacket]>();\n readonly onReceiveRtcp = new Event<[RtcpPacket]>();\n readonly onSourceChanged = new Event<\n [Pick<RtpHeader, \"sequenceNumber\" | \"timestamp\">]\n >();\n\n stopped = false;\n muted = true;\n\n constructor(\n props: Partial<MediaStreamTrack> & Pick<MediaStreamTrack, \"kind\">\n ) {\n super();\n Object.assign(this, props);\n\n this.onReceiveRtp.subscribe((rtp) => {\n this.muted = false;\n this.header = rtp.header;\n });\n\n this.label = `${this.remote ? \"remote\" : \"local\"} ${this.kind}`;\n }\n\n stop = () => {\n this.stopped = true;\n this.muted = true;\n this.onReceiveRtp.complete();\n };\n\n writeRtp = (rtp: RtpPacket | Buffer) => {\n if (this.remote) {\n throw new Error(\"this is remoteTrack\");\n }\n if (this.stopped) {\n return;\n }\n\n const packet = Buffer.isBuffer(rtp) ? RtpPacket.deSerialize(rtp) : rtp;\n packet.header.payloadType =\n this.codec?.payloadType ?? packet.header.payloadType;\n this.onReceiveRtp.execute(packet);\n };\n}\n\nexport class MediaStream {\n id!: string;\n tracks: MediaStreamTrack[] = [];\n\n constructor(props: Partial<MediaStream> & Pick<MediaStream, \"id\">) {\n Object.assign(this, props);\n }\n\n addTrack(track: MediaStreamTrack) {\n track.streamId = this.id;\n this.tracks.push(track);\n }\n\n getTracks() {\n return this.tracks;\n }\n}\n"]}
@@ -1,14 +1,16 @@
1
1
  import { MediaStreamTrack } from "../../media/track";
2
2
  import { MediaWriter } from "./writer";
3
3
  export declare class MediaRecorder {
4
- tracks: MediaStreamTrack[];
5
4
  path: string;
5
+ numOfTracks: number;
6
6
  options: Partial<MediaRecorderOptions>;
7
7
  writer: MediaWriter;
8
8
  ext: string;
9
- constructor(tracks: MediaStreamTrack[], path: string, options?: Partial<MediaRecorderOptions>);
10
- addTrack(track: MediaStreamTrack): void;
11
- start(): Promise<void>;
9
+ tracks: MediaStreamTrack[];
10
+ started: boolean;
11
+ constructor(path: string, numOfTracks?: number, options?: Partial<MediaRecorderOptions>);
12
+ addTrack(track: MediaStreamTrack): Promise<void>;
13
+ private start;
12
14
  stop(): Promise<void>;
13
15
  }
14
16
  export interface MediaRecorderOptions {
@@ -18,4 +20,5 @@ export interface MediaRecorderOptions {
18
20
  jitterBufferSize: number;
19
21
  waitForKeyframe: boolean;
20
22
  defaultDuration: number;
23
+ tracks: MediaStreamTrack[];
21
24
  }
@@ -3,10 +3,49 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MediaRecorder = void 0;
4
4
  const webm_1 = require("./writer/webm");
5
5
  class MediaRecorder {
6
- constructor(tracks, path, options = {}) {
7
- this.tracks = tracks;
8
- this.path = path;
9
- this.options = options;
6
+ constructor(path, numOfTracks = 1, options = {}) {
7
+ Object.defineProperty(this, "path", {
8
+ enumerable: true,
9
+ configurable: true,
10
+ writable: true,
11
+ value: path
12
+ });
13
+ Object.defineProperty(this, "numOfTracks", {
14
+ enumerable: true,
15
+ configurable: true,
16
+ writable: true,
17
+ value: numOfTracks
18
+ });
19
+ Object.defineProperty(this, "options", {
20
+ enumerable: true,
21
+ configurable: true,
22
+ writable: true,
23
+ value: options
24
+ });
25
+ Object.defineProperty(this, "writer", {
26
+ enumerable: true,
27
+ configurable: true,
28
+ writable: true,
29
+ value: void 0
30
+ });
31
+ Object.defineProperty(this, "ext", {
32
+ enumerable: true,
33
+ configurable: true,
34
+ writable: true,
35
+ value: void 0
36
+ });
37
+ Object.defineProperty(this, "tracks", {
38
+ enumerable: true,
39
+ configurable: true,
40
+ writable: true,
41
+ value: []
42
+ });
43
+ Object.defineProperty(this, "started", {
44
+ enumerable: true,
45
+ configurable: true,
46
+ writable: true,
47
+ value: false
48
+ });
10
49
  this.ext = path.split(".").slice(-1)[0];
11
50
  this.writer = (() => {
12
51
  switch (this.ext) {
@@ -16,12 +55,17 @@ class MediaRecorder {
16
55
  throw new Error();
17
56
  }
18
57
  })();
58
+ this.tracks = options.tracks ?? this.tracks;
19
59
  }
20
- addTrack(track) {
60
+ async addTrack(track) {
21
61
  this.tracks.push(track);
62
+ await this.start();
22
63
  }
23
64
  async start() {
24
- await this.writer.start(this.tracks);
65
+ if (this.tracks.length === this.numOfTracks && this.started === false) {
66
+ this.started = true;
67
+ await this.writer.start(this.tracks);
68
+ }
25
69
  }
26
70
  async stop() {
27
71
  await this.writer.stop();