- From: Harald Alvestrand <harald@alvestrand.no>
- Date: Mon, 27 May 2013 15:36:37 +0200
- To: "public-webrtc@w3.org" <public-webrtc@w3.org>
I'm continuing with the process of designing stats variables that make sense and are useful. My current draft is reproduced below. Comments welcome! One question that arose about audio volume representation: It's hairy. Especially it's hairy to define volume in a way that makes sense when you don't know the sampling interval (because this is a polling interface), and you don't want to give undue importance to the last tenth of a before the sample. Or perhaps you do - it might be app dependent. One suggestion made internally: Just report the cumulative audio energy (sum of audio energy over time) instead. Then people can transform that as they will. Thoughts on this? For now, the proposal contains a conventional "audio level" variable. For the rest: Root of hierarchy: dictionary RTCStats { DOMHiResTimeStamp timestamp; RTCStatsType type; DOMString id; }; All SSRCs: dictionary RTCRTPStreamStats : RTCStats { DOMString ssrc; DOMString remoteId; // New stuff: DOMString mediaTrackId; DOMString transportId; DOMString codecId; }; Note the convention that names ending in “Id” are identifiers of other stats objects. Directed SSRCs: dictionary RTCInboundRTPStreamStats : RTCRTPStreamStats { unsigned long packetsReceived; unsigned long bytesReceived; // In addition to current spec: float jitter; }; dictionary RTCOutboundRTPStreamStats : RTCRTPStreamStats { unsigned long packetsSent; unsigned long bytesSent; }; Representing MediaStreamTracks: dictionary RTCMediaStreamTrackStats : RTCStats { DOMString trackIdentifier; // track.id property boolean remoteSource; sequence<DOMString> ssrcIds; // Only makes sense for audio unsigned int audioLevel; // Only makes sense for video unsigned int frameWidth; unsigned int frameHeight; unsigned float framesPerSecond; // The nominal FPS value unsigned int framesSent; unsigned int framesReceived; // Only makes sense for remoteSource=true unsigned int framesDecoded; int firs; } dictionary MediaStream : RTCStats { DOMString streamIdentifier; // stream.id property sequence<DOMString> trackIds; // Note: This is the id of the stats object, not the track.id } Representing transports: dictionary RTCTransport: RTCStats { unsigned long bytesSent; unsigned long bytesReceived; } dictionary RTCIceComponentStats : RTCStats { DOMString transportId; int component; unsigned long bytesSent; unsigned long bytesReceived; bool activeConnection; } dictionary RTCIceCandidatePairStats : RTCStats { DOMString componentId; DOMString localCandidateId; DOMString remoteCandidateId; boolean writable; // Has gotten ACK to an ICE request boolean readable; // Has gotten a valid incoming ICE request } dictionary RTCIceCandidate : RTCStats { DOMString ipAddress; int portNumber; // More ICE-related info goes here. } dictionary RTCCodec : RTCStats { unsigned int payloadType; // As used in RTP encoding. DOMString codec; // video/vp8 or equivalent unsigned int clockRate; unsigned int channels; // 2 for stereo, missing for most other cases. DOMString parameters; // From SDP description line }
Received on Monday, 27 May 2013 13:37:13 UTC