mediasoup
Version:
Cutting Edge WebRTC Video Conferencing
82 lines (81 loc) • 3.08 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.parseRtpStreamStats = parseRtpStreamStats;
exports.parseRtpStreamRecvStats = parseRtpStreamRecvStats;
exports.parseSendStreamStats = parseSendStreamStats;
const FbsRtpStream = require("./fbs/rtp-stream");
const FbsRtpParameters = require("./fbs/rtp-parameters");
function parseRtpStreamStats(binary) {
if (binary.dataType() === FbsRtpStream.StatsData.RecvStats) {
return parseRtpStreamRecvStats(binary);
}
else {
return parseSendStreamStats(binary);
}
}
function parseRtpStreamRecvStats(binary) {
const recvStats = new FbsRtpStream.RecvStats();
const baseStats = new FbsRtpStream.BaseStats();
binary.data(recvStats);
recvStats.base().data(baseStats);
const base = parseBaseStreamStats(baseStats);
return {
...base,
type: 'inbound-rtp',
byteCount: Number(recvStats.byteCount()),
packetCount: Number(recvStats.packetCount()),
bitrate: Number(recvStats.bitrate()),
bitrateByLayer: parseBitrateByLayer(recvStats),
};
}
function parseSendStreamStats(binary) {
const sendStats = new FbsRtpStream.SendStats();
const baseStats = new FbsRtpStream.BaseStats();
binary.data(sendStats);
sendStats.base().data(baseStats);
const base = parseBaseStreamStats(baseStats);
return {
...base,
type: 'outbound-rtp',
byteCount: Number(sendStats.byteCount()),
packetCount: Number(sendStats.packetCount()),
bitrate: Number(sendStats.bitrate()),
};
}
function parseBaseStreamStats(binary) {
return {
timestamp: Number(binary.timestamp()),
ssrc: binary.ssrc(),
rtxSsrc: binary.rtxSsrc() ?? undefined,
rid: binary.rid() || undefined,
kind: binary.kind() === FbsRtpParameters.MediaKind.AUDIO ? 'audio' : 'video',
mimeType: binary.mimeType(),
packetsLost: Number(binary.packetsLost()),
fractionLost: Number(binary.fractionLost()),
jitter: Number(binary.jitter()),
packetsDiscarded: Number(binary.packetsDiscarded()),
packetsRetransmitted: Number(binary.packetsRetransmitted()),
packetsRepaired: Number(binary.packetsRepaired()),
nackCount: Number(binary.nackCount()),
nackPacketCount: Number(binary.nackPacketCount()),
pliCount: Number(binary.pliCount()),
firCount: Number(binary.firCount()),
roundTripTime: binary.roundTripTime(),
rtxPacketsDiscarded: binary.rtxPacketsDiscarded()
? Number(binary.rtxPacketsDiscarded())
: undefined,
score: binary.score(),
};
}
function parseBitrateByLayer(binary) {
if (binary.bitrateByLayerLength() === 0) {
return {};
}
const bitRateByLayer = {};
for (let i = 0; i < binary.bitrateByLayerLength(); ++i) {
const layer = binary.bitrateByLayer(i).layer();
const bitrate = binary.bitrateByLayer(i).bitrate();
bitRateByLayer[layer] = Number(bitrate);
}
return bitRateByLayer;
}