werift 0.22.9 → 0.24.0
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/README.md +46 -0
- package/lib/common/src/transport.d.ts +22 -9
- package/lib/common/src/transport.js +152 -25
- package/lib/common/src/transport.js.map +1 -1
- package/lib/dtls/src/flight/server/flight6.js +12 -2
- package/lib/dtls/src/flight/server/flight6.js.map +1 -1
- package/lib/dtls/src/server.js +6 -1
- package/lib/dtls/src/server.js.map +1 -1
- package/lib/dtls/src/socket.d.ts +1 -0
- package/lib/dtls/src/socket.js +3 -0
- package/lib/dtls/src/socket.js.map +1 -1
- package/lib/ice/src/candidate.d.ts +16 -1
- package/lib/ice/src/candidate.js +99 -15
- package/lib/ice/src/candidate.js.map +1 -1
- package/lib/ice/src/ice.d.ts +2 -0
- package/lib/ice/src/ice.js +171 -41
- package/lib/ice/src/ice.js.map +1 -1
- package/lib/ice/src/iceBase.d.ts +23 -2
- package/lib/ice/src/iceBase.js +63 -1
- package/lib/ice/src/iceBase.js.map +1 -1
- package/lib/ice/src/index.d.ts +2 -0
- package/lib/ice/src/index.js +2 -0
- package/lib/ice/src/index.js.map +1 -1
- package/lib/ice/src/stun/const.d.ts +1 -26
- package/lib/ice/src/stun/const.js +15 -54
- package/lib/ice/src/stun/const.js.map +1 -1
- package/lib/ice/src/stun/message.d.ts +1 -25
- package/lib/ice/src/stun/message.js +15 -149
- package/lib/ice/src/stun/message.js.map +1 -1
- package/lib/ice/src/stun/protocol.d.ts +1 -1
- package/lib/ice/src/stun/protocol.js +2 -2
- package/lib/ice/src/stun/protocol.js.map +1 -1
- package/lib/ice/src/stun/tcpFrame.d.ts +5 -0
- package/lib/ice/src/stun/tcpFrame.js +26 -0
- package/lib/ice/src/stun/tcpFrame.js.map +1 -0
- package/lib/ice/src/stun/tcpProtocol.d.ts +51 -0
- package/lib/ice/src/stun/tcpProtocol.js +326 -0
- package/lib/ice/src/stun/tcpProtocol.js.map +1 -0
- package/lib/ice/src/stun/transaction.d.ts +2 -1
- package/lib/ice/src/stun/transaction.js +9 -3
- package/lib/ice/src/stun/transaction.js.map +1 -1
- package/lib/ice/src/turn/frame.d.ts +1 -0
- package/lib/ice/src/turn/frame.js +18 -0
- package/lib/ice/src/turn/frame.js.map +1 -0
- package/lib/ice/src/turn/protocol.d.ts +9 -7
- package/lib/ice/src/turn/protocol.js +32 -44
- package/lib/ice/src/turn/protocol.js.map +1 -1
- package/lib/ice/src/types/model.d.ts +1 -1
- package/lib/ice/src/types/model.js.map +1 -1
- package/lib/{ice → ice-server}/src/stun/attributes.d.ts +12 -5
- package/lib/{ice → ice-server}/src/stun/attributes.js +60 -19
- package/lib/ice-server/src/stun/attributes.js.map +1 -0
- package/lib/ice-server/src/stun/const.d.ts +28 -0
- package/lib/ice-server/src/stun/const.js +88 -0
- package/lib/ice-server/src/stun/const.js.map +1 -0
- package/lib/ice-server/src/stun/message.d.ts +37 -0
- package/lib/ice-server/src/stun/message.js +190 -0
- package/lib/ice-server/src/stun/message.js.map +1 -0
- package/lib/ice-server/src/turn/auth.d.ts +1 -0
- package/lib/ice-server/src/turn/auth.js +10 -0
- package/lib/ice-server/src/turn/auth.js.map +1 -0
- package/lib/ice-server/src/turn/frame.d.ts +13 -0
- package/lib/ice-server/src/turn/frame.js +69 -0
- package/lib/ice-server/src/turn/frame.js.map +1 -0
- package/lib/index.mjs +3075 -883
- package/lib/nonstandard/index.mjs +1964 -447
- package/lib/rtp/src/extra/container/mp4/container.d.ts +9 -6
- package/lib/rtp/src/extra/container/mp4/container.js +258 -173
- package/lib/rtp/src/extra/container/mp4/container.js.map +1 -1
- package/lib/rtp/src/extra/container/mp4/h264.d.ts +1 -0
- package/lib/rtp/src/extra/container/mp4/h264.js +13 -0
- package/lib/rtp/src/extra/container/mp4/h264.js.map +1 -1
- package/lib/rtp/src/extra/processor/mp4.d.ts +11 -7
- package/lib/rtp/src/extra/processor/mp4.js +115 -60
- package/lib/rtp/src/extra/processor/mp4.js.map +1 -1
- package/lib/rtp/src/extra/processor/mp4Callback.d.ts +2 -3
- package/lib/rtp/src/extra/processor/mp4Callback.js +5 -3
- package/lib/rtp/src/extra/processor/mp4Callback.js.map +1 -1
- package/lib/rtp/src/index.d.ts +1 -0
- package/lib/rtp/src/index.js +1 -0
- package/lib/rtp/src/index.js.map +1 -1
- package/lib/rtp/src/srtp/cipher/ctr.d.ts +3 -3
- package/lib/rtp/src/srtp/cipher/ctr.js +25 -14
- package/lib/rtp/src/srtp/cipher/ctr.js.map +1 -1
- package/lib/rtp/src/srtp/cipher/gcm.d.ts +3 -3
- package/lib/rtp/src/srtp/cipher/gcm.js +57 -20
- package/lib/rtp/src/srtp/cipher/gcm.js.map +1 -1
- package/lib/rtp/src/srtp/cipher/index.d.ts +1 -1
- package/lib/rtp/src/srtp/cipher/index.js +1 -1
- package/lib/rtp/src/srtp/cipher/index.js.map +1 -1
- package/lib/rtp/src/srtp/context/srtp.d.ts +2 -1
- package/lib/rtp/src/srtp/context/srtp.js +22 -5
- package/lib/rtp/src/srtp/context/srtp.js.map +1 -1
- package/lib/rtp/src/srtp/error.d.ts +3 -0
- package/lib/rtp/src/srtp/error.js +11 -0
- package/lib/rtp/src/srtp/error.js.map +1 -0
- package/lib/rtp/src/srtp/packet.d.ts +5 -0
- package/lib/rtp/src/srtp/packet.js +48 -0
- package/lib/rtp/src/srtp/packet.js.map +1 -0
- package/lib/webrtc/src/dataChannel.d.ts +4 -2
- package/lib/webrtc/src/dataChannel.js +14 -4
- package/lib/webrtc/src/dataChannel.js.map +1 -1
- package/lib/webrtc/src/errors.d.ts +3 -0
- package/lib/webrtc/src/errors.js +11 -0
- package/lib/webrtc/src/errors.js.map +1 -0
- package/lib/webrtc/src/helper.d.ts +5 -1
- package/lib/webrtc/src/helper.js +33 -1
- package/lib/webrtc/src/helper.js.map +1 -1
- package/lib/webrtc/src/media/receiver/statistics.d.ts +4 -1
- package/lib/webrtc/src/media/receiver/statistics.js +22 -0
- package/lib/webrtc/src/media/receiver/statistics.js.map +1 -1
- package/lib/webrtc/src/media/rtpReceiver.d.ts +15 -2
- package/lib/webrtc/src/media/rtpReceiver.js +135 -20
- package/lib/webrtc/src/media/rtpReceiver.js.map +1 -1
- package/lib/webrtc/src/media/rtpSender.d.ts +32 -7
- package/lib/webrtc/src/media/rtpSender.js +177 -28
- package/lib/webrtc/src/media/rtpSender.js.map +1 -1
- package/lib/webrtc/src/media/rtpTransceiver.d.ts +13 -4
- package/lib/webrtc/src/media/rtpTransceiver.js +26 -5
- package/lib/webrtc/src/media/rtpTransceiver.js.map +1 -1
- package/lib/webrtc/src/media/stats.d.ts +15 -1
- package/lib/webrtc/src/media/stats.js +55 -1
- package/lib/webrtc/src/media/stats.js.map +1 -1
- package/lib/webrtc/src/media/track.d.ts +2 -1
- package/lib/webrtc/src/media/track.js +7 -1
- package/lib/webrtc/src/media/track.js.map +1 -1
- package/lib/webrtc/src/nonstandard/dummyMedia.d.ts +19 -0
- package/lib/webrtc/src/nonstandard/dummyMedia.js +157 -0
- package/lib/webrtc/src/nonstandard/dummyMedia.js.map +1 -0
- package/lib/webrtc/src/nonstandard/navigator.d.ts +18 -8
- package/lib/webrtc/src/nonstandard/navigator.js +96 -32
- package/lib/webrtc/src/nonstandard/navigator.js.map +1 -1
- package/lib/webrtc/src/nonstandard/userMedia/packetizer.d.ts +16 -0
- package/lib/webrtc/src/nonstandard/userMedia/packetizer.js +360 -0
- package/lib/webrtc/src/nonstandard/userMedia/packetizer.js.map +1 -0
- package/lib/webrtc/src/nonstandard/userMedia.d.ts +71 -31
- package/lib/webrtc/src/nonstandard/userMedia.js +454 -108
- package/lib/webrtc/src/nonstandard/userMedia.js.map +1 -1
- package/lib/webrtc/src/peerConnection.d.ts +185 -49
- package/lib/webrtc/src/peerConnection.js +477 -107
- package/lib/webrtc/src/peerConnection.js.map +1 -1
- package/lib/webrtc/src/sctpManager.d.ts +2 -2
- package/lib/webrtc/src/sctpManager.js +30 -9
- package/lib/webrtc/src/sctpManager.js.map +1 -1
- package/lib/webrtc/src/sdp.d.ts +10 -7
- package/lib/webrtc/src/sdp.js +39 -9
- package/lib/webrtc/src/sdp.js.map +1 -1
- package/lib/webrtc/src/sdpManager.d.ts +5 -4
- package/lib/webrtc/src/sdpManager.js +53 -31
- package/lib/webrtc/src/sdpManager.js.map +1 -1
- package/lib/webrtc/src/secureTransportManager.d.ts +13 -4
- package/lib/webrtc/src/secureTransportManager.js +101 -23
- package/lib/webrtc/src/secureTransportManager.js.map +1 -1
- package/lib/webrtc/src/transceiverManager.d.ts +5 -4
- package/lib/webrtc/src/transceiverManager.js +64 -64
- package/lib/webrtc/src/transceiverManager.js.map +1 -1
- package/lib/webrtc/src/transport/dtls.d.ts +16 -4
- package/lib/webrtc/src/transport/dtls.js +208 -35
- package/lib/webrtc/src/transport/dtls.js.map +1 -1
- package/lib/webrtc/src/transport/ice.d.ts +21 -3
- package/lib/webrtc/src/transport/ice.js +159 -30
- package/lib/webrtc/src/transport/ice.js.map +1 -1
- package/lib/webrtc/src/transport/sctp.d.ts +10 -3
- package/lib/webrtc/src/transport/sctp.js +44 -13
- package/lib/webrtc/src/transport/sctp.js.map +1 -1
- package/lib/webrtc/src/utils.d.ts +14 -4
- package/lib/webrtc/src/utils.js +138 -16
- package/lib/webrtc/src/utils.js.map +1 -1
- package/package.json +7 -4
- package/lib/ice/src/stun/attributes.js.map +0 -1
- package/lib/rtp/src/extra/container/mp4/mp4box.d.ts +0 -5
- package/lib/rtp/src/extra/container/mp4/mp4box.js +0 -32
- package/lib/rtp/src/extra/container/mp4/mp4box.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataChannel.js","sourceRoot":"","sources":["../../../src/dataChannel.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"dataChannel.js","sourceRoot":"","sources":["../../../src/dataChannel.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from \"crypto\";\nimport { Event, debug } from \"./imports/common\";\n\nimport { EventTarget } from \"./helper\";\nimport type { RTCSctpTransport } from \"./transport/sctp\";\nimport type { Callback, CallbackWithValue } from \"./types/util\";\n\nconst log = debug(\"werift:packages/webrtc/src/dataChannel.ts\");\n\nexport interface DataChannelStats {\n messagesSent: number;\n bytesSent: number;\n messagesReceived: number;\n bytesReceived: number;\n}\n\nexport function getDataChannelMessageSize(data: Buffer | string) {\n return Buffer.isBuffer(data) ? data.length : Buffer.byteLength(data);\n}\n\nexport class RTCDataChannel extends EventTarget implements DataChannelStats {\n readonly statsId = randomUUID().toString();\n readonly stateChange = new Event<[DCState]>();\n readonly stateChanged = new Event<[DCState]>();\n readonly onMessage = new Event<[string | Buffer]>();\n // todo impl\n readonly error = new Event<[Error]>();\n readonly bufferedAmountLow = new Event();\n onopen?: Callback;\n onclose?: Callback;\n onclosing?: Callback;\n onmessage?: CallbackWithValue<MessageEvent>;\n // todo impl\n onerror?: CallbackWithValue<RTCErrorEvent>;\n isCreatedByRemote = false;\n id: number;\n readyState: DCState = \"connecting\";\n\n bufferedAmount = 0;\n private _bufferedAmountLowThreshold = 0;\n\n // Statistics\n messagesSent = 0;\n bytesSent = 0;\n messagesReceived = 0;\n bytesReceived = 0;\n\n constructor(\n readonly sctp: RTCSctpTransport,\n private readonly parameters: RTCDataChannelParameters,\n public readonly sendOpen = true,\n ) {\n super();\n\n this.id = this.parameters.id;\n\n if (parameters.negotiated) {\n if (this.id == undefined || this.id < 0 || this.id > 65534) {\n throw new Error(\n \"ID must be in range 0-65534 if data channel is negotiated out-of-band\",\n );\n }\n this.sctp.dataChannelAddNegotiated(this);\n } else {\n if (sendOpen) {\n this.sendOpen = false;\n this.sctp.dataChannelOpen(this);\n }\n }\n }\n\n get ordered() {\n return this.parameters.ordered;\n }\n\n get maxRetransmits() {\n return this.parameters.maxRetransmits ?? null;\n }\n\n get maxPacketLifeTime() {\n return this.parameters.maxPacketLifeTime ?? null;\n }\n\n get label() {\n return this.parameters.label;\n }\n\n get protocol() {\n return this.parameters.protocol;\n }\n\n get negotiated() {\n return this.parameters.negotiated;\n }\n\n get bufferedAmountLowThreshold() {\n return this._bufferedAmountLowThreshold;\n }\n\n set bufferedAmountLowThreshold(value: number) {\n if (value < 0 || value > 4294967295) {\n throw new Error(\n \"bufferedAmountLowThreshold must be in range 0 - 4294967295\",\n );\n }\n this._bufferedAmountLowThreshold = value;\n }\n\n setId(id: number) {\n this.id = id;\n }\n\n setReadyState(state: DCState) {\n if (state !== this.readyState) {\n this.readyState = state;\n this.stateChange.execute(state);\n this.stateChanged.execute(state);\n\n switch (state) {\n case \"open\":\n if (this.onopen) this.onopen();\n this.emit(\"open\");\n break;\n case \"closed\":\n if (this.onclose) this.onclose();\n this.emit(\"close\");\n break;\n case \"closing\":\n if (this.onclosing) this.onclosing();\n break;\n }\n log(\"change state\", state);\n }\n }\n\n addBufferedAmount(amount: number) {\n const crossesThreshold =\n this.bufferedAmount > this.bufferedAmountLowThreshold &&\n this.bufferedAmount + amount <= this.bufferedAmountLowThreshold;\n this.bufferedAmount += amount;\n if (crossesThreshold) {\n this.bufferedAmountLow.execute();\n this.emit(\"bufferedamountlow\");\n }\n }\n\n send(data: Buffer | string) {\n const size = this.sctp.datachannelSend(this, data);\n this.messagesSent++;\n this.bytesSent += size;\n }\n\n close() {\n this.sctp.dataChannelClose(this);\n }\n}\n\nexport type DCState = \"open\" | \"closed\" | \"connecting\" | \"closing\";\n\nexport class RTCDataChannelParameters {\n label = \"\";\n maxPacketLifeTime?: number; // sec\n maxRetransmits?: number;\n ordered = true;\n protocol = \"\";\n negotiated = false;\n id!: number;\n constructor(props: Partial<RTCDataChannelParameters> = {}) {\n Object.assign(this, props);\n }\n}\n\nexport interface MessageEvent {\n data: string | Buffer;\n}\n\nexport interface RTCErrorEvent {\n error: any;\n}\n"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export type WebRtcDomExceptionName = "InvalidAccessError" | "InvalidModificationError" | "InvalidStateError" | "NotSupportedError" | "OperationError";
|
|
2
|
+
export declare function createWebRtcDomException(name: WebRtcDomExceptionName, message?: string): DOMException;
|
|
3
|
+
export declare function createWebRtcTypeError(message: string): TypeError;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createWebRtcDomException = createWebRtcDomException;
|
|
4
|
+
exports.createWebRtcTypeError = createWebRtcTypeError;
|
|
5
|
+
function createWebRtcDomException(name, message = name) {
|
|
6
|
+
return new DOMException(message, name);
|
|
7
|
+
}
|
|
8
|
+
function createWebRtcTypeError(message) {
|
|
9
|
+
return new TypeError(message);
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/errors.ts"],"names":[],"mappings":";;AAOA,4DAKC;AAED,sDAEC;AATD,SAAgB,wBAAwB,CACtC,IAA4B,EAC5B,UAAkB,IAAI;IAEtB,OAAO,IAAI,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACzC,CAAC;AAED,SAAgB,qBAAqB,CAAC,OAAe;IACnD,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC","sourcesContent":["export type WebRtcDomExceptionName =\n | \"InvalidAccessError\"\n | \"InvalidModificationError\"\n | \"InvalidStateError\"\n | \"NotSupportedError\"\n | \"OperationError\";\n\nexport function createWebRtcDomException(\n name: WebRtcDomExceptionName,\n message: string = name,\n) {\n return new DOMException(message, name);\n}\n\nexport function createWebRtcTypeError(message: string) {\n return new TypeError(message);\n}\n"]}
|
|
@@ -11,6 +11,10 @@ export declare class PromiseQueue {
|
|
|
11
11
|
private run;
|
|
12
12
|
}
|
|
13
13
|
export declare class EventTarget extends EventEmitter {
|
|
14
|
-
|
|
14
|
+
emit(type: string | symbol, ...args: any[]): boolean;
|
|
15
|
+
addEventListener: (type: string, listener: (...args: any[]) => void, options?: boolean | {
|
|
16
|
+
once?: boolean;
|
|
17
|
+
}) => void;
|
|
15
18
|
removeEventListener: (type: string, listener: (...args: any[]) => void) => void;
|
|
19
|
+
dispatchEvent: (event: Event) => boolean;
|
|
16
20
|
}
|
package/lib/webrtc/src/helper.js
CHANGED
|
@@ -57,7 +57,11 @@ class EventTarget extends node_events_1.EventEmitter {
|
|
|
57
57
|
enumerable: true,
|
|
58
58
|
configurable: true,
|
|
59
59
|
writable: true,
|
|
60
|
-
value: (type, listener) => {
|
|
60
|
+
value: (type, listener, options) => {
|
|
61
|
+
if (typeof options === "object" && options?.once) {
|
|
62
|
+
this.once(type, listener);
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
61
65
|
this.addListener(type, listener);
|
|
62
66
|
}
|
|
63
67
|
});
|
|
@@ -69,6 +73,34 @@ class EventTarget extends node_events_1.EventEmitter {
|
|
|
69
73
|
this.removeListener(type, listener);
|
|
70
74
|
}
|
|
71
75
|
});
|
|
76
|
+
Object.defineProperty(this, "dispatchEvent", {
|
|
77
|
+
enumerable: true,
|
|
78
|
+
configurable: true,
|
|
79
|
+
writable: true,
|
|
80
|
+
value: (event) => this.emit(event.type, event)
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
emit(type, ...args) {
|
|
84
|
+
if (typeof type !== "string") {
|
|
85
|
+
return super.emit(type, ...args);
|
|
86
|
+
}
|
|
87
|
+
if (args.length === 0) {
|
|
88
|
+
return super.emit(type, new Event(type));
|
|
89
|
+
}
|
|
90
|
+
const [event, ...rest] = args;
|
|
91
|
+
if (event && typeof event === "object" && !("type" in event)) {
|
|
92
|
+
try {
|
|
93
|
+
Object.defineProperty(event, "type", {
|
|
94
|
+
configurable: true,
|
|
95
|
+
enumerable: true,
|
|
96
|
+
value: type,
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
return super.emit(type, { type, ...event }, ...rest);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return super.emit(type, event, ...rest);
|
|
72
104
|
}
|
|
73
105
|
}
|
|
74
106
|
exports.EventTarget = EventTarget;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helper.js","sourceRoot":"","sources":["../../../src/helper.ts"],"names":[],"mappings":";;;AAEA,8BAEC;AAED,wBAGC;AATD,6CAA2C;AAE3C,SAAgB,SAAS,CAAI,GAAQ;IACnC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACnC,CAAC;AAED,SAAgB,MAAM,CAAC,IAAY,EAAE,KAAa;IAChD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC9B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,MAAa,YAAY;IAAzB;QACE;;;;mBAA6D,EAAE;WAAC;QAChE;;;;mBAAU,KAAK;WAAC;QAEhB;;;;mBAAO,CAAC,OAA2B,EAAE,EAAE,CACrC,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,EAAE;gBACtB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;gBACtC,IAAI,CAAC,IAAI,CAAC,OAAO;oBAAE,IAAI,CAAC,GAAG,EAAE,CAAC;YAChC,CAAC,CAAC;WAAC;IAcP,CAAC;IAZS,KAAK,CAAC,GAAG;QACf,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAChC,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YACrB,IAAI,CAAC,IAAI,EAAE,CAAC;YAEZ,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACvB,CAAC;IACH,CAAC;CACF;AAtBD,oCAsBC;AAED,MAAa,WAAY,SAAQ,0BAAY;IAA7C;;
|
|
1
|
+
{"version":3,"file":"helper.js","sourceRoot":"","sources":["../../../src/helper.ts"],"names":[],"mappings":"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","sourcesContent":["import { EventEmitter } from \"node:events\";\n\nexport function enumerate<T>(arr: T[]): [number, T][] {\n return arr.map((v, i) => [i, v]);\n}\n\nexport function divide(from: string, split: string): [string, string] {\n const arr = from.split(split);\n return [arr[0], arr.slice(1).join(split)];\n}\n\nexport class PromiseQueue {\n queue: { promise: () => Promise<any>; done: () => void }[] = [];\n running = false;\n\n push = (promise: () => Promise<any>) =>\n new Promise<void>((r) => {\n this.queue.push({ promise, done: r });\n if (!this.running) this.run();\n });\n\n private async run() {\n const task = this.queue.shift();\n if (task) {\n this.running = true;\n await task.promise();\n task.done();\n\n this.run();\n } else {\n this.running = false;\n }\n }\n}\n\nexport class EventTarget extends EventEmitter {\n override emit(type: string | symbol, ...args: any[]) {\n if (typeof type !== \"string\") {\n return super.emit(type, ...args);\n }\n\n if (args.length === 0) {\n return super.emit(type, new Event(type));\n }\n\n const [event, ...rest] = args;\n if (event && typeof event === \"object\" && !(\"type\" in event)) {\n try {\n Object.defineProperty(event, \"type\", {\n configurable: true,\n enumerable: true,\n value: type,\n });\n } catch {\n return super.emit(type, { type, ...event }, ...rest);\n }\n }\n\n return super.emit(type, event, ...rest);\n }\n\n addEventListener = (\n type: string,\n listener: (...args: any[]) => void,\n options?: boolean | { once?: boolean },\n ) => {\n if (typeof options === \"object\" && options?.once) {\n this.once(type, listener);\n return;\n }\n this.addListener(type, listener);\n };\n\n removeEventListener = (type: string, listener: (...args: any[]) => void) => {\n this.removeListener(type, listener);\n };\n\n dispatchEvent = (event: Event) => this.emit(event.type, event);\n}\n"]}
|
|
@@ -4,7 +4,10 @@ export declare class StreamStatistics {
|
|
|
4
4
|
max_seq?: number;
|
|
5
5
|
cycles: number;
|
|
6
6
|
packets_received: number;
|
|
7
|
-
|
|
7
|
+
bytesReceived: number;
|
|
8
|
+
headerBytesReceived: number;
|
|
9
|
+
lastPacketReceivedTimestamp?: number;
|
|
10
|
+
readonly clockRate: number;
|
|
8
11
|
jitter_q4: number;
|
|
9
12
|
private last_arrival?;
|
|
10
13
|
private last_timestamp?;
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.StreamStatistics = void 0;
|
|
4
4
|
const common_1 = require("../../imports/common");
|
|
5
|
+
const stats_1 = require("../stats");
|
|
5
6
|
// from aiortc
|
|
6
7
|
class StreamStatistics {
|
|
7
8
|
constructor(clockRate) {
|
|
@@ -29,6 +30,24 @@ class StreamStatistics {
|
|
|
29
30
|
writable: true,
|
|
30
31
|
value: 0
|
|
31
32
|
});
|
|
33
|
+
Object.defineProperty(this, "bytesReceived", {
|
|
34
|
+
enumerable: true,
|
|
35
|
+
configurable: true,
|
|
36
|
+
writable: true,
|
|
37
|
+
value: 0
|
|
38
|
+
});
|
|
39
|
+
Object.defineProperty(this, "headerBytesReceived", {
|
|
40
|
+
enumerable: true,
|
|
41
|
+
configurable: true,
|
|
42
|
+
writable: true,
|
|
43
|
+
value: 0
|
|
44
|
+
});
|
|
45
|
+
Object.defineProperty(this, "lastPacketReceivedTimestamp", {
|
|
46
|
+
enumerable: true,
|
|
47
|
+
configurable: true,
|
|
48
|
+
writable: true,
|
|
49
|
+
value: void 0
|
|
50
|
+
});
|
|
32
51
|
// # jitter
|
|
33
52
|
Object.defineProperty(this, "clockRate", {
|
|
34
53
|
enumerable: true,
|
|
@@ -73,6 +92,9 @@ class StreamStatistics {
|
|
|
73
92
|
const inOrder = this.max_seq == undefined ||
|
|
74
93
|
(0, common_1.uint16Gt)(packet.header.sequenceNumber, this.max_seq);
|
|
75
94
|
this.packets_received++;
|
|
95
|
+
this.bytesReceived += packet.payload.length;
|
|
96
|
+
this.headerBytesReceived += packet.header.serializeSize;
|
|
97
|
+
this.lastPacketReceivedTimestamp = (0, stats_1.getStatsTimestamp)();
|
|
76
98
|
if (this.base_seq == undefined) {
|
|
77
99
|
this.base_seq = packet.header.sequenceNumber;
|
|
78
100
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"statistics.js","sourceRoot":"","sources":["../../../../../src/media/receiver/statistics.ts"],"names":[],"mappings":";;;AAAA,iDAAqD;
|
|
1
|
+
{"version":3,"file":"statistics.js","sourceRoot":"","sources":["../../../../../src/media/receiver/statistics.ts"],"names":[],"mappings":"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","sourcesContent":["import { int, uint16Gt } from \"../../imports/common\";\nimport type { RtpPacket } from \"../../imports/rtp\";\nimport { getStatsTimestamp } from \"../stats\";\n\n// from aiortc\n\nexport class StreamStatistics {\n base_seq?: number;\n max_seq?: number;\n cycles = 0;\n packets_received = 0;\n bytesReceived = 0;\n headerBytesReceived = 0;\n lastPacketReceivedTimestamp?: number;\n\n // # jitter\n readonly clockRate: number;\n jitter_q4 = 0;\n private last_arrival?: number;\n private last_timestamp?: number;\n\n // # fraction lost\n expected_prior = 0;\n received_prior = 0;\n\n constructor(clockRate: number) {\n this.clockRate = clockRate;\n }\n\n add(packet: RtpPacket, now: number = Date.now() / 1000) {\n const inOrder =\n this.max_seq == undefined ||\n uint16Gt(packet.header.sequenceNumber, this.max_seq);\n this.packets_received++;\n this.bytesReceived += packet.payload.length;\n this.headerBytesReceived += packet.header.serializeSize;\n this.lastPacketReceivedTimestamp = getStatsTimestamp();\n\n if (this.base_seq == undefined) {\n this.base_seq = packet.header.sequenceNumber;\n }\n\n if (inOrder) {\n const arrival = int(now * this.clockRate);\n\n if (\n this.max_seq != undefined &&\n packet.header.sequenceNumber < this.max_seq\n ) {\n this.cycles += 1 << 16;\n }\n this.max_seq = packet.header.sequenceNumber;\n\n if (\n packet.header.timestamp !== this.last_timestamp &&\n this.packets_received > 1\n ) {\n const diff = Math.abs(\n arrival -\n (this.last_arrival ?? 0) -\n (packet.header.timestamp - (this.last_timestamp ?? 0)),\n );\n this.jitter_q4 += diff - ((this.jitter_q4 + 8) >> 4);\n }\n\n this.last_arrival = arrival;\n this.last_timestamp = packet.header.timestamp;\n }\n }\n\n get fraction_lost() {\n const expected_interval = this.packets_expected - this.expected_prior;\n this.expected_prior = this.packets_expected;\n const received_interval = this.packets_received - this.received_prior;\n this.received_prior = this.packets_received;\n const lost_interval = expected_interval - received_interval;\n if (expected_interval == 0 || lost_interval <= 0) {\n return 0;\n } else {\n return Math.floor((lost_interval << 8) / expected_interval);\n }\n }\n\n get jitter() {\n return this.jitter_q4 >> 4;\n }\n\n get packets_expected() {\n return this.cycles + (this.max_seq ?? 0) - (this.base_seq ?? 0) + 1;\n }\n\n get packets_lost() {\n const lost = this.packets_expected - this.packets_received;\n return lost < 0 ? 0 : lost;\n }\n}\n"]}
|
|
@@ -5,13 +5,14 @@ import type { RTCDtlsTransport } from "../transport/dtls";
|
|
|
5
5
|
import type { Kind } from "../types/domain";
|
|
6
6
|
import type { RTCRtpReceiveParameters } from "./parameters";
|
|
7
7
|
import { ReceiverTWCC } from "./receiver/receiverTwcc";
|
|
8
|
-
import { type RTCStats } from "./stats";
|
|
8
|
+
import { type RTCStats, type RTCStatsReport } from "./stats";
|
|
9
9
|
import { MediaStreamTrack } from "./track";
|
|
10
10
|
export declare class RTCRtpReceiver {
|
|
11
11
|
readonly config: PeerConfig;
|
|
12
12
|
kind: Kind;
|
|
13
13
|
rtcpSsrc: number;
|
|
14
14
|
private readonly codecs;
|
|
15
|
+
private readonly defaultTrack;
|
|
15
16
|
private get codecArray();
|
|
16
17
|
private readonly ssrcByRtx;
|
|
17
18
|
private readonly nack;
|
|
@@ -44,11 +45,19 @@ export declare class RTCRtpReceiver {
|
|
|
44
45
|
receiverTWCC?: ReceiverTWCC;
|
|
45
46
|
stopped: boolean;
|
|
46
47
|
remoteStreamId?: string;
|
|
48
|
+
remoteStreamIds: string[];
|
|
47
49
|
remoteTrackId?: string;
|
|
48
50
|
rtcpRunning: boolean;
|
|
49
51
|
private rtcpCancel;
|
|
50
52
|
private remoteStreams;
|
|
53
|
+
private senderReportsReceivedBySsrc;
|
|
54
|
+
private remoteTimestampsBySsrc;
|
|
55
|
+
private remotePacketCountBySsrc;
|
|
56
|
+
private remoteOctetCountBySsrc;
|
|
57
|
+
private nackCountBySsrc;
|
|
58
|
+
private pliCountBySsrc;
|
|
51
59
|
constructor(config: PeerConfig, kind: Kind, rtcpSsrc: number);
|
|
60
|
+
get transport(): RTCDtlsTransport;
|
|
52
61
|
setDtlsTransport(dtls: RTCDtlsTransport): void;
|
|
53
62
|
get track(): MediaStreamTrack;
|
|
54
63
|
get nackEnabled(): import("./parameters").RTCPFB | undefined;
|
|
@@ -62,7 +71,11 @@ export declare class RTCRtpReceiver {
|
|
|
62
71
|
addTrack(track: MediaStreamTrack): boolean;
|
|
63
72
|
stop(): void;
|
|
64
73
|
runRtcp(): Promise<void>;
|
|
65
|
-
|
|
74
|
+
private getInboundRtpStatsId;
|
|
75
|
+
private getRemoteOutboundRtpStatsId;
|
|
76
|
+
getStatsRootIds(selector?: MediaStreamTrack): string[];
|
|
77
|
+
collectStats(timestamp: number): RTCStats[];
|
|
78
|
+
getStats(): Promise<RTCStatsReport>;
|
|
66
79
|
sendRtcpPLI(mediaSsrc: number): Promise<void>;
|
|
67
80
|
handleRtcpPacket(packet: RtcpPacket): void;
|
|
68
81
|
handleRtpBySsrc: (packet: RtpPacket, extensions: Extensions) => void;
|
|
@@ -43,6 +43,12 @@ class RTCRtpReceiver {
|
|
|
43
43
|
writable: true,
|
|
44
44
|
value: {}
|
|
45
45
|
});
|
|
46
|
+
Object.defineProperty(this, "defaultTrack", {
|
|
47
|
+
enumerable: true,
|
|
48
|
+
configurable: true,
|
|
49
|
+
writable: true,
|
|
50
|
+
value: void 0
|
|
51
|
+
});
|
|
46
52
|
Object.defineProperty(this, "ssrcByRtx", {
|
|
47
53
|
enumerable: true,
|
|
48
54
|
configurable: true,
|
|
@@ -161,6 +167,12 @@ class RTCRtpReceiver {
|
|
|
161
167
|
writable: true,
|
|
162
168
|
value: void 0
|
|
163
169
|
});
|
|
170
|
+
Object.defineProperty(this, "remoteStreamIds", {
|
|
171
|
+
enumerable: true,
|
|
172
|
+
configurable: true,
|
|
173
|
+
writable: true,
|
|
174
|
+
value: []
|
|
175
|
+
});
|
|
164
176
|
Object.defineProperty(this, "remoteTrackId", {
|
|
165
177
|
enumerable: true,
|
|
166
178
|
configurable: true,
|
|
@@ -185,6 +197,42 @@ class RTCRtpReceiver {
|
|
|
185
197
|
writable: true,
|
|
186
198
|
value: {}
|
|
187
199
|
});
|
|
200
|
+
Object.defineProperty(this, "senderReportsReceivedBySsrc", {
|
|
201
|
+
enumerable: true,
|
|
202
|
+
configurable: true,
|
|
203
|
+
writable: true,
|
|
204
|
+
value: {}
|
|
205
|
+
});
|
|
206
|
+
Object.defineProperty(this, "remoteTimestampsBySsrc", {
|
|
207
|
+
enumerable: true,
|
|
208
|
+
configurable: true,
|
|
209
|
+
writable: true,
|
|
210
|
+
value: {}
|
|
211
|
+
});
|
|
212
|
+
Object.defineProperty(this, "remotePacketCountBySsrc", {
|
|
213
|
+
enumerable: true,
|
|
214
|
+
configurable: true,
|
|
215
|
+
writable: true,
|
|
216
|
+
value: {}
|
|
217
|
+
});
|
|
218
|
+
Object.defineProperty(this, "remoteOctetCountBySsrc", {
|
|
219
|
+
enumerable: true,
|
|
220
|
+
configurable: true,
|
|
221
|
+
writable: true,
|
|
222
|
+
value: {}
|
|
223
|
+
});
|
|
224
|
+
Object.defineProperty(this, "nackCountBySsrc", {
|
|
225
|
+
enumerable: true,
|
|
226
|
+
configurable: true,
|
|
227
|
+
writable: true,
|
|
228
|
+
value: {}
|
|
229
|
+
});
|
|
230
|
+
Object.defineProperty(this, "pliCountBySsrc", {
|
|
231
|
+
enumerable: true,
|
|
232
|
+
configurable: true,
|
|
233
|
+
writable: true,
|
|
234
|
+
value: {}
|
|
235
|
+
});
|
|
188
236
|
Object.defineProperty(this, "handleRtpBySsrc", {
|
|
189
237
|
enumerable: true,
|
|
190
238
|
configurable: true,
|
|
@@ -206,13 +254,21 @@ class RTCRtpReceiver {
|
|
|
206
254
|
this.handleRTP(packet, extensions, track);
|
|
207
255
|
}
|
|
208
256
|
});
|
|
257
|
+
this.defaultTrack = new track_1.MediaStreamTrack({ kind, remote: true });
|
|
258
|
+
this.onPacketLost.subscribe((nack) => {
|
|
259
|
+
this.nackCountBySsrc[nack.mediaSourceSsrc] =
|
|
260
|
+
(this.nackCountBySsrc[nack.mediaSourceSsrc] ?? 0) + 1;
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
get transport() {
|
|
264
|
+
return this.dtlsTransport ?? null;
|
|
209
265
|
}
|
|
210
266
|
setDtlsTransport(dtls) {
|
|
211
267
|
this.dtlsTransport = dtls;
|
|
212
268
|
}
|
|
213
269
|
// todo fix
|
|
214
270
|
get track() {
|
|
215
|
-
return this.tracks[0] ??
|
|
271
|
+
return this.tracks[0] ?? this.defaultTrack;
|
|
216
272
|
}
|
|
217
273
|
get nackEnabled() {
|
|
218
274
|
return this.codecArray[0]?.rtcpFeedback.find((f) => f.type === "nack");
|
|
@@ -313,56 +369,108 @@ class RTCRtpReceiver {
|
|
|
313
369
|
}
|
|
314
370
|
catch (error) { }
|
|
315
371
|
}
|
|
316
|
-
|
|
317
|
-
|
|
372
|
+
getInboundRtpStatsId(track) {
|
|
373
|
+
return (0, stats_1.generateStatsId)("inbound-rtp", track.id ?? track.uuid);
|
|
374
|
+
}
|
|
375
|
+
getRemoteOutboundRtpStatsId(track) {
|
|
376
|
+
return (0, stats_1.generateStatsId)("remote-outbound-rtp", track.id ?? track.uuid);
|
|
377
|
+
}
|
|
378
|
+
getStatsRootIds(selector) {
|
|
379
|
+
return this.tracks
|
|
380
|
+
.filter((track) => (!selector ? true : track === selector))
|
|
381
|
+
.filter((track) => track.ssrc)
|
|
382
|
+
.map((track) => this.getInboundRtpStatsId(track));
|
|
383
|
+
}
|
|
384
|
+
collectStats(timestamp) {
|
|
318
385
|
const stats = [];
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
const
|
|
386
|
+
const transportId = this.dtlsTransport
|
|
387
|
+
? (0, stats_1.generateStatsId)("transport", this.dtlsTransport.id)
|
|
388
|
+
: undefined;
|
|
389
|
+
const activeCodec = this.codecArray[0];
|
|
390
|
+
const emittedCodecIds = new Set();
|
|
323
391
|
// Collect stats for each track
|
|
324
392
|
for (const track of this.tracks) {
|
|
325
393
|
if (!track.ssrc)
|
|
326
394
|
continue;
|
|
327
395
|
const streamStats = this.remoteStreams[track.ssrc];
|
|
328
|
-
if (!streamStats)
|
|
329
|
-
continue;
|
|
330
396
|
// Inbound RTP stats
|
|
397
|
+
const hasRemoteTimestamp = this.remoteTimestampsBySsrc[track.ssrc] !== undefined;
|
|
398
|
+
const remoteId = this.lastSRtimestamp[track.ssrc] !== undefined || hasRemoteTimestamp
|
|
399
|
+
? this.getRemoteOutboundRtpStatsId(track)
|
|
400
|
+
: undefined;
|
|
401
|
+
const codecId = activeCodec && transportId
|
|
402
|
+
? (0, stats_1.generateCodecStatsId)(transportId, activeCodec.payloadType, track.id ?? track.uuid)
|
|
403
|
+
: undefined;
|
|
404
|
+
if (activeCodec &&
|
|
405
|
+
transportId &&
|
|
406
|
+
codecId &&
|
|
407
|
+
!emittedCodecIds.has(codecId)) {
|
|
408
|
+
emittedCodecIds.add(codecId);
|
|
409
|
+
const codecStats = {
|
|
410
|
+
type: "codec",
|
|
411
|
+
id: codecId,
|
|
412
|
+
timestamp,
|
|
413
|
+
payloadType: activeCodec.payloadType,
|
|
414
|
+
transportId,
|
|
415
|
+
mimeType: activeCodec.mimeType,
|
|
416
|
+
clockRate: activeCodec.clockRate,
|
|
417
|
+
channels: activeCodec.channels,
|
|
418
|
+
sdpFmtpLine: activeCodec.parameters,
|
|
419
|
+
};
|
|
420
|
+
stats.push(codecStats);
|
|
421
|
+
}
|
|
331
422
|
const inboundRtpStats = {
|
|
332
423
|
type: "inbound-rtp",
|
|
333
|
-
id:
|
|
424
|
+
id: this.getInboundRtpStatsId(track),
|
|
334
425
|
timestamp,
|
|
335
426
|
ssrc: track.ssrc,
|
|
336
427
|
kind: this.kind,
|
|
337
428
|
transportId,
|
|
338
|
-
codecId
|
|
339
|
-
? (0, stats_1.generateStatsId)("codec", this.codecs[0].payloadType, transportId)
|
|
340
|
-
: undefined,
|
|
429
|
+
codecId,
|
|
341
430
|
mid: this.sdesMid,
|
|
342
|
-
trackIdentifier: track.id,
|
|
343
|
-
packetsReceived: streamStats
|
|
344
|
-
|
|
345
|
-
|
|
431
|
+
trackIdentifier: track.id ?? track.uuid,
|
|
432
|
+
packetsReceived: streamStats?.packets_received ?? 0,
|
|
433
|
+
bytesReceived: streamStats?.bytesReceived ?? 0,
|
|
434
|
+
headerBytesReceived: streamStats?.headerBytesReceived ?? 0,
|
|
435
|
+
packetsLost: streamStats?.packets_lost ?? 0,
|
|
436
|
+
jitter: streamStats?.clockRate
|
|
437
|
+
? streamStats.jitter / streamStats.clockRate
|
|
438
|
+
: undefined,
|
|
439
|
+
lastPacketReceivedTimestamp: streamStats?.lastPacketReceivedTimestamp,
|
|
440
|
+
remoteId,
|
|
441
|
+
nackCount: this.nackCountBySsrc[track.ssrc] || undefined,
|
|
442
|
+
pliCount: this.pliCountBySsrc[track.ssrc] || undefined,
|
|
346
443
|
};
|
|
347
444
|
stats.push(inboundRtpStats);
|
|
348
445
|
// Remote outbound RTP stats (if we have SR info)
|
|
349
|
-
if (
|
|
446
|
+
if (remoteId) {
|
|
350
447
|
const remoteOutboundStats = {
|
|
351
448
|
type: "remote-outbound-rtp",
|
|
352
|
-
id:
|
|
449
|
+
id: this.getRemoteOutboundRtpStatsId(track),
|
|
353
450
|
timestamp,
|
|
354
451
|
ssrc: track.ssrc,
|
|
355
452
|
kind: this.kind,
|
|
356
453
|
transportId,
|
|
357
454
|
codecId: inboundRtpStats.codecId,
|
|
358
455
|
localId: inboundRtpStats.id,
|
|
359
|
-
remoteTimestamp: this.
|
|
456
|
+
remoteTimestamp: this.remoteTimestampsBySsrc[track.ssrc],
|
|
457
|
+
reportsSent: this.senderReportsReceivedBySsrc[track.ssrc] ?? 0,
|
|
458
|
+
packetsSent: this.remotePacketCountBySsrc[track.ssrc],
|
|
459
|
+
bytesSent: this.remoteOctetCountBySsrc[track.ssrc],
|
|
360
460
|
};
|
|
361
461
|
stats.push(remoteOutboundStats);
|
|
362
462
|
}
|
|
363
463
|
}
|
|
364
464
|
return stats;
|
|
365
465
|
}
|
|
466
|
+
async getStats() {
|
|
467
|
+
const timestamp = (0, stats_1.getStatsTimestamp)();
|
|
468
|
+
const stats = this.collectStats(timestamp);
|
|
469
|
+
if (this.dtlsTransport) {
|
|
470
|
+
stats.push(...(await this.dtlsTransport.getStats(timestamp)));
|
|
471
|
+
}
|
|
472
|
+
return (0, stats_1.buildStatsReport)(stats, this.getStatsRootIds());
|
|
473
|
+
}
|
|
366
474
|
async sendRtcpPLI(mediaSsrc) {
|
|
367
475
|
if (!this.pliEnabled) {
|
|
368
476
|
log("pli not supported", { mediaSsrc });
|
|
@@ -379,6 +487,8 @@ class RTCRtpReceiver {
|
|
|
379
487
|
}),
|
|
380
488
|
});
|
|
381
489
|
try {
|
|
490
|
+
this.pliCountBySsrc[mediaSsrc] =
|
|
491
|
+
(this.pliCountBySsrc[mediaSsrc] ?? 0) + 1;
|
|
382
492
|
await this.dtlsTransport.sendRtcp([packet]);
|
|
383
493
|
}
|
|
384
494
|
catch (error) {
|
|
@@ -392,6 +502,11 @@ class RTCRtpReceiver {
|
|
|
392
502
|
const sr = packet;
|
|
393
503
|
this.lastSRtimestamp[sr.ssrc] = (0, utils_1.compactNtp)(sr.senderInfo.ntpTimestamp);
|
|
394
504
|
this.receiveLastSRTimestamp[sr.ssrc] = (0, utils_1.timestampSeconds)();
|
|
505
|
+
this.senderReportsReceivedBySsrc[sr.ssrc] =
|
|
506
|
+
(this.senderReportsReceivedBySsrc[sr.ssrc] ?? 0) + 1;
|
|
507
|
+
this.remoteTimestampsBySsrc[sr.ssrc] = (0, utils_1.ntpTimeToEpochMs)(sr.senderInfo.ntpTimestamp);
|
|
508
|
+
this.remotePacketCountBySsrc[sr.ssrc] = sr.senderInfo.packetCount;
|
|
509
|
+
this.remoteOctetCountBySsrc[sr.ssrc] = sr.senderInfo.octetCount;
|
|
395
510
|
const track = this.trackBySSRC[packet.ssrc];
|
|
396
511
|
if (track) {
|
|
397
512
|
track.onReceiveRtcp.execute(packet);
|