RTCPeerConnection: getStats() 方法

getStats()RTCPeerConnection 接口的方法,它返回一个 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

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。