/* * 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, Exposed=Window ] interface RTCStatsReport { readonly maplike; }; 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 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 qualityLimitationDurations; unsigned long qualityLimitationResolutionChanges; // record 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 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