|
import datetime
|
|
from dataclasses import dataclass
|
|
from typing import Optional
|
|
|
|
|
|
@dataclass
|
|
class RTCStats:
|
|
"""
|
|
Base class for statistics.
|
|
"""
|
|
|
|
timestamp: datetime.datetime
|
|
"The timestamp associated with this object."
|
|
type: str
|
|
id: str
|
|
|
|
|
|
@dataclass
|
|
class RTCRtpStreamStats(RTCStats):
|
|
ssrc: int
|
|
kind: str
|
|
transportId: str
|
|
|
|
|
|
@dataclass
|
|
class RTCReceivedRtpStreamStats(RTCRtpStreamStats):
|
|
packetsReceived: int
|
|
packetsLost: int
|
|
jitter: int
|
|
|
|
|
|
@dataclass
|
|
class RTCSentRtpStreamStats(RTCRtpStreamStats):
|
|
packetsSent: int
|
|
"Total number of RTP packets sent for this SSRC."
|
|
bytesSent: int
|
|
"Total number of bytes sent for this SSRC."
|
|
|
|
|
|
@dataclass
|
|
class RTCInboundRtpStreamStats(RTCReceivedRtpStreamStats):
|
|
"""
|
|
The :class:`RTCInboundRtpStreamStats` dictionary represents the measurement
|
|
metrics for the incoming RTP media stream.
|
|
"""
|
|
|
|
pass
|
|
|
|
|
|
@dataclass
|
|
class RTCRemoteInboundRtpStreamStats(RTCReceivedRtpStreamStats):
|
|
"""
|
|
The :class:`RTCRemoteInboundRtpStreamStats` dictionary represents the remote
|
|
endpoint's measurement metrics for a particular incoming RTP stream.
|
|
"""
|
|
|
|
roundTripTime: float
|
|
fractionLost: float
|
|
|
|
|
|
@dataclass
|
|
class RTCOutboundRtpStreamStats(RTCSentRtpStreamStats):
|
|
"""
|
|
The :class:`RTCOutboundRtpStreamStats` dictionary represents the measurement
|
|
metrics for the outgoing RTP stream.
|
|
"""
|
|
|
|
trackId: str
|
|
|
|
|
|
@dataclass
|
|
class RTCRemoteOutboundRtpStreamStats(RTCSentRtpStreamStats):
|
|
"""
|
|
The :class:`RTCRemoteOutboundRtpStreamStats` dictionary represents the remote
|
|
endpoint's measurement metrics for its outgoing RTP stream.
|
|
"""
|
|
|
|
remoteTimestamp: Optional[datetime.datetime] = None
|
|
|
|
|
|
@dataclass
|
|
class RTCTransportStats(RTCStats):
|
|
packetsSent: int
|
|
"Total number of packets sent over this transport."
|
|
packetsReceived: int
|
|
"Total number of packets received over this transport."
|
|
bytesSent: int
|
|
"Total number of bytes sent over this transport."
|
|
bytesReceived: int
|
|
"Total number of bytes received over this transport."
|
|
iceRole: str
|
|
"The current value of :attr:`RTCIceTransport.role`."
|
|
dtlsState: str
|
|
"The current value of :attr:`RTCDtlsTransport.state`."
|
|
|
|
|
|
class RTCStatsReport(dict):
|
|
"""
|
|
Provides statistics data about WebRTC connections as returned by the
|
|
:meth:`RTCPeerConnection.getStats()`, :meth:`RTCRtpReceiver.getStats()`
|
|
and :meth:`RTCRtpSender.getStats()` coroutines.
|
|
|
|
This object consists of a mapping of string identifiers to objects which
|
|
are instances of:
|
|
|
|
- :class:`RTCInboundRtpStreamStats`
|
|
- :class:`RTCOutboundRtpStreamStats`
|
|
- :class:`RTCRemoteInboundRtpStreamStats`
|
|
- :class:`RTCRemoteOutboundRtpStreamStats`
|
|
- :class:`RTCTransportStats`
|
|
"""
|
|
|
|
def add(self, stats: RTCStats) -> None:
|
|
self[stats.id] = stats
|
|
|