RTCPeerConnection: метод getStats()
Базовая Широко поддерживается
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с января 2020 года.
Метод getStats() интерфейса RTCPeerConnection возвращает промис, который разрешается данными, предоставляющими статистику о соединении в целом или о заданном MediaStreamTrack.
Синтаксис
getStats() getStats(selector) getStats(selector, successCallback, failureCallback) // deprecated
Параметры
selectorНеобязательно-
MediaStreamTrackдля которого собирается статистика. Если этоnull(значение по умолчанию), статистика будет собрана для всегоRTCPeerConnection.
Устаревшие параметры
В старом коде и документации вы можете увидеть версию этого метода с обратными вызовами. Она устарела и её использование настоятельно не рекомендуется. Следует обновить любой существующий код, чтобы использовать версию на основе Promise вместо getStats(). Параметры старой формы getStats() описаны ниже, чтобы помочь в обновлении существующего кода.
successCallbackУстарело-
Функция обратного вызова, вызываемая после успешного создания отчёта.
failureCallbackУстарело-
Функция обратного вызова, вызываемая после неудачи в создании отчёта.
Возвращаемое значение
A Promise, который разрешается объектом RTCStatsReport, предоставляющим статистику соединения. Содержание отчета зависит от selector и других деталей соединения.
Исключения
Этот метод не вызывает исключений; вместо этого он отклоняет возвращаемый промис с одной из следующих ошибок:
-
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(), а затем, когда промис разрешается, перебирая объекты RTCStatsReport в возвращённом RTCStatsReport. Для каждого отчёта создаётся раздел со заголовком и всей статистикой ниже, причём тип, ID и отметка времени обрабатываются особым образом, чтобы поместить их в начало списка.
После того, как HTML-код отчёта сгенерирован, он вставляется в элемент с классом "stats-box" путём установки его свойства innerHTML.
Спецификации
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
getStats |
24 | 15 | 27 | 15 | 11 | 25 | 27 | 14 | 11 | 1.5 | 4.4 |
returns_promise |
58 | 79 | 37 | 45 | 11 | 58 | 37 | 43 | 11 | 7.0 | 58 |
selector_parameter |
67 | ≤79 | 27 | 54 | 11 | 67 | 27 | 48 | 11 | 9.0 | 67 |
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/getStats