werift 0.19.3 → 0.19.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (370) hide show
  1. package/lib/common/src/binary.d.ts +0 -1
  2. package/lib/common/src/binary.js +14 -14
  3. package/lib/common/src/binary.js.map +1 -1
  4. package/lib/common/src/network.d.ts +1 -2
  5. package/lib/common/src/network.js +4 -4
  6. package/lib/common/src/network.js.map +1 -1
  7. package/lib/common/src/number.js +10 -10
  8. package/lib/common/src/number.js.map +1 -1
  9. package/lib/dtls/src/cipher/create.d.ts +1 -1
  10. package/lib/dtls/src/cipher/create.js +2 -3
  11. package/lib/dtls/src/cipher/create.js.map +1 -1
  12. package/lib/dtls/src/cipher/ec.d.ts +0 -1
  13. package/lib/dtls/src/cipher/key-exchange.js +7 -7
  14. package/lib/dtls/src/cipher/key-exchange.js.map +1 -1
  15. package/lib/dtls/src/cipher/namedCurve.d.ts +1 -2
  16. package/lib/dtls/src/cipher/namedCurve.js +1 -2
  17. package/lib/dtls/src/cipher/namedCurve.js.map +1 -1
  18. package/lib/dtls/src/cipher/prf.d.ts +1 -2
  19. package/lib/dtls/src/cipher/prf.js +11 -12
  20. package/lib/dtls/src/cipher/prf.js.map +1 -1
  21. package/lib/dtls/src/cipher/suites/abstract.d.ts +1 -2
  22. package/lib/dtls/src/cipher/suites/abstract.js.map +1 -1
  23. package/lib/dtls/src/cipher/suites/aead.d.ts +1 -2
  24. package/lib/dtls/src/cipher/suites/aead.js.map +1 -1
  25. package/lib/dtls/src/client.d.ts +1 -1
  26. package/lib/dtls/src/client.js.map +1 -1
  27. package/lib/dtls/src/context/cipher.d.ts +6 -7
  28. package/lib/dtls/src/context/cipher.js +5 -3
  29. package/lib/dtls/src/context/cipher.js.map +1 -1
  30. package/lib/dtls/src/context/dtls.d.ts +5 -6
  31. package/lib/dtls/src/context/dtls.js +1 -2
  32. package/lib/dtls/src/context/dtls.js.map +1 -1
  33. package/lib/dtls/src/context/transport.d.ts +1 -2
  34. package/lib/dtls/src/context/transport.js.map +1 -1
  35. package/lib/dtls/src/flight/client/flight1.d.ts +4 -4
  36. package/lib/dtls/src/flight/client/flight1.js.map +1 -1
  37. package/lib/dtls/src/flight/client/flight3.d.ts +3 -3
  38. package/lib/dtls/src/flight/client/flight3.js +6 -0
  39. package/lib/dtls/src/flight/client/flight3.js.map +1 -1
  40. package/lib/dtls/src/flight/client/flight5.d.ts +4 -4
  41. package/lib/dtls/src/flight/client/flight5.js.map +1 -1
  42. package/lib/dtls/src/flight/flight.d.ts +3 -4
  43. package/lib/dtls/src/flight/flight.js.map +1 -1
  44. package/lib/dtls/src/flight/server/flight2.d.ts +4 -4
  45. package/lib/dtls/src/flight/server/flight2.js +9 -2
  46. package/lib/dtls/src/flight/server/flight2.js.map +1 -1
  47. package/lib/dtls/src/flight/server/flight4.d.ts +5 -5
  48. package/lib/dtls/src/flight/server/flight4.js.map +1 -1
  49. package/lib/dtls/src/flight/server/flight6.d.ts +4 -4
  50. package/lib/dtls/src/flight/server/flight6.js.map +1 -1
  51. package/lib/dtls/src/handshake/extensions/ellipticCurves.d.ts +1 -2
  52. package/lib/dtls/src/handshake/extensions/ellipticCurves.js.map +1 -1
  53. package/lib/dtls/src/handshake/extensions/renegotiationIndication.d.ts +0 -1
  54. package/lib/dtls/src/handshake/extensions/signature.d.ts +1 -2
  55. package/lib/dtls/src/handshake/extensions/signature.js.map +1 -1
  56. package/lib/dtls/src/handshake/extensions/useSrtp.d.ts +1 -2
  57. package/lib/dtls/src/handshake/extensions/useSrtp.js.map +1 -1
  58. package/lib/dtls/src/handshake/message/alert.d.ts +0 -1
  59. package/lib/dtls/src/handshake/message/alert.js.map +1 -1
  60. package/lib/dtls/src/handshake/message/certificate.d.ts +1 -2
  61. package/lib/dtls/src/handshake/message/certificate.js.map +1 -1
  62. package/lib/dtls/src/handshake/message/changeCipherSpec.d.ts +0 -1
  63. package/lib/dtls/src/handshake/message/client/certificateVerify.d.ts +2 -3
  64. package/lib/dtls/src/handshake/message/client/certificateVerify.js.map +1 -1
  65. package/lib/dtls/src/handshake/message/client/hello.d.ts +1 -2
  66. package/lib/dtls/src/handshake/message/client/hello.js.map +1 -1
  67. package/lib/dtls/src/handshake/message/client/keyExchange.d.ts +1 -2
  68. package/lib/dtls/src/handshake/message/client/keyExchange.js.map +1 -1
  69. package/lib/dtls/src/handshake/message/finished.d.ts +1 -2
  70. package/lib/dtls/src/handshake/message/finished.js.map +1 -1
  71. package/lib/dtls/src/handshake/message/server/certificateRequest.d.ts +2 -3
  72. package/lib/dtls/src/handshake/message/server/certificateRequest.js.map +1 -1
  73. package/lib/dtls/src/handshake/message/server/hello.d.ts +2 -3
  74. package/lib/dtls/src/handshake/message/server/hello.js.map +1 -1
  75. package/lib/dtls/src/handshake/message/server/helloDone.d.ts +1 -2
  76. package/lib/dtls/src/handshake/message/server/helloDone.js.map +1 -1
  77. package/lib/dtls/src/handshake/message/server/helloVerifyRequest.d.ts +1 -2
  78. package/lib/dtls/src/handshake/message/server/helloVerifyRequest.js.map +1 -1
  79. package/lib/dtls/src/handshake/message/server/keyExchange.d.ts +2 -3
  80. package/lib/dtls/src/handshake/message/server/keyExchange.js.map +1 -1
  81. package/lib/dtls/src/handshake/random.d.ts +0 -1
  82. package/lib/dtls/src/helper.d.ts +0 -1
  83. package/lib/dtls/src/helper.js +3 -3
  84. package/lib/dtls/src/helper.js.map +1 -1
  85. package/lib/dtls/src/record/builder.d.ts +2 -3
  86. package/lib/dtls/src/record/builder.js +2 -4
  87. package/lib/dtls/src/record/builder.js.map +1 -1
  88. package/lib/dtls/src/record/message/fragment.d.ts +1 -2
  89. package/lib/dtls/src/record/message/fragment.js.map +1 -1
  90. package/lib/dtls/src/record/message/header.d.ts +0 -1
  91. package/lib/dtls/src/record/message/plaintext.d.ts +0 -1
  92. package/lib/dtls/src/record/receive.d.ts +2 -3
  93. package/lib/dtls/src/record/receive.js.map +1 -1
  94. package/lib/dtls/src/server.d.ts +1 -1
  95. package/lib/dtls/src/server.js.map +1 -1
  96. package/lib/dtls/src/socket.d.ts +5 -6
  97. package/lib/dtls/src/socket.js +17 -23
  98. package/lib/dtls/src/socket.js.map +1 -1
  99. package/lib/dtls/src/transport.d.ts +1 -3
  100. package/lib/dtls/src/transport.js.map +1 -1
  101. package/lib/dtls/src/typings/domain.d.ts +2 -3
  102. package/lib/dtls/src/typings/domain.js.map +1 -1
  103. package/lib/dtls/src/util/binary.d.ts +0 -1
  104. package/lib/dtls/src/util/binary.js +1 -2
  105. package/lib/dtls/src/util/binary.js.map +1 -1
  106. package/lib/ice/src/candidate.js +3 -3
  107. package/lib/ice/src/candidate.js.map +1 -1
  108. package/lib/ice/src/dns/lookup.d.ts +1 -1
  109. package/lib/ice/src/dns/lookup.js +1 -0
  110. package/lib/ice/src/dns/lookup.js.map +1 -1
  111. package/lib/ice/src/exceptions.js.map +1 -1
  112. package/lib/ice/src/helper.d.ts +0 -1
  113. package/lib/ice/src/helper.js +5 -5
  114. package/lib/ice/src/helper.js.map +1 -1
  115. package/lib/ice/src/ice.d.ts +3 -2
  116. package/lib/ice/src/ice.js +25 -16
  117. package/lib/ice/src/ice.js.map +1 -1
  118. package/lib/ice/src/stun/attributes.d.ts +0 -1
  119. package/lib/ice/src/stun/attributes.js +5 -5
  120. package/lib/ice/src/stun/attributes.js.map +1 -1
  121. package/lib/ice/src/stun/message.d.ts +0 -1
  122. package/lib/ice/src/stun/message.js +2 -2
  123. package/lib/ice/src/stun/message.js.map +1 -1
  124. package/lib/ice/src/stun/protocol.d.ts +0 -1
  125. package/lib/ice/src/stun/transaction.d.ts +1 -1
  126. package/lib/ice/src/transport.d.ts +1 -4
  127. package/lib/ice/src/turn/protocol.d.ts +1 -2
  128. package/lib/ice/src/turn/protocol.js +5 -4
  129. package/lib/ice/src/turn/protocol.js.map +1 -1
  130. package/lib/ice/src/types/model.d.ts +0 -1
  131. package/lib/ice/src/utils.js +3 -4
  132. package/lib/ice/src/utils.js.map +1 -1
  133. package/lib/rtp/src/codec/av1.d.ts +1 -2
  134. package/lib/rtp/src/codec/av1.js +2 -2
  135. package/lib/rtp/src/codec/av1.js.map +1 -1
  136. package/lib/rtp/src/codec/base.d.ts +1 -2
  137. package/lib/rtp/src/codec/base.js.map +1 -1
  138. package/lib/rtp/src/codec/h264.d.ts +2 -3
  139. package/lib/rtp/src/codec/h264.js.map +1 -1
  140. package/lib/rtp/src/codec/index.d.ts +1 -2
  141. package/lib/rtp/src/codec/index.js +2 -2
  142. package/lib/rtp/src/codec/index.js.map +1 -1
  143. package/lib/rtp/src/codec/opus.d.ts +2 -3
  144. package/lib/rtp/src/codec/opus.js.map +1 -1
  145. package/lib/rtp/src/codec/vp8.d.ts +2 -3
  146. package/lib/rtp/src/codec/vp8.js +1 -1
  147. package/lib/rtp/src/codec/vp8.js.map +1 -1
  148. package/lib/rtp/src/codec/vp9.d.ts +2 -3
  149. package/lib/rtp/src/codec/vp9.js +1 -1
  150. package/lib/rtp/src/codec/vp9.js.map +1 -1
  151. package/lib/rtp/src/extra/container/mp4/h264.d.ts +0 -1
  152. package/lib/rtp/src/extra/container/mp4/h264.js +2 -2
  153. package/lib/rtp/src/extra/container/mp4/h264.js.map +1 -1
  154. package/lib/rtp/src/extra/container/mp4/mp4box.d.ts +1 -1
  155. package/lib/rtp/src/extra/container/mp4/mp4box.js +3 -3
  156. package/lib/rtp/src/extra/container/mp4/mp4box.js.map +1 -1
  157. package/lib/rtp/src/extra/container/ogg/parser.d.ts +0 -1
  158. package/lib/rtp/src/extra/container/webm/container.d.ts +0 -1
  159. package/lib/rtp/src/extra/container/webm/container.js +2 -3
  160. package/lib/rtp/src/extra/container/webm/container.js.map +1 -1
  161. package/lib/rtp/src/extra/container/webm/ebml/typedArrayUtils.js +2 -2
  162. package/lib/rtp/src/extra/container/webm/ebml/typedArrayUtils.js.map +1 -1
  163. package/lib/rtp/src/extra/processor/depacketizer.d.ts +2 -3
  164. package/lib/rtp/src/extra/processor/depacketizer.js.map +1 -1
  165. package/lib/rtp/src/extra/processor/depacketizerCallback.d.ts +1 -1
  166. package/lib/rtp/src/extra/processor/depacketizerCallback.js.map +1 -1
  167. package/lib/rtp/src/extra/processor/depacketizerTransformer.d.ts +2 -3
  168. package/lib/rtp/src/extra/processor/depacketizerTransformer.js.map +1 -1
  169. package/lib/rtp/src/extra/processor/dtx.d.ts +2 -3
  170. package/lib/rtp/src/extra/processor/dtx.js.map +1 -1
  171. package/lib/rtp/src/extra/processor/dtxCallback.js.map +1 -1
  172. package/lib/rtp/src/extra/processor/interface.d.ts +2 -2
  173. package/lib/rtp/src/extra/processor/jitterBuffer.d.ts +2 -2
  174. package/lib/rtp/src/extra/processor/jitterBuffer.js.map +1 -1
  175. package/lib/rtp/src/extra/processor/jitterBufferCallback.d.ts +1 -1
  176. package/lib/rtp/src/extra/processor/jitterBufferCallback.js.map +1 -1
  177. package/lib/rtp/src/extra/processor/jitterBufferTransformer.d.ts +1 -2
  178. package/lib/rtp/src/extra/processor/jitterBufferTransformer.js.map +1 -1
  179. package/lib/rtp/src/extra/processor/lipsync.d.ts +3 -4
  180. package/lib/rtp/src/extra/processor/lipsync.js +2 -2
  181. package/lib/rtp/src/extra/processor/lipsync.js.map +1 -1
  182. package/lib/rtp/src/extra/processor/lipsyncCallback.d.ts +1 -1
  183. package/lib/rtp/src/extra/processor/lipsyncCallback.js.map +1 -1
  184. package/lib/rtp/src/extra/processor/mp4.d.ts +2 -3
  185. package/lib/rtp/src/extra/processor/mp4.js.map +1 -1
  186. package/lib/rtp/src/extra/processor/mp4Callback.d.ts +2 -2
  187. package/lib/rtp/src/extra/processor/mp4Callback.js.map +1 -1
  188. package/lib/rtp/src/extra/processor/mute.d.ts +2 -3
  189. package/lib/rtp/src/extra/processor/mute.js.map +1 -1
  190. package/lib/rtp/src/extra/processor/muteCallback.d.ts +2 -2
  191. package/lib/rtp/src/extra/processor/muteCallback.js.map +1 -1
  192. package/lib/rtp/src/extra/processor/nack.d.ts +2 -2
  193. package/lib/rtp/src/extra/processor/nack.js.map +1 -1
  194. package/lib/rtp/src/extra/processor/nackHandlerCallback.js.map +1 -1
  195. package/lib/rtp/src/extra/processor/ntpTime.d.ts +2 -2
  196. package/lib/rtp/src/extra/processor/ntpTime.js.map +1 -1
  197. package/lib/rtp/src/extra/processor/ntpTimeCallback.d.ts +1 -1
  198. package/lib/rtp/src/extra/processor/ntpTimeCallback.js.map +1 -1
  199. package/lib/rtp/src/extra/processor/rtcpCallback.d.ts +2 -2
  200. package/lib/rtp/src/extra/processor/rtcpCallback.js.map +1 -1
  201. package/lib/rtp/src/extra/processor/rtpCallback.d.ts +1 -2
  202. package/lib/rtp/src/extra/processor/rtpCallback.js.map +1 -1
  203. package/lib/rtp/src/extra/processor/rtpStream.d.ts +2 -4
  204. package/lib/rtp/src/extra/processor/rtpStream.js.map +1 -1
  205. package/lib/rtp/src/extra/processor/rtpTime.d.ts +2 -2
  206. package/lib/rtp/src/extra/processor/rtpTime.js.map +1 -1
  207. package/lib/rtp/src/extra/processor/rtpTimeCallback.d.ts +1 -1
  208. package/lib/rtp/src/extra/processor/rtpTimeCallback.js.map +1 -1
  209. package/lib/rtp/src/extra/processor/webm.d.ts +2 -3
  210. package/lib/rtp/src/extra/processor/webm.js +2 -2
  211. package/lib/rtp/src/extra/processor/webm.js.map +1 -1
  212. package/lib/rtp/src/extra/processor/webmCallback.d.ts +2 -2
  213. package/lib/rtp/src/extra/processor/webmCallback.js.map +1 -1
  214. package/lib/rtp/src/extra/processor/webmStream.d.ts +2 -3
  215. package/lib/rtp/src/extra/processor/webmStream.js.map +1 -1
  216. package/lib/rtp/src/helper.d.ts +0 -1
  217. package/lib/rtp/src/helper.js +6 -6
  218. package/lib/rtp/src/helper.js.map +1 -1
  219. package/lib/rtp/src/index.d.ts +0 -1
  220. package/lib/rtp/src/rtcp/header.d.ts +0 -1
  221. package/lib/rtp/src/rtcp/psfb/fullIntraRequest.d.ts +0 -1
  222. package/lib/rtp/src/rtcp/psfb/index.d.ts +1 -2
  223. package/lib/rtp/src/rtcp/psfb/index.js.map +1 -1
  224. package/lib/rtp/src/rtcp/psfb/pictureLossIndication.d.ts +0 -1
  225. package/lib/rtp/src/rtcp/psfb/remb.d.ts +0 -1
  226. package/lib/rtp/src/rtcp/rr.d.ts +0 -1
  227. package/lib/rtp/src/rtcp/rtcp.d.ts +0 -1
  228. package/lib/rtp/src/rtcp/rtcp.js +2 -2
  229. package/lib/rtp/src/rtcp/rtcp.js.map +1 -1
  230. package/lib/rtp/src/rtcp/rtpfb/index.d.ts +1 -2
  231. package/lib/rtp/src/rtcp/rtpfb/index.js.map +1 -1
  232. package/lib/rtp/src/rtcp/rtpfb/nack.d.ts +0 -1
  233. package/lib/rtp/src/rtcp/rtpfb/twcc.d.ts +0 -1
  234. package/lib/rtp/src/rtcp/rtpfb/twcc.js +1 -2
  235. package/lib/rtp/src/rtcp/rtpfb/twcc.js.map +1 -1
  236. package/lib/rtp/src/rtcp/sdes.d.ts +1 -2
  237. package/lib/rtp/src/rtcp/sdes.js.map +1 -1
  238. package/lib/rtp/src/rtcp/sr.d.ts +0 -1
  239. package/lib/rtp/src/rtp/headerExtension.d.ts +1 -2
  240. package/lib/rtp/src/rtp/headerExtension.js +12 -12
  241. package/lib/rtp/src/rtp/headerExtension.js.map +1 -1
  242. package/lib/rtp/src/rtp/red/encoder.d.ts +0 -1
  243. package/lib/rtp/src/rtp/red/handler.d.ts +1 -1
  244. package/lib/rtp/src/rtp/red/handler.js.map +1 -1
  245. package/lib/rtp/src/rtp/red/packet.d.ts +0 -1
  246. package/lib/rtp/src/rtp/rtp.d.ts +0 -1
  247. package/lib/rtp/src/rtp/rtp.js.map +1 -1
  248. package/lib/rtp/src/rtp/rtx.js +2 -3
  249. package/lib/rtp/src/rtp/rtx.js.map +1 -1
  250. package/lib/rtp/src/srtp/cipher/ctr.d.ts +0 -1
  251. package/lib/rtp/src/srtp/cipher/gcm.d.ts +0 -1
  252. package/lib/rtp/src/srtp/cipher/index.d.ts +2 -3
  253. package/lib/rtp/src/srtp/cipher/index.js.map +1 -1
  254. package/lib/rtp/src/srtp/context/context.d.ts +3 -5
  255. package/lib/rtp/src/srtp/context/context.js.map +1 -1
  256. package/lib/rtp/src/srtp/context/srtcp.d.ts +2 -3
  257. package/lib/rtp/src/srtp/context/srtcp.js.map +1 -1
  258. package/lib/rtp/src/srtp/context/srtp.d.ts +1 -2
  259. package/lib/rtp/src/srtp/context/srtp.js.map +1 -1
  260. package/lib/rtp/src/srtp/session.d.ts +1 -2
  261. package/lib/rtp/src/srtp/session.js.map +1 -1
  262. package/lib/rtp/src/srtp/srtcp.d.ts +1 -2
  263. package/lib/rtp/src/srtp/srtcp.js.map +1 -1
  264. package/lib/rtp/src/srtp/srtp.d.ts +2 -3
  265. package/lib/rtp/src/srtp/srtp.js.map +1 -1
  266. package/lib/rtp/src/util.d.ts +0 -1
  267. package/lib/sctp/src/chunk.d.ts +0 -1
  268. package/lib/sctp/src/chunk.js +4 -4
  269. package/lib/sctp/src/chunk.js.map +1 -1
  270. package/lib/sctp/src/helper.js +2 -3
  271. package/lib/sctp/src/helper.js.map +1 -1
  272. package/lib/sctp/src/param.d.ts +0 -1
  273. package/lib/sctp/src/param.js.map +1 -1
  274. package/lib/sctp/src/sctp.d.ts +5 -6
  275. package/lib/sctp/src/sctp.js.map +1 -1
  276. package/lib/sctp/src/transport.d.ts +1 -3
  277. package/lib/sctp/src/transport.js.map +1 -1
  278. package/lib/webrtc/src/const.d.ts +1 -1
  279. package/lib/webrtc/src/const.js.map +1 -1
  280. package/lib/webrtc/src/dataChannel.d.ts +2 -3
  281. package/lib/webrtc/src/dataChannel.js.map +1 -1
  282. package/lib/webrtc/src/helper.d.ts +0 -1
  283. package/lib/webrtc/src/helper.js +3 -3
  284. package/lib/webrtc/src/helper.js.map +1 -1
  285. package/lib/webrtc/src/media/extension/rtcpFeedback.d.ts +1 -1
  286. package/lib/webrtc/src/media/extension/rtcpFeedback.js.map +1 -1
  287. package/lib/webrtc/src/media/extension/rtpExtension.js +7 -8
  288. package/lib/webrtc/src/media/extension/rtpExtension.js.map +1 -1
  289. package/lib/webrtc/src/media/parameters.d.ts +1 -1
  290. package/lib/webrtc/src/media/parameters.js.map +1 -1
  291. package/lib/webrtc/src/media/receiver/nack.d.ts +2 -2
  292. package/lib/webrtc/src/media/receiver/nack.js.map +1 -1
  293. package/lib/webrtc/src/media/receiver/receiverTwcc.d.ts +1 -1
  294. package/lib/webrtc/src/media/receiver/receiverTwcc.js.map +1 -1
  295. package/lib/webrtc/src/media/receiver/statistics.d.ts +1 -1
  296. package/lib/webrtc/src/media/receiver/statistics.js.map +1 -1
  297. package/lib/webrtc/src/media/router.d.ts +4 -4
  298. package/lib/webrtc/src/media/router.js.map +1 -1
  299. package/lib/webrtc/src/media/rtpReceiver.d.ts +7 -7
  300. package/lib/webrtc/src/media/rtpReceiver.js.map +1 -1
  301. package/lib/webrtc/src/media/rtpSender.d.ts +5 -6
  302. package/lib/webrtc/src/media/rtpSender.js.map +1 -1
  303. package/lib/webrtc/src/media/rtpTransceiver.d.ts +6 -6
  304. package/lib/webrtc/src/media/rtpTransceiver.js.map +1 -1
  305. package/lib/webrtc/src/media/sender/senderBWE.d.ts +1 -1
  306. package/lib/webrtc/src/media/sender/senderBWE.js.map +1 -1
  307. package/lib/webrtc/src/media/track.d.ts +6 -5
  308. package/lib/webrtc/src/media/track.js +14 -1
  309. package/lib/webrtc/src/media/track.js.map +1 -1
  310. package/lib/webrtc/src/nonstandard/index.d.ts +2 -0
  311. package/lib/webrtc/src/nonstandard/index.js +2 -0
  312. package/lib/webrtc/src/nonstandard/index.js.map +1 -1
  313. package/lib/webrtc/src/nonstandard/navigator.d.ts +73 -0
  314. package/lib/webrtc/src/nonstandard/navigator.js +88 -0
  315. package/lib/webrtc/src/nonstandard/navigator.js.map +1 -0
  316. package/lib/webrtc/src/nonstandard/recorder/index.d.ts +23 -7
  317. package/lib/webrtc/src/nonstandard/recorder/index.js +30 -27
  318. package/lib/webrtc/src/nonstandard/recorder/index.js.map +1 -1
  319. package/lib/webrtc/src/nonstandard/recorder/writer/index.d.ts +17 -5
  320. package/lib/webrtc/src/nonstandard/recorder/writer/index.js +3 -9
  321. package/lib/webrtc/src/nonstandard/recorder/writer/index.js.map +1 -1
  322. package/lib/webrtc/src/nonstandard/recorder/writer/webm.d.ts +1 -1
  323. package/lib/webrtc/src/nonstandard/recorder/writer/webm.js +23 -12
  324. package/lib/webrtc/src/nonstandard/recorder/writer/webm.js.map +1 -1
  325. package/lib/webrtc/src/nonstandard/userMedia.d.ts +4 -5
  326. package/lib/webrtc/src/nonstandard/userMedia.js.map +1 -1
  327. package/lib/webrtc/src/peerConnection.d.ts +10 -10
  328. package/lib/webrtc/src/peerConnection.js +15 -21
  329. package/lib/webrtc/src/peerConnection.js.map +1 -1
  330. package/lib/webrtc/src/sdp.d.ts +4 -4
  331. package/lib/webrtc/src/sdp.js +21 -21
  332. package/lib/webrtc/src/sdp.js.map +1 -1
  333. package/lib/webrtc/src/transport/dtls.d.ts +8 -8
  334. package/lib/webrtc/src/transport/dtls.js +16 -3
  335. package/lib/webrtc/src/transport/dtls.js.map +1 -1
  336. package/lib/webrtc/src/transport/ice.d.ts +1 -1
  337. package/lib/webrtc/src/transport/ice.js +3 -3
  338. package/lib/webrtc/src/transport/ice.js.map +1 -1
  339. package/lib/webrtc/src/transport/sctp.d.ts +1 -2
  340. package/lib/webrtc/src/transport/sctp.js +1 -1
  341. package/lib/webrtc/src/transport/sctp.js.map +1 -1
  342. package/lib/webrtc/src/utils.d.ts +5 -5
  343. package/lib/webrtc/src/utils.js +16 -10
  344. package/lib/webrtc/src/utils.js.map +1 -1
  345. package/package.json +12 -8
  346. package/src/const.ts +1 -1
  347. package/src/dataChannel.ts +2 -2
  348. package/src/media/extension/rtcpFeedback.ts +1 -1
  349. package/src/media/parameters.ts +1 -1
  350. package/src/media/receiver/nack.ts +9 -6
  351. package/src/media/receiver/receiverTwcc.ts +3 -3
  352. package/src/media/receiver/statistics.ts +1 -1
  353. package/src/media/router.ts +45 -39
  354. package/src/media/rtpReceiver.ts +30 -19
  355. package/src/media/rtpSender.ts +84 -71
  356. package/src/media/rtpTransceiver.ts +6 -6
  357. package/src/media/sender/senderBWE.ts +1 -1
  358. package/src/media/track.ts +19 -5
  359. package/src/nonstandard/index.ts +2 -0
  360. package/src/nonstandard/navigator.ts +118 -0
  361. package/src/nonstandard/recorder/index.ts +47 -19
  362. package/src/nonstandard/recorder/writer/index.ts +7 -4
  363. package/src/nonstandard/recorder/writer/webm.ts +25 -14
  364. package/src/nonstandard/userMedia.ts +1 -1
  365. package/src/peerConnection.ts +43 -51
  366. package/src/sdp.ts +108 -94
  367. package/src/transport/dtls.ts +28 -14
  368. package/src/transport/ice.ts +1 -1
  369. package/src/transport/sctp.ts +75 -67
  370. package/src/utils.ts +13 -6
@@ -1 +1 @@
1
- {"version":3,"file":"webm.js","sourceRoot":"","sources":["../../../../../../src/nonstandard/recorder/writer/webm.ts"],"names":[],"mappings":"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","sourcesContent":["import { unlink } from \"fs/promises\";\nimport { EventDisposer } from \"rx.mini\";\n\nimport { MediaWriter } from \".\";\nimport { MediaStreamTrack, WeriftError } from \"../../..\";\nimport {\n DepacketizeCallback,\n JitterBufferCallback,\n LipsyncCallback,\n NtpTimeCallback,\n RtcpSourceCallback,\n RtpSourceCallback,\n SupportedCodec,\n WebmCallback,\n saveToFileSystem,\n} from \"../../../../../rtp/src/extra\";\n\nconst sourcePath = \"packages/webrtc/src/nonstandard/recorder/writer/webm.ts\";\n\nexport class WebmFactory extends MediaWriter {\n rtpSources: RtpSourceCallback[] = [];\n\n unSubscribers = new EventDisposer();\n\n async start(tracks: MediaStreamTrack[]) {\n await unlink(this.path).catch((e) => e);\n\n const inputTracks = tracks.map((track, i) => {\n const trackNumber = i + 1;\n const payloadType = track.codec!.payloadType;\n\n if (track.kind === \"video\") {\n const codec = ((): SupportedCodec => {\n switch (track.codec?.name.toLowerCase() as SupportedVideoCodec) {\n case \"vp8\":\n return \"VP8\";\n case \"vp9\":\n return \"VP9\";\n case \"h264\":\n return \"MPEG4/ISO/AVC\";\n case \"av1x\":\n return \"AV1\";\n default:\n throw new WeriftError({\n message: \"unsupported codec\",\n payload: { track, path: sourcePath },\n });\n }\n })();\n return {\n kind: \"video\" as const,\n codec,\n clockRate: 90000,\n trackNumber,\n width: this.options.width,\n height: this.options.height,\n payloadType,\n track,\n };\n } else {\n return {\n kind: \"audio\" as const,\n codec: \"OPUS\" as const,\n clockRate: 48000,\n trackNumber,\n payloadType,\n track,\n };\n }\n });\n\n const webm = new WebmCallback(inputTracks, {\n duration: this.options.defaultDuration ?? 1000 * 60 * 60 * 24,\n });\n const lipsync = new LipsyncCallback();\n\n this.rtpSources = inputTracks.map(({ track, clockRate, codec }) => {\n const rtpSource = new RtpSourceCallback();\n const rtcpSource = new RtcpSourceCallback();\n track.onReceiveRtp\n .subscribe((rtp) => {\n rtpSource.input(rtp.clone());\n })\n .disposer(this.unSubscribers);\n track.onReceiveRtcp\n .subscribe((rtcp) => {\n rtcpSource.input(rtcp);\n })\n .disposer(this.unSubscribers);\n const ntpTime = new NtpTimeCallback(clockRate);\n\n if (track.kind === \"video\") {\n const depacketizer = new DepacketizeCallback(codec, {\n isFinalPacketInSequence: (h) => h.marker,\n });\n const jitterBuffer = new JitterBufferCallback(clockRate);\n\n rtpSource.pipe(jitterBuffer.input);\n rtcpSource.pipe(ntpTime.input);\n\n jitterBuffer.pipe(ntpTime.input);\n ntpTime.pipe(depacketizer.input);\n depacketizer.pipe(lipsync.inputVideo);\n lipsync.pipeVideo(webm.inputVideo);\n } else {\n const depacketizer = new DepacketizeCallback(codec);\n\n rtpSource.pipe(ntpTime.input);\n rtcpSource.pipe(ntpTime.input);\n\n ntpTime.pipe(depacketizer.input);\n depacketizer.pipe(lipsync.inputAudio);\n lipsync.pipeAudio(webm.inputAudio);\n }\n\n return rtpSource;\n });\n webm.pipe(saveToFileSystem(this.path));\n }\n\n async stop() {\n await Promise.all(this.rtpSources.map((r) => r.stop()));\n this.unSubscribers.dispose();\n }\n}\n\nconst supportedVideoCodecs = [\"h264\", \"vp8\", \"vp9\", \"av1x\"] as const;\ntype SupportedVideoCodec = (typeof supportedVideoCodecs)[number];\n"]}
1
+ {"version":3,"file":"webm.js","sourceRoot":"","sources":["../../../../../../src/nonstandard/recorder/writer/webm.ts"],"names":[],"mappings":";;;AAAA,0CAAqC;AACrC,qCAAwC;AAExC,wBAAgC;AAChC,gCAA8D;AAC9D,wDAWsC;AAEtC,MAAM,UAAU,GAAG,yDAAyD,CAAC;AAE7E,MAAa,WAAY,SAAQ,cAAW;IAA5C;;QACE;;;;mBAAkC,EAAE;WAAC;QAErC;;;;mBAAgB,IAAI,uBAAa,EAAE;WAAC;IAgHtC,CAAC;IA9GC,KAAK,CAAC,KAAK,CAAC,MAA0B;QACpC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YACpB,MAAM,IAAA,iBAAM,EAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAChD,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;YAC1C,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC;YAC1B,MAAM,WAAW,GAAG,KAAK,CAAC,KAAM,CAAC,WAAW,CAAC;YAE7C,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC3B,MAAM,KAAK,GAAG,CAAC,GAAmB,EAAE;oBAClC,QAAQ,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAyB,EAAE,CAAC;wBAC/D,KAAK,KAAK;4BACR,OAAO,KAAK,CAAC;wBACf,KAAK,KAAK;4BACR,OAAO,KAAK,CAAC;wBACf,KAAK,MAAM;4BACT,OAAO,eAAe,CAAC;wBACzB,KAAK,MAAM;4BACT,OAAO,KAAK,CAAC;wBACf;4BACE,MAAM,IAAI,eAAW,CAAC;gCACpB,OAAO,EAAE,mBAAmB;gCAC5B,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE;6BACrC,CAAC,CAAC;oBACP,CAAC;gBACH,CAAC,CAAC,EAAE,CAAC;gBACL,OAAO;oBACL,IAAI,EAAE,OAAgB;oBACtB,KAAK;oBACL,SAAS,EAAE,KAAK;oBAChB,WAAW;oBACX,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,GAAG;oBAC9B,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,GAAG;oBAChC,WAAW;oBACX,KAAK;iBACN,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO;oBACL,IAAI,EAAE,OAAgB;oBACtB,KAAK,EAAE,MAAe;oBACtB,SAAS,EAAE,KAAK;oBAChB,WAAW;oBACX,WAAW;oBACX,KAAK;iBACN,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,IAAI,oBAAY,CAAC,WAAW,EAAE;YACzC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,eAAe,IAAI,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;SAC5D,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,uBAAe,EAAE,CAAC;QAEtC,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE;YAChE,MAAM,SAAS,GAAG,IAAI,yBAAiB,EAAE,CAAC;YAC1C,MAAM,UAAU,GAAG,IAAI,0BAAkB,EAAE,CAAC;YAC5C,KAAK,CAAC,YAAY;iBACf,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE;gBACjB,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;YAC/B,CAAC,CAAC;iBACD,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAChC,KAAK,CAAC,aAAa;iBAChB,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE;gBAClB,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACzB,CAAC,CAAC;iBACD,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAChC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU;gBAChC,CAAC,CAAC,IAAI,uBAAe,CAAC,SAAS,CAAC;gBAChC,CAAC,CAAC,IAAI,uBAAe,CAAC,SAAS,CAAC,CAAC;YAEnC,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC3B,MAAM,YAAY,GAAG,IAAI,2BAAmB,CAAC,KAAK,EAAE;oBAClD,uBAAuB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM;iBACzC,CAAC,CAAC;gBACH,MAAM,YAAY,GAAG,IAAI,4BAAoB,CAAC,SAAS,CAAC,CAAC;gBAEzD,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;gBACnC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAE5B,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC9B,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;gBAC9B,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;gBACtC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACrC,CAAC;iBAAM,CAAC;gBACN,MAAM,YAAY,GAAG,IAAI,2BAAmB,CAAC,KAAK,CAAC,CAAC;gBAEpD,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC3B,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAE5B,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;gBAC9B,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;gBACtC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACrC,CAAC;YAED,OAAO,SAAS,CAAC;QACnB,CAAC,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YACpB,IAAI,CAAC,IAAI,CAAC,IAAA,wBAAgB,EAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/C,CAAC;aAAM,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;gBACpB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC7B,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACxD,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;IAC/B,CAAC;CACF;AAnHD,kCAmHC;AAED,MAAM,oBAAoB,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAU,CAAC","sourcesContent":["import { unlink } from \"fs/promises\";\nimport { EventDisposer } from \"rx.mini\";\n\nimport { MediaWriter } from \".\";\nimport { type MediaStreamTrack, WeriftError } from \"../../..\";\nimport {\n DepacketizeCallback,\n JitterBufferCallback,\n LipsyncCallback,\n NtpTimeCallback,\n RtcpSourceCallback,\n RtpSourceCallback,\n RtpTimeCallback,\n type SupportedCodec,\n WebmCallback,\n saveToFileSystem,\n} from \"../../../../../rtp/src/extra\";\n\nconst sourcePath = \"packages/webrtc/src/nonstandard/recorder/writer/webm.ts\";\n\nexport class WebmFactory extends MediaWriter {\n rtpSources: RtpSourceCallback[] = [];\n\n unSubscribers = new EventDisposer();\n\n async start(tracks: MediaStreamTrack[]) {\n if (this.props.path) {\n await unlink(this.props.path).catch((e) => e);\n }\n\n const inputTracks = tracks.map((track, i) => {\n const trackNumber = i + 1;\n const payloadType = track.codec!.payloadType;\n\n if (track.kind === \"video\") {\n const codec = ((): SupportedCodec => {\n switch (track.codec?.name.toLowerCase() as SupportedVideoCodec) {\n case \"vp8\":\n return \"VP8\";\n case \"vp9\":\n return \"VP9\";\n case \"h264\":\n return \"MPEG4/ISO/AVC\";\n case \"av1x\":\n return \"AV1\";\n default:\n throw new WeriftError({\n message: \"unsupported codec\",\n payload: { track, path: sourcePath },\n });\n }\n })();\n return {\n kind: \"video\" as const,\n codec,\n clockRate: 90000,\n trackNumber,\n width: this.props.width ?? 640,\n height: this.props.height ?? 360,\n payloadType,\n track,\n };\n } else {\n return {\n kind: \"audio\" as const,\n codec: \"OPUS\" as const,\n clockRate: 48000,\n trackNumber,\n payloadType,\n track,\n };\n }\n });\n\n const webm = new WebmCallback(inputTracks, {\n duration: this.props.defaultDuration ?? 1000 * 60 * 60 * 24,\n });\n const lipsync = new LipsyncCallback();\n\n this.rtpSources = inputTracks.map(({ track, clockRate, codec }) => {\n const rtpSource = new RtpSourceCallback();\n const rtcpSource = new RtcpSourceCallback();\n track.onReceiveRtp\n .subscribe((rtp) => {\n rtpSource.input(rtp.clone());\n })\n .disposer(this.unSubscribers);\n track.onReceiveRtcp\n .subscribe((rtcp) => {\n rtcpSource.input(rtcp);\n })\n .disposer(this.unSubscribers);\n const time = this.props.disableNtp\n ? new RtpTimeCallback(clockRate)\n : new NtpTimeCallback(clockRate);\n\n if (track.kind === \"video\") {\n const depacketizer = new DepacketizeCallback(codec, {\n isFinalPacketInSequence: (h) => h.marker,\n });\n const jitterBuffer = new JitterBufferCallback(clockRate);\n\n rtpSource.pipe(jitterBuffer.input);\n rtcpSource.pipe(time.input);\n\n jitterBuffer.pipe(time.input);\n time.pipe(depacketizer.input);\n depacketizer.pipe(lipsync.inputVideo);\n lipsync.pipeVideo(webm.inputVideo);\n } else {\n const depacketizer = new DepacketizeCallback(codec);\n\n rtpSource.pipe(time.input);\n rtcpSource.pipe(time.input);\n\n time.pipe(depacketizer.input);\n depacketizer.pipe(lipsync.inputAudio);\n lipsync.pipeAudio(webm.inputAudio);\n }\n\n return rtpSource;\n });\n if (this.props.path) {\n webm.pipe(saveToFileSystem(this.props.path));\n } else if (this.props.stream) {\n webm.pipe(async (o) => {\n this.props.stream.write(o);\n });\n }\n }\n\n async stop() {\n await Promise.all(this.rtpSources.map((r) => r.stop()));\n this.unSubscribers.dispose();\n }\n}\n\nconst supportedVideoCodecs = [\"h264\", \"vp8\", \"vp9\", \"av1x\"] as const;\ntype SupportedVideoCodec = (typeof supportedVideoCodecs)[number];\n"]}
@@ -1,11 +1,10 @@
1
- /// <reference types="node" />
2
- import { ChildProcess } from "child_process";
1
+ import { type ChildProcess } from "child_process";
3
2
  import { MediaStreamTrack } from "../media/track";
4
3
  export declare const getUserMedia: ({ path, loop, width, height, }: {
5
4
  path: string;
6
- loop?: boolean | undefined;
7
- width?: number | undefined;
8
- height?: number | undefined;
5
+ loop?: boolean;
6
+ width?: number;
7
+ height?: number;
9
8
  }) => Promise<MediaPlayerMp4 | MediaPlayerWebm>;
10
9
  declare abstract class MediaPlayer {
11
10
  protected props: {
@@ -1 +1 @@
1
- {"version":3,"file":"userMedia.js","sourceRoot":"","sources":["../../../../src/nonstandard/userMedia.ts"],"names":[],"mappings":"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","sourcesContent":["import { ChildProcess, exec } from \"child_process\";\nimport { createSocket } from \"dgram\";\nimport { setImmediate } from \"timers/promises\";\nimport { v4 } from \"uuid\";\n\nimport { randomPort } from \"../../../common/src\";\nimport { RtpPacket } from \"../../../rtp/src\";\nimport { MediaStreamTrack } from \"../media/track\";\n\nexport const getUserMedia = async ({\n path,\n loop,\n width,\n height,\n}: {\n path: string;\n loop?: boolean;\n width?: number;\n height?: number;\n}) => {\n const audioPort = await randomPort();\n const videoPort = await randomPort();\n\n if (path.endsWith(\".mp4\")) {\n return new MediaPlayerMp4({\n audioPort,\n videoPort,\n path,\n loop,\n width,\n height,\n });\n } else {\n return new MediaPlayerWebm({\n audioPort,\n videoPort,\n path,\n loop,\n width,\n height,\n });\n }\n};\n\nabstract class MediaPlayer {\n protected streamId = v4();\n audio = new MediaStreamTrack({ kind: \"audio\", streamId: this.streamId });\n video = new MediaStreamTrack({ kind: \"video\", streamId: this.streamId });\n protected process!: ChildProcess;\n stopped = false;\n\n constructor(\n protected props: {\n videoPort: number;\n audioPort: number;\n path: string;\n loop?: boolean;\n width?: number;\n height?: number;\n },\n ) {\n this.setupTrack(props.audioPort, this.audio);\n this.setupTrack(props.videoPort, this.video);\n }\n\n private setupTrack = (port: number, track: MediaStreamTrack) => {\n let payloadType = 0;\n\n const socket = createSocket(\"udp4\");\n socket.bind(port);\n socket.on(\"message\", async (buf) => {\n const rtp = RtpPacket.deSerialize(buf);\n if (!payloadType) {\n payloadType = rtp.header.payloadType;\n }\n\n // detect gStreamer restarted\n if (payloadType !== rtp.header.payloadType) {\n payloadType = rtp.header.payloadType;\n track.onSourceChanged.execute(rtp.header);\n }\n\n track.writeRtp(buf);\n });\n };\n\n stop() {\n this.stopped = true;\n this.process.kill(\"SIGINT\");\n }\n}\n\nexport class MediaPlayerMp4 extends MediaPlayer {\n async start() {\n let payloadType = 96;\n const run = async () => {\n if (payloadType > 100) payloadType = 96;\n\n let cmd = \"\";\n if (this.props.width && this.props.height) {\n cmd = `gst-launch-1.0 filesrc location= ${this.props.path} ! \\\ndecodebin ! videoscale ! video/x-raw,width=${this.props.width},height=${\n this.props.height\n } ! x264enc ! \\\nh264parse ! rtph264pay config-interval=10 pt=${payloadType++} ! \\\nudpsink host=127.0.0.1 port=${this.props.videoPort}`;\n } else {\n cmd = `gst-launch-1.0 filesrc location= ${this.props.path} ! \\\nqtdemux name=d ! \\\nqueue ! h264parse ! rtph264pay config-interval=10 pt=${payloadType++} ! \\\nudpsink host=127.0.0.1 port=${this.props.videoPort} d. ! \\\nqueue ! aacparse ! avdec_aac ! audioresample ! audioconvert ! opusenc ! rtpopuspay pt=${payloadType++} ! \\\nudpsink host=127.0.0.1 port=${this.props.audioPort}`;\n }\n console.log(cmd);\n this.process = exec(cmd);\n this.process.on(\"error\", (e) => console.error(\"gst error\", e));\n\n if (this.props.loop) {\n await new Promise((r) => this.process.on(\"close\", r));\n if (!this.stopped) {\n run();\n }\n }\n };\n await setImmediate();\n run();\n }\n}\n\nexport class MediaPlayerWebm extends MediaPlayer {\n async start() {\n let payloadType = 96;\n const run = async () => {\n if (payloadType > 100) payloadType = 96;\n\n const cmd = `gst-launch-1.0 filesrc location=${this.props.path} ! matroskademux name=d \\\nd.video_0 ! queue ! rtpvp8pay pt=${payloadType++} ! \\\nudpsink host=127.0.0.1 port=${this.props.videoPort} \\\nd.audio_0 ! queue ! rtpopuspay pt=${payloadType++} ! \\\nudpsink host=127.0.0.1 port=${this.props.audioPort}`;\n this.process = exec(cmd);\n\n if (this.props.loop) {\n await new Promise((r) => this.process.on(\"close\", r));\n if (!this.stopped) {\n run();\n }\n }\n };\n await setImmediate();\n run();\n }\n}\n"]}
1
+ {"version":3,"file":"userMedia.js","sourceRoot":"","sources":["../../../../src/nonstandard/userMedia.ts"],"names":[],"mappings":";;;AAAA,iDAAwD;AACxD,iCAAqC;AACrC,8CAA+C;AAC/C,+BAA0B;AAE1B,6CAAiD;AACjD,0CAA6C;AAC7C,0CAAkD;AAE3C,MAAM,YAAY,GAAG,KAAK,EAAE,EACjC,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,MAAM,GAMP,EAAE,EAAE;IACH,MAAM,SAAS,GAAG,MAAM,IAAA,gBAAU,GAAE,CAAC;IACrC,MAAM,SAAS,GAAG,MAAM,IAAA,gBAAU,GAAE,CAAC;IAErC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,OAAO,IAAI,cAAc,CAAC;YACxB,SAAS;YACT,SAAS;YACT,IAAI;YACJ,IAAI;YACJ,KAAK;YACL,MAAM;SACP,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,OAAO,IAAI,eAAe,CAAC;YACzB,SAAS;YACT,SAAS;YACT,IAAI;YACJ,IAAI;YACJ,KAAK;YACL,MAAM;SACP,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC;AAjCW,QAAA,YAAY,gBAiCvB;AAEF,MAAe,WAAW;IAOxB,YACY,KAOT;QAPD;;;;mBAAU,KAAK;WAOd;QAdO;;;;mBAAW,IAAA,SAAE,GAAE;WAAC;QAC1B;;;;mBAAQ,IAAI,wBAAgB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;WAAC;QACzE;;;;mBAAQ,IAAI,wBAAgB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;WAAC;QAC/D;;;;;WAAuB;QACjC;;;;mBAAU,KAAK;WAAC;QAgBR;;;;mBAAa,CAAC,IAAY,EAAE,KAAuB,EAAE,EAAE;gBAC7D,IAAI,WAAW,GAAG,CAAC,CAAC;gBAEpB,MAAM,MAAM,GAAG,IAAA,oBAAY,EAAC,MAAM,CAAC,CAAC;gBACpC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAClB,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;oBACjC,MAAM,GAAG,GAAG,eAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;oBACvC,IAAI,CAAC,WAAW,EAAE,CAAC;wBACjB,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC;oBACvC,CAAC;oBAED,6BAA6B;oBAC7B,IAAI,WAAW,KAAK,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;wBAC3C,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC;wBACrC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;oBAC5C,CAAC;oBAED,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;gBACtB,CAAC,CAAC,CAAC;YACL,CAAC;WAAC;QAvBA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/C,CAAC;IAuBD,IAAI;QACF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;CACF;AAED,MAAa,cAAe,SAAQ,WAAW;IAC7C,KAAK,CAAC,KAAK;QACT,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,MAAM,GAAG,GAAG,KAAK,IAAI,EAAE;YACrB,IAAI,WAAW,GAAG,GAAG;gBAAE,WAAW,GAAG,EAAE,CAAC;YAExC,IAAI,GAAG,GAAG,EAAE,CAAC;YACb,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBAC1C,GAAG,GAAG,oCAAoC,IAAI,CAAC,KAAK,CAAC,IAAI;6CACpB,IAAI,CAAC,KAAK,CAAC,KAAK,WACnD,IAAI,CAAC,KAAK,CAAC,MACb;+CACuC,WAAW,EAAE;8BAC9B,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;YAC/C,CAAC;iBAAM,CAAC;gBACN,GAAG,GAAG,oCAAoC,IAAI,CAAC,KAAK,CAAC,IAAI;;uDAEV,WAAW,EAAE;8BACtC,IAAI,CAAC,KAAK,CAAC,SAAS;wFACsC,WAAW,EAAE;8BACvE,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;YAC/C,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACjB,IAAI,CAAC,OAAO,GAAG,IAAA,oBAAI,EAAC,GAAG,CAAC,CAAC;YACzB,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;YAE/D,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBACpB,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;gBACtD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;oBAClB,GAAG,EAAE,CAAC;gBACR,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QACF,MAAM,IAAA,uBAAY,GAAE,CAAC;QACrB,GAAG,EAAE,CAAC;IACR,CAAC;CACF;AApCD,wCAoCC;AAED,MAAa,eAAgB,SAAQ,WAAW;IAC9C,KAAK,CAAC,KAAK;QACT,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,MAAM,GAAG,GAAG,KAAK,IAAI,EAAE;YACrB,IAAI,WAAW,GAAG,GAAG;gBAAE,WAAW,GAAG,EAAE,CAAC;YAExC,MAAM,GAAG,GAAG,mCAAmC,IAAI,CAAC,KAAK,CAAC,IAAI;mCACjC,WAAW,EAAE;8BAClB,IAAI,CAAC,KAAK,CAAC,SAAS;oCACd,WAAW,EAAE;8BACnB,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;YAC/C,IAAI,CAAC,OAAO,GAAG,IAAA,oBAAI,EAAC,GAAG,CAAC,CAAC;YAEzB,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBACpB,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;gBACtD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;oBAClB,GAAG,EAAE,CAAC;gBACR,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QACF,MAAM,IAAA,uBAAY,GAAE,CAAC;QACrB,GAAG,EAAE,CAAC;IACR,CAAC;CACF;AAvBD,0CAuBC","sourcesContent":["import { type ChildProcess, exec } from \"child_process\";\nimport { createSocket } from \"dgram\";\nimport { setImmediate } from \"timers/promises\";\nimport { v4 } from \"uuid\";\n\nimport { randomPort } from \"../../../common/src\";\nimport { RtpPacket } from \"../../../rtp/src\";\nimport { MediaStreamTrack } from \"../media/track\";\n\nexport const getUserMedia = async ({\n path,\n loop,\n width,\n height,\n}: {\n path: string;\n loop?: boolean;\n width?: number;\n height?: number;\n}) => {\n const audioPort = await randomPort();\n const videoPort = await randomPort();\n\n if (path.endsWith(\".mp4\")) {\n return new MediaPlayerMp4({\n audioPort,\n videoPort,\n path,\n loop,\n width,\n height,\n });\n } else {\n return new MediaPlayerWebm({\n audioPort,\n videoPort,\n path,\n loop,\n width,\n height,\n });\n }\n};\n\nabstract class MediaPlayer {\n protected streamId = v4();\n audio = new MediaStreamTrack({ kind: \"audio\", streamId: this.streamId });\n video = new MediaStreamTrack({ kind: \"video\", streamId: this.streamId });\n protected process!: ChildProcess;\n stopped = false;\n\n constructor(\n protected props: {\n videoPort: number;\n audioPort: number;\n path: string;\n loop?: boolean;\n width?: number;\n height?: number;\n },\n ) {\n this.setupTrack(props.audioPort, this.audio);\n this.setupTrack(props.videoPort, this.video);\n }\n\n private setupTrack = (port: number, track: MediaStreamTrack) => {\n let payloadType = 0;\n\n const socket = createSocket(\"udp4\");\n socket.bind(port);\n socket.on(\"message\", async (buf) => {\n const rtp = RtpPacket.deSerialize(buf);\n if (!payloadType) {\n payloadType = rtp.header.payloadType;\n }\n\n // detect gStreamer restarted\n if (payloadType !== rtp.header.payloadType) {\n payloadType = rtp.header.payloadType;\n track.onSourceChanged.execute(rtp.header);\n }\n\n track.writeRtp(buf);\n });\n };\n\n stop() {\n this.stopped = true;\n this.process.kill(\"SIGINT\");\n }\n}\n\nexport class MediaPlayerMp4 extends MediaPlayer {\n async start() {\n let payloadType = 96;\n const run = async () => {\n if (payloadType > 100) payloadType = 96;\n\n let cmd = \"\";\n if (this.props.width && this.props.height) {\n cmd = `gst-launch-1.0 filesrc location= ${this.props.path} ! \\\ndecodebin ! videoscale ! video/x-raw,width=${this.props.width},height=${\n this.props.height\n } ! x264enc ! \\\nh264parse ! rtph264pay config-interval=10 pt=${payloadType++} ! \\\nudpsink host=127.0.0.1 port=${this.props.videoPort}`;\n } else {\n cmd = `gst-launch-1.0 filesrc location= ${this.props.path} ! \\\nqtdemux name=d ! \\\nqueue ! h264parse ! rtph264pay config-interval=10 pt=${payloadType++} ! \\\nudpsink host=127.0.0.1 port=${this.props.videoPort} d. ! \\\nqueue ! aacparse ! avdec_aac ! audioresample ! audioconvert ! opusenc ! rtpopuspay pt=${payloadType++} ! \\\nudpsink host=127.0.0.1 port=${this.props.audioPort}`;\n }\n console.log(cmd);\n this.process = exec(cmd);\n this.process.on(\"error\", (e) => console.error(\"gst error\", e));\n\n if (this.props.loop) {\n await new Promise((r) => this.process.on(\"close\", r));\n if (!this.stopped) {\n run();\n }\n }\n };\n await setImmediate();\n run();\n }\n}\n\nexport class MediaPlayerWebm extends MediaPlayer {\n async start() {\n let payloadType = 96;\n const run = async () => {\n if (payloadType > 100) payloadType = 96;\n\n const cmd = `gst-launch-1.0 filesrc location=${this.props.path} ! matroskademux name=d \\\nd.video_0 ! queue ! rtpvp8pay pt=${payloadType++} ! \\\nudpsink host=127.0.0.1 port=${this.props.videoPort} \\\nd.audio_0 ! queue ! rtpopuspay pt=${payloadType++} ! \\\nudpsink host=127.0.0.1 port=${this.props.audioPort}`;\n this.process = exec(cmd);\n\n if (this.props.loop) {\n await new Promise((r) => this.process.on(\"close\", r));\n if (!this.stopped) {\n run();\n }\n }\n };\n await setImmediate();\n run();\n }\n}\n"]}
@@ -1,21 +1,21 @@
1
1
  import Event from "rx.mini";
2
- import { Address, CandidatePair, InterfaceAddresses } from ".";
3
- import { DtlsKeys } from ".";
4
- import { Message } from "../../ice/src/stun/message";
5
- import { Protocol } from "../../ice/src/types/model";
2
+ import { type Address, type CandidatePair, type InterfaceAddresses } from ".";
3
+ import { type DtlsKeys } from ".";
4
+ import type { Message } from "../../ice/src/stun/message";
5
+ import type { Protocol } from "../../ice/src/types/model";
6
6
  import { RTCDataChannel } from "./dataChannel";
7
7
  import { EventTarget } from "./helper";
8
- import { RTCRtpCodecParameters, RTCRtpHeaderExtensionParameters } from "./media/parameters";
8
+ import { RTCRtpCodecParameters, type RTCRtpHeaderExtensionParameters } from "./media/parameters";
9
9
  import { RTCRtpReceiver } from "./media/rtpReceiver";
10
10
  import { RTCRtpSender } from "./media/rtpSender";
11
- import { Direction, RTCRtpTransceiver, TransceiverOptions } from "./media/rtpTransceiver";
12
- import { MediaStream, MediaStreamTrack } from "./media/track";
11
+ import { type Direction, RTCRtpTransceiver, type TransceiverOptions } from "./media/rtpTransceiver";
12
+ import { MediaStream, type MediaStreamTrack } from "./media/track";
13
13
  import { GroupDescription, MediaDescription, SessionDescription } from "./sdp";
14
14
  import { RTCDtlsTransport } from "./transport/dtls";
15
- import { IceGathererState, RTCIceCandidate, RTCIceConnectionState, RTCIceTransport } from "./transport/ice";
15
+ import { type IceGathererState, type RTCIceCandidate, type RTCIceConnectionState, RTCIceTransport } from "./transport/ice";
16
16
  import { RTCSctpTransport } from "./transport/sctp";
17
- import { ConnectionState, Kind, RTCSignalingState } from "./types/domain";
18
- import { Callback, CallbackWithValue } from "./types/util";
17
+ import type { ConnectionState, Kind, RTCSignalingState } from "./types/domain";
18
+ import type { Callback, CallbackWithValue } from "./types/util";
19
19
  export declare class RTCPeerConnection extends EventTarget {
20
20
  readonly cname: string;
21
21
  sctpTransport?: RTCSctpTransport;
@@ -26,7 +26,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
26
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.defaultPeerConfig = exports.findCodecByMimeType = exports.allocateMid = exports.addTransportDescription = exports.createMediaDescriptionForSctp = exports.createMediaDescriptionForTransceiver = exports.RTCPeerConnection = void 0;
29
+ exports.defaultPeerConfig = exports.findCodecByMimeType = exports.RTCPeerConnection = void 0;
30
+ exports.createMediaDescriptionForTransceiver = createMediaDescriptionForTransceiver;
31
+ exports.createMediaDescriptionForSctp = createMediaDescriptionForSctp;
32
+ exports.addTransportDescription = addTransportDescription;
33
+ exports.allocateMid = allocateMid;
30
34
  const debug_1 = __importDefault(require("debug"));
31
35
  const cloneDeep_1 = __importDefault(require("lodash/cloneDeep"));
32
36
  const isEqual_1 = __importDefault(require("lodash/isEqual"));
@@ -594,8 +598,10 @@ class RTCPeerConnection extends helper_1.EventTarget {
594
598
  this.updateIceConnectionState();
595
599
  });
596
600
  iceTransport.iceGather.onIceCandidate = (candidate) => {
597
- if (!this.localDescription)
601
+ if (!this.localDescription) {
602
+ log("localDescription not found when ice candidate was gathered");
598
603
  return;
604
+ }
599
605
  if (this.config.bundlePolicy === "max-bundle" || this.remoteIsBundled) {
600
606
  candidate.sdpMLineIndex = 0;
601
607
  const media = this._localDescription?.media[0];
@@ -711,13 +717,6 @@ class RTCPeerConnection extends helper_1.EventTarget {
711
717
  }
712
718
  // for trickle ice
713
719
  this.setLocal(description);
714
- // connect transports
715
- if (description.type === "answer") {
716
- this.connect().catch((err) => {
717
- log("connect failed", err);
718
- this.setConnectionState("failed");
719
- });
720
- }
721
720
  // # gather candidates
722
721
  const connected = this.iceTransports.find((transport) => transport.state === "connected");
723
722
  if (this.remoteIsBundled && connected) {
@@ -727,6 +726,13 @@ class RTCPeerConnection extends helper_1.EventTarget {
727
726
  else {
728
727
  await Promise.allSettled(this.iceTransports.map((iceTransport) => iceTransport.iceGather.gather()));
729
728
  }
729
+ // connect transports
730
+ if (description.type === "answer") {
731
+ this.connect().catch((err) => {
732
+ log("connect failed", err);
733
+ this.setConnectionState("failed");
734
+ });
735
+ }
730
736
  description.media
731
737
  .filter((m) => ["audio", "video"].includes(m.kind))
732
738
  .forEach((m, i) => {
@@ -984,14 +990,6 @@ class RTCPeerConnection extends helper_1.EventTarget {
984
990
  this.setConnectionState("failed");
985
991
  });
986
992
  }
987
- const connected = this.iceTransports.find((transport) => transport.state === "connected");
988
- if (this.remoteIsBundled && connected) {
989
- // no need to gather ice candidates on an existing bundled connection
990
- await connected.iceGather.gather();
991
- }
992
- else {
993
- await Promise.allSettled(transports.map((iceTransport) => iceTransport.iceGather.gather()));
994
- }
995
993
  this.negotiationneeded = false;
996
994
  if (this.shouldNegotiationneeded) {
997
995
  this.needNegotiation();
@@ -1431,7 +1429,6 @@ function createMediaDescriptionForTransceiver(transceiver, cname, direction) {
1431
1429
  addTransportDescription(media, transceiver.dtlsTransport);
1432
1430
  return media;
1433
1431
  }
1434
- exports.createMediaDescriptionForTransceiver = createMediaDescriptionForTransceiver;
1435
1432
  function createMediaDescriptionForSctp(sctp) {
1436
1433
  const media = new sdp_1.MediaDescription("application", const_1.DISCARD_PORT, "UDP/DTLS/SCTP", ["webrtc-datachannel"]);
1437
1434
  media.sctpPort = sctp.port;
@@ -1440,7 +1437,6 @@ function createMediaDescriptionForSctp(sctp) {
1440
1437
  addTransportDescription(media, sctp.dtlsTransport);
1441
1438
  return media;
1442
1439
  }
1443
- exports.createMediaDescriptionForSctp = createMediaDescriptionForSctp;
1444
1440
  function addTransportDescription(media, dtlsTransport) {
1445
1441
  const iceTransport = dtlsTransport.iceTransport;
1446
1442
  const iceGatherer = iceTransport.iceGather;
@@ -1462,7 +1458,6 @@ function addTransportDescription(media, dtlsTransport) {
1462
1458
  }
1463
1459
  }
1464
1460
  }
1465
- exports.addTransportDescription = addTransportDescription;
1466
1461
  function allocateMid(mids, type) {
1467
1462
  let mid = "";
1468
1463
  for (let i = 0;;) {
@@ -1475,7 +1470,6 @@ function allocateMid(mids, type) {
1475
1470
  mids.add(mid);
1476
1471
  return mid;
1477
1472
  }
1478
- exports.allocateMid = allocateMid;
1479
1473
  const findCodecByMimeType = (codecs, target) => codecs.find((localCodec) => localCodec.mimeType.toLowerCase() === target.mimeType.toLowerCase())
1480
1474
  ? target
1481
1475
  : undefined;