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.
- package/lib/common/src/binary.d.ts +6 -6
- package/lib/common/src/event.d.ts +1 -0
- package/lib/common/src/event.js +5 -0
- package/lib/common/src/event.js.map +1 -1
- package/lib/common/src/log.d.ts +1 -2
- package/lib/common/src/transport.d.ts +2 -1
- package/lib/common/src/transport.js +28 -14
- package/lib/common/src/transport.js.map +1 -1
- package/lib/dtls/src/cipher/prf.d.ts +12 -12
- package/lib/dtls/src/cipher/suites/aead.d.ts +3 -2
- package/lib/dtls/src/cipher/suites/aead.js +31 -38
- package/lib/dtls/src/cipher/suites/aead.js.map +1 -1
- package/lib/dtls/src/context/cipher.d.ts +4 -4
- package/lib/dtls/src/context/cipher.js +21 -10
- package/lib/dtls/src/context/cipher.js.map +1 -1
- package/lib/dtls/src/context/srtp.d.ts +3 -3
- package/lib/dtls/src/context/srtp.js.map +1 -1
- package/lib/dtls/src/flight/client/flight5.js.map +1 -1
- package/lib/dtls/src/flight/server/flight2.js.map +1 -1
- package/lib/dtls/src/handshake/extensions/ellipticCurves.d.ts +1 -1
- package/lib/dtls/src/handshake/extensions/renegotiationIndication.d.ts +2 -2
- package/lib/dtls/src/handshake/extensions/signature.d.ts +2 -2
- package/lib/dtls/src/handshake/extensions/useSrtp.d.ts +1 -1
- package/lib/dtls/src/handshake/message/alert.d.ts +1 -1
- package/lib/dtls/src/handshake/message/certificate.d.ts +1 -1
- package/lib/dtls/src/handshake/message/changeCipherSpec.d.ts +1 -1
- package/lib/dtls/src/handshake/message/client/certificateVerify.d.ts +1 -1
- package/lib/dtls/src/handshake/message/client/hello.d.ts +1 -1
- package/lib/dtls/src/handshake/message/client/keyExchange.d.ts +1 -1
- package/lib/dtls/src/handshake/message/finished.d.ts +1 -1
- package/lib/dtls/src/handshake/message/server/certificateRequest.d.ts +1 -1
- package/lib/dtls/src/handshake/message/server/hello.d.ts +1 -1
- package/lib/dtls/src/handshake/message/server/helloDone.d.ts +1 -1
- package/lib/dtls/src/handshake/message/server/helloVerifyRequest.d.ts +1 -1
- package/lib/dtls/src/handshake/message/server/keyExchange.d.ts +1 -1
- package/lib/dtls/src/handshake/random.d.ts +3 -3
- package/lib/dtls/src/record/message/fragment.d.ts +1 -1
- package/lib/dtls/src/record/message/header.d.ts +2 -19
- package/lib/dtls/src/record/message/header.js +1 -60
- package/lib/dtls/src/record/message/header.js.map +1 -1
- package/lib/dtls/src/record/message/plaintext.d.ts +6 -27
- package/lib/dtls/src/record/message/plaintext.js +34 -16
- package/lib/dtls/src/record/message/plaintext.js.map +1 -1
- package/lib/dtls/src/socket.d.ts +4 -4
- package/lib/dtls/src/socket.js.map +1 -1
- package/lib/dtls/src/util/binary.d.ts +1 -1
- package/lib/ice/src/helper.d.ts +1 -1
- package/lib/ice/src/ice.d.ts +4 -3
- package/lib/ice/src/ice.js +89 -68
- package/lib/ice/src/ice.js.map +1 -1
- package/lib/ice/src/iceBase.d.ts +20 -1
- package/lib/ice/src/iceBase.js +46 -0
- package/lib/ice/src/iceBase.js.map +1 -1
- package/lib/ice/src/stun/attributes.d.ts +2 -2
- package/lib/ice/src/stun/attributes.js +47 -27
- package/lib/ice/src/stun/attributes.js.map +1 -1
- package/lib/ice/src/stun/message.d.ts +2 -2
- package/lib/ice/src/stun/message.js +21 -23
- package/lib/ice/src/stun/message.js.map +1 -1
- package/lib/ice/src/stun/protocol.d.ts +2 -2
- package/lib/ice/src/turn/protocol.d.ts +2 -2
- package/lib/index.mjs +2252 -1474
- package/lib/nonstandard/index.mjs +333 -370
- package/lib/rtp/src/codec/av1.d.ts +2 -2
- package/lib/rtp/src/codec/opus.d.ts +1 -1
- package/lib/rtp/src/extra/container/mp4/container.js +18 -8
- package/lib/rtp/src/extra/container/mp4/container.js.map +1 -1
- package/lib/rtp/src/extra/container/mp4/h264.d.ts +2 -2
- package/lib/rtp/src/extra/container/mp4/sps-parser.d.ts +1 -1
- package/lib/rtp/src/extra/container/ogg/parser.d.ts +1 -1
- package/lib/rtp/src/extra/container/webm/container.d.ts +7 -7
- package/lib/rtp/src/extra/container/webm/container.js +17 -7
- package/lib/rtp/src/extra/container/webm/container.js.map +1 -1
- package/lib/rtp/src/extra/container/webm/ebml/ebml.d.ts +1 -1
- package/lib/rtp/src/extra/container/webm/ebml/id.d.ts +222 -222
- package/lib/rtp/src/extra/processor/depacketizerCallback.d.ts +1 -1
- package/lib/rtp/src/extra/processor/depacketizerTransformer.d.ts +6 -1
- package/lib/rtp/src/extra/processor/dtxCallback.d.ts +1 -1
- package/lib/rtp/src/extra/processor/interface.d.ts +1 -1
- package/lib/rtp/src/extra/processor/jitterBufferCallback.d.ts +1 -1
- package/lib/rtp/src/extra/processor/mp4.js +3 -0
- package/lib/rtp/src/extra/processor/mp4.js.map +1 -1
- package/lib/rtp/src/extra/processor/nackHandlerCallback.d.ts +1 -1
- package/lib/rtp/src/extra/processor/ntpTimeCallback.d.ts +1 -1
- package/lib/rtp/src/extra/processor/rtpTimeCallback.d.ts +1 -1
- package/lib/rtp/src/extra/processor/webm.d.ts +1 -1
- package/lib/rtp/src/extra/processor/webmCallback.d.ts +1 -1
- package/lib/rtp/src/extra/processor/webmCallback.js +23 -17
- package/lib/rtp/src/extra/processor/webmCallback.js.map +1 -1
- package/lib/rtp/src/helper.d.ts +1 -1
- package/lib/rtp/src/rtcp/header.d.ts +1 -1
- package/lib/rtp/src/rtcp/psfb/fullIntraRequest.d.ts +1 -1
- package/lib/rtp/src/rtcp/psfb/index.d.ts +1 -1
- package/lib/rtp/src/rtcp/psfb/pictureLossIndication.d.ts +1 -1
- package/lib/rtp/src/rtcp/psfb/remb.d.ts +1 -1
- package/lib/rtp/src/rtcp/rr.d.ts +2 -2
- package/lib/rtp/src/rtcp/rtcp.d.ts +1 -1
- package/lib/rtp/src/rtcp/rtpfb/index.d.ts +1 -1
- package/lib/rtp/src/rtcp/rtpfb/nack.d.ts +1 -1
- package/lib/rtp/src/rtcp/rtpfb/twcc.d.ts +4 -4
- package/lib/rtp/src/rtcp/sdes.d.ts +3 -3
- package/lib/rtp/src/rtcp/sr.d.ts +2 -2
- package/lib/rtp/src/rtp/headerExtension.d.ts +6 -6
- package/lib/rtp/src/rtp/red/packet.d.ts +2 -2
- package/lib/rtp/src/rtp/rtp.d.ts +2 -2
- package/lib/rtp/src/srtp/cipher/ctr.d.ts +4 -4
- package/lib/rtp/src/srtp/cipher/gcm.d.ts +4 -4
- package/lib/rtp/src/srtp/const.d.ts +3 -3
- package/lib/rtp/src/srtp/const.js.map +1 -1
- package/lib/rtp/src/srtp/context/context.d.ts +7 -7
- package/lib/rtp/src/srtp/context/context.js +10 -4
- package/lib/rtp/src/srtp/context/context.js.map +1 -1
- package/lib/rtp/src/srtp/context/srtcp.d.ts +3 -3
- package/lib/rtp/src/srtp/context/srtcp.js.map +1 -1
- package/lib/rtp/src/srtp/context/srtp.d.ts +3 -3
- package/lib/rtp/src/srtp/context/srtp.js.map +1 -1
- package/lib/rtp/src/srtp/srtcp.d.ts +2 -2
- package/lib/rtp/src/srtp/srtp.d.ts +2 -2
- package/lib/sctp/src/chunk.d.ts +12 -12
- package/lib/sctp/src/chunk.js +87 -66
- package/lib/sctp/src/chunk.js.map +1 -1
- package/lib/sctp/src/param.d.ts +3 -3
- package/lib/sctp/src/sctp.d.ts +3 -1
- package/lib/sctp/src/sctp.js +36 -1
- package/lib/sctp/src/sctp.js.map +1 -1
- package/lib/webrtc/src/dataChannel.d.ts +15 -4
- package/lib/webrtc/src/dataChannel.js +42 -7
- package/lib/webrtc/src/dataChannel.js.map +1 -1
- package/lib/webrtc/src/index.d.ts +1 -0
- package/lib/webrtc/src/index.js +1 -0
- package/lib/webrtc/src/index.js.map +1 -1
- package/lib/webrtc/src/media/index.d.ts +1 -0
- package/lib/webrtc/src/media/index.js +1 -0
- package/lib/webrtc/src/media/index.js.map +1 -1
- package/lib/webrtc/src/media/parameters.d.ts +2 -2
- package/lib/webrtc/src/media/parameters.js.map +1 -1
- package/lib/webrtc/src/media/router.js +2 -1
- package/lib/webrtc/src/media/router.js.map +1 -1
- package/lib/webrtc/src/media/rtpReceiver.d.ts +2 -2
- package/lib/webrtc/src/media/rtpReceiver.js +51 -2
- package/lib/webrtc/src/media/rtpReceiver.js.map +1 -1
- package/lib/webrtc/src/media/rtpSender.d.ts +6 -0
- package/lib/webrtc/src/media/rtpSender.js +78 -7
- package/lib/webrtc/src/media/rtpSender.js.map +1 -1
- package/lib/webrtc/src/media/rtpTransceiver.d.ts +12 -9
- package/lib/webrtc/src/media/rtpTransceiver.js +45 -8
- package/lib/webrtc/src/media/rtpTransceiver.js.map +1 -1
- package/lib/webrtc/src/media/stats.d.ts +279 -0
- package/lib/webrtc/src/media/stats.js +35 -1
- package/lib/webrtc/src/media/stats.js.map +1 -1
- package/lib/webrtc/src/peerConnection.d.ts +34 -64
- package/lib/webrtc/src/peerConnection.js +319 -986
- package/lib/webrtc/src/peerConnection.js.map +1 -1
- package/lib/webrtc/src/sctpManager.d.ts +27 -0
- package/lib/webrtc/src/sctpManager.js +147 -0
- package/lib/webrtc/src/sctpManager.js.map +1 -0
- package/lib/webrtc/src/sdp.d.ts +3 -2
- package/lib/webrtc/src/sdp.js +17 -7
- package/lib/webrtc/src/sdp.js.map +1 -1
- package/lib/webrtc/src/sdpManager.d.ts +78 -0
- package/lib/webrtc/src/sdpManager.js +391 -0
- package/lib/webrtc/src/sdpManager.js.map +1 -0
- package/lib/webrtc/src/secureTransportManager.d.ts +56 -0
- package/lib/webrtc/src/secureTransportManager.js +345 -0
- package/lib/webrtc/src/secureTransportManager.js.map +1 -0
- package/lib/webrtc/src/transceiverManager.d.ts +40 -0
- package/lib/webrtc/src/transceiverManager.js +355 -0
- package/lib/webrtc/src/transceiverManager.js.map +1 -0
- package/lib/webrtc/src/transport/dtls.d.ts +18 -6
- package/lib/webrtc/src/transport/dtls.js +119 -11
- package/lib/webrtc/src/transport/dtls.js.map +1 -1
- package/lib/webrtc/src/transport/ice.d.ts +24 -0
- package/lib/webrtc/src/transport/ice.js +86 -0
- package/lib/webrtc/src/transport/ice.js.map +1 -1
- package/lib/webrtc/src/transport/sctp.js +22 -7
- package/lib/webrtc/src/transport/sctp.js.map +1 -1
- package/lib/webrtc/src/utils.d.ts +3 -3
- package/lib/webrtc/src/utils.js.map +1 -1
- 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
|
|
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:
|
|
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:
|
|
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:
|
|
36
|
+
setDirection(direction: MediaDirection): void;
|
|
36
37
|
/**RFC 8829 4.2.5. last negotiated direction */
|
|
37
|
-
get currentDirection():
|
|
38
|
-
setCurrentDirection(direction:
|
|
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
|
|
52
|
+
export type MediaDirection = (typeof Directions)[number];
|
|
51
53
|
type SimulcastDirection = "send" | "recv";
|
|
52
54
|
export interface TransceiverOptions {
|
|
53
|
-
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 (
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
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
|
-
|
|
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":"
|
|
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
|
-
|
|
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"]}
|