/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. * * The origin of this IDL file is * http://dev.w3.org/2011/webrtc/editor/webrtc.html#rtcstatsreport-object * http://www.w3.org/2011/04/webrtc/wiki/Stats */ enum RTCStatsType { "inbound-rtp", "outbound-rtp", "csrc", "session", "track", "transport", "candidate-pair", "local-candidate", "remote-candidate" }; dictionary RTCStats { DOMHighResTimeStamp timestamp; RTCStatsType type; DOMString id; }; dictionary RTCRTPStreamStats : RTCStats { DOMString ssrc; DOMString mediaType; DOMString remoteId; boolean isRemote = false; DOMString mediaTrackId; DOMString transportId; DOMString codecId; // Video encoder/decoder measurements, not present in RTCP case double bitrateMean; double bitrateStdDev; double framerateMean; double framerateStdDev; // Local only measurements, RTCP related but not communicated via RTCP. Not // present in RTCP case. unsigned long firCount; unsigned long pliCount; unsigned long nackCount; }; dictionary RTCInboundRTPStreamStats : RTCRTPStreamStats { unsigned long packetsReceived; unsigned long long bytesReceived; double jitter; unsigned long packetsLost; long mozAvSyncDelay; long mozJitterBufferDelay; long roundTripTime; // Video decoder measurement, not present in RTCP case unsigned long discardedPackets; unsigned long framesDecoded; }; dictionary RTCOutboundRTPStreamStats : RTCRTPStreamStats { unsigned long packetsSent; unsigned long long bytesSent; double targetBitrate; // config encoder bitrate target of this SSRC in bits/s // Video encoder measurements, not present in RTCP case unsigned long droppedFrames; unsigned long framesEncoded; }; dictionary RTCMediaStreamTrackStats : RTCStats { DOMString trackIdentifier; // track.id property boolean remoteSource; sequence ssrcIds; // Stuff that makes sense for video unsigned long frameWidth; unsigned long frameHeight; double framesPerSecond; // The nominal FPS value unsigned long framesSent; unsigned long framesReceived; // Only for remoteSource=true unsigned long framesDecoded; unsigned long framesDropped; // See VideoPlaybackQuality.droppedVideoFrames unsigned long framesCorrupted; // as above. // Stuff that makes sense for audio double audioLevel; // linear, 1.0 = 0 dBov (from RFC 6464). // AEC stuff on audio tracks sourced from a microphone where AEC is applied double echoReturnLoss; // in decibels from G.168 (2012) section 3.14 double echoReturnLossEnhancement; // as above, section 3.15 }; dictionary RTCMediaStreamStats : RTCStats { DOMString streamIdentifier; // stream.id property sequence trackIds; // Note: stats object ids, not track.id }; dictionary RTCRTPContributingSourceStats : RTCStats { unsigned long contributorSsrc; DOMString inboundRtpStreamId; }; dictionary RTCTransportStats: RTCStats { unsigned long bytesSent; unsigned long bytesReceived; }; dictionary RTCIceComponentStats : RTCStats { DOMString transportId; long component; unsigned long bytesSent; unsigned long bytesReceived; boolean activeConnection; }; enum RTCStatsIceCandidatePairState { "frozen", "waiting", "inprogress", "failed", "succeeded", "cancelled" }; 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; DOMHighResTimeStamp lastPacketSentTimestamp; DOMHighResTimeStamp lastPacketReceivedTimestamp; boolean selected; [ChromeOnly] unsigned long componentId; // moz }; enum RTCStatsIceCandidateType { "host", "serverreflexive", "peerreflexive", "relayed" }; dictionary RTCIceCandidateStats : RTCStats { DOMString componentId; DOMString candidateId; DOMString ipAddress; DOMString transport; DOMString mozLocalTransport; // needs standardization long portNumber; RTCStatsIceCandidateType candidateType; }; dictionary RTCCodecStats : RTCStats { unsigned long payloadType; // As used in RTP encoding. DOMString codec; // video/vp8 or equivalent unsigned long clockRate; unsigned long channels; // 2=stereo, missing for most other cases. DOMString parameters; // From SDP description line }; // This is the internal representation of the report in this implementation // to be received from c++ dictionary RTCStatsReportInternal { DOMString pcid = ""; sequence inboundRTPStreamStats; sequence outboundRTPStreamStats; sequence rtpContributingSourceStats; sequence mediaStreamTrackStats; sequence mediaStreamStats; sequence transportStats; sequence iceComponentStats; sequence iceCandidatePairStats; sequence iceCandidateStats; sequence codecStats; DOMString localSdp; DOMString remoteSdp; DOMHighResTimeStamp timestamp; unsigned long iceRestarts; unsigned long iceRollbacks; boolean offerer; // Is the PC the offerer boolean closed; // Is the PC now closed sequence trickledIceCandidateStats; sequence rawLocalCandidates; sequence rawRemoteCandidates; }; [Pref="media.peerconnection.enabled", // TODO: Use MapClass here once it's available (Bug 928114) // MapClass(DOMString, object) JSImplementation="@mozilla.org/dom/rtcstatsreport;1"] interface RTCStatsReport { readonly maplike; [ChromeOnly] readonly attribute DOMString mozPcid; };