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
InvalidAccessErrorDOMException-
當沒有
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 |
瀏覽器相容性
載入中…