werift 0.22.0 → 0.22.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 (179) hide show
  1. package/lib/common/src/binary.d.ts +6 -6
  2. package/lib/common/src/event.d.ts +1 -0
  3. package/lib/common/src/event.js +5 -0
  4. package/lib/common/src/event.js.map +1 -1
  5. package/lib/common/src/log.d.ts +1 -2
  6. package/lib/common/src/transport.d.ts +2 -1
  7. package/lib/common/src/transport.js +28 -14
  8. package/lib/common/src/transport.js.map +1 -1
  9. package/lib/dtls/src/cipher/prf.d.ts +12 -12
  10. package/lib/dtls/src/cipher/suites/aead.d.ts +3 -2
  11. package/lib/dtls/src/cipher/suites/aead.js +31 -38
  12. package/lib/dtls/src/cipher/suites/aead.js.map +1 -1
  13. package/lib/dtls/src/context/cipher.d.ts +4 -4
  14. package/lib/dtls/src/context/cipher.js +21 -10
  15. package/lib/dtls/src/context/cipher.js.map +1 -1
  16. package/lib/dtls/src/context/srtp.d.ts +3 -3
  17. package/lib/dtls/src/context/srtp.js.map +1 -1
  18. package/lib/dtls/src/flight/client/flight5.js.map +1 -1
  19. package/lib/dtls/src/flight/server/flight2.js.map +1 -1
  20. package/lib/dtls/src/handshake/extensions/ellipticCurves.d.ts +1 -1
  21. package/lib/dtls/src/handshake/extensions/renegotiationIndication.d.ts +2 -2
  22. package/lib/dtls/src/handshake/extensions/signature.d.ts +2 -2
  23. package/lib/dtls/src/handshake/extensions/useSrtp.d.ts +1 -1
  24. package/lib/dtls/src/handshake/message/alert.d.ts +1 -1
  25. package/lib/dtls/src/handshake/message/certificate.d.ts +1 -1
  26. package/lib/dtls/src/handshake/message/changeCipherSpec.d.ts +1 -1
  27. package/lib/dtls/src/handshake/message/client/certificateVerify.d.ts +1 -1
  28. package/lib/dtls/src/handshake/message/client/hello.d.ts +1 -1
  29. package/lib/dtls/src/handshake/message/client/keyExchange.d.ts +1 -1
  30. package/lib/dtls/src/handshake/message/finished.d.ts +1 -1
  31. package/lib/dtls/src/handshake/message/server/certificateRequest.d.ts +1 -1
  32. package/lib/dtls/src/handshake/message/server/hello.d.ts +1 -1
  33. package/lib/dtls/src/handshake/message/server/helloDone.d.ts +1 -1
  34. package/lib/dtls/src/handshake/message/server/helloVerifyRequest.d.ts +1 -1
  35. package/lib/dtls/src/handshake/message/server/keyExchange.d.ts +1 -1
  36. package/lib/dtls/src/handshake/random.d.ts +3 -3
  37. package/lib/dtls/src/record/message/fragment.d.ts +1 -1
  38. package/lib/dtls/src/record/message/header.d.ts +2 -19
  39. package/lib/dtls/src/record/message/header.js +1 -60
  40. package/lib/dtls/src/record/message/header.js.map +1 -1
  41. package/lib/dtls/src/record/message/plaintext.d.ts +6 -27
  42. package/lib/dtls/src/record/message/plaintext.js +34 -16
  43. package/lib/dtls/src/record/message/plaintext.js.map +1 -1
  44. package/lib/dtls/src/socket.d.ts +4 -4
  45. package/lib/dtls/src/socket.js.map +1 -1
  46. package/lib/dtls/src/util/binary.d.ts +1 -1
  47. package/lib/ice/src/helper.d.ts +1 -1
  48. package/lib/ice/src/ice.d.ts +4 -3
  49. package/lib/ice/src/ice.js +89 -68
  50. package/lib/ice/src/ice.js.map +1 -1
  51. package/lib/ice/src/iceBase.d.ts +20 -1
  52. package/lib/ice/src/iceBase.js +46 -0
  53. package/lib/ice/src/iceBase.js.map +1 -1
  54. package/lib/ice/src/stun/attributes.d.ts +2 -2
  55. package/lib/ice/src/stun/attributes.js +47 -27
  56. package/lib/ice/src/stun/attributes.js.map +1 -1
  57. package/lib/ice/src/stun/message.d.ts +2 -2
  58. package/lib/ice/src/stun/message.js +21 -23
  59. package/lib/ice/src/stun/message.js.map +1 -1
  60. package/lib/ice/src/stun/protocol.d.ts +2 -2
  61. package/lib/ice/src/turn/protocol.d.ts +2 -2
  62. package/lib/index.mjs +2252 -1474
  63. package/lib/nonstandard/index.mjs +333 -370
  64. package/lib/rtp/src/codec/av1.d.ts +2 -2
  65. package/lib/rtp/src/codec/opus.d.ts +1 -1
  66. package/lib/rtp/src/extra/container/mp4/container.js +18 -8
  67. package/lib/rtp/src/extra/container/mp4/container.js.map +1 -1
  68. package/lib/rtp/src/extra/container/mp4/h264.d.ts +2 -2
  69. package/lib/rtp/src/extra/container/mp4/sps-parser.d.ts +1 -1
  70. package/lib/rtp/src/extra/container/ogg/parser.d.ts +1 -1
  71. package/lib/rtp/src/extra/container/webm/container.d.ts +7 -7
  72. package/lib/rtp/src/extra/container/webm/container.js +17 -7
  73. package/lib/rtp/src/extra/container/webm/container.js.map +1 -1
  74. package/lib/rtp/src/extra/container/webm/ebml/ebml.d.ts +1 -1
  75. package/lib/rtp/src/extra/container/webm/ebml/id.d.ts +222 -222
  76. package/lib/rtp/src/extra/processor/depacketizerCallback.d.ts +1 -1
  77. package/lib/rtp/src/extra/processor/depacketizerTransformer.d.ts +6 -1
  78. package/lib/rtp/src/extra/processor/dtxCallback.d.ts +1 -1
  79. package/lib/rtp/src/extra/processor/interface.d.ts +1 -1
  80. package/lib/rtp/src/extra/processor/jitterBufferCallback.d.ts +1 -1
  81. package/lib/rtp/src/extra/processor/mp4.js +3 -0
  82. package/lib/rtp/src/extra/processor/mp4.js.map +1 -1
  83. package/lib/rtp/src/extra/processor/nackHandlerCallback.d.ts +1 -1
  84. package/lib/rtp/src/extra/processor/ntpTimeCallback.d.ts +1 -1
  85. package/lib/rtp/src/extra/processor/rtpTimeCallback.d.ts +1 -1
  86. package/lib/rtp/src/extra/processor/webm.d.ts +1 -1
  87. package/lib/rtp/src/extra/processor/webmCallback.d.ts +1 -1
  88. package/lib/rtp/src/extra/processor/webmCallback.js +23 -17
  89. package/lib/rtp/src/extra/processor/webmCallback.js.map +1 -1
  90. package/lib/rtp/src/helper.d.ts +1 -1
  91. package/lib/rtp/src/rtcp/header.d.ts +1 -1
  92. package/lib/rtp/src/rtcp/psfb/fullIntraRequest.d.ts +1 -1
  93. package/lib/rtp/src/rtcp/psfb/index.d.ts +1 -1
  94. package/lib/rtp/src/rtcp/psfb/pictureLossIndication.d.ts +1 -1
  95. package/lib/rtp/src/rtcp/psfb/remb.d.ts +1 -1
  96. package/lib/rtp/src/rtcp/rr.d.ts +2 -2
  97. package/lib/rtp/src/rtcp/rtcp.d.ts +1 -1
  98. package/lib/rtp/src/rtcp/rtpfb/index.d.ts +1 -1
  99. package/lib/rtp/src/rtcp/rtpfb/nack.d.ts +1 -1
  100. package/lib/rtp/src/rtcp/rtpfb/twcc.d.ts +4 -4
  101. package/lib/rtp/src/rtcp/sdes.d.ts +3 -3
  102. package/lib/rtp/src/rtcp/sr.d.ts +2 -2
  103. package/lib/rtp/src/rtp/headerExtension.d.ts +6 -6
  104. package/lib/rtp/src/rtp/red/packet.d.ts +2 -2
  105. package/lib/rtp/src/rtp/rtp.d.ts +2 -2
  106. package/lib/rtp/src/srtp/cipher/ctr.d.ts +4 -4
  107. package/lib/rtp/src/srtp/cipher/gcm.d.ts +4 -4
  108. package/lib/rtp/src/srtp/const.d.ts +3 -3
  109. package/lib/rtp/src/srtp/const.js.map +1 -1
  110. package/lib/rtp/src/srtp/context/context.d.ts +7 -7
  111. package/lib/rtp/src/srtp/context/context.js +10 -4
  112. package/lib/rtp/src/srtp/context/context.js.map +1 -1
  113. package/lib/rtp/src/srtp/context/srtcp.d.ts +3 -3
  114. package/lib/rtp/src/srtp/context/srtcp.js.map +1 -1
  115. package/lib/rtp/src/srtp/context/srtp.d.ts +3 -3
  116. package/lib/rtp/src/srtp/context/srtp.js.map +1 -1
  117. package/lib/rtp/src/srtp/srtcp.d.ts +2 -2
  118. package/lib/rtp/src/srtp/srtp.d.ts +2 -2
  119. package/lib/sctp/src/chunk.d.ts +12 -12
  120. package/lib/sctp/src/chunk.js +87 -66
  121. package/lib/sctp/src/chunk.js.map +1 -1
  122. package/lib/sctp/src/param.d.ts +3 -3
  123. package/lib/sctp/src/sctp.d.ts +3 -1
  124. package/lib/sctp/src/sctp.js +36 -1
  125. package/lib/sctp/src/sctp.js.map +1 -1
  126. package/lib/webrtc/src/dataChannel.d.ts +15 -4
  127. package/lib/webrtc/src/dataChannel.js +42 -7
  128. package/lib/webrtc/src/dataChannel.js.map +1 -1
  129. package/lib/webrtc/src/index.d.ts +1 -0
  130. package/lib/webrtc/src/index.js +1 -0
  131. package/lib/webrtc/src/index.js.map +1 -1
  132. package/lib/webrtc/src/media/index.d.ts +1 -0
  133. package/lib/webrtc/src/media/index.js +1 -0
  134. package/lib/webrtc/src/media/index.js.map +1 -1
  135. package/lib/webrtc/src/media/parameters.d.ts +2 -2
  136. package/lib/webrtc/src/media/parameters.js.map +1 -1
  137. package/lib/webrtc/src/media/router.js +2 -1
  138. package/lib/webrtc/src/media/router.js.map +1 -1
  139. package/lib/webrtc/src/media/rtpReceiver.d.ts +2 -2
  140. package/lib/webrtc/src/media/rtpReceiver.js +51 -2
  141. package/lib/webrtc/src/media/rtpReceiver.js.map +1 -1
  142. package/lib/webrtc/src/media/rtpSender.d.ts +6 -0
  143. package/lib/webrtc/src/media/rtpSender.js +78 -7
  144. package/lib/webrtc/src/media/rtpSender.js.map +1 -1
  145. package/lib/webrtc/src/media/rtpTransceiver.d.ts +12 -9
  146. package/lib/webrtc/src/media/rtpTransceiver.js +45 -8
  147. package/lib/webrtc/src/media/rtpTransceiver.js.map +1 -1
  148. package/lib/webrtc/src/media/stats.d.ts +279 -0
  149. package/lib/webrtc/src/media/stats.js +35 -1
  150. package/lib/webrtc/src/media/stats.js.map +1 -1
  151. package/lib/webrtc/src/peerConnection.d.ts +34 -64
  152. package/lib/webrtc/src/peerConnection.js +319 -986
  153. package/lib/webrtc/src/peerConnection.js.map +1 -1
  154. package/lib/webrtc/src/sctpManager.d.ts +27 -0
  155. package/lib/webrtc/src/sctpManager.js +147 -0
  156. package/lib/webrtc/src/sctpManager.js.map +1 -0
  157. package/lib/webrtc/src/sdp.d.ts +3 -2
  158. package/lib/webrtc/src/sdp.js +17 -7
  159. package/lib/webrtc/src/sdp.js.map +1 -1
  160. package/lib/webrtc/src/sdpManager.d.ts +78 -0
  161. package/lib/webrtc/src/sdpManager.js +391 -0
  162. package/lib/webrtc/src/sdpManager.js.map +1 -0
  163. package/lib/webrtc/src/secureTransportManager.d.ts +56 -0
  164. package/lib/webrtc/src/secureTransportManager.js +345 -0
  165. package/lib/webrtc/src/secureTransportManager.js.map +1 -0
  166. package/lib/webrtc/src/transceiverManager.d.ts +40 -0
  167. package/lib/webrtc/src/transceiverManager.js +355 -0
  168. package/lib/webrtc/src/transceiverManager.js.map +1 -0
  169. package/lib/webrtc/src/transport/dtls.d.ts +18 -6
  170. package/lib/webrtc/src/transport/dtls.js +119 -11
  171. package/lib/webrtc/src/transport/dtls.js.map +1 -1
  172. package/lib/webrtc/src/transport/ice.d.ts +24 -0
  173. package/lib/webrtc/src/transport/ice.js +86 -0
  174. package/lib/webrtc/src/transport/ice.js.map +1 -1
  175. package/lib/webrtc/src/transport/sctp.js +22 -7
  176. package/lib/webrtc/src/transport/sctp.js.map +1 -1
  177. package/lib/webrtc/src/utils.d.ts +3 -3
  178. package/lib/webrtc/src/utils.js.map +1 -1
  179. package/package.json +15 -21
@@ -4,7 +4,8 @@ import type { Kind } from "../types/domain";
4
4
  import type { RTCRtpCodecParameters, RTCRtpHeaderExtensionParameters } from "./parameters";
5
5
  import type { RTCRtpReceiver } from "./rtpReceiver";
6
6
  import type { RTCRtpSender } from "./rtpSender";
7
- import type { MediaStreamTrack } from "./track";
7
+ import { type RTCStats } from "./stats";
8
+ import type { MediaStream, MediaStreamTrack } from "./track";
8
9
  export declare class RTCRtpTransceiver {
9
10
  readonly kind: Kind;
10
11
  receiver: RTCRtpReceiver;
@@ -18,7 +19,7 @@ export declare class RTCRtpTransceiver {
18
19
  /**should not be reused because it has been used for sending before. */
19
20
  usedForSender: boolean;
20
21
  private _currentDirection?;
21
- offerDirection: Direction;
22
+ offerDirection: MediaDirection;
22
23
  _codecs: RTCRtpCodecParameters[];
23
24
  set codecs(codecs: RTCRtpCodecParameters[]);
24
25
  get codecs(): RTCRtpCodecParameters[];
@@ -26,34 +27,36 @@ export declare class RTCRtpTransceiver {
26
27
  options: Partial<TransceiverOptions>;
27
28
  stopping: boolean;
28
29
  stopped: boolean;
29
- constructor(kind: Kind, dtlsTransport: RTCDtlsTransport, receiver: RTCRtpReceiver, sender: RTCRtpSender,
30
+ constructor(kind: Kind, dtlsTransport: RTCDtlsTransport | undefined, receiver: RTCRtpReceiver, sender: RTCRtpSender,
30
31
  /**RFC 8829 4.2.4. direction the transceiver was initialized with */
31
- _direction: Direction);
32
+ _direction: MediaDirection);
32
33
  get dtlsTransport(): RTCDtlsTransport;
33
34
  /**RFC 8829 4.2.4. setDirectionに渡された最後の値を示します */
34
35
  get direction(): "inactive" | "sendonly" | "recvonly" | "sendrecv";
35
- setDirection(direction: Direction): void;
36
+ setDirection(direction: MediaDirection): void;
36
37
  /**RFC 8829 4.2.5. last negotiated direction */
37
- get currentDirection(): Direction | undefined;
38
- setCurrentDirection(direction: Direction | undefined): void;
38
+ get currentDirection(): MediaDirection | undefined;
39
+ setCurrentDirection(direction: MediaDirection | undefined): void;
39
40
  setDtlsTransport(dtls: RTCDtlsTransport): void;
40
41
  get msid(): string;
41
42
  addTrack(track: MediaStreamTrack): void;
42
43
  stop(): void;
43
44
  getPayloadType(mimeType: string): number | undefined;
45
+ getCodecStats(): RTCStats[];
44
46
  }
45
47
  export declare const Inactive = "inactive";
46
48
  export declare const Sendonly = "sendonly";
47
49
  export declare const Recvonly = "recvonly";
48
50
  export declare const Sendrecv = "sendrecv";
49
51
  export declare const Directions: readonly ["inactive", "sendonly", "recvonly", "sendrecv"];
50
- export type Direction = (typeof Directions)[number];
52
+ export type MediaDirection = (typeof Directions)[number];
51
53
  type SimulcastDirection = "send" | "recv";
52
54
  export interface TransceiverOptions {
53
- direction: Direction;
55
+ direction: MediaDirection;
54
56
  simulcast: {
55
57
  direction: SimulcastDirection;
56
58
  rid: string;
57
59
  }[];
60
+ streams: MediaStream[];
58
61
  }
59
62
  export {};
@@ -15,18 +15,29 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
15
15
  }) : function(o, v) {
16
16
  o["default"] = v;
17
17
  });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
25
35
  Object.defineProperty(exports, "__esModule", { value: true });
26
36
  exports.Directions = exports.Sendrecv = exports.Recvonly = exports.Sendonly = exports.Inactive = exports.RTCRtpTransceiver = void 0;
27
37
  const uuid = __importStar(require("uuid"));
28
38
  const common_1 = require("../imports/common");
29
39
  const const_1 = require("../const");
40
+ const stats_1 = require("./stats");
30
41
  class RTCRtpTransceiver {
31
42
  set codecs(codecs) {
32
43
  this._codecs = codecs;
@@ -134,7 +145,9 @@ class RTCRtpTransceiver {
134
145
  writable: true,
135
146
  value: false
136
147
  });
137
- this.setDtlsTransport(dtlsTransport);
148
+ if (dtlsTransport) {
149
+ this.setDtlsTransport(dtlsTransport);
150
+ }
138
151
  }
139
152
  get dtlsTransport() {
140
153
  return this.receiver.dtlsTransport;
@@ -181,6 +194,30 @@ class RTCRtpTransceiver {
181
194
  getPayloadType(mimeType) {
182
195
  return this.codecs.find((codec) => codec.mimeType.toLowerCase().includes(mimeType.toLowerCase()))?.payloadType;
183
196
  }
197
+ getCodecStats() {
198
+ const timestamp = (0, stats_1.getStatsTimestamp)();
199
+ const stats = [];
200
+ if (!this.dtlsTransport) {
201
+ return stats;
202
+ }
203
+ const transportId = (0, stats_1.generateStatsId)("transport", this.dtlsTransport.id);
204
+ // Add codec stats for each codec
205
+ for (const codec of this.codecs) {
206
+ const codecStats = {
207
+ type: "codec",
208
+ id: (0, stats_1.generateStatsId)("codec", codec.payloadType, transportId),
209
+ timestamp,
210
+ payloadType: codec.payloadType,
211
+ transportId,
212
+ mimeType: codec.mimeType,
213
+ clockRate: codec.clockRate,
214
+ channels: codec.channels,
215
+ sdpFmtpLine: codec.parameters,
216
+ };
217
+ stats.push(codecStats);
218
+ }
219
+ return stats;
220
+ }
184
221
  }
185
222
  exports.RTCRtpTransceiver = RTCRtpTransceiver;
186
223
  exports.Inactive = "inactive";
@@ -1 +1 @@
1
- {"version":3,"file":"rtpTransceiver.js","sourceRoot":"","sources":["../../../../src/media/rtpTransceiver.ts"],"names":[],"mappings":"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","sourcesContent":["import * as uuid from \"uuid\";\nimport { Event } from \"../imports/common\";\n\nimport type { RTCDtlsTransport } from \"..\";\nimport { SenderDirections } from \"../const\";\nimport type { Kind } from \"../types/domain\";\nimport type {\n RTCRtpCodecParameters,\n RTCRtpHeaderExtensionParameters,\n} from \"./parameters\";\nimport type { RTCRtpReceiver } from \"./rtpReceiver\";\nimport type { RTCRtpSender } from \"./rtpSender\";\nimport type { MediaStreamTrack } from \"./track\";\n\nexport class RTCRtpTransceiver {\n readonly id = uuid.v4();\n readonly onTrack = new Event<[MediaStreamTrack, RTCRtpTransceiver]>();\n mid?: string;\n mLineIndex?: number;\n /**should not be reused because it has been used for sending before. */\n usedForSender = false;\n private _currentDirection?: Direction;\n offerDirection!: Direction;\n _codecs: RTCRtpCodecParameters[] = [];\n set codecs(codecs: RTCRtpCodecParameters[]) {\n this._codecs = codecs;\n }\n get codecs() {\n return this._codecs;\n }\n headerExtensions: RTCRtpHeaderExtensionParameters[] = [];\n options: Partial<TransceiverOptions> = {};\n stopping = false;\n stopped = false;\n\n constructor(\n public readonly kind: Kind,\n dtlsTransport: RTCDtlsTransport,\n public receiver: RTCRtpReceiver,\n public sender: RTCRtpSender,\n /**RFC 8829 4.2.4. direction the transceiver was initialized with */\n private _direction: Direction,\n ) {\n this.setDtlsTransport(dtlsTransport);\n }\n\n get dtlsTransport() {\n return this.receiver.dtlsTransport;\n }\n\n /**RFC 8829 4.2.4. setDirectionに渡された最後の値を示します */\n get direction() {\n return this._direction;\n }\n\n setDirection(direction: Direction) {\n this._direction = direction;\n if (SenderDirections.includes(this._currentDirection ?? \"\")) {\n this.usedForSender = true;\n }\n }\n\n /**RFC 8829 4.2.5. last negotiated direction */\n get currentDirection(): Direction | undefined {\n return this._currentDirection;\n }\n\n setCurrentDirection(direction: Direction | undefined) {\n this._currentDirection = direction;\n }\n\n setDtlsTransport(dtls: RTCDtlsTransport) {\n this.receiver.setDtlsTransport(dtls);\n this.sender.setDtlsTransport(dtls);\n }\n\n get msid() {\n return `${this.sender.streamId} ${this.sender.trackId}`;\n }\n\n addTrack(track: MediaStreamTrack) {\n const res = this.receiver.addTrack(track);\n if (res) {\n this.onTrack.execute(track, this);\n }\n }\n\n // todo impl\n // https://www.w3.org/TR/webrtc/#methods-8\n stop() {\n if (this.stopping) {\n return;\n }\n\n // todo Stop sending and receiving with transceiver.\n\n this.stopping = true;\n }\n\n getPayloadType(mimeType: string) {\n return this.codecs.find((codec) =>\n codec.mimeType.toLowerCase().includes(mimeType.toLowerCase()),\n )?.payloadType;\n }\n}\n\nexport const Inactive = \"inactive\";\nexport const Sendonly = \"sendonly\";\nexport const Recvonly = \"recvonly\";\nexport const Sendrecv = \"sendrecv\";\n\nexport const Directions = [Inactive, Sendonly, Recvonly, Sendrecv] as const;\n\nexport type Direction = (typeof Directions)[number];\n\ntype SimulcastDirection = \"send\" | \"recv\";\n\nexport interface TransceiverOptions {\n direction: Direction;\n simulcast: { direction: SimulcastDirection; rid: string }[];\n}\n"]}
1
+ {"version":3,"file":"rtpTransceiver.js","sourceRoot":"","sources":["../../../../src/media/rtpTransceiver.ts"],"names":[],"mappings":"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","sourcesContent":["import * as uuid from \"uuid\";\nimport { Event } from \"../imports/common\";\n\nimport type { RTCDtlsTransport } from \"..\";\nimport { SenderDirections } from \"../const\";\nimport type { Kind } from \"../types/domain\";\nimport type {\n RTCRtpCodecParameters,\n RTCRtpHeaderExtensionParameters,\n} from \"./parameters\";\nimport type { RTCRtpReceiver } from \"./rtpReceiver\";\nimport type { RTCRtpSender } from \"./rtpSender\";\nimport {\n type RTCCodecStats,\n type RTCStats,\n generateStatsId,\n getStatsTimestamp,\n} from \"./stats\";\nimport type { MediaStream, MediaStreamTrack } from \"./track\";\n\nexport class RTCRtpTransceiver {\n readonly id = uuid.v4();\n readonly onTrack = new Event<[MediaStreamTrack, RTCRtpTransceiver]>();\n mid?: string;\n mLineIndex?: number;\n /**should not be reused because it has been used for sending before. */\n usedForSender = false;\n private _currentDirection?: MediaDirection;\n offerDirection!: MediaDirection;\n _codecs: RTCRtpCodecParameters[] = [];\n set codecs(codecs: RTCRtpCodecParameters[]) {\n this._codecs = codecs;\n }\n get codecs() {\n return this._codecs;\n }\n headerExtensions: RTCRtpHeaderExtensionParameters[] = [];\n options: Partial<TransceiverOptions> = {};\n stopping = false;\n stopped = false;\n\n constructor(\n public readonly kind: Kind,\n dtlsTransport: RTCDtlsTransport | undefined,\n public receiver: RTCRtpReceiver,\n public sender: RTCRtpSender,\n /**RFC 8829 4.2.4. direction the transceiver was initialized with */\n private _direction: MediaDirection,\n ) {\n if (dtlsTransport) {\n this.setDtlsTransport(dtlsTransport);\n }\n }\n\n get dtlsTransport() {\n return this.receiver.dtlsTransport;\n }\n\n /**RFC 8829 4.2.4. setDirectionに渡された最後の値を示します */\n get direction() {\n return this._direction;\n }\n\n setDirection(direction: MediaDirection) {\n this._direction = direction;\n if (SenderDirections.includes(this._currentDirection ?? \"\")) {\n this.usedForSender = true;\n }\n }\n\n /**RFC 8829 4.2.5. last negotiated direction */\n get currentDirection(): MediaDirection | undefined {\n return this._currentDirection;\n }\n\n setCurrentDirection(direction: MediaDirection | undefined) {\n this._currentDirection = direction;\n }\n\n setDtlsTransport(dtls: RTCDtlsTransport) {\n this.receiver.setDtlsTransport(dtls);\n this.sender.setDtlsTransport(dtls);\n }\n\n get msid() {\n return `${this.sender.streamId} ${this.sender.trackId}`;\n }\n\n addTrack(track: MediaStreamTrack) {\n const res = this.receiver.addTrack(track);\n if (res) {\n this.onTrack.execute(track, this);\n }\n }\n\n // todo impl\n // https://www.w3.org/TR/webrtc/#methods-8\n stop() {\n if (this.stopping) {\n return;\n }\n\n // todo Stop sending and receiving with transceiver.\n\n this.stopping = true;\n }\n\n getPayloadType(mimeType: string) {\n return this.codecs.find((codec) =>\n codec.mimeType.toLowerCase().includes(mimeType.toLowerCase()),\n )?.payloadType;\n }\n\n getCodecStats(): RTCStats[] {\n const timestamp = getStatsTimestamp();\n const stats: RTCStats[] = [];\n\n if (!this.dtlsTransport) {\n return stats;\n }\n\n const transportId = generateStatsId(\"transport\", this.dtlsTransport.id);\n\n // Add codec stats for each codec\n for (const codec of this.codecs) {\n const codecStats: RTCCodecStats = {\n type: \"codec\",\n id: generateStatsId(\"codec\", codec.payloadType, transportId),\n timestamp,\n payloadType: codec.payloadType,\n transportId,\n mimeType: codec.mimeType,\n clockRate: codec.clockRate,\n channels: codec.channels,\n sdpFmtpLine: codec.parameters,\n };\n stats.push(codecStats);\n }\n\n return stats;\n }\n}\n\nexport const Inactive = \"inactive\";\nexport const Sendonly = \"sendonly\";\nexport const Recvonly = \"recvonly\";\nexport const Sendrecv = \"sendrecv\";\n\nexport const Directions = [Inactive, Sendonly, Recvonly, Sendrecv] as const;\n\nexport type MediaDirection = (typeof Directions)[number];\n\ntype SimulcastDirection = \"send\" | \"recv\";\n\nexport interface TransceiverOptions {\n direction: MediaDirection;\n simulcast: { direction: SimulcastDirection; rid: string }[];\n streams: MediaStream[];\n}\n"]}
@@ -0,0 +1,279 @@
1
+ /**
2
+ * WebRTC Statistics API implementation
3
+ * Based on: https://www.w3.org/TR/webrtc-stats/
4
+ */
5
+ export type RTCStatsType = "codec" | "inbound-rtp" | "outbound-rtp" | "remote-inbound-rtp" | "remote-outbound-rtp" | "media-source" | "peer-connection" | "data-channel" | "transport" | "candidate-pair" | "local-candidate" | "remote-candidate" | "certificate";
6
+ export interface RTCStats {
7
+ timestamp: number;
8
+ type: RTCStatsType;
9
+ id: string;
10
+ }
11
+ export interface RTCRtpStreamStats extends RTCStats {
12
+ ssrc: number;
13
+ kind: string;
14
+ transportId?: string;
15
+ codecId?: string;
16
+ }
17
+ export interface RTCReceivedRtpStreamStats extends RTCRtpStreamStats {
18
+ packetsReceived?: number;
19
+ packetsLost?: number;
20
+ jitter?: number;
21
+ packetsDiscarded?: number;
22
+ packetsRepaired?: number;
23
+ burstPacketsLost?: number;
24
+ burstPacketsDiscarded?: number;
25
+ burstLossCount?: number;
26
+ burstDiscardCount?: number;
27
+ burstLossRate?: number;
28
+ burstDiscardRate?: number;
29
+ gapLossRate?: number;
30
+ gapDiscardRate?: number;
31
+ framesDropped?: number;
32
+ partialFramesLost?: number;
33
+ fullFramesLost?: number;
34
+ }
35
+ export interface RTCInboundRtpStreamStats extends RTCReceivedRtpStreamStats {
36
+ type: "inbound-rtp";
37
+ trackIdentifier?: string;
38
+ mid?: string;
39
+ remoteId?: string;
40
+ framesDecoded?: number;
41
+ keyFramesDecoded?: number;
42
+ frameWidth?: number;
43
+ frameHeight?: number;
44
+ frameBitDepth?: number;
45
+ framesPerSecond?: number;
46
+ qpSum?: number;
47
+ totalDecodeTime?: number;
48
+ totalInterFrameDelay?: number;
49
+ totalSquaredInterFrameDelay?: number;
50
+ lastPacketReceivedTimestamp?: number;
51
+ headerBytesReceived?: number;
52
+ packetsFailedDecryption?: number;
53
+ packetsDuplicated?: number;
54
+ perDscpPacketsReceived?: Record<string, number>;
55
+ nackCount?: number;
56
+ firCount?: number;
57
+ pliCount?: number;
58
+ totalProcessingDelay?: number;
59
+ estimatedPlayoutTimestamp?: number;
60
+ jitterBufferDelay?: number;
61
+ jitterBufferTargetDelay?: number;
62
+ jitterBufferEmittedCount?: number;
63
+ jitterBufferMinimumDelay?: number;
64
+ totalSamplesReceived?: number;
65
+ concealedSamples?: number;
66
+ silentConcealedSamples?: number;
67
+ concealmentEvents?: number;
68
+ insertedSamplesForDeceleration?: number;
69
+ removedSamplesForAcceleration?: number;
70
+ audioLevel?: number;
71
+ totalAudioEnergy?: number;
72
+ totalSamplesDuration?: number;
73
+ framesReceived?: number;
74
+ decoderImplementation?: string;
75
+ playoutId?: string;
76
+ powerEfficientDecoder?: boolean;
77
+ framesAssembledFromMultiplePackets?: number;
78
+ totalAssemblyTime?: number;
79
+ retransmittedPacketsReceived?: number;
80
+ retransmittedBytesReceived?: number;
81
+ rtxSsrc?: number;
82
+ fecSsrc?: number;
83
+ }
84
+ export interface RTCSentRtpStreamStats extends RTCRtpStreamStats {
85
+ packetsSent?: number;
86
+ bytesSent?: number;
87
+ }
88
+ export interface RTCOutboundRtpStreamStats extends RTCSentRtpStreamStats {
89
+ type: "outbound-rtp";
90
+ mid?: string;
91
+ mediaSourceId?: string;
92
+ remoteId?: string;
93
+ rid?: string;
94
+ headerBytesSent?: number;
95
+ retransmittedPacketsSent?: number;
96
+ retransmittedBytesSent?: number;
97
+ rtxSsrc?: number;
98
+ targetBitrate?: number;
99
+ totalEncodedBytesTarget?: number;
100
+ frameWidth?: number;
101
+ frameHeight?: number;
102
+ frameBitDepth?: number;
103
+ framesPerSecond?: number;
104
+ framesSent?: number;
105
+ hugeFramesSent?: number;
106
+ framesEncoded?: number;
107
+ keyFramesEncoded?: number;
108
+ qpSum?: number;
109
+ totalEncodeTime?: number;
110
+ totalPacketSendDelay?: number;
111
+ qualityLimitationReason?: string;
112
+ qualityLimitationDurations?: Record<string, number>;
113
+ qualityLimitationResolutionChanges?: number;
114
+ perDscpPacketsSent?: Record<string, number>;
115
+ nackCount?: number;
116
+ firCount?: number;
117
+ pliCount?: number;
118
+ encoderImplementation?: string;
119
+ powerEfficientEncoder?: boolean;
120
+ active?: boolean;
121
+ scalabilityMode?: string;
122
+ }
123
+ export interface RTCRemoteInboundRtpStreamStats extends RTCReceivedRtpStreamStats {
124
+ type: "remote-inbound-rtp";
125
+ localId?: string;
126
+ roundTripTime?: number;
127
+ totalRoundTripTime?: number;
128
+ fractionLost?: number;
129
+ roundTripTimeMeasurements?: number;
130
+ }
131
+ export interface RTCRemoteOutboundRtpStreamStats extends RTCSentRtpStreamStats {
132
+ type: "remote-outbound-rtp";
133
+ localId?: string;
134
+ remoteTimestamp?: number;
135
+ reportsSent?: number;
136
+ roundTripTime?: number;
137
+ totalRoundTripTime?: number;
138
+ roundTripTimeMeasurements?: number;
139
+ }
140
+ export interface RTCMediaSourceStats extends RTCStats {
141
+ type: "media-source";
142
+ trackIdentifier: string;
143
+ kind: string;
144
+ }
145
+ export interface RTCVideoSourceStats extends RTCMediaSourceStats {
146
+ width?: number;
147
+ height?: number;
148
+ frames?: number;
149
+ framesPerSecond?: number;
150
+ }
151
+ export interface RTCAudioSourceStats extends RTCMediaSourceStats {
152
+ audioLevel?: number;
153
+ totalAudioEnergy?: number;
154
+ totalSamplesDuration?: number;
155
+ echoReturnLoss?: number;
156
+ echoReturnLossEnhancement?: number;
157
+ droppedSamplesDuration?: number;
158
+ droppedSamplesEvents?: number;
159
+ totalCaptureDelay?: number;
160
+ totalSamplesCaptured?: number;
161
+ }
162
+ export interface RTCPeerConnectionStats extends RTCStats {
163
+ type: "peer-connection";
164
+ dataChannelsOpened?: number;
165
+ dataChannelsClosed?: number;
166
+ }
167
+ export interface RTCDataChannelStats extends RTCStats {
168
+ type: "data-channel";
169
+ label?: string;
170
+ protocol?: string;
171
+ dataChannelIdentifier?: number;
172
+ state: RTCDataChannelState;
173
+ messagesSent?: number;
174
+ bytesSent?: number;
175
+ messagesReceived?: number;
176
+ bytesReceived?: number;
177
+ }
178
+ export interface RTCTransportStats extends RTCStats {
179
+ type: "transport";
180
+ bytesSent?: number;
181
+ packetsSent?: number;
182
+ bytesReceived?: number;
183
+ packetsReceived?: number;
184
+ rtcpTransportStatsId?: string;
185
+ iceRole?: RTCIceRole;
186
+ iceLocalUsernameFragment?: string;
187
+ dtlsState: RTCDtlsTransportState;
188
+ iceState?: RTCIceTransportState;
189
+ selectedCandidatePairId?: string;
190
+ localCertificateId?: string;
191
+ remoteCertificateId?: string;
192
+ tlsVersion?: string;
193
+ dtlsCipher?: string;
194
+ dtlsRole?: RTCDtlsRole;
195
+ srtpCipher?: string;
196
+ selectedCandidatePairChanges?: number;
197
+ iceRestarts?: number;
198
+ }
199
+ export interface RTCIceCandidateStats extends RTCStats {
200
+ transportId?: string;
201
+ address?: string;
202
+ port?: number;
203
+ protocol?: string;
204
+ candidateType: RTCIceCandidateType;
205
+ priority?: number;
206
+ url?: string;
207
+ relayProtocol?: string;
208
+ foundation?: string;
209
+ relatedAddress?: string;
210
+ relatedPort?: number;
211
+ usernameFragment?: string;
212
+ tcpType?: RTCIceTcpCandidateType;
213
+ }
214
+ export interface RTCIceCandidatePairStats extends RTCStats {
215
+ type: "candidate-pair";
216
+ transportId?: string;
217
+ localCandidateId: string;
218
+ remoteCandidateId: string;
219
+ state: RTCStatsIceCandidatePairState;
220
+ nominated?: boolean;
221
+ packetsSent?: number;
222
+ packetsReceived?: number;
223
+ bytesSent?: number;
224
+ bytesReceived?: number;
225
+ lastPacketSentTimestamp?: number;
226
+ lastPacketReceivedTimestamp?: number;
227
+ totalRoundTripTime?: number;
228
+ currentRoundTripTime?: number;
229
+ availableOutgoingBitrate?: number;
230
+ availableIncomingBitrate?: number;
231
+ requestsReceived?: number;
232
+ requestsSent?: number;
233
+ responsesReceived?: number;
234
+ responsesSent?: number;
235
+ retransmissionsReceived?: number;
236
+ retransmissionsSent?: number;
237
+ consentRequestsSent?: number;
238
+ consentExpiredTimestamp?: number;
239
+ packetsDiscardedOnSend?: number;
240
+ bytesDiscardedOnSend?: number;
241
+ }
242
+ export interface RTCCertificateStats extends RTCStats {
243
+ type: "certificate";
244
+ fingerprint: string;
245
+ fingerprintAlgorithm: string;
246
+ base64Certificate: string;
247
+ issuerCertificateId?: string;
248
+ }
249
+ export interface RTCCodecStats extends RTCStats {
250
+ type: "codec";
251
+ payloadType: number;
252
+ transportId: string;
253
+ mimeType: string;
254
+ clockRate?: number;
255
+ channels?: number;
256
+ sdpFmtpLine?: string;
257
+ }
258
+ export type RTCDataChannelState = "connecting" | "open" | "closing" | "closed";
259
+ export type RTCDtlsTransportState = "new" | "connecting" | "connected" | "closed" | "failed";
260
+ export type RTCIceTransportState = "new" | "checking" | "connected" | "completed" | "disconnected" | "failed" | "closed";
261
+ export type RTCIceRole = "controlling" | "controlled";
262
+ export type RTCDtlsRole = "client" | "server";
263
+ export type RTCIceCandidateType = "host" | "srflx" | "prflx" | "relay";
264
+ export type RTCIceTcpCandidateType = "active" | "passive" | "so";
265
+ export type RTCStatsIceCandidatePairState = "frozen" | "waiting" | "in-progress" | "failed" | "succeeded";
266
+ /**
267
+ * RTCStatsReport is a Map-like object that holds WebRTC statistics
268
+ */
269
+ export declare class RTCStatsReport extends Map<string, RTCStats> {
270
+ constructor(stats?: Array<RTCStats>);
271
+ }
272
+ /**
273
+ * Generate a unique ID for a statistics object
274
+ */
275
+ export declare function generateStatsId(type: string, ...parts: (string | number | undefined)[]): string;
276
+ /**
277
+ * Get current timestamp in milliseconds (DOMHighResTimeStamp)
278
+ */
279
+ export declare function getStatsTimestamp(): number;
@@ -1,3 +1,37 @@
1
1
  "use strict";
2
- // todo impl
2
+ /**
3
+ * WebRTC Statistics API implementation
4
+ * Based on: https://www.w3.org/TR/webrtc-stats/
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.RTCStatsReport = void 0;
8
+ exports.generateStatsId = generateStatsId;
9
+ exports.getStatsTimestamp = getStatsTimestamp;
10
+ /**
11
+ * RTCStatsReport is a Map-like object that holds WebRTC statistics
12
+ */
13
+ class RTCStatsReport extends Map {
14
+ constructor(stats) {
15
+ super();
16
+ if (stats) {
17
+ for (const stat of stats) {
18
+ this.set(stat.id, stat);
19
+ }
20
+ }
21
+ }
22
+ }
23
+ exports.RTCStatsReport = RTCStatsReport;
24
+ /**
25
+ * Generate a unique ID for a statistics object
26
+ */
27
+ function generateStatsId(type, ...parts) {
28
+ const validParts = parts.filter((p) => p !== undefined);
29
+ return `${type}_${validParts.join("_")}`;
30
+ }
31
+ /**
32
+ * Get current timestamp in milliseconds (DOMHighResTimeStamp)
33
+ */
34
+ function getStatsTimestamp() {
35
+ return performance.now();
36
+ }
3
37
  //# sourceMappingURL=stats.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../../../src/media/stats.ts"],"names":[],"mappings":";AAAA,YAAY","sourcesContent":["// todo impl\n"]}
1
+ {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../../../src/media/stats.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AA4UH,0CAMC;AAKD,8CAEC;AA9BD;;GAEG;AACH,MAAa,cAAe,SAAQ,GAAqB;IACvD,YAAY,KAAuB;QACjC,KAAK,EAAE,CAAC;QACR,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;IACH,CAAC;CACF;AATD,wCASC;AAED;;GAEG;AACH,SAAgB,eAAe,CAC7B,IAAY,EACZ,GAAG,KAAsC;IAEzC,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;IACxD,OAAO,GAAG,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB;IAC/B,OAAO,WAAW,CAAC,GAAG,EAAE,CAAC;AAC3B,CAAC","sourcesContent":["/**\n * WebRTC Statistics API implementation\n * Based on: https://www.w3.org/TR/webrtc-stats/\n */\n\nexport type RTCStatsType =\n | \"codec\"\n | \"inbound-rtp\"\n | \"outbound-rtp\"\n | \"remote-inbound-rtp\"\n | \"remote-outbound-rtp\"\n | \"media-source\"\n | \"peer-connection\"\n | \"data-channel\"\n | \"transport\"\n | \"candidate-pair\"\n | \"local-candidate\"\n | \"remote-candidate\"\n | \"certificate\";\n\nexport interface RTCStats {\n timestamp: number;\n type: RTCStatsType;\n id: string;\n}\n\nexport interface RTCRtpStreamStats extends RTCStats {\n ssrc: number;\n kind: string;\n transportId?: string;\n codecId?: string;\n}\n\nexport interface RTCReceivedRtpStreamStats extends RTCRtpStreamStats {\n packetsReceived?: number;\n packetsLost?: number;\n jitter?: number;\n packetsDiscarded?: number;\n packetsRepaired?: number;\n burstPacketsLost?: number;\n burstPacketsDiscarded?: number;\n burstLossCount?: number;\n burstDiscardCount?: number;\n burstLossRate?: number;\n burstDiscardRate?: number;\n gapLossRate?: number;\n gapDiscardRate?: number;\n framesDropped?: number;\n partialFramesLost?: number;\n fullFramesLost?: number;\n}\n\nexport interface RTCInboundRtpStreamStats extends RTCReceivedRtpStreamStats {\n type: \"inbound-rtp\";\n trackIdentifier?: string;\n mid?: string;\n remoteId?: string;\n framesDecoded?: number;\n keyFramesDecoded?: number;\n frameWidth?: number;\n frameHeight?: number;\n frameBitDepth?: number;\n framesPerSecond?: number;\n qpSum?: number;\n totalDecodeTime?: number;\n totalInterFrameDelay?: number;\n totalSquaredInterFrameDelay?: number;\n lastPacketReceivedTimestamp?: number;\n headerBytesReceived?: number;\n packetsFailedDecryption?: number;\n packetsDuplicated?: number;\n perDscpPacketsReceived?: Record<string, number>;\n nackCount?: number;\n firCount?: number;\n pliCount?: number;\n totalProcessingDelay?: number;\n estimatedPlayoutTimestamp?: number;\n jitterBufferDelay?: number;\n jitterBufferTargetDelay?: number;\n jitterBufferEmittedCount?: number;\n jitterBufferMinimumDelay?: number;\n totalSamplesReceived?: number;\n concealedSamples?: number;\n silentConcealedSamples?: number;\n concealmentEvents?: number;\n insertedSamplesForDeceleration?: number;\n removedSamplesForAcceleration?: number;\n audioLevel?: number;\n totalAudioEnergy?: number;\n totalSamplesDuration?: number;\n framesReceived?: number;\n decoderImplementation?: string;\n playoutId?: string;\n powerEfficientDecoder?: boolean;\n framesAssembledFromMultiplePackets?: number;\n totalAssemblyTime?: number;\n retransmittedPacketsReceived?: number;\n retransmittedBytesReceived?: number;\n rtxSsrc?: number;\n fecSsrc?: number;\n}\n\nexport interface RTCSentRtpStreamStats extends RTCRtpStreamStats {\n packetsSent?: number;\n bytesSent?: number;\n}\n\nexport interface RTCOutboundRtpStreamStats extends RTCSentRtpStreamStats {\n type: \"outbound-rtp\";\n mid?: string;\n mediaSourceId?: string;\n remoteId?: string;\n rid?: string;\n headerBytesSent?: number;\n retransmittedPacketsSent?: number;\n retransmittedBytesSent?: number;\n rtxSsrc?: number;\n targetBitrate?: number;\n totalEncodedBytesTarget?: number;\n frameWidth?: number;\n frameHeight?: number;\n frameBitDepth?: number;\n framesPerSecond?: number;\n framesSent?: number;\n hugeFramesSent?: number;\n framesEncoded?: number;\n keyFramesEncoded?: number;\n qpSum?: number;\n totalEncodeTime?: number;\n totalPacketSendDelay?: number;\n qualityLimitationReason?: string;\n qualityLimitationDurations?: Record<string, number>;\n qualityLimitationResolutionChanges?: number;\n perDscpPacketsSent?: Record<string, number>;\n nackCount?: number;\n firCount?: number;\n pliCount?: number;\n encoderImplementation?: string;\n powerEfficientEncoder?: boolean;\n active?: boolean;\n scalabilityMode?: string;\n}\n\nexport interface RTCRemoteInboundRtpStreamStats\n extends RTCReceivedRtpStreamStats {\n type: \"remote-inbound-rtp\";\n localId?: string;\n roundTripTime?: number;\n totalRoundTripTime?: number;\n fractionLost?: number;\n roundTripTimeMeasurements?: number;\n}\n\nexport interface RTCRemoteOutboundRtpStreamStats extends RTCSentRtpStreamStats {\n type: \"remote-outbound-rtp\";\n localId?: string;\n remoteTimestamp?: number;\n reportsSent?: number;\n roundTripTime?: number;\n totalRoundTripTime?: number;\n roundTripTimeMeasurements?: number;\n}\n\nexport interface RTCMediaSourceStats extends RTCStats {\n type: \"media-source\";\n trackIdentifier: string;\n kind: string;\n}\n\nexport interface RTCVideoSourceStats extends RTCMediaSourceStats {\n width?: number;\n height?: number;\n frames?: number;\n framesPerSecond?: number;\n}\n\nexport interface RTCAudioSourceStats extends RTCMediaSourceStats {\n audioLevel?: number;\n totalAudioEnergy?: number;\n totalSamplesDuration?: number;\n echoReturnLoss?: number;\n echoReturnLossEnhancement?: number;\n droppedSamplesDuration?: number;\n droppedSamplesEvents?: number;\n totalCaptureDelay?: number;\n totalSamplesCaptured?: number;\n}\n\nexport interface RTCPeerConnectionStats extends RTCStats {\n type: \"peer-connection\";\n dataChannelsOpened?: number;\n dataChannelsClosed?: number;\n}\n\nexport interface RTCDataChannelStats extends RTCStats {\n type: \"data-channel\";\n label?: string;\n protocol?: string;\n dataChannelIdentifier?: number;\n state: RTCDataChannelState;\n messagesSent?: number;\n bytesSent?: number;\n messagesReceived?: number;\n bytesReceived?: number;\n}\n\nexport interface RTCTransportStats extends RTCStats {\n type: \"transport\";\n bytesSent?: number;\n packetsSent?: number;\n bytesReceived?: number;\n packetsReceived?: number;\n rtcpTransportStatsId?: string;\n iceRole?: RTCIceRole;\n iceLocalUsernameFragment?: string;\n dtlsState: RTCDtlsTransportState;\n iceState?: RTCIceTransportState;\n selectedCandidatePairId?: string;\n localCertificateId?: string;\n remoteCertificateId?: string;\n tlsVersion?: string;\n dtlsCipher?: string;\n dtlsRole?: RTCDtlsRole;\n srtpCipher?: string;\n selectedCandidatePairChanges?: number;\n iceRestarts?: number;\n}\n\nexport interface RTCIceCandidateStats extends RTCStats {\n transportId?: string;\n address?: string;\n port?: number;\n protocol?: string;\n candidateType: RTCIceCandidateType;\n priority?: number;\n url?: string;\n relayProtocol?: string;\n foundation?: string;\n relatedAddress?: string;\n relatedPort?: number;\n usernameFragment?: string;\n tcpType?: RTCIceTcpCandidateType;\n}\n\nexport interface RTCIceCandidatePairStats extends RTCStats {\n type: \"candidate-pair\";\n transportId?: string;\n localCandidateId: string;\n remoteCandidateId: string;\n state: RTCStatsIceCandidatePairState;\n nominated?: boolean;\n packetsSent?: number;\n packetsReceived?: number;\n bytesSent?: number;\n bytesReceived?: number;\n lastPacketSentTimestamp?: number;\n lastPacketReceivedTimestamp?: number;\n totalRoundTripTime?: number;\n currentRoundTripTime?: number;\n availableOutgoingBitrate?: number;\n availableIncomingBitrate?: number;\n requestsReceived?: number;\n requestsSent?: number;\n responsesReceived?: number;\n responsesSent?: number;\n retransmissionsReceived?: number;\n retransmissionsSent?: number;\n consentRequestsSent?: number;\n consentExpiredTimestamp?: number;\n packetsDiscardedOnSend?: number;\n bytesDiscardedOnSend?: number;\n}\n\nexport interface RTCCertificateStats extends RTCStats {\n type: \"certificate\";\n fingerprint: string;\n fingerprintAlgorithm: string;\n base64Certificate: string;\n issuerCertificateId?: string;\n}\n\nexport interface RTCCodecStats extends RTCStats {\n type: \"codec\";\n payloadType: number;\n transportId: string;\n mimeType: string;\n clockRate?: number;\n channels?: number;\n sdpFmtpLine?: string;\n}\n\n// Type definitions\nexport type RTCDataChannelState = \"connecting\" | \"open\" | \"closing\" | \"closed\";\nexport type RTCDtlsTransportState =\n | \"new\"\n | \"connecting\"\n | \"connected\"\n | \"closed\"\n | \"failed\";\nexport type RTCIceTransportState =\n | \"new\"\n | \"checking\"\n | \"connected\"\n | \"completed\"\n | \"disconnected\"\n | \"failed\"\n | \"closed\";\nexport type RTCIceRole = \"controlling\" | \"controlled\";\nexport type RTCDtlsRole = \"client\" | \"server\";\nexport type RTCIceCandidateType = \"host\" | \"srflx\" | \"prflx\" | \"relay\";\nexport type RTCIceTcpCandidateType = \"active\" | \"passive\" | \"so\";\nexport type RTCStatsIceCandidatePairState =\n | \"frozen\"\n | \"waiting\"\n | \"in-progress\"\n | \"failed\"\n | \"succeeded\";\n\n/**\n * RTCStatsReport is a Map-like object that holds WebRTC statistics\n */\nexport class RTCStatsReport extends Map<string, RTCStats> {\n constructor(stats?: Array<RTCStats>) {\n super();\n if (stats) {\n for (const stat of stats) {\n this.set(stat.id, stat);\n }\n }\n }\n}\n\n/**\n * Generate a unique ID for a statistics object\n */\nexport function generateStatsId(\n type: string,\n ...parts: (string | number | undefined)[]\n): string {\n const validParts = parts.filter((p) => p !== undefined);\n return `${type}_${validParts.join(\"_\")}`;\n}\n\n/**\n * Get current timestamp in milliseconds (DOMHighResTimeStamp)\n */\nexport function getStatsTimestamp(): number {\n return performance.now();\n}\n"]}