// GENERATED CONTENT - DO NOT EDIT
// Content was automatically extracted by Reffy into reffy-reports
// (https://github.com/tidoust/reffy-reports)
// Source: Identifiers for WebRTC's Statistics API (https://w3c.github.io/webrtc-stats/)

enum RTCStatsType {
"codec",
"inbound-rtp",
"outbound-rtp",
"remote-inbound-rtp",
"remote-outbound-rtp",
"media-source",
"csrc",
"peer-connection",
"data-channel",
"stream",
"track",
"sender",
"receiver",
"transport",
"candidate-pair",
"local-candidate",
"remote-candidate",
"certificate",
"stunserverconnection"
};

dictionary RTCRtpStreamStats : RTCStats {
             unsigned long ssrc;
             DOMString kind;
             DOMString transportId;
             DOMString codecId;
};

dictionary RTCCodecStats : RTCStats {
             unsigned long payloadType;
             RTCCodecType codecType;
             DOMString transportId;
             DOMString mimeType;
             unsigned long clockRate;
             unsigned long channels;
             DOMString sdpFmtpLine;
};

enum RTCCodecType {
    "encode",
    "decode",
};

dictionary RTCReceivedRtpStreamStats : RTCRtpStreamStats {
             unsigned long packetsReceived;
             long packetsLost;
             double jitter;
             unsigned long packetsDiscarded;
             unsigned long packetsRepaired;
             unsigned long burstPacketsLost;
             unsigned long burstPacketsDiscarded;
             unsigned long burstLossCount;
             unsigned long burstDiscardCount;
             double burstLossRate;
             double burstDiscardRate;
             double gapLossRate;
             double gapDiscardRate;
};

dictionary RTCInboundRtpStreamStats : RTCReceivedRtpStreamStats {
 DOMString trackId;
 DOMString receiverId;
 DOMString remoteId;
 unsigned long framesDecoded;
 unsigned long keyFramesDecoded;
 unsigned long frameWidth;
 unsigned long frameHeight;
 double framesPerSecond;
 unsigned long long qpSum;
 double totalDecodeTime;
 boolean voiceActivityFlag;
 DOMHighResTimeStamp lastPacketReceivedTimestamp;
 double averageRtcpInterval;
 unsigned long fecPacketsReceived;
 unsigned long fecPacketsDiscarded;
 unsigned long long bytesReceived;
 unsigned long packetsFailedDecryption;
 unsigned long packetsDuplicated;
 record<USVString, unsigned long> perDscpPacketsReceived;
 unsigned long nackCount;
 unsigned long firCount;
 unsigned long pliCount;
 unsigned long sliCount;
 DOMHighResTimeStamp estimatedPlayoutTimestamp;
 double jitterBufferDelay;
 unsigned long long jitterBufferEmittedCount;
 unsigned long long totalSamplesReceived;
 unsigned long long concealedSamples;
 unsigned long long silentConcealedSamples;
 unsigned long long concealmentEvents;
 unsigned long long insertedSamplesForDeceleration;
 unsigned long long removedSamplesForAcceleration;
 double audioLevel;
 double totalAudioEnergy;
 double totalSamplesDuration;
 unsigned long framesReceived;
 unsigned long framesDropped;
 unsigned long partialFramesLost;
 unsigned long fullFramesLost;
 DOMString decoderImplementation;
};

dictionary RTCRemoteInboundRtpStreamStats : RTCReceivedRtpStreamStats {
             DOMString localId;
             double roundTripTime;
             double fractionLost;
};

dictionary RTCSentRtpStreamStats : RTCRtpStreamStats {
             unsigned long packetsSent;
             unsigned long packetsDiscardedOnSend;
             unsigned long fecPacketsSent;
             unsigned long long bytesSent;
             unsigned long long bytesDiscardedOnSend;
};

dictionary RTCOutboundRtpStreamStats : RTCSentRtpStreamStats {
             DOMString trackId;
             DOMString mediaSourceId;
             DOMString senderId;
             DOMString remoteId;
             DOMHighResTimeStamp lastPacketSentTimestamp;
             unsigned long long retransmittedPacketsSent;
             unsigned long long retransmittedBytesSent;
             double targetBitrate;
             unsigned long long totalEncodedBytesTarget;
             unsigned long frameWidth;
             unsigned long frameHeight;
             double framesPerSecond;
             unsigned long framesSent;
             unsigned long hugeFramesSent;
             unsigned long framesEncoded;
             unsigned long keyFramesEncoded;
             unsigned long long qpSum;
             unsigned long long totalSamplesSent;
             boolean voiceActivityFlag;
             double totalEncodeTime;
             double totalPacketSendDelay;
             double averageRtcpInterval;
             RTCQualityLimitationReason qualityLimitationReason;
             record<DOMString, double> qualityLimitationDurations;
             unsigned long qualityLimitationResolutionChanges;
             record<USVString, unsigned long> perDscpPacketsSent;
             unsigned long nackCount;
             unsigned long firCount;
             unsigned long pliCount;
             unsigned long sliCount;
             DOMString encoderImplementation;
};

enum RTCQualityLimitationReason {
  "none",
  "cpu",
  "bandwidth",
  "other",
};

dictionary RTCRemoteOutboundRtpStreamStats : RTCSentRtpStreamStats {
             DOMString localId;
             DOMHighResTimeStamp remoteTimestamp;
};

dictionary RTCMediaSourceStats : RTCStats {
             DOMString trackIdentifier;
             DOMString kind;
};

dictionary RTCAudioSourceStats : RTCMediaSourceStats {
              double audioLevel;
              double totalAudioEnergy;
              double totalSamplesDuration;
              double echoReturnLoss;
              double echoReturnLossEnhancement;
};

dictionary RTCVideoSourceStats : RTCMediaSourceStats {
             unsigned long width;
             unsigned long height;
             unsigned long frames;
             unsigned long framesPerSecond;
};

dictionary RTCRtpContributingSourceStats : RTCStats {
             unsigned long contributorSsrc;
             DOMString inboundRtpStreamId;
             unsigned long packetsContributedTo;
             double audioLevel;
};

dictionary RTCPeerConnectionStats : RTCStats {
            unsigned long dataChannelsOpened;
            unsigned long dataChannelsClosed;
            unsigned long dataChannelsRequested;
            unsigned long dataChannelsAccepted;
};

dictionary RTCMediaStreamStats : RTCStats {
             DOMString streamIdentifier;
             sequence<DOMString> trackIds;
};

dictionary RTCMediaHandlerStats : RTCStats {
             DOMString trackIdentifier;
             boolean remoteSource;
             boolean ended;
             DOMString kind;
             RTCPriorityType priority;
};

dictionary RTCVideoHandlerStats : RTCMediaHandlerStats {
};

dictionary RTCVideoSenderStats : RTCVideoHandlerStats {
             DOMString mediaSourceId;
};

dictionary RTCSenderVideoTrackAttachmentStats : RTCVideoSenderStats {
};

dictionary RTCVideoReceiverStats : RTCVideoHandlerStats {
};

dictionary RTCAudioHandlerStats : RTCMediaHandlerStats {
};

dictionary RTCAudioSenderStats : RTCAudioHandlerStats {
             DOMString mediaSourceId;
};

dictionary RTCSenderAudioTrackAttachmentStats : RTCAudioSenderStats {
};

dictionary RTCAudioReceiverStats : RTCAudioHandlerStats {
};

dictionary RTCDataChannelStats : RTCStats {
             DOMString label;
             DOMString protocol;
             long dataChannelIdentifier;
             DOMString transportId;
             RTCDataChannelState state;
             unsigned long messagesSent;
             unsigned long long bytesSent;
             unsigned long messagesReceived;
             unsigned long long bytesReceived;
};

dictionary RTCTransportStats : RTCStats {
             unsigned long packetsSent;
             unsigned long packetsReceived;
             unsigned long long bytesSent;
             unsigned long long bytesReceived;
             DOMString rtcpTransportStatsId;
             RTCIceRole iceRole;
             RTCDtlsTransportState dtlsState;
             DOMString selectedCandidatePairId;
             DOMString localCertificateId;
             DOMString remoteCertificateId;
             DOMString tlsVersion;
             DOMString dtlsCipher;
             DOMString srtpCipher;
             DOMString tlsGroup;
             unsigned long selectedCandidatePairChanges;
};

dictionary RTCIceCandidateStats : RTCStats {
             DOMString transportId;
             RTCNetworkType networkType;
             DOMString? address;
             long port;
             DOMString protocol;
             RTCIceCandidateType candidateType;
             long priority;
             DOMString url;
             DOMString relayProtocol;
};

enum RTCNetworkType {
    "bluetooth",
    "cellular",
    "ethernet",
    "wifi",
    "wimax",
    "vpn",
    "unknown"
};

dictionary RTCIceCandidatePairStats : RTCStats {
             DOMString transportId;
             DOMString localCandidateId;
             DOMString remoteCandidateId;
             RTCStatsIceCandidatePairState state;
             boolean nominated;
             unsigned long packetsSent;
             unsigned long packetsReceived;
             unsigned long long bytesSent;
             unsigned long long bytesReceived;
             DOMHighResTimeStamp lastPacketSentTimestamp;
             DOMHighResTimeStamp lastPacketReceivedTimestamp;
             DOMHighResTimeStamp firstRequestTimestamp;
             DOMHighResTimeStamp lastRequestTimestamp;
             DOMHighResTimeStamp lastResponseTimestamp;
             double totalRoundTripTime;
             double currentRoundTripTime;
             double availableOutgoingBitrate;
             double availableIncomingBitrate;
             unsigned long circuitBreakerTriggerCount;
             unsigned long long requestsReceived;
             unsigned long long requestsSent;
             unsigned long long responsesReceived;
             unsigned long long responsesSent;
             unsigned long long retransmissionsReceived;
             unsigned long long retransmissionsSent;
             unsigned long long consentRequestsSent;
             DOMHighResTimeStamp consentExpiredTimestamp;
};

enum RTCStatsIceCandidatePairState {
    "frozen",
    "waiting",
    "in-progress",
    "failed",
    "succeeded"
};

dictionary RTCCertificateStats : RTCStats {
             DOMString fingerprint;
             DOMString fingerprintAlgorithm;
             DOMString base64Certificate;
             DOMString issuerCertificateId;
};

dictionary RTCStunServerConnectionStats : RTCStats {
           DOMString url;
           long port;
           DOMString protocol;
           RTCNetworkType networkType;
           unsigned long totalRequestsSent;
           unsigned long totalResponsesReceived;
           double totalRoundTripTime;
};

partial dictionary RTCCodecStats {
   DOMString implementation;
};

partial dictionary RTCIceCandidateStats {
   boolean isRemote;
};

partial dictionary RTCIceCandidatePairStats {
double totalRtt;
double currentRtt;
unsigned long long priority;
};

partial dictionary RTCRtpStreamStats {
             DOMString mediaType;
             double averageRTCPInterval;
};

partial dictionary RTCInboundRtpStreamStats {
          double fractionLost;
};

partial dictionary RTCAudioHandlerStats {
            double audioLevel;
            double totalAudioEnergy;
            double totalSamplesDuration;
            boolean voiceActivityFlag;
};

partial dictionary RTCAudioSenderStats {
            unsigned long long totalSamplesSent;
            double echoReturnLoss;
            double echoReturnLossEnhancement;
};

partial dictionary RTCAudioReceiverStats {
            DOMHighResTimeStamp estimatedPlayoutTimestamp;
            double jitterBufferDelay;
            unsigned long long jitterBufferEmittedCount;
            unsigned long long totalSamplesReceived;
            unsigned long long concealedSamples;
            unsigned long long silentConcealedSamples;
            unsigned long long concealmentEvents;
            unsigned long long insertedSamplesForDeceleration;
            unsigned long long removedSamplesForAcceleration;
            double audioLevel;
            double totalAudioEnergy;
            double totalSamplesDuration;
};

partial dictionary RTCVideoHandlerStats {
          unsigned long frameWidth;
          unsigned long frameHeight;
          double framesPerSecond;
};

partial dictionary RTCVideoSenderStats {
          unsigned long keyFramesSent;
          unsigned long framesCaptured;
          unsigned long framesSent;
          unsigned long hugeFramesSent;
};

partial dictionary RTCVideoReceiverStats {
          unsigned long keyFramesReceived;
          DOMHighResTimeStamp estimatedPlayoutTimestamp;
          double jitterBufferDelay;
          unsigned long long jitterBufferEmittedCount;
          unsigned long framesReceived;
          unsigned long framesDecoded;
          unsigned long framesDropped;
          unsigned long partialFramesLost;
          unsigned long fullFramesLost;
};
