werift 0.18.13 → 0.18.15

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 (252) hide show
  1. package/lib/common/src/binary.js.map +1 -1
  2. package/lib/common/src/index.d.ts +0 -1
  3. package/lib/common/src/index.js +0 -1
  4. package/lib/common/src/index.js.map +1 -1
  5. package/lib/dtls/src/client.js.map +1 -1
  6. package/lib/dtls/src/context/cipher.js +1 -1
  7. package/lib/dtls/src/context/cipher.js.map +1 -1
  8. package/lib/dtls/src/context/dtls.js.map +1 -1
  9. package/lib/dtls/src/context/transport.js.map +1 -1
  10. package/lib/dtls/src/flight/client/flight1.js.map +1 -1
  11. package/lib/dtls/src/flight/client/flight5.js.map +1 -1
  12. package/lib/dtls/src/flight/flight.js +1 -1
  13. package/lib/dtls/src/flight/flight.js.map +1 -1
  14. package/lib/dtls/src/flight/server/flight4.js.map +1 -1
  15. package/lib/dtls/src/flight/server/flight6.js.map +1 -1
  16. package/lib/dtls/src/handshake/extensions/ellipticCurves.js +1 -1
  17. package/lib/dtls/src/handshake/extensions/ellipticCurves.js.map +1 -1
  18. package/lib/dtls/src/handshake/extensions/extendedMasterSecret.js +1 -1
  19. package/lib/dtls/src/handshake/extensions/extendedMasterSecret.js.map +1 -1
  20. package/lib/dtls/src/handshake/extensions/renegotiationIndication.js +1 -1
  21. package/lib/dtls/src/handshake/extensions/renegotiationIndication.js.map +1 -1
  22. package/lib/dtls/src/handshake/extensions/signature.js +1 -1
  23. package/lib/dtls/src/handshake/extensions/signature.js.map +1 -1
  24. package/lib/dtls/src/handshake/extensions/useSrtp.js +1 -1
  25. package/lib/dtls/src/handshake/extensions/useSrtp.js.map +1 -1
  26. package/lib/dtls/src/handshake/message/alert.js +1 -1
  27. package/lib/dtls/src/handshake/message/alert.js.map +1 -1
  28. package/lib/dtls/src/handshake/message/certificate.js +1 -1
  29. package/lib/dtls/src/handshake/message/certificate.js.map +1 -1
  30. package/lib/dtls/src/handshake/message/changeCipherSpec.js +1 -1
  31. package/lib/dtls/src/handshake/message/changeCipherSpec.js.map +1 -1
  32. package/lib/dtls/src/handshake/message/client/certificateVerify.js +1 -1
  33. package/lib/dtls/src/handshake/message/client/certificateVerify.js.map +1 -1
  34. package/lib/dtls/src/handshake/message/client/hello.js +1 -1
  35. package/lib/dtls/src/handshake/message/client/hello.js.map +1 -1
  36. package/lib/dtls/src/handshake/message/client/keyExchange.js +1 -1
  37. package/lib/dtls/src/handshake/message/client/keyExchange.js.map +1 -1
  38. package/lib/dtls/src/handshake/message/finished.js.map +1 -1
  39. package/lib/dtls/src/handshake/message/server/certificateRequest.js +1 -1
  40. package/lib/dtls/src/handshake/message/server/certificateRequest.js.map +1 -1
  41. package/lib/dtls/src/handshake/message/server/hello.js +1 -1
  42. package/lib/dtls/src/handshake/message/server/hello.js.map +1 -1
  43. package/lib/dtls/src/handshake/message/server/helloDone.js +1 -1
  44. package/lib/dtls/src/handshake/message/server/helloDone.js.map +1 -1
  45. package/lib/dtls/src/handshake/message/server/helloVerifyRequest.js +1 -1
  46. package/lib/dtls/src/handshake/message/server/helloVerifyRequest.js.map +1 -1
  47. package/lib/dtls/src/handshake/message/server/keyExchange.js +1 -1
  48. package/lib/dtls/src/handshake/message/server/keyExchange.js.map +1 -1
  49. package/lib/dtls/src/handshake/random.js +1 -1
  50. package/lib/dtls/src/handshake/random.js.map +1 -1
  51. package/lib/dtls/src/record/message/fragment.js +1 -1
  52. package/lib/dtls/src/record/message/fragment.js.map +1 -1
  53. package/lib/dtls/src/record/message/header.js +2 -2
  54. package/lib/dtls/src/record/message/header.js.map +1 -1
  55. package/lib/dtls/src/record/message/plaintext.js +1 -1
  56. package/lib/dtls/src/record/message/plaintext.js.map +1 -1
  57. package/lib/dtls/src/server.js.map +1 -1
  58. package/lib/dtls/src/socket.js.map +1 -1
  59. package/lib/dtls/src/transport.js.map +1 -1
  60. package/lib/ice/src/candidate.js.map +1 -1
  61. package/lib/ice/src/exceptions.js.map +1 -1
  62. package/lib/ice/src/helper.js.map +1 -1
  63. package/lib/ice/src/ice.js.map +1 -1
  64. package/lib/ice/src/stun/attributes.js.map +1 -1
  65. package/lib/ice/src/stun/message.js.map +1 -1
  66. package/lib/ice/src/stun/protocol.js.map +1 -1
  67. package/lib/ice/src/stun/transaction.js.map +1 -1
  68. package/lib/ice/src/transport.js.map +1 -1
  69. package/lib/ice/src/turn/protocol.js.map +1 -1
  70. package/lib/rtp/src/codec/av1.js +1 -1
  71. package/lib/rtp/src/codec/av1.js.map +1 -1
  72. package/lib/rtp/src/container/index.d.ts +2 -1
  73. package/lib/rtp/src/container/index.js +2 -1
  74. package/lib/rtp/src/container/index.js.map +1 -1
  75. package/lib/rtp/src/container/mp4/container.d.ts +66 -0
  76. package/lib/rtp/src/container/mp4/container.js +262 -0
  77. package/lib/rtp/src/container/mp4/container.js.map +1 -0
  78. package/lib/rtp/src/container/mp4/exp-golomb.d.ts +20 -0
  79. package/lib/rtp/src/container/mp4/exp-golomb.js +144 -0
  80. package/lib/rtp/src/container/mp4/exp-golomb.js.map +1 -0
  81. package/lib/rtp/src/container/mp4/h264.d.ts +42 -0
  82. package/lib/rtp/src/container/mp4/h264.js +240 -0
  83. package/lib/rtp/src/container/mp4/h264.js.map +1 -0
  84. package/lib/rtp/src/container/mp4/index.d.ts +2 -0
  85. package/lib/rtp/src/container/mp4/index.js +19 -0
  86. package/lib/rtp/src/container/mp4/index.js.map +1 -0
  87. package/lib/rtp/src/container/mp4/mp4box.d.ts +5 -0
  88. package/lib/rtp/src/container/mp4/mp4box.js +32 -0
  89. package/lib/rtp/src/container/mp4/mp4box.js.map +1 -0
  90. package/lib/rtp/src/container/mp4/sps-parser.d.ts +40 -0
  91. package/lib/rtp/src/container/mp4/sps-parser.js +291 -0
  92. package/lib/rtp/src/container/mp4/sps-parser.js.map +1 -0
  93. package/lib/rtp/src/container/ogg/index.d.ts +1 -0
  94. package/lib/rtp/src/container/ogg/index.js +18 -0
  95. package/lib/rtp/src/container/ogg/index.js.map +1 -0
  96. package/lib/rtp/src/container/ogg/parser.d.ts +12 -0
  97. package/lib/rtp/src/container/ogg/parser.js +100 -0
  98. package/lib/rtp/src/container/ogg/parser.js.map +1 -0
  99. package/lib/rtp/src/container/{webm.d.ts → webm/container.d.ts} +1 -1
  100. package/lib/rtp/src/container/{webm.js → webm/container.js} +6 -6
  101. package/lib/rtp/src/container/webm/container.js.map +1 -0
  102. package/lib/rtp/src/container/webm/ebml/ebml.js.map +1 -0
  103. package/lib/rtp/src/container/webm/ebml/id.js.map +1 -0
  104. package/lib/rtp/src/container/webm/ebml/index.js.map +1 -0
  105. package/lib/rtp/src/container/webm/ebml/typedArrayUtils.js.map +1 -0
  106. package/lib/rtp/src/container/webm/index.d.ts +2 -0
  107. package/lib/rtp/src/container/webm/index.js +19 -0
  108. package/lib/rtp/src/container/webm/index.js.map +1 -0
  109. package/lib/rtp/src/processor/depacketizer.js.map +1 -1
  110. package/lib/rtp/src/processor/dtx.d.ts +1 -1
  111. package/lib/rtp/src/processor/dtx.js.map +1 -1
  112. package/lib/rtp/src/processor/index.d.ts +2 -0
  113. package/lib/rtp/src/processor/index.js +2 -0
  114. package/lib/rtp/src/processor/index.js.map +1 -1
  115. package/lib/rtp/src/processor/jitterBuffer.js.map +1 -1
  116. package/lib/rtp/src/processor/jitterBufferTransformer.js.map +1 -1
  117. package/lib/rtp/src/processor/lipsync.js.map +1 -1
  118. package/lib/rtp/src/processor/lipsyncCallback.js.map +1 -1
  119. package/lib/rtp/src/processor/mp4.d.ts +50 -0
  120. package/lib/rtp/src/processor/mp4.js +162 -0
  121. package/lib/rtp/src/processor/mp4.js.map +1 -0
  122. package/lib/rtp/src/processor/mp4Callback.d.ts +12 -0
  123. package/lib/rtp/src/processor/mp4Callback.js +83 -0
  124. package/lib/rtp/src/processor/mp4Callback.js.map +1 -0
  125. package/lib/rtp/src/processor/mute.d.ts +1 -1
  126. package/lib/rtp/src/processor/mute.js +6 -3
  127. package/lib/rtp/src/processor/mute.js.map +1 -1
  128. package/lib/rtp/src/processor/muteCallback.js.map +1 -1
  129. package/lib/rtp/src/processor/nack.js +2 -3
  130. package/lib/rtp/src/processor/nack.js.map +1 -1
  131. package/lib/rtp/src/processor/ntpTime.d.ts +1 -1
  132. package/lib/rtp/src/processor/ntpTime.js.map +1 -1
  133. package/lib/rtp/src/processor/rtcpCallback.js.map +1 -1
  134. package/lib/rtp/src/processor/rtpCallback.js.map +1 -1
  135. package/lib/rtp/src/processor/rtpStream.js.map +1 -1
  136. package/lib/rtp/src/processor/rtpTime.js.map +1 -1
  137. package/lib/rtp/src/processor/webm.d.ts +1 -1
  138. package/lib/rtp/src/processor/webm.js +1 -1
  139. package/lib/rtp/src/processor/webm.js.map +1 -1
  140. package/lib/rtp/src/processor/webmCallback.d.ts +1 -1
  141. package/lib/rtp/src/processor/webmCallback.js.map +1 -1
  142. package/lib/rtp/src/processor/webmStream.d.ts +1 -1
  143. package/lib/rtp/src/processor/webmStream.js.map +1 -1
  144. package/lib/rtp/src/rtcp/psfb/fullIntraRequest.js +1 -1
  145. package/lib/rtp/src/rtcp/psfb/fullIntraRequest.js.map +1 -1
  146. package/lib/rtp/src/rtcp/psfb/index.js +1 -1
  147. package/lib/rtp/src/rtcp/psfb/index.js.map +1 -1
  148. package/lib/rtp/src/rtcp/psfb/pictureLossIndication.js +1 -1
  149. package/lib/rtp/src/rtcp/psfb/pictureLossIndication.js.map +1 -1
  150. package/lib/rtp/src/rtcp/psfb/remb.js +1 -1
  151. package/lib/rtp/src/rtcp/psfb/remb.js.map +1 -1
  152. package/lib/rtp/src/rtcp/rr.js +3 -7
  153. package/lib/rtp/src/rtcp/rr.js.map +1 -1
  154. package/lib/rtp/src/rtcp/rtpfb/index.js +1 -1
  155. package/lib/rtp/src/rtcp/rtpfb/index.js.map +1 -1
  156. package/lib/rtp/src/rtcp/rtpfb/nack.js +6 -13
  157. package/lib/rtp/src/rtcp/rtpfb/nack.js.map +1 -1
  158. package/lib/rtp/src/rtcp/rtpfb/twcc.js +12 -8
  159. package/lib/rtp/src/rtcp/rtpfb/twcc.js.map +1 -1
  160. package/lib/rtp/src/rtcp/sdes.js +1 -1
  161. package/lib/rtp/src/rtcp/sdes.js.map +1 -1
  162. package/lib/rtp/src/rtcp/sr.js +2 -6
  163. package/lib/rtp/src/rtcp/sr.js.map +1 -1
  164. package/lib/rtp/src/rtp/headerExtension.d.ts +5 -0
  165. package/lib/rtp/src/rtp/headerExtension.js +35 -9
  166. package/lib/rtp/src/rtp/headerExtension.js.map +1 -1
  167. package/lib/rtp/src/rtp/red/encoder.js.map +1 -1
  168. package/lib/rtp/src/rtp/red/handler.js.map +1 -1
  169. package/lib/rtp/src/rtp/rtp.js.map +1 -1
  170. package/lib/rtp/src/srtp/cipher/ctr.js.map +1 -1
  171. package/lib/rtp/src/srtp/cipher/gcm.js.map +1 -1
  172. package/lib/rtp/src/srtp/cipher/index.js.map +1 -1
  173. package/lib/rtp/src/srtp/context/context.js.map +1 -1
  174. package/lib/rtp/src/srtp/session.js.map +1 -1
  175. package/lib/rtp/src/srtp/srtcp.js.map +1 -1
  176. package/lib/rtp/src/srtp/srtp.js.map +1 -1
  177. package/lib/rtp/src/util.js.map +1 -1
  178. package/lib/sctp/src/chunk.js +17 -17
  179. package/lib/sctp/src/chunk.js.map +1 -1
  180. package/lib/sctp/src/param.js +3 -3
  181. package/lib/sctp/src/param.js.map +1 -1
  182. package/lib/sctp/src/sctp.js.map +1 -1
  183. package/lib/sctp/src/transport.js.map +1 -1
  184. package/lib/webrtc/src/const.js.map +1 -1
  185. package/lib/webrtc/src/dataChannel.js.map +1 -1
  186. package/lib/webrtc/src/media/parameters.js.map +1 -1
  187. package/lib/webrtc/src/media/receiver/nack.js.map +1 -1
  188. package/lib/webrtc/src/media/receiver/receiverTwcc.js.map +1 -1
  189. package/lib/webrtc/src/media/receiver/statistics.js.map +1 -1
  190. package/lib/webrtc/src/media/router.js.map +1 -1
  191. package/lib/webrtc/src/media/rtpReceiver.js.map +1 -1
  192. package/lib/webrtc/src/media/rtpSender.js.map +1 -1
  193. package/lib/webrtc/src/media/rtpTransceiver.d.ts +1 -1
  194. package/lib/webrtc/src/media/rtpTransceiver.js.map +1 -1
  195. package/lib/webrtc/src/media/sender/senderBWE.js.map +1 -1
  196. package/lib/webrtc/src/media/track.js.map +1 -1
  197. package/lib/webrtc/src/nonstandard/recorder/index.js.map +1 -1
  198. package/lib/webrtc/src/nonstandard/recorder/writer/index.js.map +1 -1
  199. package/lib/webrtc/src/nonstandard/recorder/writer/webm.js.map +1 -1
  200. package/lib/webrtc/src/nonstandard/userMedia.js.map +1 -1
  201. package/lib/webrtc/src/peerConnection.js.map +1 -1
  202. package/lib/webrtc/src/sdp.js.map +1 -1
  203. package/lib/webrtc/src/transport/dtls.d.ts +1 -1
  204. package/lib/webrtc/src/transport/dtls.js.map +1 -1
  205. package/lib/webrtc/src/transport/ice.d.ts +2 -2
  206. package/lib/webrtc/src/transport/ice.js.map +1 -1
  207. package/lib/webrtc/src/transport/sctp.js.map +1 -1
  208. package/lib/webrtc/src/types/domain.d.ts +2 -2
  209. package/lib/webrtc/src/types/domain.js.map +1 -1
  210. package/lib/webrtc/src/utils.d.ts +1 -0
  211. package/lib/webrtc/src/utils.js +9 -1
  212. package/lib/webrtc/src/utils.js.map +1 -1
  213. package/package.json +5 -3
  214. package/src/const.ts +1 -1
  215. package/src/dataChannel.ts +3 -3
  216. package/src/media/parameters.ts +3 -3
  217. package/src/media/receiver/nack.ts +7 -4
  218. package/src/media/receiver/receiverTwcc.ts +5 -5
  219. package/src/media/receiver/statistics.ts +1 -1
  220. package/src/media/router.ts +5 -5
  221. package/src/media/rtpReceiver.ts +9 -9
  222. package/src/media/rtpSender.ts +8 -8
  223. package/src/media/rtpTransceiver.ts +3 -3
  224. package/src/media/sender/senderBWE.ts +2 -2
  225. package/src/media/track.ts +1 -1
  226. package/src/nonstandard/recorder/index.ts +1 -1
  227. package/src/nonstandard/recorder/writer/index.ts +1 -1
  228. package/src/nonstandard/recorder/writer/webm.ts +2 -2
  229. package/src/nonstandard/userMedia.ts +1 -1
  230. package/src/peerConnection.ts +52 -52
  231. package/src/sdp.ts +27 -21
  232. package/src/transport/dtls.ts +13 -10
  233. package/src/transport/ice.ts +6 -6
  234. package/src/transport/sctp.ts +4 -4
  235. package/src/types/domain.ts +2 -2
  236. package/src/utils.ts +11 -2
  237. package/lib/common/src/array.d.ts +0 -1
  238. package/lib/common/src/array.js +0 -15
  239. package/lib/common/src/array.js.map +0 -1
  240. package/lib/rtp/src/container/ebml/ebml.js.map +0 -1
  241. package/lib/rtp/src/container/ebml/id.js.map +0 -1
  242. package/lib/rtp/src/container/ebml/index.js.map +0 -1
  243. package/lib/rtp/src/container/ebml/typedArrayUtils.js.map +0 -1
  244. package/lib/rtp/src/container/webm.js.map +0 -1
  245. /package/lib/rtp/src/container/{ebml → webm/ebml}/ebml.d.ts +0 -0
  246. /package/lib/rtp/src/container/{ebml → webm/ebml}/ebml.js +0 -0
  247. /package/lib/rtp/src/container/{ebml → webm/ebml}/id.d.ts +0 -0
  248. /package/lib/rtp/src/container/{ebml → webm/ebml}/id.js +0 -0
  249. /package/lib/rtp/src/container/{ebml → webm/ebml}/index.d.ts +0 -0
  250. /package/lib/rtp/src/container/{ebml → webm/ebml}/index.js +0 -0
  251. /package/lib/rtp/src/container/{ebml → webm/ebml}/typedArrayUtils.d.ts +0 -0
  252. /package/lib/rtp/src/container/{ebml → webm/ebml}/typedArrayUtils.js +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sps-parser.js","sourceRoot":"","sources":["../../../../../../rtp/src/container/mp4/sps-parser.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright (C) 2016 Bilibili. All Rights Reserved.\n *\n * @author zheng qian <xqq@xqq.im>\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport ExpGolomb from \"./exp-golomb\";\n\nclass SPSParser {\n static _ebsp2rbsp(uint8array) {\n const src = uint8array;\n const src_length = src.byteLength;\n const dst = new Uint8Array(src_length);\n let dst_idx = 0;\n\n for (let i = 0; i < src_length; i++) {\n if (i >= 2) {\n // Unescape: Skip 0x03 after 00 00\n if (src[i] === 0x03 && src[i - 1] === 0x00 && src[i - 2] === 0x00) {\n continue;\n }\n }\n dst[dst_idx] = src[i];\n dst_idx++;\n }\n\n return new Uint8Array(dst.buffer, 0, dst_idx);\n }\n\n static parseSPS(uint8array) {\n const codec_array = uint8array.subarray(1, 4);\n let codec_mimetype = \"avc1.\";\n for (let j = 0; j < 3; j++) {\n let h = codec_array[j].toString(16);\n if (h.length < 2) {\n h = \"0\" + h;\n }\n codec_mimetype += h;\n }\n\n const rbsp = SPSParser._ebsp2rbsp(uint8array);\n let gb = new ExpGolomb(rbsp);\n\n gb.readByte();\n const profile_idc = gb.readByte(); // profile_idc\n gb.readByte(); // constraint_set_flags[5] + reserved_zero[3]\n const level_idc = gb.readByte(); // level_idc\n gb.readUEG(); // seq_parameter_set_id\n\n const profile_string = SPSParser.getProfileString(profile_idc);\n const level_string = SPSParser.getLevelString(level_idc);\n let chroma_format_idc = 1;\n let chroma_format = 420;\n const chroma_format_table = [0, 420, 422, 444];\n let bit_depth_luma = 8;\n let bit_depth_chroma = 8;\n\n if (\n profile_idc === 100 ||\n profile_idc === 110 ||\n profile_idc === 122 ||\n profile_idc === 244 ||\n profile_idc === 44 ||\n profile_idc === 83 ||\n profile_idc === 86 ||\n profile_idc === 118 ||\n profile_idc === 128 ||\n profile_idc === 138 ||\n profile_idc === 144\n ) {\n chroma_format_idc = gb.readUEG();\n if (chroma_format_idc === 3) {\n gb.readBits(1); // separate_colour_plane_flag\n }\n if (chroma_format_idc <= 3) {\n chroma_format = chroma_format_table[chroma_format_idc];\n }\n\n bit_depth_luma = gb.readUEG() + 8; // bit_depth_luma_minus8\n bit_depth_chroma = gb.readUEG() + 8; // bit_depth_chroma_minus8\n gb.readBits(1); // qpprime_y_zero_transform_bypass_flag\n if (gb.readBool()) {\n // seq_scaling_matrix_present_flag\n const scaling_list_count = chroma_format_idc !== 3 ? 8 : 12;\n for (let i = 0; i < scaling_list_count; i++) {\n if (gb.readBool()) {\n // seq_scaling_list_present_flag\n if (i < 6) {\n SPSParser._skipScalingList(gb, 16);\n } else {\n SPSParser._skipScalingList(gb, 64);\n }\n }\n }\n }\n }\n gb.readUEG(); // log2_max_frame_num_minus4\n const pic_order_cnt_type = gb.readUEG();\n if (pic_order_cnt_type === 0) {\n gb.readUEG(); // log2_max_pic_order_cnt_lsb_minus_4\n } else if (pic_order_cnt_type === 1) {\n gb.readBits(1); // delta_pic_order_always_zero_flag\n gb.readSEG(); // offset_for_non_ref_pic\n gb.readSEG(); // offset_for_top_to_bottom_field\n const num_ref_frames_in_pic_order_cnt_cycle = gb.readUEG();\n for (let i = 0; i < num_ref_frames_in_pic_order_cnt_cycle; i++) {\n gb.readSEG(); // offset_for_ref_frame\n }\n }\n const ref_frames = gb.readUEG(); // max_num_ref_frames\n gb.readBits(1); // gaps_in_frame_num_value_allowed_flag\n\n const pic_width_in_mbs_minus1 = gb.readUEG();\n const pic_height_in_map_units_minus1 = gb.readUEG();\n\n const frame_mbs_only_flag = gb.readBits(1);\n if (frame_mbs_only_flag === 0) {\n gb.readBits(1); // mb_adaptive_frame_field_flag\n }\n gb.readBits(1); // direct_8x8_inference_flag\n\n let frame_crop_left_offset = 0;\n let frame_crop_right_offset = 0;\n let frame_crop_top_offset = 0;\n let frame_crop_bottom_offset = 0;\n\n const frame_cropping_flag = gb.readBool();\n if (frame_cropping_flag) {\n frame_crop_left_offset = gb.readUEG();\n frame_crop_right_offset = gb.readUEG();\n frame_crop_top_offset = gb.readUEG();\n frame_crop_bottom_offset = gb.readUEG();\n }\n\n let sar_width = 1,\n sar_height = 1;\n let fps = 0,\n fps_fixed = true,\n fps_num = 0,\n fps_den = 0;\n\n const vui_parameters_present_flag = gb.readBool();\n if (vui_parameters_present_flag) {\n if (gb.readBool()) {\n // aspect_ratio_info_present_flag\n const aspect_ratio_idc = gb.readByte();\n const sar_w_table = [\n 1, 12, 10, 16, 40, 24, 20, 32, 80, 18, 15, 64, 160, 4, 3, 2,\n ];\n const sar_h_table = [\n 1, 11, 11, 11, 33, 11, 11, 11, 33, 11, 11, 33, 99, 3, 2, 1,\n ];\n\n if (aspect_ratio_idc > 0 && aspect_ratio_idc < 16) {\n sar_width = sar_w_table[aspect_ratio_idc - 1];\n sar_height = sar_h_table[aspect_ratio_idc - 1];\n } else if (aspect_ratio_idc === 255) {\n sar_width = (gb.readByte() << 8) | gb.readByte();\n sar_height = (gb.readByte() << 8) | gb.readByte();\n }\n }\n\n if (gb.readBool()) {\n // overscan_info_present_flag\n gb.readBool(); // overscan_appropriate_flag\n }\n if (gb.readBool()) {\n // video_signal_type_present_flag\n gb.readBits(4); // video_format & video_full_range_flag\n if (gb.readBool()) {\n // colour_description_present_flag\n gb.readBits(24); // colour_primaries & transfer_characteristics & matrix_coefficients\n }\n }\n if (gb.readBool()) {\n // chroma_loc_info_present_flag\n gb.readUEG(); // chroma_sample_loc_type_top_field\n gb.readUEG(); // chroma_sample_loc_type_bottom_field\n }\n if (gb.readBool()) {\n // timing_info_present_flag\n const num_units_in_tick = gb.readBits(32);\n const time_scale = gb.readBits(32);\n fps_fixed = gb.readBool(); // fixed_frame_rate_flag\n\n fps_num = time_scale;\n fps_den = num_units_in_tick * 2;\n fps = fps_num / fps_den;\n }\n }\n\n let sarScale = 1;\n if (sar_width !== 1 || sar_height !== 1) {\n sarScale = sar_width / sar_height;\n }\n\n let crop_unit_x = 0,\n crop_unit_y = 0;\n if (chroma_format_idc === 0) {\n crop_unit_x = 1;\n crop_unit_y = 2 - frame_mbs_only_flag;\n } else {\n const sub_wc = chroma_format_idc === 3 ? 1 : 2;\n const sub_hc = chroma_format_idc === 1 ? 2 : 1;\n crop_unit_x = sub_wc;\n crop_unit_y = sub_hc * (2 - frame_mbs_only_flag);\n }\n\n let codec_width = (pic_width_in_mbs_minus1 + 1) * 16;\n let codec_height =\n (2 - frame_mbs_only_flag) * ((pic_height_in_map_units_minus1 + 1) * 16);\n\n codec_width -=\n (frame_crop_left_offset + frame_crop_right_offset) * crop_unit_x;\n codec_height -=\n (frame_crop_top_offset + frame_crop_bottom_offset) * crop_unit_y;\n\n const present_width = Math.ceil(codec_width * sarScale);\n\n gb.destroy();\n gb = null as any;\n\n return {\n codec_mimetype,\n profile_idc,\n level_idc,\n profile_string, // baseline, high, high10, ...\n level_string, // 3, 3.1, 4, 4.1, 5, 5.1, ...\n chroma_format_idc,\n bit_depth: bit_depth_luma, // 8bit, 10bit, ...\n bit_depth_luma,\n bit_depth_chroma,\n ref_frames,\n chroma_format, // 4:2:0, 4:2:2, ...\n chroma_format_string: SPSParser.getChromaFormatString(chroma_format),\n\n frame_rate: {\n fixed: fps_fixed,\n fps: fps,\n fps_den: fps_den,\n fps_num: fps_num,\n },\n\n sar_ratio: {\n width: sar_width,\n height: sar_height,\n },\n\n codec_size: {\n width: codec_width,\n height: codec_height,\n },\n\n present_size: {\n width: present_width,\n height: codec_height,\n },\n };\n }\n\n static _skipScalingList(gb, count) {\n let last_scale = 8,\n next_scale = 8;\n let delta_scale = 0;\n for (let i = 0; i < count; i++) {\n if (next_scale !== 0) {\n delta_scale = gb.readSEG();\n next_scale = (last_scale + delta_scale + 256) % 256;\n }\n last_scale = next_scale === 0 ? last_scale : next_scale;\n }\n }\n\n static getProfileString(profile_idc) {\n switch (profile_idc) {\n case 66:\n return \"Baseline\";\n case 77:\n return \"Main\";\n case 88:\n return \"Extended\";\n case 100:\n return \"High\";\n case 110:\n return \"High10\";\n case 122:\n return \"High422\";\n case 244:\n return \"High444\";\n default:\n return \"Unknown\";\n }\n }\n\n static getLevelString(level_idc) {\n return (level_idc / 10).toFixed(1);\n }\n\n static getChromaFormatString(chroma) {\n switch (chroma) {\n case 420:\n return \"4:2:0\";\n case 422:\n return \"4:2:2\";\n case 444:\n return \"4:4:4\";\n default:\n return \"Unknown\";\n }\n }\n}\n\nexport default SPSParser;\n"]}
@@ -0,0 +1 @@
1
+ export * from "./parser";
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./parser"), exports);
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../rtp/src/container/ogg/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB","sourcesContent":["export * from \"./parser\";\n"]}
@@ -0,0 +1,12 @@
1
+ /// <reference types="node" />
2
+ export interface Page {
3
+ granulePosition: number;
4
+ segments: Buffer[];
5
+ segmentTable: number[];
6
+ }
7
+ export declare class OggParser {
8
+ pages: Page[];
9
+ private checkSegments;
10
+ exportSegments(): Buffer[];
11
+ read(buf: Buffer): this;
12
+ }
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OggParser = void 0;
4
+ class OggParser {
5
+ constructor() {
6
+ Object.defineProperty(this, "pages", {
7
+ enumerable: true,
8
+ configurable: true,
9
+ writable: true,
10
+ value: []
11
+ });
12
+ }
13
+ checkSegments(page) {
14
+ if (!page) {
15
+ return { ok: true };
16
+ }
17
+ for (let i = 0; i < page.segmentTable.length; i++) {
18
+ const segment = page.segments[i];
19
+ const table = page.segmentTable[i];
20
+ if (segment.length !== table) {
21
+ return { invalid: i };
22
+ }
23
+ }
24
+ return { ok: true };
25
+ }
26
+ exportSegments() {
27
+ let i = 0;
28
+ const pages = [];
29
+ for (; i < this.pages.length; i++) {
30
+ const page = this.pages[i];
31
+ const { invalid } = this.checkSegments(page);
32
+ if (invalid) {
33
+ break;
34
+ }
35
+ pages.push(page);
36
+ }
37
+ this.pages = this.pages.slice(i);
38
+ return pages.flatMap((page) => page.segments);
39
+ }
40
+ read(buf) {
41
+ for (let index = 0;;) {
42
+ if (index > buf.length)
43
+ break;
44
+ try {
45
+ const lastPage = this.pages.at(-1);
46
+ const invalid = this.checkSegments(lastPage).invalid;
47
+ if (lastPage && invalid) {
48
+ for (let i = invalid; i < lastPage.segmentTable.length; i++) {
49
+ const diff = lastPage.segmentTable[i] - lastPage.segments[i].length;
50
+ lastPage.segments[i] = Buffer.concat([
51
+ lastPage.segments[i],
52
+ buf.subarray(index, index + diff),
53
+ ]);
54
+ index += diff;
55
+ }
56
+ }
57
+ else {
58
+ const magic = buf.subarray(index, index + 4).toString();
59
+ if (magic !== "OggS") {
60
+ break;
61
+ }
62
+ index += 4; // skip magic
63
+ index += 1; // skip version
64
+ const headerType = buf.readUInt8(index);
65
+ index += 1; // skip header type
66
+ const granulePosition = buf.readBigInt64LE(index);
67
+ index += 8; // skip granule position
68
+ const bitstreamSerialNumber = buf.readUInt32LE(index);
69
+ index += 4; // skip bitstream serial number
70
+ const pageSequenceNumber = buf.readUInt32LE(index);
71
+ index += 4; // skip page sequence number
72
+ const pageChecksum = buf.readUInt32LE(index);
73
+ index += 4; // skip page checksum
74
+ const pageSegments = buf.readUInt8(index);
75
+ index += 1; // skip page segments
76
+ const segmentTable = buf.subarray(index, index + pageSegments);
77
+ index += pageSegments; // skip segment table
78
+ const segments = [];
79
+ for (let i = 0; i < pageSegments; i++) {
80
+ const segment = segmentTable.readUInt8(i);
81
+ const segmentData = buf.subarray(index, index + segment);
82
+ index += segment;
83
+ segments.push(segmentData);
84
+ }
85
+ this.pages.push({
86
+ segments,
87
+ granulePosition: Number(granulePosition),
88
+ segmentTable: [...segmentTable.map((s) => s)],
89
+ });
90
+ }
91
+ }
92
+ catch (error) {
93
+ break;
94
+ }
95
+ }
96
+ return this;
97
+ }
98
+ }
99
+ exports.OggParser = OggParser;
100
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../../../../rtp/src/container/ogg/parser.ts"],"names":[],"mappings":"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","sourcesContent":["export interface Page {\n granulePosition: number;\n segments: Buffer[];\n segmentTable: number[];\n}\n\nexport class OggParser {\n pages: Page[] = [];\n\n private checkSegments(page?: Page) {\n if (!page) {\n return { ok: true };\n }\n for (let i = 0; i < page.segmentTable.length; i++) {\n const segment = page.segments[i];\n const table = page.segmentTable[i];\n if (segment.length !== table) {\n return { invalid: i };\n }\n }\n return { ok: true };\n }\n\n exportSegments() {\n let i = 0;\n const pages: Page[] = [];\n for (; i < this.pages.length; i++) {\n const page = this.pages[i];\n const { invalid } = this.checkSegments(page);\n if (invalid) {\n break;\n }\n pages.push(page);\n }\n this.pages = this.pages.slice(i);\n return pages.flatMap((page) => page.segments);\n }\n\n read(buf: Buffer) {\n for (let index = 0; ; ) {\n if (index > buf.length) break;\n try {\n const lastPage = this.pages.at(-1);\n const invalid = this.checkSegments(lastPage).invalid;\n\n if (lastPage && invalid) {\n for (let i = invalid; i < lastPage.segmentTable.length; i++) {\n const diff = lastPage.segmentTable[i] - lastPage.segments[i].length;\n lastPage.segments[i] = Buffer.concat([\n lastPage.segments[i],\n buf.subarray(index, index + diff),\n ]);\n index += diff;\n }\n } else {\n const magic = buf.subarray(index, index + 4).toString();\n if (magic !== \"OggS\") {\n break;\n }\n index += 4; // skip magic\n index += 1; // skip version\n const headerType = buf.readUInt8(index);\n index += 1; // skip header type\n const granulePosition = buf.readBigInt64LE(index);\n index += 8; // skip granule position\n const bitstreamSerialNumber = buf.readUInt32LE(index);\n index += 4; // skip bitstream serial number\n const pageSequenceNumber = buf.readUInt32LE(index);\n index += 4; // skip page sequence number\n const pageChecksum = buf.readUInt32LE(index);\n index += 4; // skip page checksum\n const pageSegments = buf.readUInt8(index);\n index += 1; // skip page segments\n const segmentTable = buf.subarray(index, index + pageSegments);\n index += pageSegments; // skip segment table\n\n const segments: Buffer[] = [];\n for (let i = 0; i < pageSegments; i++) {\n const segment = segmentTable.readUInt8(i);\n const segmentData = buf.subarray(index, index + segment);\n index += segment;\n segments.push(segmentData);\n }\n\n this.pages.push({\n segments,\n granulePosition: Number(granulePosition),\n segmentTable: [...segmentTable.map((s) => s)],\n });\n }\n } catch (error) {\n break;\n }\n }\n return this;\n }\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  /// <reference types="node" />
2
2
  import * as EBML from "./ebml";
3
- export declare class WEBMBuilder {
3
+ export declare class WEBMContainer {
4
4
  readonly ebmlHeader: Uint8Array;
5
5
  trackEntries: EBML.EBMLData[];
6
6
  private trackIvs;
@@ -23,12 +23,12 @@ var __importStar = (this && this.__importStar) || function (mod) {
23
23
  return result;
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.supportedCodecs = exports.WEBMBuilder = void 0;
26
+ exports.supportedCodecs = exports.WEBMContainer = void 0;
27
27
  const crypto_1 = require("crypto");
28
- const src_1 = require("../../../common/src");
29
- const __1 = require("..");
28
+ const src_1 = require("../../../../common/src");
29
+ const __1 = require("../..");
30
30
  const EBML = __importStar(require("./ebml"));
31
- class WEBMBuilder {
31
+ class WEBMContainer {
32
32
  constructor(tracks, encryptionKey) {
33
33
  Object.defineProperty(this, "ebmlHeader", {
34
34
  enumerable: true,
@@ -213,7 +213,7 @@ class WEBMBuilder {
213
213
  return simpleBlock;
214
214
  }
215
215
  }
216
- exports.WEBMBuilder = WEBMBuilder;
216
+ exports.WEBMContainer = WEBMContainer;
217
217
  exports.supportedCodecs = [
218
218
  "MPEG4/ISO/AVC",
219
219
  "VP8",
@@ -222,4 +222,4 @@ exports.supportedCodecs = [
222
222
  "OPUS",
223
223
  ];
224
224
  const millisecond = 1000000;
225
- //# sourceMappingURL=webm.js.map
225
+ //# sourceMappingURL=container.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container.js","sourceRoot":"","sources":["../../../../../../rtp/src/container/webm/container.ts"],"names":[],"mappings":"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","sourcesContent":["import { createCipheriv, randomBytes, randomFillSync } from \"crypto\";\n\nimport { BitWriter2, BufferChain } from \"../../../../common/src\";\nimport { OpusRtpPayload } from \"../..\";\nimport * as EBML from \"./ebml\";\n\nexport class WEBMContainer {\n readonly ebmlHeader = EBML.build(\n EBML.element(EBML.ID.EBML, [\n EBML.element(EBML.ID.EBMLVersion, EBML.number(1)),\n EBML.element(EBML.ID.EBMLReadVersion, EBML.number(1)),\n EBML.element(EBML.ID.EBMLMaxIDLength, EBML.number(4)),\n EBML.element(EBML.ID.EBMLMaxSizeLength, EBML.number(8)),\n EBML.element(EBML.ID.DocType, EBML.string(\"webm\")),\n EBML.element(EBML.ID.DocTypeVersion, EBML.number(2)),\n EBML.element(EBML.ID.DocTypeReadVersion, EBML.number(2)),\n ])\n );\n trackEntries: EBML.EBMLData[] = [];\n private trackIvs: { [trackNumber: number]: Uint32Array } = {};\n trackKeyIds: { [trackNumber: number]: Buffer } = {};\n encryptionKey?: Buffer;\n readonly encryptionKeyID = randomBytes(16);\n\n constructor(\n tracks: {\n width?: number;\n height?: number;\n kind: \"audio\" | \"video\";\n codec: SupportedCodec;\n trackNumber: number;\n }[],\n encryptionKey?: Buffer\n ) {\n this.encryptionKey = encryptionKey;\n\n this.trackEntries = tracks.map(\n ({ width, height, kind, codec, trackNumber }) => {\n const track = this.createTrackEntry(kind, trackNumber, codec, {\n width,\n height,\n });\n const ivCounter = new Uint32Array(2);\n randomFillSync(ivCounter);\n this.trackIvs[trackNumber] = ivCounter;\n\n return track;\n }\n );\n }\n\n createTrackEntry(\n kind: string,\n trackNumber: number,\n codec: string,\n {\n width,\n height,\n }: Partial<{\n kind: string;\n width: number;\n height: number;\n }> = {}\n ) {\n const trackElements: EBML.EBMLData[] = [];\n\n if (kind === \"video\") {\n if (!width || !height) {\n throw new Error();\n }\n trackElements.push(\n EBML.element(EBML.ID.Video, [\n EBML.element(EBML.ID.PixelWidth, EBML.number(width)),\n EBML.element(EBML.ID.PixelHeight, EBML.number(height)),\n ])\n );\n } else {\n trackElements.push(\n EBML.element(EBML.ID.Audio, [\n EBML.element(EBML.ID.SamplingFrequency, EBML.float(48000.0)),\n EBML.element(EBML.ID.Channels, EBML.number(2)),\n ])\n );\n // only support OPUS\n trackElements.push(\n EBML.element(\n EBML.ID.CodecPrivate,\n EBML.bytes(OpusRtpPayload.createCodecPrivate())\n )\n );\n }\n\n if (this.encryptionKey) {\n const encryptionKeyID = this.encryptionKeyID;\n this.trackKeyIds[trackNumber] = encryptionKeyID;\n\n trackElements.push(\n EBML.element(\n EBML.ID.ContentEncodings,\n EBML.element(EBML.ID.ContentEncoding, [\n EBML.element(EBML.ID.ContentEncodingOrder, EBML.number(0)),\n EBML.element(EBML.ID.ContentEncodingScope, EBML.number(1)),\n EBML.element(EBML.ID.ContentEncodingType, EBML.number(1)),\n EBML.element(EBML.ID.ContentEncryption, [\n EBML.element(EBML.ID.EncryptionAlgorithm, EBML.number(5)),\n EBML.element(\n EBML.ID.EncryptionKeyID,\n EBML.bytes(encryptionKeyID)\n ),\n EBML.element(\n EBML.ID.ContentEncAESSettings,\n EBML.element(EBML.ID.AESSettingsCipherMode, EBML.number(1))\n ),\n ]),\n ])\n )\n );\n }\n\n const trackEntry = EBML.element(EBML.ID.TrackEntry, [\n EBML.element(EBML.ID.TrackNumber, EBML.number(trackNumber)),\n EBML.element(EBML.ID.TrackUID, EBML.number(trackNumber)),\n EBML.element(EBML.ID.CodecName, EBML.string(codec)),\n EBML.element(EBML.ID.TrackType, EBML.number(kind === \"video\" ? 1 : 2)),\n EBML.element(\n EBML.ID.CodecID,\n EBML.string(`${kind === \"video\" ? \"V\" : \"A\"}_${codec}`)\n ),\n ...trackElements,\n ]);\n return trackEntry;\n }\n\n createSegment(\n /**ms */\n duration?: number\n ) {\n const elements = [\n EBML.element(EBML.ID.TimecodeScale, EBML.number(millisecond)),\n EBML.element(EBML.ID.MuxingApp, EBML.string(\"webrtc\")),\n EBML.element(EBML.ID.WritingApp, EBML.string(\"webrtc\")),\n ];\n if (duration != undefined) {\n elements.push(EBML.element(EBML.ID.Duration, EBML.float(duration)));\n }\n return EBML.build(\n EBML.unknownSizeElement(EBML.ID.Segment, [\n EBML.element(EBML.ID.SeekHead, []),\n EBML.element(EBML.ID.Info, elements),\n EBML.element(EBML.ID.Tracks, this.trackEntries),\n ])\n );\n }\n\n createDuration(\n /**ms */\n duration: number\n ) {\n return EBML.build(EBML.element(EBML.ID.Duration, EBML.float(duration)));\n }\n\n createCuePoint(\n relativeTimestamp: number,\n trackNumber: number,\n clusterPosition: number,\n blockNumber: number\n ) {\n return EBML.element(EBML.ID.CuePoint, [\n EBML.element(EBML.ID.CueTime, EBML.number(relativeTimestamp)),\n EBML.element(EBML.ID.CueTrackPositions, [\n EBML.element(EBML.ID.CueTrack, EBML.number(trackNumber)),\n EBML.element(EBML.ID.CueClusterPosition, EBML.number(clusterPosition)),\n EBML.element(EBML.ID.CueBlockNumber, EBML.number(blockNumber)),\n ]),\n ]);\n }\n\n createCues(cuePoints: EBML.EBMLData[]) {\n return EBML.build(EBML.element(EBML.ID.Cues, cuePoints));\n }\n\n createCluster(timecode: number) {\n return EBML.build(\n EBML.unknownSizeElement(EBML.ID.Cluster, [\n EBML.element(EBML.ID.Timecode, EBML.number(timecode)),\n ])\n );\n }\n\n createSimpleBlock(\n frame: Buffer,\n isKeyframe: boolean,\n trackNumber: number,\n relativeTimestamp: number\n ) {\n const elementId = Buffer.from([0xa3]);\n\n if (this.encryptionKey) {\n // 4.7 Signal Byte Format\n // 0 1 2 3 4 5 6 7\n // +-+-+-+-+-+-+-+-+\n // |X| RSV |P|E|\n // +-+-+-+-+-+-+-+-+\n const singleByte = new BitWriter2(8).set(0).set(0, 5).set(0).set(1);\n\n const iv = Buffer.alloc(16);\n const ivCounter = this.trackIvs[trackNumber];\n iv.writeUInt32BE(ivCounter[0], 0);\n iv.writeUInt32BE(ivCounter[1], 4);\n ivCounter[1]++;\n if (ivCounter[1] === 0) {\n ivCounter[0]++;\n }\n\n const cipher = createCipheriv(\"AES-128-CTR\", this.encryptionKey, iv);\n\n frame = Buffer.concat([\n singleByte.buffer,\n iv.subarray(0, 8),\n cipher.update(frame),\n cipher.final(),\n ]);\n }\n\n const contentSize: Uint8Array = EBML.vintEncodedNumber(\n 1 + 2 + 1 + frame.length\n ).bytes;\n\n const keyframe = isKeyframe ? 1 : 0;\n const flags = new BitWriter2(8)\n .set(keyframe)\n .set(0, 3)\n .set(0)\n .set(0, 2)\n .set(0);\n\n const simpleBlock = Buffer.concat([\n elementId,\n contentSize,\n EBML.vintEncodedNumber(trackNumber).bytes,\n new BufferChain(2).writeInt16BE(relativeTimestamp).buffer,\n new BufferChain(1).writeUInt8(flags.value).buffer,\n frame,\n ]);\n return simpleBlock;\n }\n}\n\nexport const supportedCodecs = [\n \"MPEG4/ISO/AVC\",\n \"VP8\",\n \"VP9\",\n \"AV1\",\n \"OPUS\",\n] as const;\nexport type SupportedCodec = typeof supportedCodecs[number];\nconst millisecond = 1000000;\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ebml.js","sourceRoot":"","sources":["../../../../../../../rtp/src/container/webm/ebml/ebml.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n float32bit,\n numberToByteArray,\n stringToByteArray,\n} from \"./typedArrayUtils\";\n\nexport interface EBMLData {\n write(buf: Uint8Array, pos: number): number;\n countSize(): number;\n}\n\nexport class Value implements EBMLData {\n constructor(public bytes: Uint8Array) {}\n\n public write(buf: Uint8Array, pos: number): number {\n buf.set(this.bytes, pos);\n return pos + this.bytes.length;\n }\n\n public countSize(): number {\n return this.bytes.length;\n }\n}\n\nexport class Element implements EBMLData {\n private readonly size: number;\n private readonly sizeMetaData: Uint8Array;\n\n constructor(\n private id: Uint8Array,\n private children: EBMLData[],\n isSizeUnknown: boolean\n ) {\n const bodySize = this.children.reduce((p, c) => p + c.countSize(), 0);\n this.sizeMetaData = isSizeUnknown\n ? UNKNOWN_SIZE\n : vintEncode(numberToByteArray(bodySize, getEBMLByteLength(bodySize)));\n this.size = this.id.length + this.sizeMetaData.length + bodySize;\n }\n\n public write(buf: Uint8Array, pos: number): number {\n buf.set(this.id, pos);\n buf.set(this.sizeMetaData, pos + this.id.length);\n return this.children.reduce(\n (p, c) => c.write(buf, p),\n pos + this.id.length + this.sizeMetaData.length\n );\n }\n\n public countSize(): number {\n return this.size;\n }\n}\n\nexport const bytes = (data: Uint8Array): Value => {\n return new Value(data);\n};\n\nexport const number = (num: number): Value => {\n return bytes(numberToByteArray(num));\n};\n\nexport const float = (num: number): Value => bytes(float32bit(num));\n\nexport const vintEncodedNumber = (num: number): Value => {\n return bytes(vintEncode(numberToByteArray(num, getEBMLByteLength(num))));\n};\n\nexport const string = (str: string): Value => {\n return bytes(stringToByteArray(str));\n};\n\nexport const element = (\n id: Uint8Array,\n child: EBMLData | EBMLData[]\n): EBMLData => {\n return new Element(id, Array.isArray(child) ? child : [child], false);\n};\n\nexport const unknownSizeElement = (\n id: Uint8Array,\n child: EBMLData | EBMLData[]\n): EBMLData => {\n return new Element(id, Array.isArray(child) ? child : [child], true);\n};\n\nexport const build = (v: EBMLData): Uint8Array => {\n const b = new Uint8Array(v.countSize());\n v.write(b, 0);\n return b;\n};\n\nexport const getEBMLByteLength = (num: number | bigint): number => {\n if (num < 0x7f) {\n return 1;\n } else if (num < 0x3fff) {\n return 2;\n } else if (num < 0x1fffff) {\n return 3;\n } else if (num < 0xfffffff) {\n return 4;\n } else if (num < 0x7ffffffff) {\n return 5;\n } else if (num < 0x3ffffffffff) {\n return 6;\n } else if (num < 0x1ffffffffffff) {\n return 7;\n } else if (num < 0x20000000000000n) {\n return 8;\n } else if (num < 0xffffffffffffffn) {\n throw new Error(\n \"EBMLgetEBMLByteLength: number exceeds Number.MAX_SAFE_INTEGER\"\n );\n } else {\n throw new Error(\n \"EBMLgetEBMLByteLength: data size must be less than or equal to \" +\n (Math.pow(2, 56) - 2)\n );\n }\n};\n\nexport const UNKNOWN_SIZE = new Uint8Array([\n 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n]);\n\nexport const vintEncode = (byteArray: Uint8Array): Uint8Array => {\n byteArray[0] = getSizeMask(byteArray.length) | byteArray[0];\n return byteArray;\n};\n\nexport const getSizeMask = (byteLength: number): number => {\n return 0x80 >> (byteLength - 1);\n};\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"id.js","sourceRoot":"","sources":["../../../../../../../rtp/src/container/webm/ebml/id.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @see https://www.matroska.org/technical/specs/index.html\n */\nexport const ID = {\n EBML: Uint8Array.of(0x1a, 0x45, 0xdf, 0xa3),\n EBMLVersion: Uint8Array.of(0x42, 0x86),\n EBMLReadVersion: Uint8Array.of(0x42, 0xf7),\n EBMLMaxIDLength: Uint8Array.of(0x42, 0xf2),\n EBMLMaxSizeLength: Uint8Array.of(0x42, 0xf3),\n DocType: Uint8Array.of(0x42, 0x82),\n DocTypeVersion: Uint8Array.of(0x42, 0x87),\n DocTypeReadVersion: Uint8Array.of(0x42, 0x85),\n Void: Uint8Array.of(0xec),\n CRC32: Uint8Array.of(0xbf),\n Segment: Uint8Array.of(0x18, 0x53, 0x80, 0x67),\n SeekHead: Uint8Array.of(0x11, 0x4d, 0x9b, 0x74),\n Seek: Uint8Array.of(0x4d, 0xbb),\n SeekID: Uint8Array.of(0x53, 0xab),\n SeekPosition: Uint8Array.of(0x53, 0xac),\n Info: Uint8Array.of(0x15, 0x49, 0xa9, 0x66),\n SegmentUID: Uint8Array.of(0x73, 0xa4),\n SegmentFilename: Uint8Array.of(0x73, 0x84),\n PrevUID: Uint8Array.of(0x3c, 0xb9, 0x23),\n PrevFilename: Uint8Array.of(0x3c, 0x83, 0xab),\n NextUID: Uint8Array.of(0x3e, 0xb9, 0x23),\n NextFilename: Uint8Array.of(0x3e, 0x83, 0xbb),\n SegmentFamily: Uint8Array.of(0x44, 0x44),\n ChapterTranslate: Uint8Array.of(0x69, 0x24),\n ChapterTranslateEditionUID: Uint8Array.of(0x69, 0xfc),\n ChapterTranslateCodec: Uint8Array.of(0x69, 0xbf),\n ChapterTranslateID: Uint8Array.of(0x69, 0xa5),\n TimecodeScale: Uint8Array.of(0x2a, 0xd7, 0xb1),\n Duration: Uint8Array.of(0x44, 0x89),\n DateUTC: Uint8Array.of(0x44, 0x61),\n Title: Uint8Array.of(0x7b, 0xa9),\n MuxingApp: Uint8Array.of(0x4d, 0x80),\n WritingApp: Uint8Array.of(0x57, 0x41),\n Cluster: Uint8Array.of(0x1f, 0x43, 0xb6, 0x75),\n Timecode: Uint8Array.of(0xe7),\n SilentTracks: Uint8Array.of(0x58, 0x54),\n SilentTrackNumber: Uint8Array.of(0x58, 0xd7),\n Position: Uint8Array.of(0xa7),\n PrevSize: Uint8Array.of(0xab),\n SimpleBlock: Uint8Array.of(0xa3),\n BlockGroup: Uint8Array.of(0xa0),\n Block: Uint8Array.of(0xa1),\n BlockAdditions: Uint8Array.of(0x75, 0xa1),\n BlockMore: Uint8Array.of(0xa6),\n BlockAddID: Uint8Array.of(0xee),\n BlockAdditional: Uint8Array.of(0xa5),\n BlockDuration: Uint8Array.of(0x9b),\n ReferencePriority: Uint8Array.of(0xfa),\n ReferenceBlock: Uint8Array.of(0xfb),\n CodecState: Uint8Array.of(0xa4),\n DiscardPadding: Uint8Array.of(0x75, 0xa2),\n Slices: Uint8Array.of(0x8e),\n TimeSlice: Uint8Array.of(0xe8),\n LaceNumber: Uint8Array.of(0xcc),\n Tracks: Uint8Array.of(0x16, 0x54, 0xae, 0x6b),\n TrackEntry: Uint8Array.of(0xae),\n TrackNumber: Uint8Array.of(0xd7),\n TrackUID: Uint8Array.of(0x73, 0xc5),\n TrackType: Uint8Array.of(0x83),\n FlagEnabled: Uint8Array.of(0xb9),\n FlagDefault: Uint8Array.of(0x88),\n FlagForced: Uint8Array.of(0x55, 0xaa),\n FlagLacing: Uint8Array.of(0x9c),\n MinCache: Uint8Array.of(0x6d, 0xe7),\n MaxCache: Uint8Array.of(0x6d, 0xf8),\n DefaultDuration: Uint8Array.of(0x23, 0xe3, 0x83),\n DefaultDecodedFieldDuration: Uint8Array.of(0x23, 0x4e, 0x7a),\n MaxBlockAdditionID: Uint8Array.of(0x55, 0xee),\n Name: Uint8Array.of(0x53, 0x6e),\n Language: Uint8Array.of(0x22, 0xb5, 0x9c),\n CodecID: Uint8Array.of(0x86),\n CodecPrivate: Uint8Array.of(0x63, 0xa2),\n CodecName: Uint8Array.of(0x25, 0x86, 0x88),\n AttachmentLink: Uint8Array.of(0x74, 0x46),\n CodecDecodeAll: Uint8Array.of(0xaa),\n TrackOverlay: Uint8Array.of(0x6f, 0xab),\n CodecDelay: Uint8Array.of(0x56, 0xaa),\n SeekPreRoll: Uint8Array.of(0x56, 0xbb),\n TrackTranslate: Uint8Array.of(0x66, 0x24),\n TrackTranslateEditionUID: Uint8Array.of(0x66, 0xfc),\n TrackTranslateCodec: Uint8Array.of(0x66, 0xbf),\n TrackTranslateTrackID: Uint8Array.of(0x66, 0xa5),\n Video: Uint8Array.of(0xe0),\n FlagInterlaced: Uint8Array.of(0x9a),\n FieldOrder: Uint8Array.of(0x9d),\n StereoMode: Uint8Array.of(0x53, 0xb8),\n AlphaMode: Uint8Array.of(0x53, 0xc0),\n PixelWidth: Uint8Array.of(0xb0),\n PixelHeight: Uint8Array.of(0xba),\n PixelCropBottom: Uint8Array.of(0x54, 0xaa),\n PixelCropTop: Uint8Array.of(0x54, 0xbb),\n PixelCropLeft: Uint8Array.of(0x54, 0xcc),\n PixelCropRight: Uint8Array.of(0x54, 0xdd),\n DisplayWidth: Uint8Array.of(0x54, 0xb0),\n DisplayHeight: Uint8Array.of(0x54, 0xba),\n DisplayUnit: Uint8Array.of(0x54, 0xb2),\n AspectRatioType: Uint8Array.of(0x54, 0xb3),\n ColourSpace: Uint8Array.of(0x2e, 0xb5, 0x24),\n Colour: Uint8Array.of(0x55, 0xb0),\n MatrixCoefficients: Uint8Array.of(0x55, 0xb1),\n BitsPerChannel: Uint8Array.of(0x55, 0xb2),\n ChromaSubsamplingHorz: Uint8Array.of(0x55, 0xb3),\n ChromaSubsamplingVert: Uint8Array.of(0x55, 0xb4),\n CbSubsamplingHorz: Uint8Array.of(0x55, 0xb5),\n CbSubsamplingVert: Uint8Array.of(0x55, 0xb6),\n ChromaSitingHorz: Uint8Array.of(0x55, 0xb7),\n ChromaSitingVert: Uint8Array.of(0x55, 0xb8),\n Range: Uint8Array.of(0x55, 0xb9),\n TransferCharacteristics: Uint8Array.of(0x55, 0xba),\n Primaries: Uint8Array.of(0x55, 0xbb),\n MaxCLL: Uint8Array.of(0x55, 0xbc),\n MaxFALL: Uint8Array.of(0x55, 0xbd),\n MasteringMetadata: Uint8Array.of(0x55, 0xd0),\n PrimaryRChromaticityX: Uint8Array.of(0x55, 0xd1),\n PrimaryRChromaticityY: Uint8Array.of(0x55, 0xd2),\n PrimaryGChromaticityX: Uint8Array.of(0x55, 0xd3),\n PrimaryGChromaticityY: Uint8Array.of(0x55, 0xd4),\n PrimaryBChromaticityX: Uint8Array.of(0x55, 0xd5),\n PrimaryBChromaticityY: Uint8Array.of(0x55, 0xd6),\n WhitePointChromaticityX: Uint8Array.of(0x55, 0xd7),\n WhitePointChromaticityY: Uint8Array.of(0x55, 0xd8),\n LuminanceMax: Uint8Array.of(0x55, 0xd9),\n LuminanceMin: Uint8Array.of(0x55, 0xda),\n Audio: Uint8Array.of(0xe1),\n SamplingFrequency: Uint8Array.of(0xb5),\n OutputSamplingFrequency: Uint8Array.of(0x78, 0xb5),\n Channels: Uint8Array.of(0x9f),\n BitDepth: Uint8Array.of(0x62, 0x64),\n TrackOperation: Uint8Array.of(0xe2),\n TrackCombinePlanes: Uint8Array.of(0xe3),\n TrackPlane: Uint8Array.of(0xe4),\n TrackPlaneUID: Uint8Array.of(0xe5),\n TrackPlaneType: Uint8Array.of(0xe6),\n TrackJoinBlocks: Uint8Array.of(0xe9),\n TrackJoinUID: Uint8Array.of(0xed),\n ContentEncodings: Uint8Array.of(0x6d, 0x80),\n ContentEncoding: Uint8Array.of(0x62, 0x40),\n ContentEncodingOrder: Uint8Array.of(0x50, 0x31),\n ContentEncodingScope: Uint8Array.of(0x50, 0x32),\n ContentEncodingType: Uint8Array.of(0x50, 0x33),\n ContentCompression: Uint8Array.of(0x50, 0x34),\n ContentCompAlgo: Uint8Array.of(0x42, 0x54),\n ContentCompSettings: Uint8Array.of(0x42, 0x55),\n ContentEncryption: Uint8Array.of(0x50, 0x35),\n ContentEncAlgo: Uint8Array.of(0x47, 0xe1),\n ContentEncKeyID: Uint8Array.of(0x47, 0xe2),\n ContentSignature: Uint8Array.of(0x47, 0xe3),\n ContentSigKeyID: Uint8Array.of(0x47, 0xe4),\n ContentSigAlgo: Uint8Array.of(0x47, 0xe5),\n ContentSigHashAlgo: Uint8Array.of(0x47, 0xe6),\n Cues: Uint8Array.of(0x1c, 0x53, 0xbb, 0x6b),\n CuePoint: Uint8Array.of(0xbb),\n CueTime: Uint8Array.of(0xb3),\n CueTrackPositions: Uint8Array.of(0xb7),\n CueTrack: Uint8Array.of(0xf7),\n CueClusterPosition: Uint8Array.of(0xf1),\n CueRelativePosition: Uint8Array.of(0xf0),\n CueDuration: Uint8Array.of(0xb2),\n CueBlockNumber: Uint8Array.of(0x53, 0x78),\n CueCodecState: Uint8Array.of(0xea),\n CueReference: Uint8Array.of(0xdb),\n CueRefTime: Uint8Array.of(0x96),\n Attachments: Uint8Array.of(0x19, 0x41, 0xa4, 0x69),\n AttachedFile: Uint8Array.of(0x61, 0xa7),\n FileDescription: Uint8Array.of(0x46, 0x7e),\n FileName: Uint8Array.of(0x46, 0x6e),\n FileMimeType: Uint8Array.of(0x46, 0x60),\n FileData: Uint8Array.of(0x46, 0x5c),\n FileUID: Uint8Array.of(0x46, 0xae),\n Chapters: Uint8Array.of(0x10, 0x43, 0xa7, 0x70),\n EditionEntry: Uint8Array.of(0x45, 0xb9),\n EditionUID: Uint8Array.of(0x45, 0xbc),\n EditionFlagHidden: Uint8Array.of(0x45, 0xbd),\n EditionFlagDefault: Uint8Array.of(0x45, 0xdb),\n EditionFlagOrdered: Uint8Array.of(0x45, 0xdd),\n EncryptionAlgorithm: Uint8Array.of(0x47, 0xe1),\n EncryptionKeyID: Uint8Array.of(0x47, 0xe2),\n ContentEncAESSettings: Uint8Array.of(0x47, 0xe7),\n AESSettingsCipherMode: Uint8Array.of(0x47, 0xe8),\n ChapterAtom: Uint8Array.of(0xb6),\n ChapterUID: Uint8Array.of(0x73, 0xc4),\n ChapterStringUID: Uint8Array.of(0x56, 0x54),\n ChapterTimeStart: Uint8Array.of(0x91),\n ChapterTimeEnd: Uint8Array.of(0x92),\n ChapterFlagHidden: Uint8Array.of(0x98),\n ChapterFlagEnabled: Uint8Array.of(0x45, 0x98),\n ChapterSegmentUID: Uint8Array.of(0x6e, 0x67),\n ChapterSegmentEditionUID: Uint8Array.of(0x6e, 0xbc),\n ChapterPhysicalEquiv: Uint8Array.of(0x63, 0xc3),\n ChapterTrack: Uint8Array.of(0x8f),\n ChapterTrackNumber: Uint8Array.of(0x89),\n ChapterDisplay: Uint8Array.of(0x80),\n ChapString: Uint8Array.of(0x85),\n ChapLanguage: Uint8Array.of(0x43, 0x7c),\n ChapCountry: Uint8Array.of(0x43, 0x7e),\n ChapProcess: Uint8Array.of(0x69, 0x44),\n ChapProcessCodecID: Uint8Array.of(0x69, 0x55),\n ChapProcessPrivate: Uint8Array.of(0x45, 0x0d),\n ChapProcessCommand: Uint8Array.of(0x69, 0x11),\n ChapProcessTime: Uint8Array.of(0x69, 0x22),\n ChapProcessData: Uint8Array.of(0x69, 0x33),\n Tags: Uint8Array.of(0x12, 0x54, 0xc3, 0x67),\n Tag: Uint8Array.of(0x73, 0x73),\n Targets: Uint8Array.of(0x63, 0xc0),\n TargetTypeValue: Uint8Array.of(0x68, 0xca),\n TargetType: Uint8Array.of(0x63, 0xca),\n TagTrackUID: Uint8Array.of(0x63, 0xc5),\n TagEditionUID: Uint8Array.of(0x63, 0xc9),\n TagChapterUID: Uint8Array.of(0x63, 0xc4),\n TagAttachmentUID: Uint8Array.of(0x63, 0xc6),\n SimpleTag: Uint8Array.of(0x67, 0xc8),\n TagName: Uint8Array.of(0x45, 0xa3),\n TagLanguage: Uint8Array.of(0x44, 0x7a),\n TagDefault: Uint8Array.of(0x44, 0x84),\n TagString: Uint8Array.of(0x44, 0x87),\n TagBinary: Uint8Array.of(0x44, 0x85),\n};\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../rtp/src/container/webm/ebml/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yCAAuB;AACvB,uCAAqB;AACrB,oDAAkC","sourcesContent":["export * from \"./ebml\";\nexport * from \"./id\";\nexport * from \"./typedArrayUtils\";\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typedArrayUtils.js","sourceRoot":"","sources":["../../../../../../../rtp/src/container/webm/ebml/typedArrayUtils.ts"],"names":[],"mappings":"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","sourcesContent":["export const numberToByteArray = (\n num: number,\n byteLength: number = getNumberByteLength(num)\n): Uint8Array => {\n let byteArray;\n if (byteLength === 1) {\n byteArray = new DataView(new ArrayBuffer(1));\n byteArray.setUint8(0, num);\n } else if (byteLength === 2) {\n byteArray = new DataView(new ArrayBuffer(2));\n byteArray.setUint16(0, num);\n } else if (byteLength === 3) {\n byteArray = new DataView(new ArrayBuffer(3));\n byteArray.setUint8(0, num >> 16);\n byteArray.setUint16(1, num & 0xffff);\n } else if (byteLength === 4) {\n byteArray = new DataView(new ArrayBuffer(4));\n byteArray.setUint32(0, num);\n } else if (/* byteLength === 5 && */ num < 0xffffffff) {\n // 4GB (upper limit for int32) should be enough in most cases\n byteArray = new DataView(new ArrayBuffer(5));\n byteArray.setUint32(1, num);\n } else if (byteLength === 5) {\n // Naive emulations of int64 bitwise opreators\n byteArray = new DataView(new ArrayBuffer(5));\n byteArray.setUint8(0, (num / 0x100000000) | 0);\n byteArray.setUint32(1, num % 0x100000000);\n } else if (byteLength === 6) {\n byteArray = new DataView(new ArrayBuffer(6));\n byteArray.setUint16(0, (num / 0x100000000) | 0);\n byteArray.setUint32(2, num % 0x100000000);\n } else if (byteLength === 7) {\n byteArray = new DataView(new ArrayBuffer(7));\n byteArray.setUint8(0, (num / 0x1000000000000) | 0);\n byteArray.setUint16(1, (num / 0x100000000) & 0xffff);\n byteArray.setUint32(3, num % 0x100000000);\n } else if (byteLength === 8) {\n byteArray = new DataView(new ArrayBuffer(8));\n byteArray.setUint32(0, (num / 0x100000000) | 0);\n byteArray.setUint32(4, num % 0x100000000);\n } else {\n throw new Error(\n \"EBML.typedArrayUtils.numberToByteArray: byte length must be less than or equal to 8\"\n );\n }\n return new Uint8Array(byteArray.buffer);\n};\n\nexport const stringToByteArray = (str: string): Uint8Array => {\n return Uint8Array.from(Array.from(str).map((_) => _.codePointAt(0)!));\n};\n\nexport function getNumberByteLength(num: number | bigint): number {\n if (num < 0) {\n throw new Error(\n \"EBML.typedArrayUtils.getNumberByteLength: negative number not implemented\"\n );\n } else if (num < 0x100) {\n return 1;\n } else if (num < 0x10000) {\n return 2;\n } else if (num < 0x1000000) {\n return 3;\n } else if (num < 0x100000000) {\n return 4;\n } else if (num < 0x10000000000) {\n return 5;\n } else if (num < 0x1000000000000) {\n return 6;\n } else if (num < 0x20000000000000n) {\n return 7;\n } else {\n throw new Error(\n \"EBML.typedArrayUtils.getNumberByteLength: number exceeds Number.MAX_SAFE_INTEGER\"\n );\n }\n}\n\nexport const int16Bit = (num: number): Uint8Array => {\n const ab = new ArrayBuffer(2);\n new DataView(ab).setInt16(0, num);\n return new Uint8Array(ab);\n};\n\nexport const float32bit = (num: number): Uint8Array => {\n const ab = new ArrayBuffer(4);\n new DataView(ab).setFloat32(0, num);\n return new Uint8Array(ab);\n};\n\nexport const dumpBytes = (b: ArrayBuffer): string => {\n return Array.from(new Uint8Array(b))\n .map((_) => `0x${_.toString(16)}`)\n .join(\", \");\n};\n"]}
@@ -0,0 +1,2 @@
1
+ export * from "./container";
2
+ export * from "./ebml";
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./container"), exports);
18
+ __exportStar(require("./ebml"), exports);
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../rtp/src/container/webm/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,yCAAuB","sourcesContent":["export * from \"./container\";\nexport * from \"./ebml\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"depacketizer.js","sourceRoot":"","sources":["../../../../../rtp/src/processor/depacketizer.ts"],"names":[],"mappings":"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","sourcesContent":["import debug from \"debug\";\nimport Event from \"rx.mini\";\n\nimport {\n DepacketizerCodec,\n dePacketizeRtpPackets,\n enumerate,\n RtpHeader,\n RtpPacket,\n uint16Add,\n uint16Gt,\n} from \"..\";\nimport { Processor } from \"./interface\";\n\nconst path = `werift-rtp : packages/rtp/src/processor/depacketizer.ts`;\nconst log = debug(path);\n\nexport type DepacketizerInput = {\n rtp?: RtpPacket;\n /**ms */\n time?: number;\n eol?: boolean;\n};\n\nexport interface DepacketizerOutput {\n frame?: CodecFrame;\n eol?: boolean;\n}\n\nexport interface CodecFrame {\n data: Buffer;\n isKeyframe: boolean;\n /**ms */\n time: number;\n [key: string]: any;\n}\n\nexport interface DepacketizerOptions {\n isFinalPacketInSequence?: (header: RtpHeader) => boolean;\n waitForKeyframe?: boolean;\n}\n\nexport class DepacketizeBase\n implements Processor<DepacketizerInput, DepacketizerOutput>\n{\n private rtpBuffer: DepacketizerInput[] = [];\n private frameFragmentBuffer?: Buffer;\n private lastSeqNum?: number;\n private frameBroken = false;\n private keyframeReceived = false;\n private count = 0;\n readonly onNeedKeyFrame = new Event();\n private internalStats = {};\n\n constructor(\n private codec: DepacketizerCodec,\n private options: DepacketizerOptions = {}\n ) {}\n\n toJSON(): Record<string, any> {\n return {\n ...this.internalStats,\n codec: this.codec,\n bufferingLength: this.rtpBuffer.length,\n lastSeqNum: this.lastSeqNum,\n count: this.count,\n };\n }\n\n processInput(input: DepacketizerInput): DepacketizerOutput[] {\n const output: DepacketizerOutput[] = [];\n if (!input.rtp) {\n if (input.eol) {\n output.push({ eol: true });\n this.stop();\n }\n return output;\n }\n\n if (this.options.isFinalPacketInSequence) {\n const isFinal = this.checkFinalPacket(input);\n if (isFinal) {\n try {\n const { data, isKeyframe, sequence, timestamp, frameFragmentBuffer } =\n dePacketizeRtpPackets(\n this.codec,\n this.rtpBuffer.map((b) => b.rtp!),\n this.frameFragmentBuffer\n );\n this.frameFragmentBuffer = frameFragmentBuffer;\n\n if (isKeyframe) {\n this.keyframeReceived = true;\n }\n\n if (this.options.waitForKeyframe && this.keyframeReceived === false) {\n this.onNeedKeyFrame.execute();\n return [];\n }\n\n if (!this.frameBroken && data.length > 0) {\n const time = this.rtpBuffer.at(-1)?.time ?? 0;\n output.push({\n frame: {\n data,\n isKeyframe,\n time,\n sequence: this.count++,\n rtpSeq: sequence,\n timestamp,\n },\n });\n this.internalStats[\"depacketizer\"] = new Date().toISOString();\n }\n\n if (this.frameBroken) {\n this.frameBroken = false;\n }\n\n this.clearBuffer();\n\n return output;\n } catch (error) {\n log(\"error\", error, { input, codec: this.codec });\n this.clearBuffer();\n }\n }\n } else {\n try {\n const { data, isKeyframe, sequence, timestamp, frameFragmentBuffer } =\n dePacketizeRtpPackets(\n this.codec,\n [input.rtp],\n this.frameFragmentBuffer\n );\n this.frameFragmentBuffer = frameFragmentBuffer;\n output.push({\n frame: {\n data,\n isKeyframe,\n time: input.time!,\n sequence: this.count++,\n rtpSeq: sequence,\n timestamp,\n },\n });\n this.internalStats[\"depacketizer\"] = new Date().toISOString();\n return output;\n } catch (error) {\n log(\"error\", error, { input, codec: this.codec });\n }\n }\n return [];\n }\n\n private stop() {\n this.clearBuffer();\n\n this.onNeedKeyFrame.allUnsubscribe();\n }\n\n private clearBuffer() {\n this.rtpBuffer.forEach((b) => b.rtp!.clear());\n this.rtpBuffer = [];\n this.frameFragmentBuffer = undefined;\n }\n\n private checkFinalPacket({ rtp, time }: DepacketizerInput): boolean {\n if (!this.options.isFinalPacketInSequence) {\n throw new Error(\"isFinalPacketInSequence not exist\");\n }\n\n const { sequenceNumber } = rtp!.header;\n if (this.lastSeqNum != undefined) {\n const expect = uint16Add(this.lastSeqNum, 1);\n if (uint16Gt(expect, sequenceNumber)) {\n this.internalStats[\"unExpect\"] = {\n expect,\n sequenceNumber,\n codec: this.codec,\n at: new Date().toISOString(),\n count: (this.internalStats[\"unExpect\"]?.count ?? 0) + 1,\n };\n return false;\n }\n if (uint16Gt(sequenceNumber, expect)) {\n this.internalStats[\"packetLost\"] ??= [];\n if (this.internalStats[\"packetLost\"].length > 10) {\n this.internalStats[\"packetLost\"].shift();\n }\n this.internalStats[\"packetLost\"].push({\n expect,\n sequenceNumber,\n codec: this.codec,\n at: new Date().toISOString(),\n });\n this.internalStats[\"packetLostCount\"] ??= 0;\n this.internalStats[\"packetLostCount\"]++;\n\n this.frameBroken = true;\n this.clearBuffer();\n }\n }\n\n this.rtpBuffer.push({ rtp, time });\n this.lastSeqNum = sequenceNumber;\n\n let finalPacket: number | undefined;\n for (const [i, { rtp }] of enumerate(this.rtpBuffer)) {\n if (this.options.isFinalPacketInSequence(rtp!.header)) {\n finalPacket = i;\n break;\n }\n }\n if (finalPacket == undefined) {\n return false;\n }\n\n return true;\n }\n}\n"]}
1
+ {"version":3,"file":"depacketizer.js","sourceRoot":"","sources":["../../../../../rtp/src/processor/depacketizer.ts"],"names":[],"mappings":"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","sourcesContent":["import debug from \"debug\";\nimport Event from \"rx.mini\";\n\nimport {\n DepacketizerCodec,\n dePacketizeRtpPackets,\n enumerate,\n RtpHeader,\n RtpPacket,\n uint16Add,\n uint16Gt,\n} from \"..\";\nimport { Processor } from \"./interface\";\n\nconst path = `werift-rtp : packages/rtp/src/processor/depacketizer.ts`;\nconst log = debug(path);\n\nexport type DepacketizerInput = {\n rtp?: RtpPacket;\n /**ms */\n time?: number;\n eol?: boolean;\n};\n\nexport interface DepacketizerOutput {\n frame?: CodecFrame;\n eol?: boolean;\n}\n\nexport interface CodecFrame {\n data: Buffer;\n isKeyframe: boolean;\n /**ms */\n time: number;\n [key: string]: any;\n}\n\nexport interface DepacketizerOptions {\n isFinalPacketInSequence?: (header: RtpHeader) => boolean;\n waitForKeyframe?: boolean;\n}\n\nexport class DepacketizeBase\n implements Processor<DepacketizerInput, DepacketizerOutput>\n{\n private rtpBuffer: DepacketizerInput[] = [];\n private frameFragmentBuffer?: Buffer;\n private lastSeqNum?: number;\n private frameBroken = false;\n private keyframeReceived = false;\n private count = 0;\n readonly onNeedKeyFrame = new Event();\n private internalStats = {};\n\n constructor(\n private codec: DepacketizerCodec,\n private options: DepacketizerOptions = {}\n ) {}\n\n toJSON(): Record<string, any> {\n return {\n ...this.internalStats,\n codec: this.codec,\n bufferingLength: this.rtpBuffer.length,\n lastSeqNum: this.lastSeqNum,\n count: this.count,\n };\n }\n\n processInput(input: DepacketizerInput): DepacketizerOutput[] {\n const output: DepacketizerOutput[] = [];\n if (!input.rtp) {\n if (input.eol) {\n output.push({ eol: true });\n this.stop();\n }\n return output;\n }\n\n if (this.options.isFinalPacketInSequence) {\n const isFinal = this.checkFinalPacket(input);\n if (isFinal) {\n try {\n const { data, isKeyframe, sequence, timestamp, frameFragmentBuffer } =\n dePacketizeRtpPackets(\n this.codec,\n this.rtpBuffer.map((b) => b.rtp!),\n this.frameFragmentBuffer\n );\n this.frameFragmentBuffer = frameFragmentBuffer;\n\n if (isKeyframe) {\n this.keyframeReceived = true;\n }\n\n if (this.options.waitForKeyframe && this.keyframeReceived === false) {\n this.onNeedKeyFrame.execute();\n return [];\n }\n\n if (!this.frameBroken && data.length > 0) {\n const time = this.rtpBuffer.at(-1)?.time ?? 0;\n output.push({\n frame: {\n data,\n isKeyframe,\n time,\n sequence: this.count++,\n rtpSeq: sequence,\n timestamp,\n },\n });\n this.internalStats[\"depacketizer\"] = new Date().toISOString();\n }\n\n if (this.frameBroken) {\n this.frameBroken = false;\n }\n\n this.clearBuffer();\n\n return output;\n } catch (error) {\n log(\"error\", error, { input, codec: this.codec });\n this.clearBuffer();\n }\n }\n } else {\n try {\n const { data, isKeyframe, sequence, timestamp, frameFragmentBuffer } =\n dePacketizeRtpPackets(\n this.codec,\n [input.rtp],\n this.frameFragmentBuffer\n );\n this.frameFragmentBuffer = frameFragmentBuffer;\n output.push({\n frame: {\n data,\n isKeyframe,\n time: input.time!,\n sequence: this.count++,\n rtpSeq: sequence,\n timestamp,\n },\n });\n this.internalStats[\"depacketizer\"] = new Date().toISOString();\n return output;\n } catch (error) {\n log(\"error\", error, { input, codec: this.codec });\n }\n }\n return [];\n }\n\n private stop() {\n this.clearBuffer();\n\n this.onNeedKeyFrame.allUnsubscribe();\n }\n\n private clearBuffer() {\n this.rtpBuffer.forEach((b) => b.rtp!.clear());\n this.rtpBuffer = [];\n this.frameFragmentBuffer = undefined;\n }\n\n private checkFinalPacket({ rtp, time }: DepacketizerInput): boolean {\n if (!this.options.isFinalPacketInSequence) {\n throw new Error(\"isFinalPacketInSequence not exist\");\n }\n\n const { sequenceNumber } = rtp!.header;\n if (this.lastSeqNum != undefined) {\n const expect = uint16Add(this.lastSeqNum, 1);\n if (uint16Gt(expect, sequenceNumber)) {\n this.internalStats[\"unExpect\"] = {\n expect,\n sequenceNumber,\n codec: this.codec,\n at: new Date().toISOString(),\n count: (this.internalStats[\"unExpect\"]?.count ?? 0) + 1,\n };\n return false;\n }\n if (uint16Gt(sequenceNumber, expect)) {\n this.internalStats[\"packetLost\"] ??= [];\n if (this.internalStats[\"packetLost\"].length > 10) {\n this.internalStats[\"packetLost\"].shift();\n }\n this.internalStats[\"packetLost\"].push({\n expect,\n sequenceNumber,\n codec: this.codec,\n at: new Date().toISOString(),\n });\n this.internalStats[\"packetLostCount\"] ??= 0;\n this.internalStats[\"packetLostCount\"]++;\n\n this.frameBroken = true;\n this.clearBuffer();\n }\n }\n\n this.rtpBuffer.push({ rtp, time });\n this.lastSeqNum = sequenceNumber;\n\n let finalPacket: number | undefined;\n for (const [i, { rtp }] of enumerate(this.rtpBuffer)) {\n if (this.options.isFinalPacketInSequence(rtp!.header)) {\n finalPacket = i;\n break;\n }\n }\n if (finalPacket == undefined) {\n return false;\n }\n\n return true;\n }\n}\n"]}
@@ -6,7 +6,7 @@ export type DtxOutput = DtxInput;
6
6
  export declare class DtxBase implements Processor<DtxInput, DtxOutput> {
7
7
  ptime: number;
8
8
  private dummyPacket;
9
- readonly id: string;
9
+ readonly id: `${string}-${string}-${string}-${string}-${string}`;
10
10
  previousTimestamp?: number;
11
11
  private fillCount;
12
12
  private internalStats;
@@ -1 +1 @@
1
- {"version":3,"file":"dtx.js","sourceRoot":"","sources":["../../../../../rtp/src/processor/dtx.ts"],"names":[],"mappings":";;;AAAA,mCAAoC;AASpC,MAAa,OAAO;IAKlB,YAAmB,KAAa,EAAU,WAAmB;;;;;mBAA1C;;;;;;mBAAuB;;QAJ1C;;;;mBAAc,IAAA,mBAAU,GAAE;WAAC;QAC3B;;;;;WAA2B;QAC3B;;;;mBAAoB,CAAC;WAAC;QACtB;;;;mBAAwB,EAAE;WAAC;IACqC,CAAC;IAEjE,MAAM;QACJ,OAAO,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;IAC3E,CAAC;IAED,YAAY,CAAC,EAAE,KAAK,EAAE,GAAG,EAAY;QACnC,IAAI,GAAG,EAAE;YACP,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,OAAO,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;SACxB;QAED,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;gBAC3B,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAC;gBACpC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBACrD,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;aACpB;YAED,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,KAAK,EAAE;gBACrD,MAAM,YAAY,GAA4B,EAAE,CAAC;gBACjD,KACE,IAAI,IAAI,GAAG,IAAI,CAAC,iBAAiB,EACjC,IAAI,GAAG,KAAK,CAAC,IAAI,EACjB,IAAI,IAAI,IAAI,CAAC,KAAK,EAClB;oBACA,YAAY,CAAC,IAAI,CAAC;wBAChB,KAAK,EAAE;4BACL,IAAI;4BACJ,UAAU,EAAE,KAAK,CAAC,UAAU;4BAC5B,IAAI,EAAE,IAAI,CAAC,WAAW;yBACvB;qBACF,CAAC,CAAC;oBACH,IAAI,CAAC,SAAS,EAAE,CAAC;iBAClB;gBAED,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAC;gBACpC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBACrD,OAAO,CAAC,GAAG,YAAY,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;aACrC;iBAAM;gBACL,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAC;gBACpC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBACrD,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;aACpB;SACF;QAED,OAAO,EAAE,CAAC;IACZ,CAAC;IAEO,IAAI;QACV,IAAI,CAAC,WAAW,GAAG,SAAgB,CAAC;IACtC,CAAC;CACF;AAzDD,0BAyDC","sourcesContent":["import { randomUUID } from \"crypto\";\n\nimport { CodecFrame, DepacketizerOutput } from \"./depacketizer\";\nimport { Processor } from \"./interface\";\n\nexport type DtxInput = DepacketizerOutput;\n\nexport type DtxOutput = DtxInput;\n\nexport class DtxBase implements Processor<DtxInput, DtxOutput> {\n readonly id = randomUUID();\n previousTimestamp?: number;\n private fillCount = 0;\n private internalStats = {};\n constructor(public ptime: number, private dummyPacket: Buffer) {}\n\n toJSON(): Record<string, any> {\n return { ...this.internalStats, id: this.id, fillCount: this.fillCount };\n }\n\n processInput({ frame, eol }: DtxInput): DtxOutput[] {\n if (eol) {\n this.stop();\n return [{ eol: true }];\n }\n\n if (frame) {\n if (!this.previousTimestamp) {\n this.previousTimestamp = frame.time;\n this.internalStats[\"dtx\"] = new Date().toISOString();\n return [{ frame }];\n }\n\n if (frame.time != this.previousTimestamp + this.ptime) {\n const dummyPackets: { frame: CodecFrame }[] = [];\n for (\n let time = this.previousTimestamp;\n time < frame.time;\n time += this.ptime\n ) {\n dummyPackets.push({\n frame: {\n time,\n isKeyframe: frame.isKeyframe,\n data: this.dummyPacket,\n },\n });\n this.fillCount++;\n }\n\n this.previousTimestamp = frame.time;\n this.internalStats[\"dtx\"] = new Date().toISOString();\n return [...dummyPackets, { frame }];\n } else {\n this.previousTimestamp = frame.time;\n this.internalStats[\"dtx\"] = new Date().toISOString();\n return [{ frame }];\n }\n }\n\n return [];\n }\n\n private stop() {\n this.dummyPacket = undefined as any;\n }\n}\n"]}
1
+ {"version":3,"file":"dtx.js","sourceRoot":"","sources":["../../../../../rtp/src/processor/dtx.ts"],"names":[],"mappings":";;;AAAA,mCAAoC;AASpC,MAAa,OAAO;IAKlB,YAAmB,KAAa,EAAU,WAAmB;QAAjD;;;;mBAAO,KAAK;WAAQ;QAAE;;;;mBAAQ,WAAW;WAAQ;QAJpD;;;;mBAAK,IAAA,mBAAU,GAAE;WAAC;QAC3B;;;;;WAA2B;QACnB;;;;mBAAY,CAAC;WAAC;QACd;;;;mBAAgB,EAAE;WAAC;IACqC,CAAC;IAEjE,MAAM;QACJ,OAAO,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;IAC3E,CAAC;IAED,YAAY,CAAC,EAAE,KAAK,EAAE,GAAG,EAAY;QACnC,IAAI,GAAG,EAAE;YACP,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,OAAO,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;SACxB;QAED,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;gBAC3B,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAC;gBACpC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBACrD,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;aACpB;YAED,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,KAAK,EAAE;gBACrD,MAAM,YAAY,GAA4B,EAAE,CAAC;gBACjD,KACE,IAAI,IAAI,GAAG,IAAI,CAAC,iBAAiB,EACjC,IAAI,GAAG,KAAK,CAAC,IAAI,EACjB,IAAI,IAAI,IAAI,CAAC,KAAK,EAClB;oBACA,YAAY,CAAC,IAAI,CAAC;wBAChB,KAAK,EAAE;4BACL,IAAI;4BACJ,UAAU,EAAE,KAAK,CAAC,UAAU;4BAC5B,IAAI,EAAE,IAAI,CAAC,WAAW;yBACvB;qBACF,CAAC,CAAC;oBACH,IAAI,CAAC,SAAS,EAAE,CAAC;iBAClB;gBAED,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAC;gBACpC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBACrD,OAAO,CAAC,GAAG,YAAY,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;aACrC;iBAAM;gBACL,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAC;gBACpC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBACrD,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;aACpB;SACF;QAED,OAAO,EAAE,CAAC;IACZ,CAAC;IAEO,IAAI;QACV,IAAI,CAAC,WAAW,GAAG,SAAgB,CAAC;IACtC,CAAC;CACF;AAzDD,0BAyDC","sourcesContent":["import { randomUUID } from \"crypto\";\n\nimport { CodecFrame, DepacketizerOutput } from \"./depacketizer\";\nimport { Processor } from \"./interface\";\n\nexport type DtxInput = DepacketizerOutput;\n\nexport type DtxOutput = DtxInput;\n\nexport class DtxBase implements Processor<DtxInput, DtxOutput> {\n readonly id = randomUUID();\n previousTimestamp?: number;\n private fillCount = 0;\n private internalStats = {};\n constructor(public ptime: number, private dummyPacket: Buffer) {}\n\n toJSON(): Record<string, any> {\n return { ...this.internalStats, id: this.id, fillCount: this.fillCount };\n }\n\n processInput({ frame, eol }: DtxInput): DtxOutput[] {\n if (eol) {\n this.stop();\n return [{ eol: true }];\n }\n\n if (frame) {\n if (!this.previousTimestamp) {\n this.previousTimestamp = frame.time;\n this.internalStats[\"dtx\"] = new Date().toISOString();\n return [{ frame }];\n }\n\n if (frame.time != this.previousTimestamp + this.ptime) {\n const dummyPackets: { frame: CodecFrame }[] = [];\n for (\n let time = this.previousTimestamp;\n time < frame.time;\n time += this.ptime\n ) {\n dummyPackets.push({\n frame: {\n time,\n isKeyframe: frame.isKeyframe,\n data: this.dummyPacket,\n },\n });\n this.fillCount++;\n }\n\n this.previousTimestamp = frame.time;\n this.internalStats[\"dtx\"] = new Date().toISOString();\n return [...dummyPackets, { frame }];\n } else {\n this.previousTimestamp = frame.time;\n this.internalStats[\"dtx\"] = new Date().toISOString();\n return [{ frame }];\n }\n }\n\n return [];\n }\n\n private stop() {\n this.dummyPacket = undefined as any;\n }\n}\n"]}
@@ -9,6 +9,8 @@ export * from "./jitterBufferCallback";
9
9
  export * from "./jitterBufferTransformer";
10
10
  export * from "./lipsync";
11
11
  export * from "./lipsyncCallback";
12
+ export * from "./mp4";
13
+ export * from "./mp4Callback";
12
14
  export * from "./mute";
13
15
  export * from "./muteCallback";
14
16
  export * from "./nack";
@@ -25,6 +25,8 @@ __exportStar(require("./jitterBufferCallback"), exports);
25
25
  __exportStar(require("./jitterBufferTransformer"), exports);
26
26
  __exportStar(require("./lipsync"), exports);
27
27
  __exportStar(require("./lipsyncCallback"), exports);
28
+ __exportStar(require("./mp4"), exports);
29
+ __exportStar(require("./mp4Callback"), exports);
28
30
  __exportStar(require("./mute"), exports);
29
31
  __exportStar(require("./muteCallback"), exports);
30
32
  __exportStar(require("./nack"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../rtp/src/processor/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iDAA+B;AAC/B,yDAAuC;AACvC,4DAA0C;AAC1C,wCAAsB;AACtB,gDAA8B;AAC9B,8CAA4B;AAC5B,iDAA+B;AAC/B,yDAAuC;AACvC,4DAA0C;AAC1C,4CAA0B;AAC1B,oDAAkC;AAClC,yCAAuB;AACvB,iDAA+B;AAC/B,yCAAuB;AACvB,wDAAsC;AACtC,4CAA0B;AAC1B,oDAAkC;AAClC,iDAA+B;AAC/B,gDAA8B;AAC9B,8CAA4B;AAC5B,4CAA0B;AAC1B,oDAAkC;AAClC,yCAAuB;AACvB,iDAA+B;AAC/B,+CAA6B","sourcesContent":["export * from \"./depacketizer\";\nexport * from \"./depacketizerCallback\";\nexport * from \"./depacketizerTransformer\";\nexport * from \"./dtx\";\nexport * from \"./dtxCallback\";\nexport * from \"./interface\";\nexport * from \"./jitterBuffer\";\nexport * from \"./jitterBufferCallback\";\nexport * from \"./jitterBufferTransformer\";\nexport * from \"./lipsync\";\nexport * from \"./lipsyncCallback\";\nexport * from \"./mute\";\nexport * from \"./muteCallback\";\nexport * from \"./nack\";\nexport * from \"./nackHandlerCallback\";\nexport * from \"./ntpTime\";\nexport * from \"./ntpTimeCallback\";\nexport * from \"./rtcpCallback\";\nexport * from \"./rtpCallback\";\nexport * from \"./rtpStream\";\nexport * from \"./rtpTime\";\nexport * from \"./rtpTimeCallback\";\nexport * from \"./webm\";\nexport * from \"./webmCallback\";\nexport * from \"./webmStream\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../rtp/src/processor/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iDAA+B;AAC/B,yDAAuC;AACvC,4DAA0C;AAC1C,wCAAsB;AACtB,gDAA8B;AAC9B,8CAA4B;AAC5B,iDAA+B;AAC/B,yDAAuC;AACvC,4DAA0C;AAC1C,4CAA0B;AAC1B,oDAAkC;AAClC,wCAAsB;AACtB,gDAA8B;AAC9B,yCAAuB;AACvB,iDAA+B;AAC/B,yCAAuB;AACvB,wDAAsC;AACtC,4CAA0B;AAC1B,oDAAkC;AAClC,iDAA+B;AAC/B,gDAA8B;AAC9B,8CAA4B;AAC5B,4CAA0B;AAC1B,oDAAkC;AAClC,yCAAuB;AACvB,iDAA+B;AAC/B,+CAA6B","sourcesContent":["export * from \"./depacketizer\";\nexport * from \"./depacketizerCallback\";\nexport * from \"./depacketizerTransformer\";\nexport * from \"./dtx\";\nexport * from \"./dtxCallback\";\nexport * from \"./interface\";\nexport * from \"./jitterBuffer\";\nexport * from \"./jitterBufferCallback\";\nexport * from \"./jitterBufferTransformer\";\nexport * from \"./lipsync\";\nexport * from \"./lipsyncCallback\";\nexport * from \"./mp4\";\nexport * from \"./mp4Callback\";\nexport * from \"./mute\";\nexport * from \"./muteCallback\";\nexport * from \"./nack\";\nexport * from \"./nackHandlerCallback\";\nexport * from \"./ntpTime\";\nexport * from \"./ntpTimeCallback\";\nexport * from \"./rtcpCallback\";\nexport * from \"./rtpCallback\";\nexport * from \"./rtpStream\";\nexport * from \"./rtpTime\";\nexport * from \"./rtpTimeCallback\";\nexport * from \"./webm\";\nexport * from \"./webmCallback\";\nexport * from \"./webmStream\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"jitterBuffer.js","sourceRoot":"","sources":["../../../../../rtp/src/processor/jitterBuffer.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n RequireAtLeastOne,\n RtpPacket,\n uint16Add,\n uint16Gte,\n uint32Add,\n uint32Gt,\n} from \"..\";\nimport { Processor } from \"./interface\";\nimport { RtpOutput } from \"./rtpCallback\";\n\nexport type JitterBufferInput = RtpOutput;\n\nexport interface JitterBufferOutput extends RtpOutput {\n isPacketLost?: { from: number; to: number };\n}\n\nexport class JitterBufferBase\n implements Processor<JitterBufferInput, JitterBufferOutput>\n{\n private options: JitterBufferOptions;\n /**uint16 */\n private presentSeqNum?: number;\n private rtpBuffer: { [sequenceNumber: number]: RtpPacket } = {};\n private get expectNextSeqNum() {\n return uint16Add(this.presentSeqNum!, 1);\n }\n private internalStats = {};\n\n constructor(\n public clockRate: number,\n options: Partial<JitterBufferOptions> = {}\n ) {\n this.options = {\n latency: options.latency ?? 200,\n bufferSize: options.bufferSize ?? 10000,\n };\n }\n\n toJSON() {\n return {\n ...this.internalStats,\n rtpBufferLength: Object.values(this.rtpBuffer).length,\n presentSeqNum: this.presentSeqNum,\n expectNextSeqNum: this.expectNextSeqNum,\n };\n }\n\n private stop() {\n this.rtpBuffer = {};\n }\n\n processInput(input: JitterBufferInput): JitterBufferOutput[] {\n const output: JitterBufferOutput[] = [];\n\n if (!input.rtp) {\n if (input.eol) {\n const packets = this.sortAndClearBuffer(this.rtpBuffer);\n for (const rtp of packets) {\n output.push({ rtp });\n }\n output.push({ eol: true });\n\n this.stop();\n }\n return output;\n }\n\n const { packets, timeoutSeqNum } = this.processRtp(input.rtp);\n\n if (timeoutSeqNum != undefined) {\n const isPacketLost = {\n from: this.expectNextSeqNum,\n to: timeoutSeqNum,\n };\n this.presentSeqNum = input.rtp.header.sequenceNumber;\n output.push({ isPacketLost });\n if (packets) {\n for (const rtp of [...packets, input.rtp]) {\n output.push({ rtp });\n }\n }\n this.internalStats[\"jitterBuffer\"] = new Date().toISOString();\n return output;\n } else {\n if (packets) {\n for (const rtp of packets) {\n output.push({ rtp });\n }\n this.internalStats[\"jitterBuffer\"] = new Date().toISOString();\n return output;\n }\n return [];\n }\n }\n\n private processRtp(rtp: RtpPacket): RequireAtLeastOne<{\n packets: RtpPacket[];\n timeoutSeqNum: number;\n nothing: undefined;\n }> {\n const { sequenceNumber, timestamp } = rtp.header;\n\n // init\n if (this.presentSeqNum == undefined) {\n this.presentSeqNum = sequenceNumber;\n return { packets: [rtp] };\n }\n\n // duplicate\n if (uint16Gte(this.presentSeqNum, sequenceNumber)) {\n this.internalStats[\"duplicate\"] = {\n count: (this.internalStats[\"duplicate\"]?.count ?? 0) + 1,\n sequenceNumber,\n timestamp: new Date().toISOString(),\n };\n return { nothing: undefined };\n }\n\n // expect\n if (sequenceNumber === this.expectNextSeqNum) {\n this.presentSeqNum = sequenceNumber;\n\n const rtpBuffer = this.resolveBuffer(uint16Add(sequenceNumber, 1));\n this.presentSeqNum =\n rtpBuffer.at(-1)?.header.sequenceNumber ?? this.presentSeqNum;\n\n this.disposeTimeoutPackets(timestamp);\n\n return { packets: [rtp, ...rtpBuffer] };\n }\n\n this.pushRtpBuffer(rtp);\n\n const { latestTimeoutSeqNum, sorted } =\n this.disposeTimeoutPackets(timestamp);\n\n if (latestTimeoutSeqNum) {\n return { timeoutSeqNum: latestTimeoutSeqNum, packets: sorted };\n } else {\n return { nothing: undefined };\n }\n }\n\n private pushRtpBuffer(rtp: RtpPacket) {\n if (Object.values(this.rtpBuffer).length > this.options.bufferSize) {\n this.internalStats[\"buffer_overflow\"] = {\n count: (this.internalStats[\"buffer_overflow\"]?.count ?? 0) + 1,\n timestamp: new Date().toISOString(),\n };\n return;\n }\n\n this.rtpBuffer[rtp.header.sequenceNumber] = rtp;\n }\n\n private resolveBuffer(seqNumFrom: number) {\n const resolve: RtpPacket[] = [];\n\n for (let index = seqNumFrom; ; index = uint16Add(index, 1)) {\n const rtp = this.rtpBuffer[index];\n if (rtp) {\n resolve.push(rtp);\n delete this.rtpBuffer[index];\n } else {\n break;\n }\n }\n\n return resolve;\n }\n\n private sortAndClearBuffer(rtpBuffer: {\n [sequenceNumber: number]: RtpPacket;\n }) {\n const buffer: RtpPacket[] = [];\n for (let index = this.presentSeqNum ?? 0; ; index = uint16Add(index, 1)) {\n const rtp = rtpBuffer[index];\n if (rtp) {\n buffer.push(rtp);\n delete rtpBuffer[index];\n }\n if (Object.values(rtpBuffer).length === 0) {\n break;\n }\n }\n return buffer;\n }\n\n private disposeTimeoutPackets(baseTimestamp: number) {\n let latestTimeoutSeqNum: number | undefined;\n\n const packets = Object.values(this.rtpBuffer)\n .map((rtp) => {\n const { timestamp, sequenceNumber } = rtp.header;\n\n if (uint32Gt(timestamp, baseTimestamp)) {\n return;\n }\n\n const elapsedSec =\n uint32Add(baseTimestamp, -timestamp) / this.clockRate;\n\n if (elapsedSec * 1000 > this.options.latency) {\n this.internalStats[\"timeout_packet\"] = {\n count: (this.internalStats[\"timeout_packet\"]?.count ?? 0) + 1,\n at: new Date().toISOString(),\n sequenceNumber,\n elapsedSec,\n baseTimestamp,\n timestamp,\n };\n\n if (latestTimeoutSeqNum == undefined) {\n latestTimeoutSeqNum = sequenceNumber;\n }\n // 現在のSeqNumとの差が最も大きいSeqNumを探す\n if (\n uint16Add(sequenceNumber, -this.presentSeqNum!) >\n uint16Add(latestTimeoutSeqNum, -this.presentSeqNum!)\n ) {\n latestTimeoutSeqNum = sequenceNumber;\n }\n\n const packet = this.rtpBuffer[sequenceNumber];\n delete this.rtpBuffer[sequenceNumber];\n return packet;\n }\n })\n .flatMap((p): RtpPacket => p as RtpPacket)\n .filter((p) => p);\n\n const sorted = this.sortAndClearBuffer(\n packets.reduce((acc, cur) => {\n acc[cur.header.sequenceNumber] = cur;\n return acc;\n }, {})\n );\n\n return { latestTimeoutSeqNum, sorted };\n }\n}\n\nexport interface JitterBufferOptions {\n /**milliseconds */\n latency: number;\n bufferSize: number;\n}\n"]}
1
+ {"version":3,"file":"jitterBuffer.js","sourceRoot":"","sources":["../../../../../rtp/src/processor/jitterBuffer.ts"],"names":[],"mappings":";;;AAAA,0BAOY;AAUZ,MAAa,gBAAgB;IAO3B,IAAY,gBAAgB;QAC1B,OAAO,IAAA,aAAS,EAAC,IAAI,CAAC,aAAc,EAAE,CAAC,CAAC,CAAC;IAC3C,CAAC;IAGD,YACS,SAAiB,EACxB,UAAwC,EAAE;QAD1C;;;;mBAAO,SAAS;WAAQ;QAVlB;;;;;WAA6B;QACrC,YAAY;QACJ;;;;;WAAuB;QACvB;;;;mBAAqD,EAAE;WAAC;QAIxD;;;;mBAAgB,EAAE;WAAC;QAMzB,IAAI,CAAC,OAAO,GAAG;YACb,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,GAAG;YAC/B,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,KAAK;SACxC,CAAC;IACJ,CAAC;IAED,MAAM;QACJ,OAAO;YACL,GAAG,IAAI,CAAC,aAAa;YACrB,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM;YACrD,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;SACxC,CAAC;IACJ,CAAC;IAEO,IAAI;QACV,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;IACtB,CAAC;IAED,YAAY,CAAC,KAAwB;QACnC,MAAM,MAAM,GAAyB,EAAE,CAAC;QAExC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;YACd,IAAI,KAAK,CAAC,GAAG,EAAE;gBACb,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACxD,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE;oBACzB,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;iBACtB;gBACD,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;gBAE3B,IAAI,CAAC,IAAI,EAAE,CAAC;aACb;YACD,OAAO,MAAM,CAAC;SACf;QAED,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAE9D,IAAI,aAAa,IAAI,SAAS,EAAE;YAC9B,MAAM,YAAY,GAAG;gBACnB,IAAI,EAAE,IAAI,CAAC,gBAAgB;gBAC3B,EAAE,EAAE,aAAa;aAClB,CAAC;YACF,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC;YACrD,MAAM,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC;YAC9B,IAAI,OAAO,EAAE;gBACX,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE;oBACzC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;iBACtB;aACF;YACD,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAC9D,OAAO,MAAM,CAAC;SACf;aAAM;YACL,IAAI,OAAO,EAAE;gBACX,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE;oBACzB,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;iBACtB;gBACD,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBAC9D,OAAO,MAAM,CAAC;aACf;YACD,OAAO,EAAE,CAAC;SACX;IACH,CAAC;IAEO,UAAU,CAAC,GAAc;QAK/B,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;QAEjD,OAAO;QACP,IAAI,IAAI,CAAC,aAAa,IAAI,SAAS,EAAE;YACnC,IAAI,CAAC,aAAa,GAAG,cAAc,CAAC;YACpC,OAAO,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;SAC3B;QAED,YAAY;QACZ,IAAI,IAAA,aAAS,EAAC,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC,EAAE;YACjD,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,GAAG;gBAChC,KAAK,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC;gBACxD,cAAc;gBACd,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC;YACF,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;SAC/B;QAED,SAAS;QACT,IAAI,cAAc,KAAK,IAAI,CAAC,gBAAgB,EAAE;YAC5C,IAAI,CAAC,aAAa,GAAG,cAAc,CAAC;YAEpC,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,IAAA,aAAS,EAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC;YACnE,IAAI,CAAC,aAAa;gBAChB,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,cAAc,IAAI,IAAI,CAAC,aAAa,CAAC;YAEhE,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;YAEtC,OAAO,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC;SACzC;QAED,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QAExB,MAAM,EAAE,mBAAmB,EAAE,MAAM,EAAE,GACnC,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;QAExC,IAAI,mBAAmB,EAAE;YACvB,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;SAChE;aAAM;YACL,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;SAC/B;IACH,CAAC;IAEO,aAAa,CAAC,GAAc;QAClC,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;YAClE,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,GAAG;gBACtC,KAAK,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC;gBAC9D,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC;YACF,OAAO;SACR;QAED,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,GAAG,CAAC;IAClD,CAAC;IAEO,aAAa,CAAC,UAAkB;QACtC,MAAM,OAAO,GAAgB,EAAE,CAAC;QAEhC,KAAK,IAAI,KAAK,GAAG,UAAU,GAAI,KAAK,GAAG,IAAA,aAAS,EAAC,KAAK,EAAE,CAAC,CAAC,EAAE;YAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAClC,IAAI,GAAG,EAAE;gBACP,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAClB,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;aAC9B;iBAAM;gBACL,MAAM;aACP;SACF;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,kBAAkB,CAAC,SAE1B;QACC,MAAM,MAAM,GAAgB,EAAE,CAAC;QAC/B,KAAK,IAAI,KAAK,GAAG,IAAI,CAAC,aAAa,IAAI,CAAC,GAAI,KAAK,GAAG,IAAA,aAAS,EAAC,KAAK,EAAE,CAAC,CAAC,EAAE;YACvE,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;YAC7B,IAAI,GAAG,EAAE;gBACP,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACjB,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;aACzB;YACD,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;gBACzC,MAAM;aACP;SACF;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,qBAAqB,CAAC,aAAqB;QACjD,IAAI,mBAAuC,CAAC;QAE5C,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;aAC1C,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YACX,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;YAEjD,IAAI,IAAA,YAAQ,EAAC,SAAS,EAAE,aAAa,CAAC,EAAE;gBACtC,OAAO;aACR;YAED,MAAM,UAAU,GACd,IAAA,aAAS,EAAC,aAAa,EAAE,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;YAExD,IAAI,UAAU,GAAG,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;gBAC5C,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,GAAG;oBACrC,KAAK,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC;oBAC7D,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBAC5B,cAAc;oBACd,UAAU;oBACV,aAAa;oBACb,SAAS;iBACV,CAAC;gBAEF,IAAI,mBAAmB,IAAI,SAAS,EAAE;oBACpC,mBAAmB,GAAG,cAAc,CAAC;iBACtC;gBACD,8BAA8B;gBAC9B,IACE,IAAA,aAAS,EAAC,cAAc,EAAE,CAAC,IAAI,CAAC,aAAc,CAAC;oBAC/C,IAAA,aAAS,EAAC,mBAAmB,EAAE,CAAC,IAAI,CAAC,aAAc,CAAC,EACpD;oBACA,mBAAmB,GAAG,cAAc,CAAC;iBACtC;gBAED,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;gBAC9C,OAAO,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;gBACtC,OAAO,MAAM,CAAC;aACf;QACH,CAAC,CAAC;aACD,OAAO,CAAC,CAAC,CAAC,EAAa,EAAE,CAAC,CAAc,CAAC;aACzC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAEpB,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CACpC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YAC1B,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,GAAG,CAAC;YACrC,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,EAAE,CAAC,CACP,CAAC;QAEF,OAAO,EAAE,mBAAmB,EAAE,MAAM,EAAE,CAAC;IACzC,CAAC;CACF;AAhOD,4CAgOC","sourcesContent":["import {\n RequireAtLeastOne,\n RtpPacket,\n uint16Add,\n uint16Gte,\n uint32Add,\n uint32Gt,\n} from \"..\";\nimport { Processor } from \"./interface\";\nimport { RtpOutput } from \"./rtpCallback\";\n\nexport type JitterBufferInput = RtpOutput;\n\nexport interface JitterBufferOutput extends RtpOutput {\n isPacketLost?: { from: number; to: number };\n}\n\nexport class JitterBufferBase\n implements Processor<JitterBufferInput, JitterBufferOutput>\n{\n private options: JitterBufferOptions;\n /**uint16 */\n private presentSeqNum?: number;\n private rtpBuffer: { [sequenceNumber: number]: RtpPacket } = {};\n private get expectNextSeqNum() {\n return uint16Add(this.presentSeqNum!, 1);\n }\n private internalStats = {};\n\n constructor(\n public clockRate: number,\n options: Partial<JitterBufferOptions> = {}\n ) {\n this.options = {\n latency: options.latency ?? 200,\n bufferSize: options.bufferSize ?? 10000,\n };\n }\n\n toJSON() {\n return {\n ...this.internalStats,\n rtpBufferLength: Object.values(this.rtpBuffer).length,\n presentSeqNum: this.presentSeqNum,\n expectNextSeqNum: this.expectNextSeqNum,\n };\n }\n\n private stop() {\n this.rtpBuffer = {};\n }\n\n processInput(input: JitterBufferInput): JitterBufferOutput[] {\n const output: JitterBufferOutput[] = [];\n\n if (!input.rtp) {\n if (input.eol) {\n const packets = this.sortAndClearBuffer(this.rtpBuffer);\n for (const rtp of packets) {\n output.push({ rtp });\n }\n output.push({ eol: true });\n\n this.stop();\n }\n return output;\n }\n\n const { packets, timeoutSeqNum } = this.processRtp(input.rtp);\n\n if (timeoutSeqNum != undefined) {\n const isPacketLost = {\n from: this.expectNextSeqNum,\n to: timeoutSeqNum,\n };\n this.presentSeqNum = input.rtp.header.sequenceNumber;\n output.push({ isPacketLost });\n if (packets) {\n for (const rtp of [...packets, input.rtp]) {\n output.push({ rtp });\n }\n }\n this.internalStats[\"jitterBuffer\"] = new Date().toISOString();\n return output;\n } else {\n if (packets) {\n for (const rtp of packets) {\n output.push({ rtp });\n }\n this.internalStats[\"jitterBuffer\"] = new Date().toISOString();\n return output;\n }\n return [];\n }\n }\n\n private processRtp(rtp: RtpPacket): RequireAtLeastOne<{\n packets: RtpPacket[];\n timeoutSeqNum: number;\n nothing: undefined;\n }> {\n const { sequenceNumber, timestamp } = rtp.header;\n\n // init\n if (this.presentSeqNum == undefined) {\n this.presentSeqNum = sequenceNumber;\n return { packets: [rtp] };\n }\n\n // duplicate\n if (uint16Gte(this.presentSeqNum, sequenceNumber)) {\n this.internalStats[\"duplicate\"] = {\n count: (this.internalStats[\"duplicate\"]?.count ?? 0) + 1,\n sequenceNumber,\n timestamp: new Date().toISOString(),\n };\n return { nothing: undefined };\n }\n\n // expect\n if (sequenceNumber === this.expectNextSeqNum) {\n this.presentSeqNum = sequenceNumber;\n\n const rtpBuffer = this.resolveBuffer(uint16Add(sequenceNumber, 1));\n this.presentSeqNum =\n rtpBuffer.at(-1)?.header.sequenceNumber ?? this.presentSeqNum;\n\n this.disposeTimeoutPackets(timestamp);\n\n return { packets: [rtp, ...rtpBuffer] };\n }\n\n this.pushRtpBuffer(rtp);\n\n const { latestTimeoutSeqNum, sorted } =\n this.disposeTimeoutPackets(timestamp);\n\n if (latestTimeoutSeqNum) {\n return { timeoutSeqNum: latestTimeoutSeqNum, packets: sorted };\n } else {\n return { nothing: undefined };\n }\n }\n\n private pushRtpBuffer(rtp: RtpPacket) {\n if (Object.values(this.rtpBuffer).length > this.options.bufferSize) {\n this.internalStats[\"buffer_overflow\"] = {\n count: (this.internalStats[\"buffer_overflow\"]?.count ?? 0) + 1,\n timestamp: new Date().toISOString(),\n };\n return;\n }\n\n this.rtpBuffer[rtp.header.sequenceNumber] = rtp;\n }\n\n private resolveBuffer(seqNumFrom: number) {\n const resolve: RtpPacket[] = [];\n\n for (let index = seqNumFrom; ; index = uint16Add(index, 1)) {\n const rtp = this.rtpBuffer[index];\n if (rtp) {\n resolve.push(rtp);\n delete this.rtpBuffer[index];\n } else {\n break;\n }\n }\n\n return resolve;\n }\n\n private sortAndClearBuffer(rtpBuffer: {\n [sequenceNumber: number]: RtpPacket;\n }) {\n const buffer: RtpPacket[] = [];\n for (let index = this.presentSeqNum ?? 0; ; index = uint16Add(index, 1)) {\n const rtp = rtpBuffer[index];\n if (rtp) {\n buffer.push(rtp);\n delete rtpBuffer[index];\n }\n if (Object.values(rtpBuffer).length === 0) {\n break;\n }\n }\n return buffer;\n }\n\n private disposeTimeoutPackets(baseTimestamp: number) {\n let latestTimeoutSeqNum: number | undefined;\n\n const packets = Object.values(this.rtpBuffer)\n .map((rtp) => {\n const { timestamp, sequenceNumber } = rtp.header;\n\n if (uint32Gt(timestamp, baseTimestamp)) {\n return;\n }\n\n const elapsedSec =\n uint32Add(baseTimestamp, -timestamp) / this.clockRate;\n\n if (elapsedSec * 1000 > this.options.latency) {\n this.internalStats[\"timeout_packet\"] = {\n count: (this.internalStats[\"timeout_packet\"]?.count ?? 0) + 1,\n at: new Date().toISOString(),\n sequenceNumber,\n elapsedSec,\n baseTimestamp,\n timestamp,\n };\n\n if (latestTimeoutSeqNum == undefined) {\n latestTimeoutSeqNum = sequenceNumber;\n }\n // 現在のSeqNumとの差が最も大きいSeqNumを探す\n if (\n uint16Add(sequenceNumber, -this.presentSeqNum!) >\n uint16Add(latestTimeoutSeqNum, -this.presentSeqNum!)\n ) {\n latestTimeoutSeqNum = sequenceNumber;\n }\n\n const packet = this.rtpBuffer[sequenceNumber];\n delete this.rtpBuffer[sequenceNumber];\n return packet;\n }\n })\n .flatMap((p): RtpPacket => p as RtpPacket)\n .filter((p) => p);\n\n const sorted = this.sortAndClearBuffer(\n packets.reduce((acc, cur) => {\n acc[cur.header.sequenceNumber] = cur;\n return acc;\n }, {})\n );\n\n return { latestTimeoutSeqNum, sorted };\n }\n}\n\nexport interface JitterBufferOptions {\n /**milliseconds */\n latency: number;\n bufferSize: number;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"jitterBufferTransformer.js","sourceRoot":"","sources":["../../../../../rtp/src/processor/jitterBufferTransformer.ts"],"names":[],"mappings":";;;AAAA,oCAA6C;AAE7C,iDAKwB;AAEjB,MAAM,uBAAuB,GAAG,CACrC,GAAG,IAA2D,EAC9D,EAAE,CAAC,IAAI,uBAAuB,CAAC,GAAG,IAAI,CAAC,CAAC,SAAS,CAAC;AAFvC,QAAA,uBAAuB,2BAEgB;AAEpD,MAAa,uBAAwB,SAAQ,+BAAgB;IAG3D,YACS,SAAiB,EACxB,UAAwC,EAAE;QAE1C,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;;;;;mBAHnB;;QAHT;;;;;WAAkE;QAQhE,IAAI,CAAC,SAAS,GAAG,IAAI,qBAAe,CAAC;YACnC,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;gBAC3B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;oBAC1C,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;iBACrB;YACH,CAAC;SACF,CAAC,CAAC;IACL,CAAC;CACF;AAjBD,0DAiBC","sourcesContent":["import { TransformStream } from \"stream/web\";\n\nimport {\n JitterBufferBase,\n JitterBufferInput,\n JitterBufferOptions,\n JitterBufferOutput,\n} from \"./jitterBuffer\";\n\nexport const jitterBufferTransformer = (\n ...args: ConstructorParameters<typeof JitterBufferTransformer>\n) => new JitterBufferTransformer(...args).transform;\n\nexport class JitterBufferTransformer extends JitterBufferBase {\n transform: TransformStream<JitterBufferInput, JitterBufferOutput>;\n\n constructor(\n public clockRate: number,\n options: Partial<JitterBufferOptions> = {}\n ) {\n super(clockRate, options);\n\n this.transform = new TransformStream({\n transform: (input, output) => {\n for (const res of this.processInput(input)) {\n output.enqueue(res);\n }\n },\n });\n }\n}\n"]}
1
+ {"version":3,"file":"jitterBufferTransformer.js","sourceRoot":"","sources":["../../../../../rtp/src/processor/jitterBufferTransformer.ts"],"names":[],"mappings":";;;AAAA,oCAA6C;AAE7C,iDAKwB;AAEjB,MAAM,uBAAuB,GAAG,CACrC,GAAG,IAA2D,EAC9D,EAAE,CAAC,IAAI,uBAAuB,CAAC,GAAG,IAAI,CAAC,CAAC,SAAS,CAAC;AAFvC,QAAA,uBAAuB,2BAEgB;AAEpD,MAAa,uBAAwB,SAAQ,+BAAgB;IAG3D,YACS,SAAiB,EACxB,UAAwC,EAAE;QAE1C,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAH1B;;;;mBAAO,SAAS;WAAQ;QAH1B;;;;;WAAkE;QAQhE,IAAI,CAAC,SAAS,GAAG,IAAI,qBAAe,CAAC;YACnC,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;gBAC3B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;oBAC1C,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;iBACrB;YACH,CAAC;SACF,CAAC,CAAC;IACL,CAAC;CACF;AAjBD,0DAiBC","sourcesContent":["import { TransformStream } from \"stream/web\";\n\nimport {\n JitterBufferBase,\n JitterBufferInput,\n JitterBufferOptions,\n JitterBufferOutput,\n} from \"./jitterBuffer\";\n\nexport const jitterBufferTransformer = (\n ...args: ConstructorParameters<typeof JitterBufferTransformer>\n) => new JitterBufferTransformer(...args).transform;\n\nexport class JitterBufferTransformer extends JitterBufferBase {\n transform: TransformStream<JitterBufferInput, JitterBufferOutput>;\n\n constructor(\n public clockRate: number,\n options: Partial<JitterBufferOptions> = {}\n ) {\n super(clockRate, options);\n\n this.transform = new TransformStream({\n transform: (input, output) => {\n for (const res of this.processInput(input)) {\n output.enqueue(res);\n }\n },\n });\n }\n}\n"]}