On 2/3/14 12:06 PM, Adam Roach wrote:
The dominating factors in media quality are going to be jitter, packet
loss, and RTT.
* For jitter, we already have an entry in the stats report
* I'll suggest to the working group that we should add packet loss to
the evolving list of stats
Actually, packet loss is in there but is stored in a funny way because
of the nature of the stats objects (from
http://www.w3.org/2011/04/webrtc/wiki/Stats ):
dictionary RTCRTPStreamStats : RTCStats {
DOMString ssrc;
DOMString remoteId;
// New stuff:
boolean isRemote // default false
DOMString mediaTrackId;
DOMString transportId;
DOMString codecId;
};
dictionary RTCInboundRTPStreamStats : RTCRTPStreamStats {
unsigned long packetsReceived;
unsigned long long bytesReceived;
double jitter;
};
dictionary RTCOutboundRTPStreamStats : RTCRTPStreamStats {
unsigned long packetsSent;
unsigned long long bytesSent;
};
Basically, for one side of a single connection, you get a pair of these
stats objects.
For example, if your PeerConnection is the receiver, then if you iterate
on the returned statsReport object you'll find (at least) one
RTCInboundRTPStreamStats object (whose isRemote member is false),
which is filled with RTP information.
You use the remoteId member of that object to get to the second object
(whose isRemote member is true) which is filled with the RTCP
information for the same connection, i.e. from "the other side" of the
connection (a RTCOutboundRTPStreamStats in this example).
The idea then is you calculate packet loss by subtracting
packetsReceieved from packetsSent.
Here's a larger example that uses the same technique
http://dev.w3.org/2011/webrtc/editor/webrtc.html#example
However, there's a wort here, which I hope to raise on the list, which
is that RTCP information and RTP information often arrive at different
intervals internall, which you can see from the timestamps being
different on the two stats objects, making it real hard in practice to
understand how to calculate packet-loss reliable.
Ironically, since we have the packetloss number internall (RTCP gives it
to us) we are currently forced to do the reverse calculation that we're
asking you to do when we put this information in the stats object. So in
practice, for Firefox at least, which is the only browser implementing
this right now, this means that if you ignore the timestamps and just to
the subtraction blindly, you shold arrive at the correct packetloss
number, because that's the reverse of what we did
putting it in there. But it feels a little awkward and wrong given that
the timestamps are often different.
I think adding an explicit packetLoss field, next to jitter would solve
this.
CC'ing Harald for comment. He'll also be able to correct me if I said
something incorrect here.
.: Jan-Ivar :.
* As far as I know, there's no good way to get RTT information out of
RTP and RTCP, so you'll probably want to rig something up with a
DataChannel that basically sends a small message with a sequence
number to the other side, which responds immediately; the time
between sending the message and getting the response is you RTT
From there, I'd try to work out a quality metric by starting with
something like:
(min(6ms - jitter_in_ms, 0) * (100% - packet_loss_in_percent) *
min(200ms - rtt_in_ms, 0))/600
...which should get you a number between 1 and 100. You might want to
tweak things a bit, but that should get you a good first pass estimate.
I'm happy to demo to you in Chrome what we currently have (if that
doesn't go against your morals? ;)
Sure, send me a URL to look at. :)
_______________________________________________
dev-media mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-media