werift 0.19.0 → 0.19.1

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 (241) hide show
  1. package/lib/common/src/binary.js.map +1 -1
  2. package/lib/common/src/network.js.map +1 -1
  3. package/lib/common/src/promise.js.map +1 -1
  4. package/lib/dtls/src/cipher/const.js +2 -2
  5. package/lib/dtls/src/cipher/const.js.map +1 -1
  6. package/lib/dtls/src/cipher/create.js +10 -10
  7. package/lib/dtls/src/cipher/create.js.map +1 -1
  8. package/lib/dtls/src/cipher/namedCurve.js.map +1 -1
  9. package/lib/dtls/src/cipher/prf.js +1 -1
  10. package/lib/dtls/src/cipher/prf.js.map +1 -1
  11. package/lib/dtls/src/cipher/suites/aead.d.ts +1 -1
  12. package/lib/dtls/src/cipher/suites/aead.js.map +1 -1
  13. package/lib/dtls/src/client.js.map +1 -1
  14. package/lib/dtls/src/context/cipher.js +2 -2
  15. package/lib/dtls/src/context/cipher.js.map +1 -1
  16. package/lib/dtls/src/context/dtls.js.map +1 -1
  17. package/lib/dtls/src/context/srtp.js.map +1 -1
  18. package/lib/dtls/src/flight/client/flight5.js +8 -6
  19. package/lib/dtls/src/flight/client/flight5.js.map +1 -1
  20. package/lib/dtls/src/flight/flight.js +1 -1
  21. package/lib/dtls/src/flight/flight.js.map +1 -1
  22. package/lib/dtls/src/flight/server/flight2.js.map +1 -1
  23. package/lib/dtls/src/flight/server/flight4.js.map +1 -1
  24. package/lib/dtls/src/flight/server/flight6.js.map +1 -1
  25. package/lib/dtls/src/handshake/const.js +1 -1
  26. package/lib/dtls/src/handshake/const.js.map +1 -1
  27. package/lib/dtls/src/handshake/extensions/ellipticCurves.js +1 -1
  28. package/lib/dtls/src/handshake/extensions/ellipticCurves.js.map +1 -1
  29. package/lib/dtls/src/handshake/extensions/extendedMasterSecret.js +1 -1
  30. package/lib/dtls/src/handshake/extensions/extendedMasterSecret.js.map +1 -1
  31. package/lib/dtls/src/handshake/extensions/renegotiationIndication.js +1 -1
  32. package/lib/dtls/src/handshake/extensions/renegotiationIndication.js.map +1 -1
  33. package/lib/dtls/src/handshake/extensions/signature.js +1 -1
  34. package/lib/dtls/src/handshake/extensions/signature.js.map +1 -1
  35. package/lib/dtls/src/handshake/extensions/useSrtp.js +1 -1
  36. package/lib/dtls/src/handshake/extensions/useSrtp.js.map +1 -1
  37. package/lib/dtls/src/handshake/message/alert.js +1 -1
  38. package/lib/dtls/src/handshake/message/alert.js.map +1 -1
  39. package/lib/dtls/src/handshake/message/certificate.js +1 -1
  40. package/lib/dtls/src/handshake/message/certificate.js.map +1 -1
  41. package/lib/dtls/src/handshake/message/changeCipherSpec.js +1 -1
  42. package/lib/dtls/src/handshake/message/changeCipherSpec.js.map +1 -1
  43. package/lib/dtls/src/handshake/message/client/certificateVerify.js +1 -1
  44. package/lib/dtls/src/handshake/message/client/certificateVerify.js.map +1 -1
  45. package/lib/dtls/src/handshake/message/client/hello.js +1 -1
  46. package/lib/dtls/src/handshake/message/client/hello.js.map +1 -1
  47. package/lib/dtls/src/handshake/message/client/keyExchange.js +1 -1
  48. package/lib/dtls/src/handshake/message/client/keyExchange.js.map +1 -1
  49. package/lib/dtls/src/handshake/message/server/certificateRequest.js +1 -1
  50. package/lib/dtls/src/handshake/message/server/certificateRequest.js.map +1 -1
  51. package/lib/dtls/src/handshake/message/server/hello.js +1 -1
  52. package/lib/dtls/src/handshake/message/server/hello.js.map +1 -1
  53. package/lib/dtls/src/handshake/message/server/helloDone.js +1 -1
  54. package/lib/dtls/src/handshake/message/server/helloDone.js.map +1 -1
  55. package/lib/dtls/src/handshake/message/server/helloVerifyRequest.js +1 -1
  56. package/lib/dtls/src/handshake/message/server/helloVerifyRequest.js.map +1 -1
  57. package/lib/dtls/src/handshake/message/server/keyExchange.js +1 -1
  58. package/lib/dtls/src/handshake/message/server/keyExchange.js.map +1 -1
  59. package/lib/dtls/src/handshake/random.js +2 -2
  60. package/lib/dtls/src/handshake/random.js.map +1 -1
  61. package/lib/dtls/src/helper.d.ts +1 -1
  62. package/lib/dtls/src/helper.js.map +1 -1
  63. package/lib/dtls/src/record/const.js +2 -2
  64. package/lib/dtls/src/record/const.js.map +1 -1
  65. package/lib/dtls/src/record/message/fragment.d.ts +1 -1
  66. package/lib/dtls/src/record/message/fragment.js +3 -3
  67. package/lib/dtls/src/record/message/fragment.js.map +1 -1
  68. package/lib/dtls/src/record/message/header.js +2 -2
  69. package/lib/dtls/src/record/message/header.js.map +1 -1
  70. package/lib/dtls/src/record/message/plaintext.js +1 -1
  71. package/lib/dtls/src/record/message/plaintext.js.map +1 -1
  72. package/lib/dtls/src/record/receive.js.map +1 -1
  73. package/lib/dtls/src/server.js.map +1 -1
  74. package/lib/dtls/src/socket.js.map +1 -1
  75. package/lib/dtls/src/transport.js.map +1 -1
  76. package/lib/ice/src/candidate.js +1 -1
  77. package/lib/ice/src/candidate.js.map +1 -1
  78. package/lib/ice/src/dns/lookup.js.map +1 -1
  79. package/lib/ice/src/exceptions.js.map +1 -1
  80. package/lib/ice/src/helper.js.map +1 -1
  81. package/lib/ice/src/ice.d.ts +5 -13
  82. package/lib/ice/src/ice.js +57 -154
  83. package/lib/ice/src/ice.js.map +1 -1
  84. package/lib/ice/src/stun/attributes.js.map +1 -1
  85. package/lib/ice/src/stun/const.d.ts +1 -1
  86. package/lib/ice/src/stun/const.js +2 -2
  87. package/lib/ice/src/stun/const.js.map +1 -1
  88. package/lib/ice/src/stun/message.js +1 -1
  89. package/lib/ice/src/stun/message.js.map +1 -1
  90. package/lib/ice/src/stun/protocol.js.map +1 -1
  91. package/lib/ice/src/stun/transaction.js.map +1 -1
  92. package/lib/ice/src/transport.js +1 -1
  93. package/lib/ice/src/transport.js.map +1 -1
  94. package/lib/ice/src/turn/protocol.js.map +1 -1
  95. package/lib/ice/src/utils.d.ts +1 -0
  96. package/lib/ice/src/utils.js +72 -1
  97. package/lib/ice/src/utils.js.map +1 -1
  98. package/lib/rtp/src/codec/av1.js +1 -1
  99. package/lib/rtp/src/codec/av1.js.map +1 -1
  100. package/lib/rtp/src/codec/h264.js.map +1 -1
  101. package/lib/rtp/src/codec/index.js.map +1 -1
  102. package/lib/rtp/src/codec/opus.js.map +1 -1
  103. package/lib/rtp/src/codec/vp8.js.map +1 -1
  104. package/lib/rtp/src/codec/vp9.js.map +1 -1
  105. package/lib/rtp/src/extra/container/mp4/container.js.map +1 -1
  106. package/lib/rtp/src/extra/container/mp4/exp-golomb.js.map +1 -1
  107. package/lib/rtp/src/extra/container/mp4/h264.js +1 -1
  108. package/lib/rtp/src/extra/container/mp4/h264.js.map +1 -1
  109. package/lib/rtp/src/extra/container/mp4/sps-parser.js +4 -4
  110. package/lib/rtp/src/extra/container/mp4/sps-parser.js.map +1 -1
  111. package/lib/rtp/src/extra/container/ogg/parser.js.map +1 -1
  112. package/lib/rtp/src/extra/container/webm/container.js.map +1 -1
  113. package/lib/rtp/src/extra/container/webm/ebml/ebml.js +1 -1
  114. package/lib/rtp/src/extra/container/webm/ebml/ebml.js.map +1 -1
  115. package/lib/rtp/src/extra/container/webm/ebml/typedArrayUtils.js.map +1 -1
  116. package/lib/rtp/src/extra/processor/depacketizer.js.map +1 -1
  117. package/lib/rtp/src/extra/processor/depacketizerTransformer.js.map +1 -1
  118. package/lib/rtp/src/extra/processor/dtx.js.map +1 -1
  119. package/lib/rtp/src/extra/processor/interface.js.map +1 -1
  120. package/lib/rtp/src/extra/processor/jitterBuffer.js.map +1 -1
  121. package/lib/rtp/src/extra/processor/jitterBufferTransformer.js.map +1 -1
  122. package/lib/rtp/src/extra/processor/lipsync.js.map +1 -1
  123. package/lib/rtp/src/extra/processor/lipsyncCallback.d.ts +1 -1
  124. package/lib/rtp/src/extra/processor/lipsyncCallback.js.map +1 -1
  125. package/lib/rtp/src/extra/processor/mp4.js.map +1 -1
  126. package/lib/rtp/src/extra/processor/mp4Callback.js +1 -1
  127. package/lib/rtp/src/extra/processor/mp4Callback.js.map +1 -1
  128. package/lib/rtp/src/extra/processor/mute.js.map +1 -1
  129. package/lib/rtp/src/extra/processor/muteCallback.js.map +1 -1
  130. package/lib/rtp/src/extra/processor/nack.js.map +1 -1
  131. package/lib/rtp/src/extra/processor/ntpTime.js.map +1 -1
  132. package/lib/rtp/src/extra/processor/rtcpCallback.js.map +1 -1
  133. package/lib/rtp/src/extra/processor/rtpCallback.js.map +1 -1
  134. package/lib/rtp/src/extra/processor/rtpStream.js.map +1 -1
  135. package/lib/rtp/src/extra/processor/rtpTime.js.map +1 -1
  136. package/lib/rtp/src/extra/processor/webm.js.map +1 -1
  137. package/lib/rtp/src/extra/processor/webmCallback.js.map +1 -1
  138. package/lib/rtp/src/extra/processor/webmStream.js.map +1 -1
  139. package/lib/rtp/src/index.d.ts +1 -0
  140. package/lib/rtp/src/rtcp/header.js.map +1 -1
  141. package/lib/rtp/src/rtcp/psfb/fullIntraRequest.js +1 -1
  142. package/lib/rtp/src/rtcp/psfb/fullIntraRequest.js.map +1 -1
  143. package/lib/rtp/src/rtcp/psfb/index.js +1 -1
  144. package/lib/rtp/src/rtcp/psfb/index.js.map +1 -1
  145. package/lib/rtp/src/rtcp/psfb/pictureLossIndication.js +1 -1
  146. package/lib/rtp/src/rtcp/psfb/pictureLossIndication.js.map +1 -1
  147. package/lib/rtp/src/rtcp/psfb/remb.js +1 -1
  148. package/lib/rtp/src/rtcp/psfb/remb.js.map +1 -1
  149. package/lib/rtp/src/rtcp/rr.js +1 -1
  150. package/lib/rtp/src/rtcp/rr.js.map +1 -1
  151. package/lib/rtp/src/rtcp/rtcp.js.map +1 -1
  152. package/lib/rtp/src/rtcp/rtpfb/index.js +1 -1
  153. package/lib/rtp/src/rtcp/rtpfb/index.js.map +1 -1
  154. package/lib/rtp/src/rtcp/rtpfb/nack.js +2 -2
  155. package/lib/rtp/src/rtcp/rtpfb/nack.js.map +1 -1
  156. package/lib/rtp/src/rtcp/rtpfb/twcc.js +3 -3
  157. package/lib/rtp/src/rtcp/rtpfb/twcc.js.map +1 -1
  158. package/lib/rtp/src/rtcp/sdes.js +1 -1
  159. package/lib/rtp/src/rtcp/sdes.js.map +1 -1
  160. package/lib/rtp/src/rtcp/sr.js +1 -1
  161. package/lib/rtp/src/rtcp/sr.js.map +1 -1
  162. package/lib/rtp/src/rtp/headerExtension.js.map +1 -1
  163. package/lib/rtp/src/rtp/red/encoder.js.map +1 -1
  164. package/lib/rtp/src/rtp/red/handler.js.map +1 -1
  165. package/lib/rtp/src/rtp/red/packet.js +0 -1
  166. package/lib/rtp/src/rtp/red/packet.js.map +1 -1
  167. package/lib/rtp/src/rtp/rtp.js +3 -2
  168. package/lib/rtp/src/rtp/rtp.js.map +1 -1
  169. package/lib/rtp/src/srtp/cipher/ctr.d.ts +1 -1
  170. package/lib/rtp/src/srtp/cipher/ctr.js +1 -1
  171. package/lib/rtp/src/srtp/cipher/ctr.js.map +1 -1
  172. package/lib/rtp/src/srtp/cipher/gcm.d.ts +1 -1
  173. package/lib/rtp/src/srtp/cipher/gcm.js +1 -1
  174. package/lib/rtp/src/srtp/cipher/gcm.js.map +1 -1
  175. package/lib/rtp/src/srtp/const.js.map +1 -1
  176. package/lib/rtp/src/srtp/context/context.js +1 -1
  177. package/lib/rtp/src/srtp/context/context.js.map +1 -1
  178. package/lib/rtp/src/srtp/context/srtcp.js.map +1 -1
  179. package/lib/sctp/src/chunk.js +17 -17
  180. package/lib/sctp/src/chunk.js.map +1 -1
  181. package/lib/sctp/src/const.js +2 -2
  182. package/lib/sctp/src/const.js.map +1 -1
  183. package/lib/sctp/src/param.js +5 -5
  184. package/lib/sctp/src/param.js.map +1 -1
  185. package/lib/sctp/src/sctp.js +5 -1
  186. package/lib/sctp/src/sctp.js.map +1 -1
  187. package/lib/sctp/src/transport.js.map +1 -1
  188. package/lib/webrtc/src/dataChannel.d.ts +1 -1
  189. package/lib/webrtc/src/dataChannel.js +1 -1
  190. package/lib/webrtc/src/dataChannel.js.map +1 -1
  191. package/lib/webrtc/src/helper.js.map +1 -1
  192. package/lib/webrtc/src/media/parameters.d.ts +1 -2
  193. package/lib/webrtc/src/media/parameters.js.map +1 -1
  194. package/lib/webrtc/src/media/receiver/nack.js.map +1 -1
  195. package/lib/webrtc/src/media/receiver/receiverTwcc.js.map +1 -1
  196. package/lib/webrtc/src/media/receiver/statistics.js.map +1 -1
  197. package/lib/webrtc/src/media/router.js +4 -2
  198. package/lib/webrtc/src/media/router.js.map +1 -1
  199. package/lib/webrtc/src/media/rtpReceiver.d.ts +1 -1
  200. package/lib/webrtc/src/media/rtpReceiver.js +1 -1
  201. package/lib/webrtc/src/media/rtpReceiver.js.map +1 -1
  202. package/lib/webrtc/src/media/rtpSender.js +1 -1
  203. package/lib/webrtc/src/media/rtpSender.js.map +1 -1
  204. package/lib/webrtc/src/media/rtpTransceiver.js.map +1 -1
  205. package/lib/webrtc/src/media/sender/cumulativeResult.js.map +1 -1
  206. package/lib/webrtc/src/media/sender/senderBWE.js.map +1 -1
  207. package/lib/webrtc/src/media/track.js.map +1 -1
  208. package/lib/webrtc/src/nonstandard/recorder/index.js.map +1 -1
  209. package/lib/webrtc/src/nonstandard/recorder/writer/index.d.ts +1 -1
  210. package/lib/webrtc/src/nonstandard/recorder/writer/index.js.map +1 -1
  211. package/lib/webrtc/src/nonstandard/recorder/writer/webm.d.ts +2 -2
  212. package/lib/webrtc/src/nonstandard/recorder/writer/webm.js +2 -2
  213. package/lib/webrtc/src/nonstandard/recorder/writer/webm.js.map +1 -1
  214. package/lib/webrtc/src/nonstandard/userMedia.js.map +1 -1
  215. package/lib/webrtc/src/peerConnection.d.ts +2 -2
  216. package/lib/webrtc/src/peerConnection.js +11 -8
  217. package/lib/webrtc/src/peerConnection.js.map +1 -1
  218. package/lib/webrtc/src/sdp.js +47 -37
  219. package/lib/webrtc/src/sdp.js.map +1 -1
  220. package/lib/webrtc/src/transport/dtls.js.map +1 -1
  221. package/lib/webrtc/src/transport/ice.js.map +1 -1
  222. package/lib/webrtc/src/transport/sctp.js +9 -7
  223. package/lib/webrtc/src/transport/sctp.js.map +1 -1
  224. package/lib/webrtc/src/utils.js +1 -1
  225. package/lib/webrtc/src/utils.js.map +1 -1
  226. package/package.json +9 -17
  227. package/src/dataChannel.ts +1 -1
  228. package/src/media/parameters.ts +2 -2
  229. package/src/media/receiver/nack.ts +4 -7
  230. package/src/media/router.ts +36 -40
  231. package/src/media/rtpReceiver.ts +12 -15
  232. package/src/media/rtpSender.ts +69 -82
  233. package/src/nonstandard/recorder/writer/index.ts +1 -1
  234. package/src/nonstandard/recorder/writer/webm.ts +3 -3
  235. package/src/nonstandard/userMedia.ts +1 -3
  236. package/src/peerConnection.ts +28 -24
  237. package/src/sdp.ts +49 -55
  238. package/src/transport/dtls.ts +3 -6
  239. package/src/transport/ice.ts +1 -1
  240. package/src/transport/sctp.ts +60 -66
  241. package/src/utils.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"exp-golomb.js","sourceRoot":"","sources":["../../../../../../../rtp/src/extra/container/mp4/exp-golomb.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\n// Exponential-Golomb buffer decoder\nclass ExpGolomb {\n TAG = \"ExpGolomb\";\n _buffer: Uint8Array;\n _buffer_index = 0;\n _total_bytes: number;\n _total_bits: number;\n _current_word = 0;\n _current_word_bits_left = 0;\n\n constructor(private uint8array: Uint8Array) {\n this._buffer = uint8array;\n this._total_bytes = uint8array.byteLength;\n this._total_bits = uint8array.byteLength * 8;\n }\n\n destroy() {\n this._buffer = null as any;\n }\n\n _fillCurrentWord() {\n const buffer_bytes_left = this._total_bytes - this._buffer_index;\n if (buffer_bytes_left <= 0)\n throw new Error(\"ExpGolomb: _fillCurrentWord() but no bytes available\");\n\n const bytes_read = Math.min(4, buffer_bytes_left);\n const word = new Uint8Array(4);\n word.set(\n this._buffer.subarray(\n this._buffer_index,\n this._buffer_index + bytes_read,\n ),\n );\n this._current_word = new DataView(word.buffer).getUint32(0, false);\n\n this._buffer_index += bytes_read;\n this._current_word_bits_left = bytes_read * 8;\n }\n\n readBits(bits) {\n if (bits > 32)\n throw new Error(\"ExpGolomb: readBits() bits exceeded max 32bits!\");\n\n if (bits <= this._current_word_bits_left) {\n const result = this._current_word >>> (32 - bits);\n this._current_word <<= bits;\n this._current_word_bits_left -= bits;\n return result;\n }\n\n let result = this._current_word_bits_left ? this._current_word : 0;\n result = result >>> (32 - this._current_word_bits_left);\n const bits_need_left = bits - this._current_word_bits_left;\n\n this._fillCurrentWord();\n const bits_read_next = Math.min(\n bits_need_left,\n this._current_word_bits_left,\n );\n\n const result2 = this._current_word >>> (32 - bits_read_next);\n this._current_word <<= bits_read_next;\n this._current_word_bits_left -= bits_read_next;\n\n result = (result << bits_read_next) | result2;\n return result;\n }\n\n readBool() {\n return this.readBits(1) === 1;\n }\n\n readByte() {\n return this.readBits(8);\n }\n\n _skipLeadingZero() {\n let zero_count;\n for (\n zero_count = 0;\n zero_count < this._current_word_bits_left;\n zero_count++\n ) {\n if (0 !== (this._current_word & (0x80000000 >>> zero_count))) {\n this._current_word <<= zero_count;\n this._current_word_bits_left -= zero_count;\n return zero_count;\n }\n }\n this._fillCurrentWord();\n return zero_count + this._skipLeadingZero();\n }\n\n readUEG() {\n // unsigned exponential golomb\n const leading_zeros = this._skipLeadingZero();\n return this.readBits(leading_zeros + 1) - 1;\n }\n\n readSEG() {\n // signed exponential golomb\n const value = this.readUEG();\n if (value & 0x01) {\n return (value + 1) >>> 1;\n } else {\n return -1 * (value >>> 1);\n }\n }\n}\n\nexport default ExpGolomb;\n"]}
1
+ {"version":3,"file":"exp-golomb.js","sourceRoot":"","sources":["../../../../../../../rtp/src/extra/container/mp4/exp-golomb.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\n// Exponential-Golomb buffer decoder\nclass ExpGolomb {\n TAG = \"ExpGolomb\";\n _buffer: Uint8Array;\n _buffer_index = 0;\n _total_bytes: number;\n _total_bits: number;\n _current_word = 0;\n _current_word_bits_left = 0;\n\n constructor(private uint8array: Uint8Array) {\n this._buffer = uint8array;\n this._total_bytes = uint8array.byteLength;\n this._total_bits = uint8array.byteLength * 8;\n }\n\n destroy() {\n this._buffer = null as any;\n }\n\n _fillCurrentWord() {\n const buffer_bytes_left = this._total_bytes - this._buffer_index;\n if (buffer_bytes_left <= 0)\n throw new Error(\"ExpGolomb: _fillCurrentWord() but no bytes available\");\n\n const bytes_read = Math.min(4, buffer_bytes_left);\n const word = new Uint8Array(4);\n word.set(\n this._buffer.subarray(\n this._buffer_index,\n this._buffer_index + bytes_read,\n ),\n );\n this._current_word = new DataView(word.buffer).getUint32(0, false);\n\n this._buffer_index += bytes_read;\n this._current_word_bits_left = bytes_read * 8;\n }\n\n readBits(bits) {\n if (bits > 32)\n throw new Error(\"ExpGolomb: readBits() bits exceeded max 32bits!\");\n\n if (bits <= this._current_word_bits_left) {\n const result = this._current_word >>> (32 - bits);\n this._current_word <<= bits;\n this._current_word_bits_left -= bits;\n return result;\n }\n\n let result = this._current_word_bits_left ? this._current_word : 0;\n result = result >>> (32 - this._current_word_bits_left);\n const bits_need_left = bits - this._current_word_bits_left;\n\n this._fillCurrentWord();\n const bits_read_next = Math.min(\n bits_need_left,\n this._current_word_bits_left,\n );\n\n const result2 = this._current_word >>> (32 - bits_read_next);\n this._current_word <<= bits_read_next;\n this._current_word_bits_left -= bits_read_next;\n\n result = (result << bits_read_next) | result2;\n return result;\n }\n\n readBool() {\n return this.readBits(1) === 1;\n }\n\n readByte() {\n return this.readBits(8);\n }\n\n _skipLeadingZero() {\n let zero_count;\n for (\n zero_count = 0;\n zero_count < this._current_word_bits_left;\n zero_count++\n ) {\n if (0 !== (this._current_word & (0x80000000 >>> zero_count))) {\n this._current_word <<= zero_count;\n this._current_word_bits_left -= zero_count;\n return zero_count;\n }\n }\n this._fillCurrentWord();\n return zero_count + this._skipLeadingZero();\n }\n\n readUEG() {\n // unsigned exponential golomb\n const leading_zeros = this._skipLeadingZero();\n return this.readBits(leading_zeros + 1) - 1;\n }\n\n readSEG() {\n // signed exponential golomb\n const value = this.readUEG();\n if (value & 0x01) {\n return (value + 1) >>> 1;\n } else {\n return -1 * (value >>> 1);\n }\n }\n}\n\nexport default ExpGolomb;\n"]}
@@ -22,7 +22,7 @@ var H264NaluType;
22
22
  H264NaluType[H264NaluType["kFiller"] = 12] = "kFiller";
23
23
  H264NaluType[H264NaluType["kSPSExt"] = 13] = "kSPSExt";
24
24
  H264NaluType[H264NaluType["kReserved0"] = 14] = "kReserved0";
25
- })(H264NaluType = exports.H264NaluType || (exports.H264NaluType = {}));
25
+ })(H264NaluType || (exports.H264NaluType = H264NaluType = {}));
26
26
  class H264NaluPayload {
27
27
  constructor() {
28
28
  Object.defineProperty(this, "type", {
@@ -1 +1 @@
1
- {"version":3,"file":"h264.js","sourceRoot":"","sources":["../../../../../../../rtp/src/extra/container/mp4/h264.ts"],"names":[],"mappings":"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","sourcesContent":["import SPSParser from \"./sps-parser\";\n\nexport enum H264NaluType {\n kUnspecified = 0,\n kSliceNonIDR,\n kSliceDPA,\n kSliceDPB,\n kSliceDPC,\n kSliceIDR,\n kSliceSEI,\n kSliceSPS,\n kSlicePPS,\n kSliceAUD,\n kEndOfSequence,\n kEndOfStream,\n kFiller,\n kSPSExt,\n kReserved0,\n}\n\nexport class H264NaluPayload {\n type!: H264NaluType;\n data!: Uint8Array;\n}\n\nexport class H264NaluAVC1 {\n type: H264NaluType;\n data: Uint8Array;\n\n constructor(nalu: H264NaluPayload) {\n const nalu_size = nalu.data.byteLength;\n\n this.type = nalu.type;\n this.data = new Uint8Array(4 + nalu_size); // 4 byte length-header + nalu payload\n\n const v = new DataView(this.data.buffer);\n // Fill 4 byte length-header\n v.setUint32(0, nalu_size);\n // Copy payload\n this.data.set(nalu.data, 4);\n }\n}\n\nexport class H264AnnexBParser {\n private readonly TAG: string = \"H264AnnexBParser\";\n\n private data_: Uint8Array;\n private current_startcode_offset_: number = 0;\n private eof_flag_: boolean = false;\n\n public constructor(data: Uint8Array) {\n this.data_ = data;\n this.current_startcode_offset_ = this.findNextStartCodeOffset(0);\n }\n\n private findNextStartCodeOffset(start_offset: number) {\n let i = start_offset;\n const data = this.data_;\n\n for (;;) {\n if (i + 3 >= data.byteLength) {\n this.eof_flag_ = true;\n return data.byteLength;\n }\n\n // search 00 00 00 01 or 00 00 01\n const uint32 =\n (data[i + 0] << 24) |\n (data[i + 1] << 16) |\n (data[i + 2] << 8) |\n data[i + 3];\n const uint24 = (data[i + 0] << 16) | (data[i + 1] << 8) | data[i + 2];\n if (uint32 === 0x00000001 || uint24 === 0x000001) {\n return i;\n } else {\n i++;\n }\n }\n }\n\n public readNextNaluPayload(): H264NaluPayload | null {\n const data = this.data_;\n let nalu_payload: H264NaluPayload | null = null;\n\n while (nalu_payload == null) {\n if (this.eof_flag_) {\n break;\n }\n // offset pointed to start code\n const startcode_offset = this.current_startcode_offset_;\n\n // nalu payload start offset\n let offset = startcode_offset;\n const u32 =\n (data[offset] << 24) |\n (data[offset + 1] << 16) |\n (data[offset + 2] << 8) |\n data[offset + 3];\n if (u32 === 0x00000001) {\n offset += 4;\n } else {\n offset += 3;\n }\n\n const nalu_type: H264NaluType = data[offset] & 0x1f;\n const forbidden_bit = (data[offset] & 0x80) >>> 7;\n\n const next_startcode_offset = this.findNextStartCodeOffset(offset);\n this.current_startcode_offset_ = next_startcode_offset;\n\n if (nalu_type >= H264NaluType.kReserved0) {\n continue;\n }\n if (forbidden_bit !== 0) {\n // Log.e(this.TAG, `forbidden_bit near offset ${offset} should be 0 but has value ${forbidden_bit}`);\n continue;\n }\n\n const payload_data = data.subarray(offset, next_startcode_offset);\n\n nalu_payload = new H264NaluPayload();\n nalu_payload.type = nalu_type;\n nalu_payload.data = payload_data;\n }\n\n return nalu_payload;\n }\n}\n\nexport class AVCDecoderConfigurationRecord {\n private data: Uint8Array;\n\n // sps, pps: require Nalu without 4 byte length-header\n public constructor(sps: Uint8Array, pps: Uint8Array, sps_details: any) {\n let length = 6 + 2 + sps.byteLength + 1 + 2 + pps.byteLength;\n let need_extra_fields = false;\n\n if (sps[3] !== 66 && sps[3] !== 77 && sps[3] !== 88) {\n need_extra_fields = true;\n length += 4;\n }\n\n const data = (this.data = new Uint8Array(length));\n\n data[0] = 0x01; // configurationVersion\n data[1] = sps[1]; // AVCProfileIndication\n data[2] = sps[2]; // profile_compatibility\n data[3] = sps[3]; // AVCLevelIndication\n data[4] = 0xff; // 111111 + lengthSizeMinusOne(3)\n\n data[5] = 0xe0 | 0x01; // 111 + numOfSequenceParameterSets\n\n const sps_length = sps.byteLength;\n data[6] = sps_length >>> 8; // sequenceParameterSetLength\n data[7] = sps_length & 0xff;\n\n let offset = 8;\n data.set(sps, 8);\n offset += sps_length;\n\n data[offset] = 1; // numOfPictureParameterSets\n\n const pps_length = pps.byteLength;\n data[offset + 1] = pps_length >>> 8; // pictureParameterSetLength\n data[offset + 2] = pps_length & 0xff;\n\n data.set(pps, offset + 3);\n offset += 3 + pps_length;\n\n if (need_extra_fields) {\n data[offset] = 0xfc | sps_details.chroma_format_idc;\n data[offset + 1] = 0xf8 | (sps_details.bit_depth_luma - 8);\n data[offset + 2] = 0xf8 | (sps_details.bit_depth_chroma - 8);\n data[offset + 3] = 0x00; // number of sps ext\n offset += 4;\n }\n }\n\n public getData() {\n return this.data;\n }\n}\n\nexport function annexb2avcc(data: Buffer) {\n const annexb_parser = new H264AnnexBParser(data);\n let nalu_payload: H264NaluPayload | null = null;\n const video_init_segment_dispatched_ = false;\n const video_metadata_changed_ = false;\n\n const video_metadata_: {\n sps: H264NaluAVC1 | undefined;\n pps: H264NaluAVC1 | undefined;\n details: any;\n } = {\n sps: undefined,\n pps: undefined,\n details: undefined,\n };\n\n while ((nalu_payload = annexb_parser.readNextNaluPayload()) != null) {\n const nalu_avc1 = new H264NaluAVC1(nalu_payload);\n\n if (nalu_avc1.type === H264NaluType.kSliceSPS) {\n // Notice: parseSPS requires Nalu without startcode or length-header\n const details = SPSParser.parseSPS(nalu_payload.data);\n if (!video_init_segment_dispatched_) {\n video_metadata_.sps = nalu_avc1;\n video_metadata_.details = details;\n }\n } else if (nalu_avc1.type === H264NaluType.kSlicePPS) {\n if (!video_init_segment_dispatched_ || video_metadata_changed_) {\n video_metadata_.pps = nalu_avc1;\n }\n }\n }\n\n const sps_without_header = video_metadata_.sps!.data.subarray(4);\n const pps_without_header = video_metadata_.pps!.data.subarray(4);\n const details = video_metadata_.details;\n const avcc = new AVCDecoderConfigurationRecord(\n sps_without_header,\n pps_without_header,\n details,\n );\n return avcc.getData();\n}\n"]}
1
+ {"version":3,"file":"h264.js","sourceRoot":"","sources":["../../../../../../../rtp/src/extra/container/mp4/h264.ts"],"names":[],"mappings":"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","sourcesContent":["import SPSParser from \"./sps-parser\";\n\nexport enum H264NaluType {\n kUnspecified = 0,\n kSliceNonIDR = 1,\n kSliceDPA = 2,\n kSliceDPB = 3,\n kSliceDPC = 4,\n kSliceIDR = 5,\n kSliceSEI = 6,\n kSliceSPS = 7,\n kSlicePPS = 8,\n kSliceAUD = 9,\n kEndOfSequence = 10,\n kEndOfStream = 11,\n kFiller = 12,\n kSPSExt = 13,\n kReserved0 = 14,\n}\n\nexport class H264NaluPayload {\n type!: H264NaluType;\n data!: Uint8Array;\n}\n\nexport class H264NaluAVC1 {\n type: H264NaluType;\n data: Uint8Array;\n\n constructor(nalu: H264NaluPayload) {\n const nalu_size = nalu.data.byteLength;\n\n this.type = nalu.type;\n this.data = new Uint8Array(4 + nalu_size); // 4 byte length-header + nalu payload\n\n const v = new DataView(this.data.buffer);\n // Fill 4 byte length-header\n v.setUint32(0, nalu_size);\n // Copy payload\n this.data.set(nalu.data, 4);\n }\n}\n\nexport class H264AnnexBParser {\n private readonly TAG: string = \"H264AnnexBParser\";\n\n private data_: Uint8Array;\n private current_startcode_offset_: number = 0;\n private eof_flag_: boolean = false;\n\n public constructor(data: Uint8Array) {\n this.data_ = data;\n this.current_startcode_offset_ = this.findNextStartCodeOffset(0);\n }\n\n private findNextStartCodeOffset(start_offset: number) {\n let i = start_offset;\n const data = this.data_;\n\n for (;;) {\n if (i + 3 >= data.byteLength) {\n this.eof_flag_ = true;\n return data.byteLength;\n }\n\n // search 00 00 00 01 or 00 00 01\n const uint32 =\n (data[i + 0] << 24) |\n (data[i + 1] << 16) |\n (data[i + 2] << 8) |\n data[i + 3];\n const uint24 = (data[i + 0] << 16) | (data[i + 1] << 8) | data[i + 2];\n if (uint32 === 0x00000001 || uint24 === 0x000001) {\n return i;\n } else {\n i++;\n }\n }\n }\n\n public readNextNaluPayload(): H264NaluPayload | null {\n const data = this.data_;\n let nalu_payload: H264NaluPayload | null = null;\n\n while (nalu_payload == null) {\n if (this.eof_flag_) {\n break;\n }\n // offset pointed to start code\n const startcode_offset = this.current_startcode_offset_;\n\n // nalu payload start offset\n let offset = startcode_offset;\n const u32 =\n (data[offset] << 24) |\n (data[offset + 1] << 16) |\n (data[offset + 2] << 8) |\n data[offset + 3];\n if (u32 === 0x00000001) {\n offset += 4;\n } else {\n offset += 3;\n }\n\n const nalu_type: H264NaluType = data[offset] & 0x1f;\n const forbidden_bit = (data[offset] & 0x80) >>> 7;\n\n const next_startcode_offset = this.findNextStartCodeOffset(offset);\n this.current_startcode_offset_ = next_startcode_offset;\n\n if (nalu_type >= H264NaluType.kReserved0) {\n continue;\n }\n if (forbidden_bit !== 0) {\n // Log.e(this.TAG, `forbidden_bit near offset ${offset} should be 0 but has value ${forbidden_bit}`);\n continue;\n }\n\n const payload_data = data.subarray(offset, next_startcode_offset);\n\n nalu_payload = new H264NaluPayload();\n nalu_payload.type = nalu_type;\n nalu_payload.data = payload_data;\n }\n\n return nalu_payload;\n }\n}\n\nexport class AVCDecoderConfigurationRecord {\n private data: Uint8Array;\n\n // sps, pps: require Nalu without 4 byte length-header\n public constructor(sps: Uint8Array, pps: Uint8Array, sps_details: any) {\n let length = 6 + 2 + sps.byteLength + 1 + 2 + pps.byteLength;\n let need_extra_fields = false;\n\n if (sps[3] !== 66 && sps[3] !== 77 && sps[3] !== 88) {\n need_extra_fields = true;\n length += 4;\n }\n\n const data = (this.data = new Uint8Array(length));\n\n data[0] = 0x01; // configurationVersion\n data[1] = sps[1]; // AVCProfileIndication\n data[2] = sps[2]; // profile_compatibility\n data[3] = sps[3]; // AVCLevelIndication\n data[4] = 0xff; // 111111 + lengthSizeMinusOne(3)\n\n data[5] = 0xe0 | 0x01; // 111 + numOfSequenceParameterSets\n\n const sps_length = sps.byteLength;\n data[6] = sps_length >>> 8; // sequenceParameterSetLength\n data[7] = sps_length & 0xff;\n\n let offset = 8;\n data.set(sps, 8);\n offset += sps_length;\n\n data[offset] = 1; // numOfPictureParameterSets\n\n const pps_length = pps.byteLength;\n data[offset + 1] = pps_length >>> 8; // pictureParameterSetLength\n data[offset + 2] = pps_length & 0xff;\n\n data.set(pps, offset + 3);\n offset += 3 + pps_length;\n\n if (need_extra_fields) {\n data[offset] = 0xfc | sps_details.chroma_format_idc;\n data[offset + 1] = 0xf8 | (sps_details.bit_depth_luma - 8);\n data[offset + 2] = 0xf8 | (sps_details.bit_depth_chroma - 8);\n data[offset + 3] = 0x00; // number of sps ext\n offset += 4;\n }\n }\n\n public getData() {\n return this.data;\n }\n}\n\nexport function annexb2avcc(data: Buffer) {\n const annexb_parser = new H264AnnexBParser(data);\n let nalu_payload: H264NaluPayload | null = null;\n const video_init_segment_dispatched_ = false;\n const video_metadata_changed_ = false;\n\n const video_metadata_: {\n sps: H264NaluAVC1 | undefined;\n pps: H264NaluAVC1 | undefined;\n details: any;\n } = {\n sps: undefined,\n pps: undefined,\n details: undefined,\n };\n\n while ((nalu_payload = annexb_parser.readNextNaluPayload()) != null) {\n const nalu_avc1 = new H264NaluAVC1(nalu_payload);\n\n if (nalu_avc1.type === H264NaluType.kSliceSPS) {\n // Notice: parseSPS requires Nalu without startcode or length-header\n const details = SPSParser.parseSPS(nalu_payload.data);\n if (!video_init_segment_dispatched_) {\n video_metadata_.sps = nalu_avc1;\n video_metadata_.details = details;\n }\n } else if (nalu_avc1.type === H264NaluType.kSlicePPS) {\n if (!video_init_segment_dispatched_ || video_metadata_changed_) {\n video_metadata_.pps = nalu_avc1;\n }\n }\n }\n\n const sps_without_header = video_metadata_.sps!.data.subarray(4);\n const pps_without_header = video_metadata_.pps!.data.subarray(4);\n const details = video_metadata_.details;\n const avcc = new AVCDecoderConfigurationRecord(\n sps_without_header,\n pps_without_header,\n details,\n );\n return avcc.getData();\n}\n"]}
@@ -211,14 +211,14 @@ class SPSParser {
211
211
  codec_mimetype,
212
212
  profile_idc,
213
213
  level_idc,
214
- profile_string,
215
- level_string,
214
+ profile_string, // baseline, high, high10, ...
215
+ level_string, // 3, 3.1, 4, 4.1, 5, 5.1, ...
216
216
  chroma_format_idc,
217
- bit_depth: bit_depth_luma,
217
+ bit_depth: bit_depth_luma, // 8bit, 10bit, ...
218
218
  bit_depth_luma,
219
219
  bit_depth_chroma,
220
220
  ref_frames,
221
- chroma_format,
221
+ chroma_format, // 4:2:0, 4:2:2, ...
222
222
  chroma_format_string: SPSParser.getChromaFormatString(chroma_format),
223
223
  frame_rate: {
224
224
  fixed: fps_fixed,
@@ -1 +1 @@
1
- {"version":3,"file":"sps-parser.js","sourceRoot":"","sources":["../../../../../../../rtp/src/extra/container/mp4/sps-parser.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;GAgBG;;;;;AAEH,8DAAqC;AAErC,MAAM,SAAS;IACb,MAAM,CAAC,UAAU,CAAC,UAAU;QAC1B,MAAM,GAAG,GAAG,UAAU,CAAC;QACvB,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC;QAClC,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC;QACvC,IAAI,OAAO,GAAG,CAAC,CAAC;QAEhB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;YACnC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACV,kCAAkC;gBAClC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE;oBACjE,SAAS;iBACV;aACF;YACD,GAAG,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YACtB,OAAO,EAAE,CAAC;SACX;QAED,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,UAAU;QACxB,MAAM,WAAW,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9C,IAAI,cAAc,GAAG,OAAO,CAAC;QAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YAC1B,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YACpC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;gBAChB,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;aACb;YACD,cAAc,IAAI,CAAC,CAAC;SACrB;QAED,MAAM,IAAI,GAAG,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAC9C,IAAI,EAAE,GAAG,IAAI,oBAAS,CAAC,IAAI,CAAC,CAAC;QAE7B,EAAE,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,WAAW,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,cAAc;QACjD,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,6CAA6C;QAC5D,MAAM,SAAS,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,YAAY;QAC7C,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,uBAAuB;QAErC,MAAM,cAAc,GAAG,SAAS,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;QAC/D,MAAM,YAAY,GAAG,SAAS,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACzD,IAAI,iBAAiB,GAAG,CAAC,CAAC;QAC1B,IAAI,aAAa,GAAG,GAAG,CAAC;QACxB,MAAM,mBAAmB,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAC/C,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,IAAI,gBAAgB,GAAG,CAAC,CAAC;QAEzB,IACE,WAAW,KAAK,GAAG;YACnB,WAAW,KAAK,GAAG;YACnB,WAAW,KAAK,GAAG;YACnB,WAAW,KAAK,GAAG;YACnB,WAAW,KAAK,EAAE;YAClB,WAAW,KAAK,EAAE;YAClB,WAAW,KAAK,EAAE;YAClB,WAAW,KAAK,GAAG;YACnB,WAAW,KAAK,GAAG;YACnB,WAAW,KAAK,GAAG;YACnB,WAAW,KAAK,GAAG,EACnB;YACA,iBAAiB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;YACjC,IAAI,iBAAiB,KAAK,CAAC,EAAE;gBAC3B,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,6BAA6B;aAC9C;YACD,IAAI,iBAAiB,IAAI,CAAC,EAAE;gBAC1B,aAAa,GAAG,mBAAmB,CAAC,iBAAiB,CAAC,CAAC;aACxD;YAED,cAAc,GAAG,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,wBAAwB;YAC3D,gBAAgB,GAAG,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,0BAA0B;YAC/D,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,uCAAuC;YACvD,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE;gBACjB,kCAAkC;gBAClC,MAAM,kBAAkB,GAAG,iBAAiB,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,kBAAkB,EAAE,CAAC,EAAE,EAAE;oBAC3C,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE;wBACjB,gCAAgC;wBAChC,IAAI,CAAC,GAAG,CAAC,EAAE;4BACT,SAAS,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;yBACpC;6BAAM;4BACL,SAAS,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;yBACpC;qBACF;iBACF;aACF;SACF;QACD,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,4BAA4B;QAC1C,MAAM,kBAAkB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QACxC,IAAI,kBAAkB,KAAK,CAAC,EAAE;YAC5B,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,qCAAqC;SACpD;aAAM,IAAI,kBAAkB,KAAK,CAAC,EAAE;YACnC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,mCAAmC;YACnD,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,yBAAyB;YACvC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,iCAAiC;YAC/C,MAAM,qCAAqC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;YAC3D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,qCAAqC,EAAE,CAAC,EAAE,EAAE;gBAC9D,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,uBAAuB;aACtC;SACF;QACD,MAAM,UAAU,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,qBAAqB;QACtD,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,uCAAuC;QAEvD,MAAM,uBAAuB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QAC7C,MAAM,8BAA8B,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QAEpD,MAAM,mBAAmB,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC3C,IAAI,mBAAmB,KAAK,CAAC,EAAE;YAC7B,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,+BAA+B;SAChD;QACD,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,4BAA4B;QAE5C,IAAI,sBAAsB,GAAG,CAAC,CAAC;QAC/B,IAAI,uBAAuB,GAAG,CAAC,CAAC;QAChC,IAAI,qBAAqB,GAAG,CAAC,CAAC;QAC9B,IAAI,wBAAwB,GAAG,CAAC,CAAC;QAEjC,MAAM,mBAAmB,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;QAC1C,IAAI,mBAAmB,EAAE;YACvB,sBAAsB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;YACtC,uBAAuB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;YACvC,qBAAqB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;YACrC,wBAAwB,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;SACzC;QAED,IAAI,SAAS,GAAG,CAAC,EACf,UAAU,GAAG,CAAC,CAAC;QACjB,IAAI,GAAG,GAAG,CAAC,EACT,SAAS,GAAG,IAAI,EAChB,OAAO,GAAG,CAAC,EACX,OAAO,GAAG,CAAC,CAAC;QAEd,MAAM,2BAA2B,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;QAClD,IAAI,2BAA2B,EAAE;YAC/B,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE;gBACjB,iCAAiC;gBACjC,MAAM,gBAAgB,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;gBACvC,MAAM,WAAW,GAAG;oBAClB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;iBAC5D,CAAC;gBACF,MAAM,WAAW,GAAG;oBAClB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;iBAC3D,CAAC;gBAEF,IAAI,gBAAgB,GAAG,CAAC,IAAI,gBAAgB,GAAG,EAAE,EAAE;oBACjD,SAAS,GAAG,WAAW,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC;oBAC9C,UAAU,GAAG,WAAW,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC;iBAChD;qBAAM,IAAI,gBAAgB,KAAK,GAAG,EAAE;oBACnC,SAAS,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;oBACjD,UAAU,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;iBACnD;aACF;YAED,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE;gBACjB,6BAA6B;gBAC7B,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,4BAA4B;aAC5C;YACD,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE;gBACjB,iCAAiC;gBACjC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,uCAAuC;gBACvD,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE;oBACjB,kCAAkC;oBAClC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,oEAAoE;iBACtF;aACF;YACD,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE;gBACjB,+BAA+B;gBAC/B,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,mCAAmC;gBACjD,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,sCAAsC;aACrD;YACD,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE;gBACjB,2BAA2B;gBAC3B,MAAM,iBAAiB,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBAC1C,MAAM,UAAU,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBACnC,SAAS,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,wBAAwB;gBAEnD,OAAO,GAAG,UAAU,CAAC;gBACrB,OAAO,GAAG,iBAAiB,GAAG,CAAC,CAAC;gBAChC,GAAG,GAAG,OAAO,GAAG,OAAO,CAAC;aACzB;SACF;QAED,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,SAAS,KAAK,CAAC,IAAI,UAAU,KAAK,CAAC,EAAE;YACvC,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;SACnC;QAED,IAAI,WAAW,GAAG,CAAC,EACjB,WAAW,GAAG,CAAC,CAAC;QAClB,IAAI,iBAAiB,KAAK,CAAC,EAAE;YAC3B,WAAW,GAAG,CAAC,CAAC;YAChB,WAAW,GAAG,CAAC,GAAG,mBAAmB,CAAC;SACvC;aAAM;YACL,MAAM,MAAM,GAAG,iBAAiB,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/C,MAAM,MAAM,GAAG,iBAAiB,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/C,WAAW,GAAG,MAAM,CAAC;YACrB,WAAW,GAAG,MAAM,GAAG,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC;SAClD;QAED,IAAI,WAAW,GAAG,CAAC,uBAAuB,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QACrD,IAAI,YAAY,GACd,CAAC,CAAC,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC,8BAA8B,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QAE1E,WAAW;YACT,CAAC,sBAAsB,GAAG,uBAAuB,CAAC,GAAG,WAAW,CAAC;QACnE,YAAY;YACV,CAAC,qBAAqB,GAAG,wBAAwB,CAAC,GAAG,WAAW,CAAC;QAEnE,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,CAAC;QAExD,EAAE,CAAC,OAAO,EAAE,CAAC;QACb,EAAE,GAAG,IAAW,CAAC;QAEjB,OAAO;YACL,cAAc;YACd,WAAW;YACX,SAAS;YACT,cAAc;YACd,YAAY;YACZ,iBAAiB;YACjB,SAAS,EAAE,cAAc;YACzB,cAAc;YACd,gBAAgB;YAChB,UAAU;YACV,aAAa;YACb,oBAAoB,EAAE,SAAS,CAAC,qBAAqB,CAAC,aAAa,CAAC;YAEpE,UAAU,EAAE;gBACV,KAAK,EAAE,SAAS;gBAChB,GAAG,EAAE,GAAG;gBACR,OAAO,EAAE,OAAO;gBAChB,OAAO,EAAE,OAAO;aACjB;YAED,SAAS,EAAE;gBACT,KAAK,EAAE,SAAS;gBAChB,MAAM,EAAE,UAAU;aACnB;YAED,UAAU,EAAE;gBACV,KAAK,EAAE,WAAW;gBAClB,MAAM,EAAE,YAAY;aACrB;YAED,YAAY,EAAE;gBACZ,KAAK,EAAE,aAAa;gBACpB,MAAM,EAAE,YAAY;aACrB;SACF,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,gBAAgB,CAAC,EAAE,EAAE,KAAK;QAC/B,IAAI,UAAU,GAAG,CAAC,EAChB,UAAU,GAAG,CAAC,CAAC;QACjB,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;YAC9B,IAAI,UAAU,KAAK,CAAC,EAAE;gBACpB,WAAW,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;gBAC3B,UAAU,GAAG,CAAC,UAAU,GAAG,WAAW,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;aACrD;YACD,UAAU,GAAG,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC;SACzD;IACH,CAAC;IAED,MAAM,CAAC,gBAAgB,CAAC,WAAW;QACjC,QAAQ,WAAW,EAAE;YACnB,KAAK,EAAE;gBACL,OAAO,UAAU,CAAC;YACpB,KAAK,EAAE;gBACL,OAAO,MAAM,CAAC;YAChB,KAAK,EAAE;gBACL,OAAO,UAAU,CAAC;YACpB,KAAK,GAAG;gBACN,OAAO,MAAM,CAAC;YAChB,KAAK,GAAG;gBACN,OAAO,QAAQ,CAAC;YAClB,KAAK,GAAG;gBACN,OAAO,SAAS,CAAC;YACnB,KAAK,GAAG;gBACN,OAAO,SAAS,CAAC;YACnB;gBACE,OAAO,SAAS,CAAC;SACpB;IACH,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,SAAS;QAC7B,OAAO,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC;IAED,MAAM,CAAC,qBAAqB,CAAC,MAAM;QACjC,QAAQ,MAAM,EAAE;YACd,KAAK,GAAG;gBACN,OAAO,OAAO,CAAC;YACjB,KAAK,GAAG;gBACN,OAAO,OAAO,CAAC;YACjB,KAAK,GAAG;gBACN,OAAO,OAAO,CAAC;YACjB;gBACE,OAAO,SAAS,CAAC;SACpB;IACH,CAAC;CACF;AAED,kBAAe,SAAS,CAAC","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"]}
1
+ {"version":3,"file":"sps-parser.js","sourceRoot":"","sources":["../../../../../../../rtp/src/extra/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"]}
@@ -1 +1 @@
1
- {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../../../../../rtp/src/extra/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
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../../../../../rtp/src/extra/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 +1 @@
1
- {"version":3,"file":"container.js","sourceRoot":"","sources":["../../../../../../../rtp/src/extra/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 \"../../../codec\";\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"]}
1
+ {"version":3,"file":"container.js","sourceRoot":"","sources":["../../../../../../../rtp/src/extra/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 \"../../../codec\";\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"]}
@@ -124,7 +124,7 @@ const getEBMLByteLength = (num) => {
124
124
  }
125
125
  else {
126
126
  throw new Error("EBMLgetEBMLByteLength: data size must be less than or equal to " +
127
- (Math.pow(2, 56) - 2));
127
+ (2 ** 56 - 2));
128
128
  }
129
129
  };
130
130
  exports.getEBMLByteLength = getEBMLByteLength;
@@ -1 +1 @@
1
- {"version":3,"file":"ebml.js","sourceRoot":"","sources":["../../../../../../../../rtp/src/extra/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"]}
1
+ {"version":3,"file":"ebml.js","sourceRoot":"","sources":["../../../../../../../../rtp/src/extra/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 (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"]}
@@ -1 +1 @@
1
- {"version":3,"file":"typedArrayUtils.js","sourceRoot":"","sources":["../../../../../../../../rtp/src/extra/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"]}
1
+ {"version":3,"file":"typedArrayUtils.js","sourceRoot":"","sources":["../../../../../../../../rtp/src/extra/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"]}
@@ -1 +1 @@
1
- {"version":3,"file":"depacketizer.js","sourceRoot":"","sources":["../../../../../../rtp/src/extra/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/extra/processor/depacketizer.ts"],"names":[],"mappings":"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","sourcesContent":["import debug from \"debug\";\nimport Event from \"rx.mini\";\n\nimport {\n DepacketizerCodec,\n RtpHeader,\n RtpPacket,\n dePacketizeRtpPackets,\n enumerate,\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 +1 @@
1
- {"version":3,"file":"depacketizerTransformer.js","sourceRoot":"","sources":["../../../../../../rtp/src/extra/processor/depacketizerTransformer.ts"],"names":[],"mappings":";;;AAAA,oCAA6C;AAG7C,iDAKwB;AAEjB,MAAM,sBAAsB,GAAG,CACpC,GAAG,IAA0D,EAC7D,EAAE,CAAC,IAAI,sBAAsB,CAAC,GAAG,IAAI,CAAC,CAAC,SAAS,CAAC;AAFtC,QAAA,sBAAsB,0BAEgB;AAEnD,MAAM,sBAAuB,SAAQ,8BAAe;IAGlD,YAAY,KAAwB,EAAE,UAA+B,EAAE;QACrE,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAHxB;;;;;WAAkE;QAKhE,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","sourcesContent":["import { TransformStream } from \"stream/web\";\n\nimport { DepacketizerCodec } from \"../../codec\";\nimport {\n DepacketizeBase,\n DepacketizerInput,\n DepacketizerOptions,\n DepacketizerOutput,\n} from \"./depacketizer\";\n\nexport const depacketizeTransformer = (\n ...args: ConstructorParameters<typeof DepacketizeTransformer>\n) => new DepacketizeTransformer(...args).transform;\n\nclass DepacketizeTransformer extends DepacketizeBase {\n transform: TransformStream<DepacketizerInput, DepacketizerOutput>;\n\n constructor(codec: DepacketizerCodec, options: DepacketizerOptions = {}) {\n super(codec, 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":"depacketizerTransformer.js","sourceRoot":"","sources":["../../../../../../rtp/src/extra/processor/depacketizerTransformer.ts"],"names":[],"mappings":";;;AAAA,oCAA6C;AAG7C,iDAKwB;AAEjB,MAAM,sBAAsB,GAAG,CACpC,GAAG,IAA0D,EAC7D,EAAE,CAAC,IAAI,sBAAsB,CAAC,GAAG,IAAI,CAAC,CAAC,SAAS,CAAC;AAFtC,QAAA,sBAAsB,0BAEgB;AAEnD,MAAM,sBAAuB,SAAQ,8BAAe;IAGlD,YAAY,KAAwB,EAAE,UAA+B,EAAE;QACrE,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAHxB;;;;;WAAkE;QAKhE,IAAI,CAAC,SAAS,GAAG,IAAI,qBAAe,CAAC;YACnC,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;gBAC3B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC3C,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACtB,CAAC;YACH,CAAC;SACF,CAAC,CAAC;IACL,CAAC;CACF","sourcesContent":["import { TransformStream } from \"stream/web\";\n\nimport { DepacketizerCodec } from \"../../codec\";\nimport {\n DepacketizeBase,\n DepacketizerInput,\n DepacketizerOptions,\n DepacketizerOutput,\n} from \"./depacketizer\";\n\nexport const depacketizeTransformer = (\n ...args: ConstructorParameters<typeof DepacketizeTransformer>\n) => new DepacketizeTransformer(...args).transform;\n\nclass DepacketizeTransformer extends DepacketizeBase {\n transform: TransformStream<DepacketizerInput, DepacketizerOutput>;\n\n constructor(codec: DepacketizerCodec, options: DepacketizerOptions = {}) {\n super(codec, 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 +1 @@
1
- {"version":3,"file":"dtx.js","sourceRoot":"","sources":["../../../../../../rtp/src/extra/processor/dtx.ts"],"names":[],"mappings":";;;AAAA,mCAAoC;AASpC,MAAa,OAAO;IAKlB,YACS,KAAa,EACZ,WAAmB;QAD3B;;;;mBAAO,KAAK;WAAQ;QACpB;;;;mBAAQ,WAAW;WAAQ;QANpB;;;;mBAAK,IAAA,mBAAU,GAAE;WAAC;QAC3B;;;;;WAA2B;QACnB;;;;mBAAY,CAAC;WAAC;QACd;;;;mBAAgB,EAAE;WAAC;IAIxB,CAAC;IAEJ,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;AA5DD,0BA4DC","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(\n public ptime: number,\n private dummyPacket: Buffer,\n ) {}\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/extra/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,CAAC;YACR,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,OAAO,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QACzB,CAAC;QAED,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBAC5B,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;YACrB,CAAC;YAED,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;gBACtD,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,CAAC;oBACD,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;gBACnB,CAAC;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;YACtC,CAAC;iBAAM,CAAC;gBACN,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;YACrB,CAAC;QACH,CAAC;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 +1 @@
1
- {"version":3,"file":"interface.js","sourceRoot":"","sources":["../../../../../../rtp/src/extra/processor/interface.ts"],"names":[],"mappings":";;;AAqBO,MAAM,2BAA2B,GAAG,CAKzC,IAAW,EACX,EAAE;IACF,OAAO,KAAM,SAAQ,IAAI;QAAlB;;YACL;;;;;eAAyB;YACzB;;;;;eAAwB;YAExB;;;;uBAAO,CAAC,EAAuB,EAAE,UAAuB,EAAE,EAAE;oBAC1D,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;oBACb,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;oBAC7B,EAAE,GAAG,SAAgB,CAAC;oBACtB,UAAU,GAAG,SAAS,CAAC;oBACvB,OAAO,IAAI,CAAC;gBACd,CAAC;eAAC;YAEF;;;;uBAAQ,CAAC,KAAY,EAAE,EAAE;oBACvB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;wBAC7C,IAAI,IAAI,CAAC,EAAE,EAAE;4BACX,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;yBACjB;qBACF;gBACH,CAAC;eAAC;YAEF;;;;uBAAU,GAAG,EAAE;oBACb,IAAI,IAAI,CAAC,UAAU,EAAE;wBACnB,IAAI,CAAC,UAAU,EAAE,CAAC;wBAClB,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;qBAC7B;oBACD,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC;gBACtB,CAAC;eAAC;QACJ,CAAC;KAAA,CAAC;AACJ,CAAC,CAAC;AAnCW,QAAA,2BAA2B,+BAmCtC","sourcesContent":["export interface Processor<Input, Output> {\n processInput: (input: Input) => Output[];\n toJSON(): Record<string, any>;\n}\n\nexport interface AVProcessor<Input> {\n processAudioInput: (input: Input) => void;\n processVideoInput: (input: Input) => void;\n toJSON(): Record<string, any>;\n}\n\nexport interface SimpleProcessorCallback<Input = any, Output = any> {\n pipe: (\n cb: (o: Output) => void,\n destructor?: () => void,\n ) => SimpleProcessorCallback<Input, Output>;\n input: (input: Input) => void;\n destroy: () => void;\n toJSON(): Record<string, any>;\n}\n\nexport const SimpleProcessorCallbackBase = <\n Input,\n Output,\n TBase extends new (...args: any[]) => Processor<Input, Output>,\n>(\n Base: TBase,\n) => {\n return class extends Base implements SimpleProcessorCallback<Input, Output> {\n cb?: (o: Output) => void;\n destructor?: () => void;\n\n pipe = (cb: (o: Output) => void, destructor?: () => void) => {\n this.cb = cb;\n this.destructor = destructor;\n cb = undefined as any;\n destructor = undefined;\n return this;\n };\n\n input = (input: Input) => {\n for (const output of this.processInput(input)) {\n if (this.cb) {\n this.cb(output);\n }\n }\n };\n\n destroy = () => {\n if (this.destructor) {\n this.destructor();\n this.destructor = undefined;\n }\n this.cb = undefined;\n };\n };\n};\n"]}
1
+ {"version":3,"file":"interface.js","sourceRoot":"","sources":["../../../../../../rtp/src/extra/processor/interface.ts"],"names":[],"mappings":";;;AAqBO,MAAM,2BAA2B,GAAG,CAOzC,IAAW,EACX,EAAE;IACF,OAAO,KAAM,SAAQ,IAAI;QAAlB;;YACL;;;;;eAAyB;YACzB;;;;;eAAwB;YAExB;;;;uBAAO,CAAC,EAAuB,EAAE,UAAuB,EAAE,EAAE;oBAC1D,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;oBACb,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;oBAC7B,EAAE,GAAG,SAAgB,CAAC;oBACtB,UAAU,GAAG,SAAS,CAAC;oBACvB,OAAO,IAAI,CAAC;gBACd,CAAC;eAAC;YAEF;;;;uBAAQ,CAAC,KAAY,EAAE,EAAE;oBACvB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;wBAC9C,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;4BACZ,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;wBAClB,CAAC;oBACH,CAAC;gBACH,CAAC;eAAC;YAEF;;;;uBAAU,GAAG,EAAE;oBACb,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;wBACpB,IAAI,CAAC,UAAU,EAAE,CAAC;wBAClB,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;oBAC9B,CAAC;oBACD,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC;gBACtB,CAAC;eAAC;QACJ,CAAC;KAAA,CAAC;AACJ,CAAC,CAAC;AArCW,QAAA,2BAA2B,+BAqCtC","sourcesContent":["export interface Processor<Input, Output> {\n processInput: (input: Input) => Output[];\n toJSON(): Record<string, any>;\n}\n\nexport interface AVProcessor<Input> {\n processAudioInput: (input: Input) => void;\n processVideoInput: (input: Input) => void;\n toJSON(): Record<string, any>;\n}\n\nexport interface SimpleProcessorCallback<Input = any, Output = any> {\n pipe: (\n cb: (o: Output) => void,\n destructor?: () => void,\n ) => SimpleProcessorCallback<Input, Output>;\n input: (input: Input) => void;\n destroy: () => void;\n toJSON(): Record<string, any>;\n}\n\nexport const SimpleProcessorCallbackBase = <\n Input,\n Output,\n TBase extends new (\n ...args: any[]\n ) => Processor<Input, Output>,\n>(\n Base: TBase,\n) => {\n return class extends Base implements SimpleProcessorCallback<Input, Output> {\n cb?: (o: Output) => void;\n destructor?: () => void;\n\n pipe = (cb: (o: Output) => void, destructor?: () => void) => {\n this.cb = cb;\n this.destructor = destructor;\n cb = undefined as any;\n destructor = undefined;\n return this;\n };\n\n input = (input: Input) => {\n for (const output of this.processInput(input)) {\n if (this.cb) {\n this.cb(output);\n }\n }\n };\n\n destroy = () => {\n if (this.destructor) {\n this.destructor();\n this.destructor = undefined;\n }\n this.cb = undefined;\n };\n };\n};\n"]}