RTCPeerConnection: getStats() 方法
RTCPeerConnection 接口的 getStats() 方法返回一个 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 和时间戳被特殊处理以将它们放在列表顶部。
一旦为报告生成了 HTML,它就会通过设置其 innerHTML 属性来注入到类名为 "stats-box" 的元素中。
规范
| 规范 | 
|---|
| WebRTC:浏览器中的实时通信 # widl-RTCPeerConnection-getStats-Promise-RTCStatsReport--MediaStreamTrack-selector | 
浏览器兼容性
加载中…