RTCPeerConnection: getStats() 方法

Baseline 已广泛支持

此功能已成熟,可跨多种设备和浏览器版本使用。自 2017 年 9 月以来,它已在浏览器中提供。

RTCPeerConnection 接口的 getStats() 方法返回一个 Promise,该 Promise 将解析为提供有关整体连接或指定 MediaStreamTrack 统计信息的数据。

语法

js
getStats()
getStats(selector)

getStats(selector, successCallback, failureCallback) // deprecated

参数

selector 可选

用于收集统计信息的 MediaStreamTrack。如果此值为 null(默认值),则将为整个 RTCPeerConnection 收集统计信息。

已弃用的参数

在旧的代码和文档中,您可能会看到此函数的回调版本。此版本已弃用,强烈不推荐使用。您应该将任何现有代码更新为使用基于 PromisegetStats() 版本。下面介绍了旧版 getStats() 的参数,以帮助更新现有代码。

successCallback 已弃用

在成功生成报告后调用的一次 回调函数

failureCallback 已弃用

在生成报告失败后调用的一次 回调函数

返回值

一个 Promise,它将解析为一个 RTCStatsReport 对象,提供连接统计信息。报告的内容取决于 selector 和连接的其他详细信息。

异常

此方法不抛出异常;相反,它会使用以下错误之一拒绝返回的 Promise

InvalidAccessError DOMException

当没有 RTCRtpSenderRTCRtpReceivertrack 与指定的 selector 匹配,或者 selector 匹配多个发送方或接收方时抛出。

示例

此示例使用 setInterval() 创建一个定期执行的函数,该函数每秒为 RTCPeerConnection 收集一次统计信息,生成一个 HTML 格式的报告,并将其插入到 DOM 中的特定元素中。

js
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 和时间戳被特殊处理以将它们放在列表顶部。

一旦为报告生成了 HTML,它就会通过设置其 innerHTML 属性来注入到类名为 "stats-box" 的元素中。

规范

规范
WebRTC:浏览器中的实时通信
# widl-RTCPeerConnection-getStats-Promise-RTCStatsReport--MediaStreamTrack-selector

浏览器兼容性