webrtc中可以通过调用RTCPeerConnection.getStats(),RTCRtpReceiver.getStats()和RTCRtpSender.getStats()这三个方法之一所获得的统计报告。
getStats有三个重载方法,其中selector为可选参数类型是MediaStreamTrack,表示为此MediaStreamTrack收集统计信息
getStats()
getStats(selector)
getStats(selector, successCallback, failureCallback) // deprecated
用法如下
const pc = new RTCPeerConnection()
// ...
// 获取视频流通信信息
pc.getStats().then(report => {
report.forEach(stats => {
console.log(stats);
});
}).catch(err => {
console.error(err);
});
可获取的信息类型如下
enum RTCStatsType {
"codec",
"inbound-rtp",
"outbound-rtp",
"remote-inbound-rtp",
"remote-outbound-rtp",
"media-source",
"media-playout",
"peer-connection",
"data-channel",
"stream",
"track",
"transport",
"candidate-pair",
"local-candidate",
"remote-candidate",
"certificate"
};
统计视频码率
setInterval(() => {
pc.getStats().then(res => {
res.forEach(report => {
let bytes;
if (report.type === 'outbound-rtp') {
const now = report.timestamp;
bytes = report.bytesSent;
if (lastResult && lastResult.has(report.id)) {
// calculate bitrate
const bitrate = 8 * (bytes - lastResult.get(report.id).bytesSent) /
(now - lastResult.get(report.id).timestamp);
}
}
});
lastResult = res;
});
}, 1000);