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