RTCPeerConnection: getStats() 方法
getStats()
是 RTCPeerConnection
接口的方法,它返回一个 Promise,该 Promise 解析为包含有关整体连接或指定 MediaStreamTrack
的统计数据。
语法
getStats()
getStats(selector)
getStats(selector, successCallback, failureCallback) // deprecated
参数
selector
可选-
要收集统计数据的
MediaStreamTrack
。 如果它是null
(默认值),则将为整个RTCPeerConnection
收集统计数据。
已弃用的参数
在旧代码和文档中,您可能会看到此函数的基于回调的版本。 此版本已弃用,强烈建议不要使用。 您应该更新任何现有代码以使用基于 Promise
的 getStats()
版本。 下面描述了旧版 getStats()
的参数,以帮助更新现有代码。
successCallback
已弃用-
成功生成报告后调用的 回调函数。
failureCallback
已弃用-
生成报告失败后调用的 回调函数。
返回值
一个 Promise
,它解析为一个提供连接统计数据的 RTCStatsReport
对象。 报告的内容取决于 selector
和连接的其他详细信息。
异常
此方法不会抛出异常; 相反,它会使用以下错误之一拒绝返回的 Promise。
InvalidAccessError
DOMException
-
当没有
RTCRtpSender
或RTCRtpReceiver
的track
与指定的selector
匹配,或selector
匹配多个发送器或接收器时抛出。
示例
此示例使用 setInterval()
创建一个周期性函数,每秒收集一次 RTCPeerConnection
的统计数据,生成一个 HTML 格式的报告并将其插入 DOM 中的特定元素。
setInterval(() => {
myPeerConnection.getStats(null).then((stats) => {
let statsOutput = "";
stats.forEach((report) => {
statsOutput +=
`<h2>Report: ${report.type}</h2>\n<strong>ID:</strong> ${report.id}<br>\n` +
`<strong>Timestamp:</strong> ${report.timestamp}<br>\n`;
// Now the statistics for this report; we intentionally drop the ones we
// sorted to the top above
Object.keys(report).forEach((statName) => {
if (
statName !== "id" &&
statName !== "timestamp" &&
statName !== "type"
) {
statsOutput += `<strong>${statName}:</strong> ${report[statName]}<br>\n`;
}
});
});
document.querySelector(".stats-box").innerHTML = statsOutput;
});
}, 1000);
它是通过调用 getStats()
来实现的,然后在 Promise 解析后,迭代返回的 RTCStatsReport
上的 RTCStatsReport
对象。 为每个报告创建了一个部分,其中包含标题和所有统计数据,类型、ID 和时间戳经过特殊处理,以便将它们放在列表的顶部。
规范
规范 |
---|
WebRTC:浏览器中的实时通信 # widl-RTCPeerConnection-getStats-Promise-RTCStatsReport--MediaStreamTrack-selector |
浏览器兼容性
BCD 表格仅在启用 JavaScript 的浏览器中加载。