| /* |
| * Copyright (C) 2012 Google Inc. All rights reserved. |
| * Copyright (C) 2017 Apple Inc. All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions |
| * are met: |
| * 1. Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * 2. Redistributions in binary form must reproduce the above copyright |
| * notice, this list of conditions and the following disclaimer in the |
| * documentation and/or other materials provided with the distribution. |
| * |
| * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY |
| * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
| * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
| * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY |
| * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
| * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
| * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON |
| * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
| * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| */ |
| |
| [ |
| Conditional=WEB_RTC, |
| EnabledBySetting=PeerConnectionEnabled, |
| ImplementationLacksVTable, |
| Exposed=Window |
| ] interface RTCStatsReport { |
| readonly maplike<DOMString, object>; |
| }; |
| |
| enum RTCStatsType { |
| "candidate-pair", |
| "certificate", |
| "codec", |
| "data-channel", |
| "inbound-rtp", |
| "local-candidate", |
| "media-source", |
| "outbound-rtp", |
| "peer-connection", |
| "remote-candidate", |
| "remote-inbound-rtp", |
| "track", |
| "transport" |
| }; |
| |
| typedef double DOMHighResTimeStamp; |
| |
| dictionary RTCStats { |
| DOMHighResTimeStamp timestamp; |
| RTCStatsType type; |
| DOMString id; |
| |
| }; |
| |
| [ JSGenerateToJSObject ] |
| dictionary RTCRtpStreamStats : RTCStats { |
| required unsigned long ssrc; |
| required DOMString kind; |
| // We should obsolete this field |
| required DOMString mediaType; |
| DOMString transportId; |
| DOMString codecId; |
| }; |
| |
| [ JSGenerateToJSObject ] |
| dictionary RTCReceivedRtpStreamStats : RTCRtpStreamStats { |
| unsigned long long packetsReceived; |
| long long packetsLost; |
| double jitter; |
| unsigned long long packetsDiscarded; |
| unsigned long long packetsRepaired; |
| unsigned long long burstPacketsLost; |
| unsigned long long burstPacketsDiscarded; |
| unsigned long burstLossCount; |
| unsigned long burstDiscardCount; |
| double burstLossRate; |
| double burstDiscardRate; |
| double gapLossRate; |
| double gapDiscardRate; |
| unsigned long framesDropped; |
| unsigned long partialFramesLost; |
| unsigned long fullFramesLost; |
| }; |
| |
| [ JSGenerateToJSObject ] |
| dictionary RTCInboundRtpStreamStats : RTCReceivedRtpStreamStats { |
| // required DOMString receiverId; |
| DOMString remoteId; |
| unsigned long framesDecoded; |
| unsigned long keyFramesDecoded; |
| unsigned long frameWidth; |
| unsigned long frameHeight; |
| unsigned long frameBitDepth; |
| double framesPerSecond; |
| unsigned long long qpSum; |
| double totalDecodeTime; |
| double totalInterFrameDelay; |
| double totalSquaredInterFrameDelay; |
| boolean voiceActivityFlag; |
| DOMHighResTimeStamp lastPacketReceivedTimestamp; |
| double averageRtcpInterval; |
| unsigned long long headerBytesReceived; |
| unsigned long long fecPacketsReceived; |
| unsigned long long fecPacketsDiscarded; |
| unsigned long long bytesReceived; |
| unsigned long long packetsFailedDecryption; |
| unsigned long long packetsDuplicated; |
| // record<USVString, unsigned long 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 samplesDecodedWithSilk; |
| unsigned long long samplesDecodedWithCelt; |
| 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; |
| // DOMString decoderImplementation; |
| |
| // To be removed as obsolete. |
| DOMString trackId; |
| }; |
| |
| [ JSGenerateToJSObject ] |
| dictionary RTCRemoteInboundRtpStreamStats : RTCReceivedRtpStreamStats { |
| DOMString localId; |
| double roundTripTime; |
| double totalRoundTripTime; |
| double fractionLost; |
| unsigned long long reportsReceived; |
| unsigned long long roundTripTimeMeasurements; |
| }; |
| |
| [ JSGenerateToJSObject ] |
| dictionary RTCSentRtpStreamStats : RTCRtpStreamStats { |
| unsigned long packetsSent; |
| unsigned long long bytesSent; |
| }; |
| |
| [ JSGenerateToJSObject ] |
| dictionary RTCOutboundRtpStreamStats : RTCSentRtpStreamStats { |
| unsigned long rtxSsrc; |
| DOMString mediaSourceId; |
| DOMString senderId; |
| DOMString remoteId; |
| DOMString rid; |
| DOMHighResTimeStamp lastPacketSentTimestamp; |
| unsigned long long headerBytesSent; |
| unsigned long packetsDiscardedOnSend; |
| unsigned long long bytesDiscardedOnSend; |
| unsigned long fecPacketsSent; |
| unsigned long long retransmittedPacketsSent; |
| unsigned long long retransmittedBytesSent; |
| double targetBitrate; |
| unsigned long long totalEncodedBytesTarget; |
| unsigned long frameWidth; |
| unsigned long frameHeight; |
| unsigned long frameBitDepth; |
| double framesPerSecond; |
| unsigned long framesSent; |
| unsigned long hugeFramesSent; |
| unsigned long framesEncoded; |
| unsigned long keyFramesEncoded; |
| unsigned long framesDiscardedOnSend; |
| unsigned long long qpSum; |
| unsigned long long totalSamplesSent; |
| unsigned long long samplesEncodedWithSilk; |
| unsigned long long samplesEncodedWithCelt; |
| boolean voiceActivityFlag; |
| double totalEncodeTime; |
| double totalPacketSendDelay; |
| double averageRtcpInterval; |
| // RTCQualityLimitationReason qualityLimitationReason; |
| // record<DOMString, double> qualityLimitationDurations; |
| unsigned long qualityLimitationResolutionChanges; |
| // record<USVString, unsigned long long> perDscpPacketsSent; |
| unsigned long nackCount; |
| unsigned long firCount; |
| unsigned long pliCount; |
| unsigned long sliCount; |
| // DOMString encoderImplementation; |
| |
| // To be removed as obsolete. |
| DOMString trackId; |
| }; |
| |
| [ JSGenerateToJSObject ] |
| dictionary RTCMediaStreamTrackStats : RTCStats { |
| DOMString trackIdentifier; |
| boolean remoteSource; |
| boolean ended; |
| boolean detached; |
| // FIXME: Add sequence<DOMString> ssrcIds; |
| unsigned long frameWidth; |
| unsigned long frameHeight; |
| double framesPerSecond; |
| unsigned long framesSent; |
| unsigned long framesReceived; |
| unsigned long framesDecoded; |
| unsigned long framesDropped; |
| unsigned long framesCorrupted; |
| unsigned long partialFramesLost; |
| unsigned long fullFramesLost; |
| double audioLevel; |
| double echoReturnLoss; |
| double echoReturnLossEnhancement; |
| |
| // FIXME: Introduce RTCVideoReceiverStats |
| unsigned long freezeCount; |
| unsigned long pauseCount; |
| double totalFreezesDuration; |
| double totalPausesDuration; |
| double totalFramesDuration; |
| double sumOfSquaredFramesDuration; |
| // FIXME: Introduce RTCAudioReceiverStats |
| unsigned long long jitterBufferFlushes; |
| }; |
| |
| [ JSGenerateToJSObject ] |
| dictionary RTCDataChannelStats : RTCStats { |
| DOMString label; |
| DOMString protocol; |
| long datachannelid; |
| // FIXME: Switch state to RTCDataChannelState |
| DOMString state; |
| unsigned long messagesSent; |
| unsigned long long bytesSent; |
| unsigned long messagesReceived; |
| unsigned long long bytesReceived; |
| }; |
| |
| enum RTCStatsIceCandidatePairState { |
| "frozen", |
| "waiting", |
| "inprogress", |
| "failed", |
| "succeeded", |
| "cancelled" |
| }; |
| |
| [ JSGenerateToJSObject ] |
| dictionary RTCIceCandidatePairStats : RTCStats { |
| DOMString transportId; |
| DOMString localCandidateId; |
| DOMString remoteCandidateId; |
| RTCStatsIceCandidatePairState state; |
| unsigned long long priority; |
| boolean nominated; |
| boolean writable; |
| boolean readable; |
| unsigned long long bytesSent; |
| unsigned long long bytesReceived; |
| double totalRoundTripTime; |
| double currentRoundTripTime; |
| double availableOutgoingBitrate; |
| double availableIncomingBitrate; |
| unsigned long long requestsReceived; |
| unsigned long long requestsSent; |
| unsigned long long responsesReceived; |
| unsigned long long responsesSent; |
| // FIXME: Expose other fields once libwebrtc support them. |
| }; |
| |
| [ JSGenerateToJSObject ] |
| dictionary RTCIceCandidateStats : RTCStats { |
| DOMString transportId; |
| // FIXME: decide whether to expose networkType |
| // FIXME: Expose relayProtocol |
| DOMString address; |
| long port; |
| DOMString protocol; |
| RTCIceCandidateType candidateType; |
| long priority; |
| DOMString url; |
| boolean deleted = false; |
| }; |
| |
| [ JSGenerateToJSObject ] |
| dictionary RTCCertificateStats : RTCStats { |
| DOMString fingerprint; |
| DOMString fingerprintAlgorithm; |
| DOMString base64Certificate; |
| DOMString issuerCertificateId; |
| }; |
| |
| enum RTCCodecType { |
| "encode", |
| "decode" |
| }; |
| |
| [ JSGenerateToJSObject ] |
| dictionary RTCCodecStats : RTCStats { |
| unsigned long payloadType; |
| RTCCodecType codecType; |
| DOMString transportId; |
| DOMString mimeType; |
| unsigned long clockRate; |
| unsigned long channels; |
| DOMString sdpFmtpLine; |
| }; |
| |
| [ JSGenerateToJSObject ] |
| dictionary RTCTransportStats : RTCStats { |
| // FIXME 169662: Support more fields. |
| // unsigned long packetsSent; |
| // unsigned long packetsReceived; |
| unsigned long long bytesSent; |
| unsigned long long bytesReceived; |
| DOMString rtcpTransportStatsId; |
| // RTCIceRole iceRole; |
| // DOMString iceLocalUsernameFragment; |
| required DOMString dtlsState; |
| // RTCIceTransportState iceState; |
| DOMString selectedCandidatePairId; |
| DOMString localCertificateId; |
| DOMString remoteCertificateId; |
| DOMString tlsVersion; |
| DOMString dtlsCipher; |
| DOMString srtpCipher; |
| // DOMString tlsGroup; |
| // unsigned long selectedCandidatePairChanges; |
| }; |
| |
| [ JSGenerateToJSObject ] |
| dictionary RTCPeerConnectionStats : RTCStats { |
| // FIXME 169662: Support more fields. |
| unsigned long dataChannelsOpened; |
| unsigned long dataChannelsClosed; |
| // unsigned long dataChannelsRequested; |
| // unsigned long dataChannelsAccepted; |
| }; |
| |
| [ JSGenerateToJSObject ] |
| dictionary RTCMediaSourceStats : RTCStats { |
| required DOMString trackIdentifier; |
| required DOMString kind; |
| boolean relayedSource; |
| }; |
| |
| dictionary RTCAudioSourceStats : RTCMediaSourceStats { |
| double audioLevel; |
| double totalAudioEnergy; |
| double totalSamplesDuration; |
| double echoReturnLoss; |
| double echoReturnLossEnhancement; |
| }; |
| |
| dictionary RTCVideoSourceStats : RTCMediaSourceStats { |
| unsigned long width; |
| unsigned long height; |
| unsigned long bitDepth; |
| unsigned long frames; |
| double framesPerSecond; |
| }; |
| |
| // FIXME 169662: missing RTCMediaStreamStats |