werift 0.12.8 → 0.13.2

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 (162) hide show
  1. package/lib/common/src/binary.d.ts +9 -0
  2. package/lib/common/src/binary.js +37 -1
  3. package/lib/common/src/binary.js.map +1 -1
  4. package/lib/dtls/src/context/srtp.d.ts +6 -2
  5. package/lib/dtls/src/context/srtp.js +9 -3
  6. package/lib/dtls/src/context/srtp.js.map +1 -1
  7. package/lib/dtls/src/flight/client/flight5.js.map +1 -1
  8. package/lib/dtls/src/flight/server/flight2.js.map +1 -1
  9. package/lib/dtls/src/socket.d.ts +3 -3
  10. package/lib/dtls/src/socket.js +6 -8
  11. package/lib/dtls/src/socket.js.map +1 -1
  12. package/lib/ice/src/utils.d.ts +1 -0
  13. package/lib/ice/src/utils.js +5 -1
  14. package/lib/ice/src/utils.js.map +1 -1
  15. package/lib/rtp/src/codec/base.d.ts +8 -0
  16. package/lib/rtp/src/codec/base.js +16 -0
  17. package/lib/rtp/src/codec/base.js.map +1 -0
  18. package/lib/rtp/src/codec/h264.d.ts +23 -2
  19. package/lib/rtp/src/codec/h264.js +66 -3
  20. package/lib/rtp/src/codec/h264.js.map +1 -1
  21. package/lib/rtp/src/codec/opus.d.ts +9 -0
  22. package/lib/rtp/src/codec/opus.js +18 -0
  23. package/lib/rtp/src/codec/opus.js.map +1 -0
  24. package/lib/rtp/src/codec/vp8.d.ts +18 -11
  25. package/lib/rtp/src/codec/vp8.js +51 -29
  26. package/lib/rtp/src/codec/vp8.js.map +1 -1
  27. package/lib/rtp/src/codec/vp9.d.ts +38 -10
  28. package/lib/rtp/src/codec/vp9.js +115 -26
  29. package/lib/rtp/src/codec/vp9.js.map +1 -1
  30. package/lib/rtp/src/index.d.ts +2 -0
  31. package/lib/rtp/src/index.js +2 -0
  32. package/lib/rtp/src/index.js.map +1 -1
  33. package/lib/rtp/src/rtcp/psfb/index.d.ts +2 -2
  34. package/lib/rtp/src/rtcp/psfb/index.js.map +1 -1
  35. package/lib/rtp/src/rtcp/rr.d.ts +2 -2
  36. package/lib/rtp/src/rtcp/rr.js.map +1 -1
  37. package/lib/rtp/src/rtcp/rtpfb/index.d.ts +2 -2
  38. package/lib/rtp/src/rtcp/rtpfb/index.js.map +1 -1
  39. package/lib/rtp/src/rtcp/sdes.d.ts +2 -2
  40. package/lib/rtp/src/rtcp/sdes.js.map +1 -1
  41. package/lib/rtp/src/rtcp/sr.d.ts +2 -2
  42. package/lib/rtp/src/rtcp/sr.js +36 -0
  43. package/lib/rtp/src/rtcp/sr.js.map +1 -1
  44. package/lib/rtp/src/rtp/rtp.d.ts +2 -0
  45. package/lib/rtp/src/rtp/rtp.js +2 -0
  46. package/lib/rtp/src/rtp/rtp.js.map +1 -1
  47. package/lib/rtp/src/srtp/cipher/ctr.d.ts +17 -0
  48. package/lib/rtp/src/srtp/cipher/ctr.js +103 -0
  49. package/lib/rtp/src/srtp/cipher/ctr.js.map +1 -0
  50. package/lib/rtp/src/srtp/cipher/gcm.d.ts +15 -0
  51. package/lib/rtp/src/srtp/cipher/gcm.js +106 -0
  52. package/lib/rtp/src/srtp/cipher/gcm.js.map +1 -0
  53. package/lib/rtp/src/srtp/cipher/index.d.ts +14 -0
  54. package/lib/rtp/src/srtp/cipher/index.js +25 -0
  55. package/lib/rtp/src/srtp/cipher/index.js.map +1 -0
  56. package/lib/rtp/src/srtp/const.d.ts +5 -0
  57. package/lib/rtp/src/srtp/const.js +23 -0
  58. package/lib/rtp/src/srtp/const.js.map +1 -0
  59. package/lib/rtp/src/srtp/context/context.d.ts +13 -11
  60. package/lib/rtp/src/srtp/context/context.js +23 -23
  61. package/lib/rtp/src/srtp/context/context.js.map +1 -1
  62. package/lib/rtp/src/srtp/context/srtcp.d.ts +3 -2
  63. package/lib/rtp/src/srtp/context/srtcp.js +10 -34
  64. package/lib/rtp/src/srtp/context/srtcp.js.map +1 -1
  65. package/lib/rtp/src/srtp/context/srtp.d.ts +4 -3
  66. package/lib/rtp/src/srtp/context/srtp.js +9 -28
  67. package/lib/rtp/src/srtp/context/srtp.js.map +1 -1
  68. package/lib/rtp/src/srtp/srtp.js +2 -2
  69. package/lib/rtp/src/srtp/srtp.js.map +1 -1
  70. package/lib/webrtc/src/const.d.ts +4 -3
  71. package/lib/webrtc/src/const.js +5 -4
  72. package/lib/webrtc/src/const.js.map +1 -1
  73. package/lib/webrtc/src/helper.d.ts +2 -2
  74. package/lib/webrtc/src/helper.js +2 -2
  75. package/lib/webrtc/src/helper.js.map +1 -1
  76. package/lib/webrtc/src/index.d.ts +6 -2
  77. package/lib/webrtc/src/index.js +6 -2
  78. package/lib/webrtc/src/index.js.map +1 -1
  79. package/lib/webrtc/src/{extension → media/extension}/rtcpFeedback.d.ts +1 -1
  80. package/lib/webrtc/src/{extension → media/extension}/rtcpFeedback.js +0 -0
  81. package/lib/webrtc/src/media/extension/rtcpFeedback.js.map +1 -0
  82. package/lib/webrtc/src/{extension → media/extension}/rtpExtension.d.ts +1 -1
  83. package/lib/webrtc/src/{extension → media/extension}/rtpExtension.js +1 -1
  84. package/lib/webrtc/src/media/extension/rtpExtension.js.map +1 -0
  85. package/lib/webrtc/src/media/{nack.d.ts → receiver/nack.d.ts} +2 -2
  86. package/lib/webrtc/src/media/{nack.js → receiver/nack.js} +2 -2
  87. package/lib/webrtc/src/media/receiver/nack.js.map +1 -0
  88. package/lib/webrtc/src/media/{statistics.d.ts → receiver/statistics.d.ts} +1 -1
  89. package/lib/webrtc/src/media/{statistics.js → receiver/statistics.js} +1 -1
  90. package/lib/webrtc/src/media/receiver/statistics.js.map +1 -0
  91. package/lib/webrtc/src/media/router.js +1 -1
  92. package/lib/webrtc/src/media/router.js.map +1 -1
  93. package/lib/webrtc/src/media/rtpReceiver.d.ts +4 -2
  94. package/lib/webrtc/src/media/rtpReceiver.js +13 -6
  95. package/lib/webrtc/src/media/rtpReceiver.js.map +1 -1
  96. package/lib/webrtc/src/media/rtpSender.d.ts +4 -4
  97. package/lib/webrtc/src/media/rtpSender.js +12 -6
  98. package/lib/webrtc/src/media/rtpSender.js.map +1 -1
  99. package/lib/webrtc/src/media/{senderBWE → sender}/cumulativeResult.d.ts +0 -0
  100. package/lib/webrtc/src/media/{senderBWE → sender}/cumulativeResult.js +0 -0
  101. package/lib/webrtc/src/media/sender/cumulativeResult.js.map +1 -0
  102. package/lib/webrtc/src/media/{senderBWE → sender}/senderBWE.d.ts +0 -0
  103. package/lib/webrtc/src/media/{senderBWE → sender}/senderBWE.js +0 -0
  104. package/lib/webrtc/src/media/sender/senderBWE.js.map +1 -0
  105. package/lib/webrtc/src/media/track.d.ts +3 -0
  106. package/lib/webrtc/src/media/track.js +2 -0
  107. package/lib/webrtc/src/media/track.js.map +1 -1
  108. package/lib/webrtc/src/nonstandard/jitterBuffer.d.ts +12 -0
  109. package/lib/webrtc/src/nonstandard/jitterBuffer.js +48 -0
  110. package/lib/webrtc/src/nonstandard/jitterBuffer.js.map +1 -0
  111. package/lib/webrtc/src/nonstandard/lipsync.d.ts +20 -0
  112. package/lib/webrtc/src/nonstandard/lipsync.js +39 -0
  113. package/lib/webrtc/src/nonstandard/lipsync.js.map +1 -0
  114. package/lib/webrtc/src/nonstandard/recorder.d.ts +18 -0
  115. package/lib/webrtc/src/nonstandard/recorder.js +25 -0
  116. package/lib/webrtc/src/nonstandard/recorder.js.map +1 -0
  117. package/lib/webrtc/src/nonstandard/sampleBuilder.d.ts +18 -0
  118. package/lib/webrtc/src/nonstandard/sampleBuilder.js +60 -0
  119. package/lib/webrtc/src/nonstandard/sampleBuilder.js.map +1 -0
  120. package/lib/webrtc/src/nonstandard/userMedia.d.ts +15 -0
  121. package/lib/webrtc/src/nonstandard/userMedia.js +67 -0
  122. package/lib/webrtc/src/nonstandard/userMedia.js.map +1 -0
  123. package/lib/webrtc/src/nonstandard/webm.d.ts +24 -0
  124. package/lib/webrtc/src/nonstandard/webm.js +308 -0
  125. package/lib/webrtc/src/nonstandard/webm.js.map +1 -0
  126. package/lib/webrtc/src/peerConnection.js +1 -0
  127. package/lib/webrtc/src/peerConnection.js.map +1 -1
  128. package/lib/webrtc/src/transport/dtls.d.ts +2 -1
  129. package/lib/webrtc/src/transport/dtls.js +7 -3
  130. package/lib/webrtc/src/transport/dtls.js.map +1 -1
  131. package/lib/webrtc/src/utils.d.ts +3 -0
  132. package/lib/webrtc/src/utils.js +13 -9
  133. package/lib/webrtc/src/utils.js.map +1 -1
  134. package/package.json +5 -4
  135. package/src/const.ts +8 -3
  136. package/src/helper.ts +4 -4
  137. package/src/index.ts +6 -2
  138. package/src/{extension → media/extension}/rtcpFeedback.ts +1 -1
  139. package/src/{extension → media/extension}/rtpExtension.ts +1 -1
  140. package/src/media/{nack.ts → receiver/nack.ts} +3 -3
  141. package/src/media/{statistics.ts → receiver/statistics.ts} +2 -2
  142. package/src/media/router.ts +1 -1
  143. package/src/media/rtpReceiver.ts +11 -7
  144. package/src/media/rtpSender.ts +19 -9
  145. package/src/media/{senderBWE → sender}/cumulativeResult.ts +0 -0
  146. package/src/media/{senderBWE → sender}/senderBWE.ts +0 -0
  147. package/src/media/track.ts +6 -0
  148. package/src/nonstandard/jitterBuffer.ts +47 -0
  149. package/src/nonstandard/lipsync.ts +55 -0
  150. package/src/nonstandard/recorder.ts +26 -0
  151. package/src/nonstandard/sampleBuilder.ts +71 -0
  152. package/src/nonstandard/userMedia.ts +74 -0
  153. package/src/nonstandard/webm.ts +421 -0
  154. package/src/peerConnection.ts +3 -1
  155. package/src/transport/dtls.ts +12 -4
  156. package/src/utils.ts +20 -12
  157. package/lib/webrtc/src/extension/rtcpFeedback.js.map +0 -1
  158. package/lib/webrtc/src/extension/rtpExtension.js.map +0 -1
  159. package/lib/webrtc/src/media/nack.js.map +0 -1
  160. package/lib/webrtc/src/media/senderBWE/cumulativeResult.js.map +0 -1
  161. package/lib/webrtc/src/media/senderBWE/senderBWE.js.map +0 -1
  162. package/lib/webrtc/src/media/statistics.js.map +0 -1
@@ -3,20 +3,83 @@
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.NalUnitType = exports.H264RtpPayload = void 0;
5
5
  const src_1 = require("../../../common/src");
6
+ // FU indicator octet
7
+ // +---------------+
8
+ // |0|1|2|3|4|5|6|7|
9
+ // +-+-+-+-+-+-+-+-+
10
+ // |F|NRI| Type |
11
+ // +---------------+
12
+ // FU header
13
+ // +---------------+
14
+ // |0|1|2|3|4|5|6|7|
15
+ // +-+-+-+-+-+-+-+-+
16
+ // |S|E|R| Type |
17
+ // +---------------+
6
18
  class H264RtpPayload {
7
19
  static deSerialize(buf) {
8
20
  const h264 = new H264RtpPayload();
9
21
  let offset = 0;
10
22
  h264.f = src_1.getBit(buf[offset], 0);
11
23
  h264.nri = src_1.getBit(buf[offset], 1, 2);
12
- h264.type = src_1.getBit(buf[offset], 3, 5);
24
+ h264.nalUnitType = src_1.getBit(buf[offset], 3, 5);
13
25
  offset++;
26
+ h264.s = src_1.getBit(buf[offset], 0);
27
+ h264.e = src_1.getBit(buf[offset], 1);
28
+ h264.r = src_1.getBit(buf[offset], 2);
29
+ h264.nalUnitPayloadType = src_1.getBit(buf[offset], 3, 5);
30
+ offset++;
31
+ // デフォルトでは packetization-mode=0
32
+ // packetization-mode=0だとSingle NAL Unit Packetしか来ない
33
+ // https://datatracker.ietf.org/doc/html/rfc6184#section-6.2
34
+ // Single NAL Unit Packet
35
+ if (0 < h264.nalUnitType && h264.nalUnitType < 24) {
36
+ h264.payload = this.packaging(buf);
37
+ }
38
+ // Single-time aggregation packet
39
+ else if (h264.nalUnitType === exports.NalUnitType.stap_a) {
40
+ let offset = stap_aHeaderSize;
41
+ let result = Buffer.alloc(0);
42
+ while (offset < buf.length) {
43
+ const naluSize = buf.readUInt16BE(offset);
44
+ offset += stap_aNALULengthSize;
45
+ result = Buffer.concat([
46
+ result,
47
+ this.packaging(buf.slice(offset, offset + naluSize)),
48
+ ]);
49
+ offset += naluSize;
50
+ }
51
+ h264.payload = result;
52
+ }
14
53
  return h264;
15
54
  }
55
+ static packaging(buf) {
56
+ return Buffer.concat([annex_bNALUStartCode, buf]);
57
+ }
58
+ static isDetectedFinalPacketInSequence(header) {
59
+ return header.marker;
60
+ }
16
61
  get isKeyframe() {
17
- return this.type === exports.NalUnitType.idrSlice;
62
+ return this.nalUnitType === exports.NalUnitType.idrSlice;
63
+ }
64
+ get isPartitionHead() {
65
+ if (this.nalUnitType === exports.NalUnitType.fu_a ||
66
+ this.nalUnitType === exports.NalUnitType.fu_b) {
67
+ return this.s !== 0;
68
+ }
69
+ return true;
18
70
  }
19
71
  }
20
72
  exports.H264RtpPayload = H264RtpPayload;
21
- exports.NalUnitType = { idrSlice: 5 };
73
+ exports.NalUnitType = {
74
+ idrSlice: 5,
75
+ stap_a: 24,
76
+ stap_b: 25,
77
+ mtap16: 26,
78
+ mtap24: 27,
79
+ fu_a: 28,
80
+ fu_b: 29,
81
+ };
82
+ const annex_bNALUStartCode = Buffer.from([0x00, 0x00, 0x00, 0x01]);
83
+ const stap_aHeaderSize = 1;
84
+ const stap_aNALULengthSize = 2;
22
85
  //# sourceMappingURL=h264.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"h264.js","sourceRoot":"","sources":["../../../../../rtp/src/codec/h264.ts"],"names":[],"mappings":";AAAA,gDAAgD;;;AAEhD,6CAA6C;AAE7C,MAAa,cAAc;IAKzB,MAAM,CAAC,WAAW,CAAC,GAAW;QAC5B,MAAM,IAAI,GAAG,IAAI,cAAc,EAAE,CAAC;QAElC,IAAI,MAAM,GAAG,CAAC,CAAC;QAEf,IAAI,CAAC,CAAC,GAAG,YAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAChC,IAAI,CAAC,GAAG,GAAG,YAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,GAAG,YAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAEtC,MAAM,EAAE,CAAC;QAET,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,IAAI,KAAK,mBAAW,CAAC,QAAQ,CAAC;IAC5C,CAAC;CACF;AAtBD,wCAsBC;AAEY,QAAA,WAAW,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAW,CAAC","sourcesContent":["// RFC 6184 - RTP Payload Format for H.264 Video\n\nimport { getBit } from \"../../../common/src\";\n\nexport class H264RtpPayload {\n f!: number;\n nri!: number;\n type!: number;\n\n static deSerialize(buf: Buffer) {\n const h264 = new H264RtpPayload();\n\n let offset = 0;\n\n h264.f = getBit(buf[offset], 0);\n h264.nri = getBit(buf[offset], 1, 2);\n h264.type = getBit(buf[offset], 3, 5);\n\n offset++;\n\n return h264;\n }\n\n get isKeyframe() {\n return this.type === NalUnitType.idrSlice;\n }\n}\n\nexport const NalUnitType = { idrSlice: 5 } as const;\n"]}
1
+ {"version":3,"file":"h264.js","sourceRoot":"","sources":["../../../../../rtp/src/codec/h264.ts"],"names":[],"mappings":"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","sourcesContent":["// RFC 6184 - RTP Payload Format for H.264 Video\n\nimport { getBit } from \"../../../common/src\";\nimport { RtpHeader } from \"../rtp/rtp\";\nimport { DePacketizerBase } from \"./base\";\n\n// FU indicator octet\n// +---------------+\n// |0|1|2|3|4|5|6|7|\n// +-+-+-+-+-+-+-+-+\n// |F|NRI| Type |\n// +---------------+\n\n// FU header\n// +---------------+\n// |0|1|2|3|4|5|6|7|\n// +-+-+-+-+-+-+-+-+\n// |S|E|R| Type |\n// +---------------+\n\nexport class H264RtpPayload implements DePacketizerBase {\n /**forbidden_zero_bit */\n f!: number;\n /**nal_ref_idc */\n nri!: number;\n /**nal_unit_types */\n nalUnitType!: number;\n /**start of a fragmented NAL unit */\n s!: number;\n /**end of a fragmented NAL unit */\n e!: number;\n r!: number;\n nalUnitPayloadType!: number;\n payload!: Buffer;\n\n static deSerialize(buf: Buffer) {\n const h264 = new H264RtpPayload();\n\n let offset = 0;\n\n h264.f = getBit(buf[offset], 0);\n h264.nri = getBit(buf[offset], 1, 2);\n h264.nalUnitType = getBit(buf[offset], 3, 5);\n offset++;\n\n h264.s = getBit(buf[offset], 0);\n h264.e = getBit(buf[offset], 1);\n h264.r = getBit(buf[offset], 2);\n h264.nalUnitPayloadType = getBit(buf[offset], 3, 5);\n offset++;\n\n // デフォルトでは packetization-mode=0\n // packetization-mode=0だとSingle NAL Unit Packetしか来ない\n // https://datatracker.ietf.org/doc/html/rfc6184#section-6.2\n\n // Single NAL Unit Packet\n if (0 < h264.nalUnitType && h264.nalUnitType < 24) {\n h264.payload = this.packaging(buf);\n }\n // Single-time aggregation packet\n else if (h264.nalUnitType === NalUnitType.stap_a) {\n let offset = stap_aHeaderSize;\n let result: Buffer = Buffer.alloc(0);\n while (offset < buf.length) {\n const naluSize = buf.readUInt16BE(offset);\n offset += stap_aNALULengthSize;\n\n result = Buffer.concat([\n result,\n this.packaging(buf.slice(offset, offset + naluSize)),\n ]);\n offset += naluSize;\n }\n h264.payload = result;\n }\n\n return h264;\n }\n\n private static packaging(buf: Buffer) {\n return Buffer.concat([annex_bNALUStartCode, buf]);\n }\n\n static isDetectedFinalPacketInSequence(header: RtpHeader) {\n return header.marker;\n }\n\n get isKeyframe() {\n return this.nalUnitType === NalUnitType.idrSlice;\n }\n\n get isPartitionHead() {\n if (\n this.nalUnitType === NalUnitType.fu_a ||\n this.nalUnitType === NalUnitType.fu_b\n ) {\n return this.s !== 0;\n }\n\n return true;\n }\n}\n\nexport const NalUnitType = {\n idrSlice: 5,\n stap_a: 24,\n stap_b: 25,\n mtap16: 26,\n mtap24: 27,\n fu_a: 28,\n fu_b: 29,\n} as const;\n\nconst annex_bNALUStartCode = Buffer.from([0x00, 0x00, 0x00, 0x01]);\n\nconst stap_aHeaderSize = 1;\nconst stap_aNALULengthSize = 2;\n"]}
@@ -0,0 +1,9 @@
1
+ /// <reference types="node" />
2
+ import { RtpHeader } from "../rtp/rtp";
3
+ import { DePacketizerBase } from "./base";
4
+ export declare class OpusRtpPayload implements DePacketizerBase {
5
+ payload: Buffer;
6
+ static deSerialize(buf: Buffer): OpusRtpPayload;
7
+ static isDetectedFinalPacketInSequence(header: RtpHeader): boolean;
8
+ get isKeyframe(): boolean;
9
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OpusRtpPayload = void 0;
4
+ class OpusRtpPayload {
5
+ static deSerialize(buf) {
6
+ const opus = new OpusRtpPayload();
7
+ opus.payload = buf;
8
+ return opus;
9
+ }
10
+ static isDetectedFinalPacketInSequence(header) {
11
+ return true;
12
+ }
13
+ get isKeyframe() {
14
+ return true;
15
+ }
16
+ }
17
+ exports.OpusRtpPayload = OpusRtpPayload;
18
+ //# sourceMappingURL=opus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opus.js","sourceRoot":"","sources":["../../../../../rtp/src/codec/opus.ts"],"names":[],"mappings":";;;AAGA,MAAa,cAAc;IAGzB,MAAM,CAAC,WAAW,CAAC,GAAW;QAC5B,MAAM,IAAI,GAAG,IAAI,cAAc,EAAE,CAAC;QAClC,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CAAC,+BAA+B,CAAC,MAAiB;QACtD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAhBD,wCAgBC","sourcesContent":["import { RtpHeader } from \"../rtp/rtp\";\nimport { DePacketizerBase } from \"./base\";\n\nexport class OpusRtpPayload implements DePacketizerBase {\n payload!: Buffer;\n\n static deSerialize(buf: Buffer) {\n const opus = new OpusRtpPayload();\n opus.payload = buf;\n return opus;\n }\n\n static isDetectedFinalPacketInSequence(header: RtpHeader) {\n return true;\n }\n\n get isKeyframe() {\n return true;\n }\n}\n"]}
@@ -1,19 +1,26 @@
1
1
  /// <reference types="node" />
2
- export declare class Vp8RtpPayload {
3
- x: number;
4
- n: number;
5
- s: number;
2
+ import { RtpHeader } from "../rtp/rtp";
3
+ import { DePacketizerBase } from "./base";
4
+ export declare class Vp8RtpPayload implements DePacketizerBase {
5
+ xBit: number;
6
+ nBit: number;
7
+ sBit: number;
6
8
  pid: number;
7
- i?: number;
8
- l?: number;
9
- t?: number;
10
- k?: number;
11
- m?: number;
9
+ iBit?: number;
10
+ lBit?: number;
11
+ tBit?: number;
12
+ kBit?: number;
13
+ mBit?: number;
12
14
  pictureId?: number;
15
+ payload: Buffer;
13
16
  size0?: number;
14
- h?: number;
17
+ hBit?: number;
15
18
  ver?: number;
16
- p?: number;
19
+ pBit?: number;
20
+ size1?: number;
21
+ size2?: number;
17
22
  static deSerialize(buf: Buffer): Vp8RtpPayload;
23
+ static isDetectedFinalPacketInSequence(header: RtpHeader): boolean;
18
24
  get isKeyframe(): boolean;
25
+ get isPartitionHead(): boolean;
19
26
  }
@@ -35,43 +35,65 @@ const src_1 = require("../../../common/src");
35
35
  // +-+-+-+-+-+-+-+-+
36
36
  class Vp8RtpPayload {
37
37
  static deSerialize(buf) {
38
- const c = new Vp8RtpPayload();
38
+ const p = new Vp8RtpPayload();
39
39
  let offset = 0;
40
- c.x = src_1.getBit(buf[offset], 0);
41
- c.n = src_1.getBit(buf[offset], 2);
42
- c.s = src_1.getBit(buf[offset], 3);
43
- c.pid = src_1.getBit(buf[offset], 5, 3);
40
+ p.xBit = src_1.getBit(buf[offset], 0);
41
+ p.nBit = src_1.getBit(buf[offset], 2);
42
+ p.sBit = src_1.getBit(buf[offset], 3);
43
+ p.pid = src_1.getBit(buf[offset], 5, 3);
44
44
  offset++;
45
- if (c.x === 1) {
46
- c.i = src_1.getBit(buf[offset], 0);
47
- c.l = src_1.getBit(buf[offset], 1);
48
- c.t = src_1.getBit(buf[offset], 2);
49
- c.k = src_1.getBit(buf[offset], 3);
45
+ if (p.xBit) {
46
+ p.iBit = src_1.getBit(buf[offset], 0);
47
+ p.lBit = src_1.getBit(buf[offset], 1);
48
+ p.tBit = src_1.getBit(buf[offset], 2);
49
+ p.kBit = src_1.getBit(buf[offset], 3);
50
50
  offset++;
51
- if (c.i) {
52
- c.m = src_1.getBit(buf[offset], 0);
53
- if (c.m === 1) {
54
- const _7 = src_1.paddingByte(src_1.getBit(buf[offset], 1, 7));
55
- const _8 = src_1.paddingByte(buf[offset + 1]);
56
- c.pictureId = parseInt(_7 + _8, 2);
57
- offset += 2;
58
- }
59
- else {
60
- c.pictureId = src_1.getBit(buf[offset], 1, 7);
61
- offset++;
62
- }
51
+ }
52
+ if (p.iBit) {
53
+ p.mBit = src_1.getBit(buf[offset], 0);
54
+ if (p.mBit) {
55
+ const _7 = src_1.paddingByte(src_1.getBit(buf[offset], 1, 7));
56
+ const _8 = src_1.paddingByte(buf[offset + 1]);
57
+ p.pictureId = parseInt(_7 + _8, 2);
58
+ offset += 2;
59
+ }
60
+ else {
61
+ p.pictureId = src_1.getBit(buf[offset], 1, 7);
62
+ offset++;
63
63
  }
64
64
  }
65
- if (c.s === 1 && c.pid === 0) {
66
- c.size0 = src_1.getBit(buf[offset], 0, 3);
67
- c.h = src_1.getBit(buf[offset], 3);
68
- c.ver = src_1.getBit(buf[offset], 4, 3);
69
- c.p = src_1.getBit(buf[offset], 7);
65
+ if (p.lBit) {
66
+ offset++;
67
+ }
68
+ if (p.lBit || p.kBit) {
69
+ if (p.tBit) {
70
+ }
71
+ if (p.kBit) {
72
+ }
73
+ offset++;
70
74
  }
71
- return c;
75
+ p.payload = buf.slice(offset);
76
+ if (p.sBit === 1 && p.pid === 0) {
77
+ p.size0 = src_1.getBit(buf[offset], 0, 3);
78
+ p.hBit = src_1.getBit(buf[offset], 3);
79
+ p.ver = src_1.getBit(buf[offset], 4, 3);
80
+ p.pBit = src_1.getBit(buf[offset], 7);
81
+ offset++;
82
+ }
83
+ p.size1 = buf[offset];
84
+ offset++;
85
+ p.size2 = buf[offset];
86
+ offset++;
87
+ return p;
88
+ }
89
+ static isDetectedFinalPacketInSequence(header) {
90
+ return header.marker;
72
91
  }
73
92
  get isKeyframe() {
74
- return this.p === 0;
93
+ return this.pBit === 0;
94
+ }
95
+ get isPartitionHead() {
96
+ return this.sBit === 1;
75
97
  }
76
98
  }
77
99
  exports.Vp8RtpPayload = Vp8RtpPayload;
@@ -1 +1 @@
1
- {"version":3,"file":"vp8.js","sourceRoot":"","sources":["../../../../../rtp/src/codec/vp8.ts"],"names":[],"mappings":";;;AAAA,6CAA0D;AAE1D,8CAA8C;AAE9C,8DAA8D;AAC9D,8DAA8D;AAC9D,yEAAyE;AACzE,8DAA8D;AAC9D,yEAAyE;AACzE,8DAA8D;AAC9D,yEAAyE;AACzE,8DAA8D;AAC9D,8DAA8D;AAC9D,8DAA8D;AAC9D,yEAAyE;AACzE,8DAA8D;AAC9D,yEAAyE;AACzE,8DAA8D;AAE9D,kBAAkB;AAClB,oBAAoB;AACpB,oBAAoB;AACpB,oBAAoB;AACpB,oBAAoB;AACpB,oBAAoB;AACpB,oBAAoB;AACpB,oBAAoB;AACpB,oBAAoB;AACpB,oBAAoB;AACpB,oBAAoB;AACpB,oBAAoB;AACpB,oBAAoB;AACpB,oBAAoB;AACpB,oBAAoB;AACpB,oBAAoB;AAEpB,MAAa,aAAa;IAgBxB,MAAM,CAAC,WAAW,CAAC,GAAW;QAC5B,MAAM,CAAC,GAAG,IAAI,aAAa,EAAE,CAAC;QAE9B,IAAI,MAAM,GAAG,CAAC,CAAC;QAEf,CAAC,CAAC,CAAC,GAAG,YAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC,GAAG,YAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC,GAAG,YAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7B,CAAC,CAAC,GAAG,GAAG,YAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAElC,MAAM,EAAE,CAAC;QAET,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;YACb,CAAC,CAAC,CAAC,GAAG,YAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7B,CAAC,CAAC,CAAC,GAAG,YAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7B,CAAC,CAAC,CAAC,GAAG,YAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7B,CAAC,CAAC,CAAC,GAAG,YAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YAE7B,MAAM,EAAE,CAAC;YAET,IAAI,CAAC,CAAC,CAAC,EAAE;gBACP,CAAC,CAAC,CAAC,GAAG,YAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;gBAE7B,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;oBACb,MAAM,EAAE,GAAG,iBAAW,CAAC,YAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAClD,MAAM,EAAE,GAAG,iBAAW,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;oBACxC,CAAC,CAAC,SAAS,GAAG,QAAQ,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;oBACnC,MAAM,IAAI,CAAC,CAAC;iBACb;qBAAM;oBACL,CAAC,CAAC,SAAS,GAAG,YAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;oBACxC,MAAM,EAAE,CAAC;iBACV;aACF;SACF;QAED,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE;YAC5B,CAAC,CAAC,KAAK,GAAG,YAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACpC,CAAC,CAAC,CAAC,GAAG,YAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7B,CAAC,CAAC,GAAG,GAAG,YAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAClC,CAAC,CAAC,CAAC,GAAG,YAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;SAC9B;QAED,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;CACF;AAhED,sCAgEC","sourcesContent":["import { getBit, paddingByte } from \"../../../common/src\";\n\n// RFC 7741 - RTP Payload Format for VP8 Video\n\n// 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7\n// +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+\n// |X|R|N|S|R| PID | (REQUIRED) |X|R|N|S|R| PID | (REQUIRED)\n// +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+\n// X: |I|L|T|K| RSV | (OPTIONAL) X: |I|L|T|K| RSV | (OPTIONAL)\n// +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+\n// I: |M| PictureID | (OPTIONAL) I: |M| PictureID | (OPTIONAL)\n// +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+\n// L: | TL0PICIDX | (OPTIONAL) | PictureID |\n// +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+\n// T/K: |TID|Y| KEYIDX | (OPTIONAL) L: | TL0PICIDX | (OPTIONAL)\n// +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+\n// T/K: |TID|Y| KEYIDX | (OPTIONAL)\n// +-+-+-+-+-+-+-+-+\n\n// 0 1 2 3 4 5 6 7\n// +-+-+-+-+-+-+-+-+\n// |Size0|H| VER |P|\n// +-+-+-+-+-+-+-+-+\n// | Size1 |\n// +-+-+-+-+-+-+-+-+\n// | Size2 |\n// +-+-+-+-+-+-+-+-+\n// | Octets 4..N of|\n// | VP8 payload |\n// : :\n// +-+-+-+-+-+-+-+-+\n// | OPTIONAL RTP |\n// | padding |\n// : :\n// +-+-+-+-+-+-+-+-+\n\nexport class Vp8RtpPayload {\n x!: number;\n n!: number;\n s!: number;\n pid!: number;\n i?: number;\n l?: number;\n t?: number;\n k?: number;\n m?: number;\n pictureId?: number;\n size0?: number;\n h?: number;\n ver?: number;\n p?: number;\n\n static deSerialize(buf: Buffer) {\n const c = new Vp8RtpPayload();\n\n let offset = 0;\n\n c.x = getBit(buf[offset], 0);\n c.n = getBit(buf[offset], 2);\n c.s = getBit(buf[offset], 3);\n c.pid = getBit(buf[offset], 5, 3);\n\n offset++;\n\n if (c.x === 1) {\n c.i = getBit(buf[offset], 0);\n c.l = getBit(buf[offset], 1);\n c.t = getBit(buf[offset], 2);\n c.k = getBit(buf[offset], 3);\n\n offset++;\n\n if (c.i) {\n c.m = getBit(buf[offset], 0);\n\n if (c.m === 1) {\n const _7 = paddingByte(getBit(buf[offset], 1, 7));\n const _8 = paddingByte(buf[offset + 1]);\n c.pictureId = parseInt(_7 + _8, 2);\n offset += 2;\n } else {\n c.pictureId = getBit(buf[offset], 1, 7);\n offset++;\n }\n }\n }\n\n if (c.s === 1 && c.pid === 0) {\n c.size0 = getBit(buf[offset], 0, 3);\n c.h = getBit(buf[offset], 3);\n c.ver = getBit(buf[offset], 4, 3);\n c.p = getBit(buf[offset], 7);\n }\n\n return c;\n }\n\n get isKeyframe() {\n return this.p === 0;\n }\n}\n"]}
1
+ {"version":3,"file":"vp8.js","sourceRoot":"","sources":["../../../../../rtp/src/codec/vp8.ts"],"names":[],"mappings":"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","sourcesContent":["import { getBit, paddingByte } from \"../../../common/src\";\nimport { RtpHeader } from \"../rtp/rtp\";\nimport { DePacketizerBase } from \"./base\";\n\n// RFC 7741 - RTP Payload Format for VP8 Video\n\n// 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7\n// +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+\n// |X|R|N|S|R| PID | (REQUIRED) |X|R|N|S|R| PID | (REQUIRED)\n// +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+\n// X: |I|L|T|K| RSV | (OPTIONAL) X: |I|L|T|K| RSV | (OPTIONAL)\n// +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+\n// I: |M| PictureID | (OPTIONAL) I: |M| PictureID | (OPTIONAL)\n// +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+\n// L: | TL0PICIDX | (OPTIONAL) | PictureID |\n// +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+\n// T/K: |TID|Y| KEYIDX | (OPTIONAL) L: | TL0PICIDX | (OPTIONAL)\n// +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+\n// T/K: |TID|Y| KEYIDX | (OPTIONAL)\n// +-+-+-+-+-+-+-+-+\n\n// 0 1 2 3 4 5 6 7\n// +-+-+-+-+-+-+-+-+\n// |Size0|H| VER |P|\n// +-+-+-+-+-+-+-+-+\n// | Size1 |\n// +-+-+-+-+-+-+-+-+\n// | Size2 |\n// +-+-+-+-+-+-+-+-+\n// | Octets 4..N of|\n// | VP8 payload |\n// : :\n// +-+-+-+-+-+-+-+-+\n// | OPTIONAL RTP |\n// | padding |\n// : :\n// +-+-+-+-+-+-+-+-+\n\nexport class Vp8RtpPayload implements DePacketizerBase {\n xBit!: number;\n nBit!: number;\n sBit!: number;\n pid!: number;\n iBit?: number;\n lBit?: number;\n tBit?: number;\n kBit?: number;\n mBit?: number;\n pictureId?: number;\n payload!: Buffer;\n size0?: number;\n hBit?: number;\n ver?: number;\n pBit?: number;\n size1?: number;\n size2?: number;\n\n static deSerialize(buf: Buffer) {\n const p = new Vp8RtpPayload();\n\n let offset = 0;\n\n p.xBit = getBit(buf[offset], 0);\n p.nBit = getBit(buf[offset], 2);\n p.sBit = getBit(buf[offset], 3);\n p.pid = getBit(buf[offset], 5, 3);\n offset++;\n\n if (p.xBit) {\n p.iBit = getBit(buf[offset], 0);\n p.lBit = getBit(buf[offset], 1);\n p.tBit = getBit(buf[offset], 2);\n p.kBit = getBit(buf[offset], 3);\n offset++;\n }\n\n if (p.iBit) {\n p.mBit = getBit(buf[offset], 0);\n if (p.mBit) {\n const _7 = paddingByte(getBit(buf[offset], 1, 7));\n const _8 = paddingByte(buf[offset + 1]);\n p.pictureId = parseInt(_7 + _8, 2);\n offset += 2;\n } else {\n p.pictureId = getBit(buf[offset], 1, 7);\n offset++;\n }\n }\n\n if (p.lBit) {\n offset++;\n }\n\n if (p.lBit || p.kBit) {\n if (p.tBit) {\n }\n if (p.kBit) {\n }\n offset++;\n }\n\n p.payload = buf.slice(offset);\n\n if (p.sBit === 1 && p.pid === 0) {\n p.size0 = getBit(buf[offset], 0, 3);\n p.hBit = getBit(buf[offset], 3);\n p.ver = getBit(buf[offset], 4, 3);\n p.pBit = getBit(buf[offset], 7);\n offset++;\n }\n\n p.size1 = buf[offset];\n offset++;\n p.size2 = buf[offset];\n offset++;\n\n return p;\n }\n\n static isDetectedFinalPacketInSequence(header: RtpHeader) {\n return header.marker;\n }\n\n get isKeyframe() {\n return this.pBit === 0;\n }\n\n get isPartitionHead() {\n return this.sBit === 1;\n }\n}\n"]}
@@ -1,19 +1,47 @@
1
1
  /// <reference types="node" />
2
- export declare class Vp9RtpPayload {
3
- i: number;
4
- p: number;
5
- l: number;
6
- f: number;
7
- b: number;
8
- e: number;
9
- v: number;
10
- z: number;
2
+ import { RtpHeader } from "../rtp/rtp";
3
+ import { DePacketizerBase } from "./base";
4
+ export declare class Vp9RtpPayload implements DePacketizerBase {
5
+ /**Picture ID (PID) present */
6
+ iBit: number;
7
+ /**Inter-picture predicted frame */
8
+ pBit: number;
9
+ /**Layer indices present */
10
+ lBit: number;
11
+ /**Flexible mode */
12
+ fBit: number;
13
+ /**Start of a frame */
14
+ bBit: number;
15
+ /**End of a frame */
16
+ eBit: number;
17
+ /**Scalability structure */
18
+ vBit: number;
19
+ zBit: number;
11
20
  m?: number;
12
21
  pictureId?: number;
13
22
  tid?: number;
14
23
  u?: number;
15
24
  sid?: number;
25
+ /**inter_layer_predicted */
16
26
  d?: number;
27
+ tl0PicIdx?: number;
28
+ pDiff: number[];
29
+ n_s?: number;
30
+ y?: number;
31
+ g?: number;
32
+ width: number[];
33
+ height: number[];
34
+ n_g: number;
35
+ pgT: number[];
36
+ pgU: number[];
37
+ pgP_Diff: number[][];
38
+ payload: Buffer;
17
39
  static deSerialize(buf: Buffer): Vp9RtpPayload;
18
- get isKeyframe(): boolean | 0;
40
+ static parseRtpPayload(buf: Buffer): {
41
+ offset: number;
42
+ p: Vp9RtpPayload;
43
+ };
44
+ static isDetectedFinalPacketInSequence(header: RtpHeader): boolean;
45
+ get isKeyframe(): boolean;
46
+ get isPartitionHead(): boolean | 0;
19
47
  }
@@ -34,39 +34,128 @@ const src_1 = require("../../../common/src");
34
34
  // | .. |
35
35
  // +-+-+-+-+-+-+-+-+
36
36
  class Vp9RtpPayload {
37
+ constructor() {
38
+ this.pDiff = [];
39
+ this.width = [];
40
+ this.height = [];
41
+ this.n_g = 0;
42
+ this.pgT = [];
43
+ this.pgU = [];
44
+ this.pgP_Diff = [];
45
+ }
37
46
  static deSerialize(buf) {
38
- const c = new Vp9RtpPayload();
39
- let index = 0;
40
- c.i = src_1.getBit(buf[index], 0);
41
- c.p = src_1.getBit(buf[index], 1);
42
- c.l = src_1.getBit(buf[index], 2);
43
- c.f = src_1.getBit(buf[index], 3);
44
- c.b = src_1.getBit(buf[index], 4);
45
- c.e = src_1.getBit(buf[index], 5);
46
- c.v = src_1.getBit(buf[index], 6);
47
- c.z = src_1.getBit(buf[index], 7);
48
- index++;
49
- if (c.i === 1) {
50
- c.m = src_1.getBit(buf[index], 0);
51
- if (c.m === 1) {
52
- const _7 = src_1.paddingByte(src_1.getBit(buf[index], 1, 7));
53
- const _8 = src_1.paddingByte(buf[index + 1]);
54
- c.pictureId = parseInt(_7 + _8, 2);
55
- index += 2;
47
+ const { p, offset } = this.parseRtpPayload(buf);
48
+ p.payload = buf.slice(offset);
49
+ return p;
50
+ }
51
+ static parseRtpPayload(buf) {
52
+ const p = new Vp9RtpPayload();
53
+ let offset = 0;
54
+ p.iBit = src_1.getBit(buf[offset], 0); // PictureId present .
55
+ p.pBit = src_1.getBit(buf[offset], 1); // Inter-picture predicted.
56
+ p.lBit = src_1.getBit(buf[offset], 2); // Layer indices present.
57
+ p.fBit = src_1.getBit(buf[offset], 3); // Flexible mode.
58
+ p.bBit = src_1.getBit(buf[offset], 4); // Begins frame flag.
59
+ p.eBit = src_1.getBit(buf[offset], 5); // Ends frame flag.
60
+ p.vBit = src_1.getBit(buf[offset], 6); // Scalability structure present.
61
+ p.zBit = src_1.getBit(buf[offset], 7); // Not used for inter-layer prediction
62
+ offset++;
63
+ if (p.iBit) {
64
+ p.m = src_1.getBit(buf[offset], 0);
65
+ if (p.m) {
66
+ const _7 = src_1.paddingByte(src_1.getBit(buf[offset], 1, 7));
67
+ const _8 = src_1.paddingByte(buf[offset + 1]);
68
+ p.pictureId = parseInt(_7 + _8, 2);
69
+ offset += 2;
56
70
  }
57
71
  else {
58
- c.pictureId = src_1.getBit(buf[index], 1, 7);
59
- index++;
72
+ p.pictureId = src_1.getBit(buf[offset], 1, 7);
73
+ offset++;
74
+ }
75
+ }
76
+ if (p.lBit) {
77
+ p.tid = src_1.getBit(buf[offset], 0, 3);
78
+ p.u = src_1.getBit(buf[offset], 3);
79
+ p.sid = src_1.getBit(buf[offset], 4, 3);
80
+ p.d = src_1.getBit(buf[offset], 7);
81
+ offset++;
82
+ if (p.fBit === 0) {
83
+ p.tl0PicIdx = buf[offset];
84
+ offset++;
85
+ }
86
+ }
87
+ if (p.fBit && p.pBit) {
88
+ for (;;) {
89
+ p.pDiff = [...p.pDiff, src_1.getBit(buf[offset], 0, 7)];
90
+ const n = src_1.getBit(buf[offset], 7);
91
+ offset++;
92
+ if (n === 0)
93
+ break;
60
94
  }
61
95
  }
62
- c.tid = src_1.getBit(buf[index], 0, 3);
63
- c.u = src_1.getBit(buf[index], 3);
64
- c.sid = src_1.getBit(buf[index], 4, 3);
65
- c.d = src_1.getBit(buf[index], 7);
66
- return c;
96
+ // Scalability structure (SS):
97
+ //
98
+ // +-+-+-+-+-+-+-+-+
99
+ // V: | N_S |Y|G|-|-|-|
100
+ // +-+-+-+-+-+-+-+-+ -|
101
+ // Y: | WIDTH | (OPTIONAL) .
102
+ // + + .
103
+ // | | (OPTIONAL) .
104
+ // +-+-+-+-+-+-+-+-+ . N_S + 1 times
105
+ // | HEIGHT | (OPTIONAL) .
106
+ // + + .
107
+ // | | (OPTIONAL) .
108
+ // +-+-+-+-+-+-+-+-+ -|
109
+ // G: | N_G | (OPTIONAL)
110
+ // +-+-+-+-+-+-+-+-+ -|
111
+ // N_G: | T |U| R |-|-| (OPTIONAL) .
112
+ // +-+-+-+-+-+-+-+-+ -| . N_G times
113
+ // | P_DIFF | (OPTIONAL) . R times .
114
+ // +-+-+-+-+-+-+-+-+ -| -|
115
+ //
116
+ if (p.vBit) {
117
+ p.n_s = src_1.getBit(buf[offset], 0, 3);
118
+ p.y = src_1.getBit(buf[offset], 3);
119
+ p.g = src_1.getBit(buf[offset], 4);
120
+ offset++;
121
+ if (p.y) {
122
+ [...Array(p.n_s + 1)].forEach(() => {
123
+ p.width.push(buf.readUInt16BE(offset));
124
+ offset += 2;
125
+ p.height.push(buf.readUInt16BE(offset));
126
+ offset += 2;
127
+ });
128
+ }
129
+ if (p.g) {
130
+ p.n_g = buf[offset];
131
+ offset++;
132
+ }
133
+ if (p.n_g > 0) {
134
+ [...Array(p.n_g).keys()].forEach((i) => {
135
+ p.pgT.push(src_1.getBit(buf[offset], 0, 3));
136
+ p.pgU.push(src_1.getBit(buf[offset], 3));
137
+ const r = src_1.getBit(buf[offset], 4, 2);
138
+ offset++;
139
+ p.pgP_Diff[i] = [];
140
+ if (r > 0) {
141
+ [...Array(r)].forEach(() => {
142
+ p.pgP_Diff[i].push(buf[offset]);
143
+ offset++;
144
+ });
145
+ }
146
+ });
147
+ }
148
+ }
149
+ return { offset, p };
150
+ }
151
+ static isDetectedFinalPacketInSequence(header) {
152
+ return header.marker;
67
153
  }
68
154
  get isKeyframe() {
69
- return !this.p && this.b && (!this.sid || !this.l);
155
+ return !!(!this.pBit && this.bBit && (!this.sid || !this.lBit));
156
+ }
157
+ get isPartitionHead() {
158
+ return this.bBit && (!this.lBit || !this.d);
70
159
  }
71
160
  }
72
161
  exports.Vp9RtpPayload = Vp9RtpPayload;
@@ -1 +1 @@
1
- {"version":3,"file":"vp9.js","sourceRoot":"","sources":["../../../../../rtp/src/codec/vp9.ts"],"names":[],"mappings":"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","sourcesContent":["// RTP Payload Format for VP9 Video draft-ietf-payload-vp9-16 https://datatracker.ietf.org/doc/html/draft-ietf-payload-vp9\n\nimport { getBit, paddingByte } from \"../../../common/src\";\n\n// 0 1 2 3 4 5 6 7\n// +-+-+-+-+-+-+-+-+\n// |I|P|L|F|B|E|V|Z| (REQUIRED)\n// +-+-+-+-+-+-+-+-+\n// I: |M| PICTURE ID | (REQUIRED)\n// +-+-+-+-+-+-+-+-+\n// M: | EXTENDED PID | (RECOMMENDED)\n// +-+-+-+-+-+-+-+-+\n// L: | TID |U| SID |D| (Conditionally RECOMMENDED)\n// +-+-+-+-+-+-+-+-+ -\\\n// P,F: | P_DIFF |N| (Conditionally REQUIRED) - up to 3 times\n// +-+-+-+-+-+-+-+-+ -/\n// V: | SS |\n// | .. |\n// +-+-+-+-+-+-+-+-+\n\n// 0 1 2 3 4 5 6 7\n// +-+-+-+-+-+-+-+-+\n// |I|P|L|F|B|E|V|Z| (REQUIRED)\n// +-+-+-+-+-+-+-+-+\n// I: |M| PICTURE ID | (RECOMMENDED)\n// +-+-+-+-+-+-+-+-+\n// M: | EXTENDED PID | (RECOMMENDED)\n// +-+-+-+-+-+-+-+-+\n// L: | TID |U| SID |D| (Conditionally RECOMMENDED)\n// +-+-+-+-+-+-+-+-+\n// | TL0PICIDX | (Conditionally REQUIRED)\n// +-+-+-+-+-+-+-+-+\n// V: | SS |\n// | .. |\n// +-+-+-+-+-+-+-+-+\n\nexport class Vp9RtpPayload {\n i!: number;\n p!: number;\n l!: number;\n f!: number;\n b!: number;\n e!: number;\n v!: number;\n z!: number;\n m?: number;\n pictureId?: number;\n tid?: number;\n u?: number;\n sid?: number;\n d?: number;\n\n static deSerialize(buf: Buffer) {\n const c = new Vp9RtpPayload();\n\n let index = 0;\n\n c.i = getBit(buf[index], 0);\n c.p = getBit(buf[index], 1);\n c.l = getBit(buf[index], 2);\n c.f = getBit(buf[index], 3);\n c.b = getBit(buf[index], 4);\n c.e = getBit(buf[index], 5);\n c.v = getBit(buf[index], 6);\n c.z = getBit(buf[index], 7);\n\n index++;\n\n if (c.i === 1) {\n c.m = getBit(buf[index], 0);\n\n if (c.m === 1) {\n const _7 = paddingByte(getBit(buf[index], 1, 7));\n const _8 = paddingByte(buf[index + 1]);\n c.pictureId = parseInt(_7 + _8, 2);\n index += 2;\n } else {\n c.pictureId = getBit(buf[index], 1, 7);\n index++;\n }\n }\n\n c.tid = getBit(buf[index], 0, 3);\n c.u = getBit(buf[index], 3);\n c.sid = getBit(buf[index], 4, 3);\n c.d = getBit(buf[index], 7);\n\n return c;\n }\n\n get isKeyframe() {\n return !this.p && this.b && (!this.sid || !this.l);\n }\n}\n"]}
1
+ {"version":3,"file":"vp9.js","sourceRoot":"","sources":["../../../../../rtp/src/codec/vp9.ts"],"names":[],"mappings":"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","sourcesContent":["// RTP Payload Format for VP9 Video draft-ietf-payload-vp9-16 https://datatracker.ietf.org/doc/html/draft-ietf-payload-vp9\n\nimport { getBit, paddingByte } from \"../../../common/src\";\nimport { RtpHeader } from \"../rtp/rtp\";\nimport { DePacketizerBase } from \"./base\";\n\n// 0 1 2 3 4 5 6 7\n// +-+-+-+-+-+-+-+-+\n// |I|P|L|F|B|E|V|Z| (REQUIRED)\n// +-+-+-+-+-+-+-+-+\n// I: |M| PICTURE ID | (REQUIRED)\n// +-+-+-+-+-+-+-+-+\n// M: | EXTENDED PID | (RECOMMENDED)\n// +-+-+-+-+-+-+-+-+\n// L: | TID |U| SID |D| (Conditionally RECOMMENDED)\n// +-+-+-+-+-+-+-+-+ -\\\n// P,F: | P_DIFF |N| (Conditionally REQUIRED) - up to 3 times\n// +-+-+-+-+-+-+-+-+ -/\n// V: | SS |\n// | .. |\n// +-+-+-+-+-+-+-+-+\n\n// 0 1 2 3 4 5 6 7\n// +-+-+-+-+-+-+-+-+\n// |I|P|L|F|B|E|V|Z| (REQUIRED)\n// +-+-+-+-+-+-+-+-+\n// I: |M| PICTURE ID | (RECOMMENDED)\n// +-+-+-+-+-+-+-+-+\n// M: | EXTENDED PID | (RECOMMENDED)\n// +-+-+-+-+-+-+-+-+\n// L: | TID |U| SID |D| (Conditionally RECOMMENDED)\n// +-+-+-+-+-+-+-+-+\n// | TL0PICIDX | (Conditionally REQUIRED)\n// +-+-+-+-+-+-+-+-+\n// V: | SS |\n// | .. |\n// +-+-+-+-+-+-+-+-+\n\nexport class Vp9RtpPayload implements DePacketizerBase {\n /**Picture ID (PID) present */\n iBit!: number;\n /**Inter-picture predicted frame */\n pBit!: number;\n /**Layer indices present */\n lBit!: number;\n /**Flexible mode */\n fBit!: number;\n /**Start of a frame */\n bBit!: number;\n /**End of a frame */\n eBit!: number;\n /**Scalability structure */\n vBit!: number;\n zBit!: number;\n m?: number;\n pictureId?: number;\n tid?: number;\n u?: number;\n sid?: number;\n /**inter_layer_predicted */\n d?: number;\n tl0PicIdx?: number;\n pDiff: number[] = [];\n n_s?: number;\n y?: number;\n g?: number;\n width: number[] = [];\n height: number[] = [];\n n_g: number = 0;\n pgT: number[] = [];\n pgU: number[] = [];\n pgP_Diff: number[][] = [];\n payload!: Buffer;\n\n static deSerialize(buf: Buffer) {\n const { p, offset } = this.parseRtpPayload(buf);\n p.payload = buf.slice(offset);\n return p;\n }\n\n static parseRtpPayload(buf: Buffer) {\n const p = new Vp9RtpPayload();\n let offset = 0;\n\n p.iBit = getBit(buf[offset], 0); // PictureId present .\n p.pBit = getBit(buf[offset], 1); // Inter-picture predicted.\n p.lBit = getBit(buf[offset], 2); // Layer indices present.\n p.fBit = getBit(buf[offset], 3); // Flexible mode.\n p.bBit = getBit(buf[offset], 4); // Begins frame flag.\n p.eBit = getBit(buf[offset], 5); // Ends frame flag.\n p.vBit = getBit(buf[offset], 6); // Scalability structure present.\n p.zBit = getBit(buf[offset], 7); // Not used for inter-layer prediction\n offset++;\n\n if (p.iBit) {\n p.m = getBit(buf[offset], 0);\n\n if (p.m) {\n const _7 = paddingByte(getBit(buf[offset], 1, 7));\n const _8 = paddingByte(buf[offset + 1]);\n p.pictureId = parseInt(_7 + _8, 2);\n offset += 2;\n } else {\n p.pictureId = getBit(buf[offset], 1, 7);\n offset++;\n }\n }\n\n if (p.lBit) {\n p.tid = getBit(buf[offset], 0, 3);\n p.u = getBit(buf[offset], 3);\n p.sid = getBit(buf[offset], 4, 3);\n p.d = getBit(buf[offset], 7);\n offset++;\n if (p.fBit === 0) {\n p.tl0PicIdx = buf[offset];\n offset++;\n }\n }\n\n if (p.fBit && p.pBit) {\n for (;;) {\n p.pDiff = [...p.pDiff, getBit(buf[offset], 0, 7)];\n const n = getBit(buf[offset], 7);\n offset++;\n if (n === 0) break;\n }\n }\n\n // Scalability structure (SS):\n //\n // +-+-+-+-+-+-+-+-+\n // V: | N_S |Y|G|-|-|-|\n // +-+-+-+-+-+-+-+-+ -|\n // Y: | WIDTH | (OPTIONAL) .\n // + + .\n // | | (OPTIONAL) .\n // +-+-+-+-+-+-+-+-+ . N_S + 1 times\n // | HEIGHT | (OPTIONAL) .\n // + + .\n // | | (OPTIONAL) .\n // +-+-+-+-+-+-+-+-+ -|\n // G: | N_G | (OPTIONAL)\n // +-+-+-+-+-+-+-+-+ -|\n // N_G: | T |U| R |-|-| (OPTIONAL) .\n // +-+-+-+-+-+-+-+-+ -| . N_G times\n // | P_DIFF | (OPTIONAL) . R times .\n // +-+-+-+-+-+-+-+-+ -| -|\n //\n if (p.vBit) {\n p.n_s = getBit(buf[offset], 0, 3);\n p.y = getBit(buf[offset], 3);\n p.g = getBit(buf[offset], 4);\n offset++;\n\n if (p.y) {\n [...Array(p.n_s + 1)].forEach(() => {\n p.width.push(buf.readUInt16BE(offset));\n offset += 2;\n p.height.push(buf.readUInt16BE(offset));\n offset += 2;\n });\n }\n\n if (p.g) {\n p.n_g = buf[offset];\n offset++;\n }\n\n if (p.n_g > 0) {\n [...Array(p.n_g).keys()].forEach((i) => {\n p.pgT.push(getBit(buf[offset], 0, 3));\n p.pgU.push(getBit(buf[offset], 3));\n const r = getBit(buf[offset], 4, 2);\n offset++;\n\n p.pgP_Diff[i] = [];\n if (r > 0) {\n [...Array(r)].forEach(() => {\n p.pgP_Diff[i].push(buf[offset]);\n offset++;\n });\n }\n });\n }\n }\n return { offset, p };\n }\n\n static isDetectedFinalPacketInSequence(header: RtpHeader) {\n return header.marker;\n }\n\n get isKeyframe() {\n return !!(!this.pBit && this.bBit && (!this.sid || !this.lBit));\n }\n\n get isPartitionHead() {\n return this.bBit && (!this.lBit || !this.d);\n }\n}\n"]}
@@ -1,5 +1,7 @@
1
1
  export * from "./codec/av1";
2
+ export * from "./codec/base";
2
3
  export * from "./codec/h264";
4
+ export * from "./codec/opus";
3
5
  export * from "./codec/vp8";
4
6
  export * from "./codec/vp9";
5
7
  export { RtcpHeader } from "./rtcp/header";
@@ -12,7 +12,9 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
13
  exports.SrtpSession = exports.SrtcpSession = exports.GenericNack = exports.RtcpTransportLayerFeedback = exports.ReceiverEstimatedMaxBitrate = exports.PictureLossIndication = exports.RtcpPayloadSpecificFeedback = exports.RtcpHeader = void 0;
14
14
  __exportStar(require("./codec/av1"), exports);
15
+ __exportStar(require("./codec/base"), exports);
15
16
  __exportStar(require("./codec/h264"), exports);
17
+ __exportStar(require("./codec/opus"), exports);
16
18
  __exportStar(require("./codec/vp8"), exports);
17
19
  __exportStar(require("./codec/vp9"), exports);
18
20
  var header_1 = require("./rtcp/header");
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../rtp/src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,+CAA6B;AAC7B,8CAA4B;AAC5B,8CAA4B;AAC5B,wCAA2C;AAAlC,oGAAA,UAAU,OAAA;AACnB,oCAA0D;AAAjD,mHAAA,2BAA2B,OAAA;AACpC,2EAA0E;AAAjE,8HAAA,qBAAqB,OAAA;AAC9B,yCAA+D;AAAtD,mHAAA,2BAA2B,OAAA;AACpC,4CAA0B;AAC1B,8CAA4B;AAC5B,sCAA0D;AAAjD,mHAAA,0BAA0B,OAAA;AACnC,0CAAgD;AAAvC,mGAAA,WAAW,OAAA;AACpB,oDAAkC;AAClC,8CAA4B;AAC5B,4CAA0B;AAC1B,4CAA0B;AAC1B,sCAA4C;AAAnC,qGAAA,YAAY,OAAA;AACrB,oCAA0C;AAAjC,mGAAA,WAAW,OAAA","sourcesContent":["export * from \"./codec/av1\";\nexport * from \"./codec/h264\";\nexport * from \"./codec/vp8\";\nexport * from \"./codec/vp9\";\nexport { RtcpHeader } from \"./rtcp/header\";\nexport { RtcpPayloadSpecificFeedback } from \"./rtcp/psfb\";\nexport { PictureLossIndication } from \"./rtcp/psfb/pictureLossIndication\";\nexport { ReceiverEstimatedMaxBitrate } from \"./rtcp/psfb/remb\";\nexport * from \"./rtcp/rr\";\nexport * from \"./rtcp/rtcp\";\nexport { RtcpTransportLayerFeedback } from \"./rtcp/rtpfb\";\nexport { GenericNack } from \"./rtcp/rtpfb/nack\";\nexport * from \"./rtcp/rtpfb/twcc\";\nexport * from \"./rtcp/sdes\";\nexport * from \"./rtcp/sr\";\nexport * from \"./rtp/rtp\";\nexport { SrtcpSession } from \"./srtp/srtcp\";\nexport { SrtpSession } from \"./srtp/srtp\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../rtp/src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,+CAA6B;AAC7B,+CAA6B;AAC7B,+CAA6B;AAC7B,8CAA4B;AAC5B,8CAA4B;AAC5B,wCAA2C;AAAlC,oGAAA,UAAU,OAAA;AACnB,oCAA0D;AAAjD,mHAAA,2BAA2B,OAAA;AACpC,2EAA0E;AAAjE,8HAAA,qBAAqB,OAAA;AAC9B,yCAA+D;AAAtD,mHAAA,2BAA2B,OAAA;AACpC,4CAA0B;AAC1B,8CAA4B;AAC5B,sCAA0D;AAAjD,mHAAA,0BAA0B,OAAA;AACnC,0CAAgD;AAAvC,mGAAA,WAAW,OAAA;AACpB,oDAAkC;AAClC,8CAA4B;AAC5B,4CAA0B;AAC1B,4CAA0B;AAC1B,sCAA4C;AAAnC,qGAAA,YAAY,OAAA;AACrB,oCAA0C;AAAjC,mGAAA,WAAW,OAAA","sourcesContent":["export * from \"./codec/av1\";\nexport * from \"./codec/base\";\nexport * from \"./codec/h264\";\nexport * from \"./codec/opus\";\nexport * from \"./codec/vp8\";\nexport * from \"./codec/vp9\";\nexport { RtcpHeader } from \"./rtcp/header\";\nexport { RtcpPayloadSpecificFeedback } from \"./rtcp/psfb\";\nexport { PictureLossIndication } from \"./rtcp/psfb/pictureLossIndication\";\nexport { ReceiverEstimatedMaxBitrate } from \"./rtcp/psfb/remb\";\nexport * from \"./rtcp/rr\";\nexport * from \"./rtcp/rtcp\";\nexport { RtcpTransportLayerFeedback } from \"./rtcp/rtpfb\";\nexport { GenericNack } from \"./rtcp/rtpfb/nack\";\nexport * from \"./rtcp/rtpfb/twcc\";\nexport * from \"./rtcp/sdes\";\nexport * from \"./rtcp/sr\";\nexport * from \"./rtp/rtp\";\nexport { SrtcpSession } from \"./srtp/srtcp\";\nexport { SrtpSession } from \"./srtp/srtp\";\n"]}
@@ -5,8 +5,8 @@ import { PictureLossIndication } from "./pictureLossIndication";
5
5
  import { ReceiverEstimatedMaxBitrate } from "./remb";
6
6
  declare type Feedback = FullIntraRequest | PictureLossIndication | ReceiverEstimatedMaxBitrate;
7
7
  export declare class RtcpPayloadSpecificFeedback {
8
- static type: number;
9
- type: number;
8
+ static readonly type = 206;
9
+ readonly type = 206;
10
10
  feedback: Feedback;
11
11
  constructor(props?: Partial<RtcpPayloadSpecificFeedback>);
12
12
  serialize(): Buffer;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../rtp/src/rtcp/psfb/index.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAG1B,kCAA8C;AAC9C,yDAAsD;AACtD,mEAAgE;AAChE,iCAAqD;AAErD,MAAM,GAAG,GAAG,eAAK,CAAC,4BAA4B,CAAC,CAAC;AAOhD,MAAa,2BAA2B;IAMtC,YAAY,QAA8C,EAAE;QAJ5D,SAAI,GAAG,2BAA2B,CAAC,IAAI,CAAC;QAKtC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,SAAS;QACP,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;QAC1C,OAAO,0BAAmB,CAAC,SAAS,CAClC,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,QAAQ,CAAC,KAAK,EACnB,OAAO,EACP,IAAI,CAAC,QAAQ,CAAC,MAAM,CACrB,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,IAAY,EAAE,MAAkB;QACjD,IAAI,QAA8B,CAAC;QAEnC,QAAQ,MAAM,CAAC,KAAK,EAAE;YACpB,KAAK,mCAAgB,CAAC,KAAK;gBACzB,QAAQ,GAAG,mCAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBAC9C,MAAM;YACR,KAAK,6CAAqB,CAAC,KAAK;gBAC9B,QAAQ,GAAG,6CAAqB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBACnD,MAAM;YACR,KAAK,kCAA2B,CAAC,KAAK;gBACpC,QAAQ,GAAG,kCAA2B,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBACzD,MAAM;YACR;gBACE,GAAG,CAAC,qBAAqB,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;gBACzC,MAAM;SACT;QAED,OAAO,IAAI,2BAA2B,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IACvD,CAAC;;AAvCH,kEAwCC;AAvCQ,gCAAI,GAAG,GAAG,CAAC","sourcesContent":["import debug from \"debug\";\n\nimport { RtcpHeader } from \"../header\";\nimport { RtcpPacketConverter } from \"../rtcp\";\nimport { FullIntraRequest } from \"./fullIntraRequest\";\nimport { PictureLossIndication } from \"./pictureLossIndication\";\nimport { ReceiverEstimatedMaxBitrate } from \"./remb\";\n\nconst log = debug(\"werift/rtp/rtcp/psfb/index\");\n\ntype Feedback =\n | FullIntraRequest\n | PictureLossIndication\n | ReceiverEstimatedMaxBitrate;\n\nexport class RtcpPayloadSpecificFeedback {\n static type = 206;\n type = RtcpPayloadSpecificFeedback.type;\n\n feedback!: Feedback;\n\n constructor(props: Partial<RtcpPayloadSpecificFeedback> = {}) {\n Object.assign(this, props);\n }\n\n serialize() {\n const payload = this.feedback.serialize();\n return RtcpPacketConverter.serialize(\n this.type,\n this.feedback.count,\n payload,\n this.feedback.length\n );\n }\n\n static deSerialize(data: Buffer, header: RtcpHeader) {\n let feedback: Feedback | undefined;\n\n switch (header.count) {\n case FullIntraRequest.count:\n feedback = FullIntraRequest.deSerialize(data);\n break;\n case PictureLossIndication.count:\n feedback = PictureLossIndication.deSerialize(data);\n break;\n case ReceiverEstimatedMaxBitrate.count:\n feedback = ReceiverEstimatedMaxBitrate.deSerialize(data);\n break;\n default:\n log(\"unknown psfb packet\", header.count);\n break;\n }\n\n return new RtcpPayloadSpecificFeedback({ feedback });\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../rtp/src/rtcp/psfb/index.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAG1B,kCAA8C;AAC9C,yDAAsD;AACtD,mEAAgE;AAChE,iCAAqD;AAErD,MAAM,GAAG,GAAG,eAAK,CAAC,4BAA4B,CAAC,CAAC;AAOhD,MAAa,2BAA2B;IAMtC,YAAY,QAA8C,EAAE;QAJnD,SAAI,GAAG,2BAA2B,CAAC,IAAI,CAAC;QAK/C,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,SAAS;QACP,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;QAC1C,OAAO,0BAAmB,CAAC,SAAS,CAClC,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,QAAQ,CAAC,KAAK,EACnB,OAAO,EACP,IAAI,CAAC,QAAQ,CAAC,MAAM,CACrB,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,IAAY,EAAE,MAAkB;QACjD,IAAI,QAA8B,CAAC;QAEnC,QAAQ,MAAM,CAAC,KAAK,EAAE;YACpB,KAAK,mCAAgB,CAAC,KAAK;gBACzB,QAAQ,GAAG,mCAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBAC9C,MAAM;YACR,KAAK,6CAAqB,CAAC,KAAK;gBAC9B,QAAQ,GAAG,6CAAqB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBACnD,MAAM;YACR,KAAK,kCAA2B,CAAC,KAAK;gBACpC,QAAQ,GAAG,kCAA2B,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBACzD,MAAM;YACR;gBACE,GAAG,CAAC,qBAAqB,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;gBACzC,MAAM;SACT;QAED,OAAO,IAAI,2BAA2B,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IACvD,CAAC;;AAvCH,kEAwCC;AAvCiB,gCAAI,GAAG,GAAG,CAAC","sourcesContent":["import debug from \"debug\";\n\nimport { RtcpHeader } from \"../header\";\nimport { RtcpPacketConverter } from \"../rtcp\";\nimport { FullIntraRequest } from \"./fullIntraRequest\";\nimport { PictureLossIndication } from \"./pictureLossIndication\";\nimport { ReceiverEstimatedMaxBitrate } from \"./remb\";\n\nconst log = debug(\"werift/rtp/rtcp/psfb/index\");\n\ntype Feedback =\n | FullIntraRequest\n | PictureLossIndication\n | ReceiverEstimatedMaxBitrate;\n\nexport class RtcpPayloadSpecificFeedback {\n static readonly type = 206;\n readonly type = RtcpPayloadSpecificFeedback.type;\n\n feedback!: Feedback;\n\n constructor(props: Partial<RtcpPayloadSpecificFeedback> = {}) {\n Object.assign(this, props);\n }\n\n serialize() {\n const payload = this.feedback.serialize();\n return RtcpPacketConverter.serialize(\n this.type,\n this.feedback.count,\n payload,\n this.feedback.length\n );\n }\n\n static deSerialize(data: Buffer, header: RtcpHeader) {\n let feedback: Feedback | undefined;\n\n switch (header.count) {\n case FullIntraRequest.count:\n feedback = FullIntraRequest.deSerialize(data);\n break;\n case PictureLossIndication.count:\n feedback = PictureLossIndication.deSerialize(data);\n break;\n case ReceiverEstimatedMaxBitrate.count:\n feedback = ReceiverEstimatedMaxBitrate.deSerialize(data);\n break;\n default:\n log(\"unknown psfb packet\", header.count);\n break;\n }\n\n return new RtcpPayloadSpecificFeedback({ feedback });\n }\n}\n"]}