/* * 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, EnabledAtRuntime=PeerConnection, ImplementationLacksVTable, ] interface RTCStatsReport { readonly maplike; }; enum RTCStatsType { "codec", "inbound-rtp", "outbound-rtp", "peer-connection", "data-channel", "track", "transport", "candidate-pair", "local-candidate", "remote-candidate", "certificate" }; typedef double DOMHighResTimeStamp; dictionary RTCStats { DOMHighResTimeStamp timestamp; RTCStatsType type; DOMString id; }; dictionary RTCRTPStreamStats : RTCStats { unsigned long ssrc; DOMString associateStatsId; boolean isRemote = false; DOMString mediaType; DOMString trackId; DOMString transportId; DOMString codecId; unsigned long firCount; unsigned long pliCount; unsigned long nackCount; unsigned long sliCount; unsigned long long qpSum; }; [ JSGenerateToJSObject ] dictionary RTCInboundRTPStreamStats : RTCRTPStreamStats { unsigned long packetsReceived; unsigned long long bytesReceived; unsigned long packetsLost; double jitter; double fractionLost; 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; unsigned long framesDecoded; }; [ JSGenerateToJSObject ] dictionary RTCOutboundRTPStreamStats : RTCRTPStreamStats { unsigned long packetsSent; unsigned long long bytesSent; double targetBitrate; // FIXME 169662: missing roundTripTime unsigned long framesEncoded; }; [ 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; }; [ 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. }; enum RTCIceCandidateType { "host", "srflx", "prflx", "relay" }; [ 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; DOMString implementation; }; [ 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; // RTCDtlsTransportState dtlsState; DOMString selectedCandidatePairId; DOMString localCertificateId; DOMString remoteCertificateId; // DOMString tlsVersion; // DOMString dtlsCipher; // DOMString srtpCipher; // DOMString tlsGroup; }; [ JSGenerateToJSObject ] dictionary RTCPeerConnectionStats : RTCStats { // FIXME 169662: Support more fields. unsigned long dataChannelsOpened; unsigned long dataChannelsClosed; // unsigned long dataChannelsRequested; // unsigned long dataChannelsAccepted; }; // FIXME 169662: missing RTCMediaStreamStats