RTCStatsReport
Базовая Широко доступная *
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с января 2020 года.
* Некоторые части этой функции могут иметь различный уровень поддержки.
Интерфейс RTCStatsReport API WebRTC предоставляет отчёт о статистике для RTCPeerConnection, RTCRtpSender или RTCRtpReceiver.
Экземпляр RTCStatsReport — это только для чтения Map-подобный объект, в котором каждый ключ — идентификатор объекта, для которого предоставляется статистика, а соответствующее значение — объект словаря со статистикой.
Свойства экземпляра
RTCStatsReport.size-
Возвращает количество элементов в объекте
RTCStatsReport.
Методы экземпляра
RTCStatsReport.entries()-
Возвращает новый объект итератора, который содержит массив из двух элементов —
[id, statistic-dictionary]— для каждого элемента в объектеRTCStatsReport, в порядке добавления. RTCStatsReport.forEach()-
Вызывает
callbackFnодин раз для каждой пары «ключ-значение» в объектеRTCStatsReport, в порядке добавления. Если вforEachпередан параметрthisArg, он будет использоваться в качествеthisзначения для каждого обратного вызова. RTCStatsReport.get()-
Возвращает словарь статистики, связанный с переданным
id, илиundefinedесли такого нет. RTCStatsReport.has()-
Возвращает булево значение, указывающее, содержит ли
RTCStatsReportсловарь статистики, связанный с указаннымid. RTCStatsReport.keys()-
Возвращает новый объект итератора, который содержит ключи (идентификаторы) для каждого элемента в объекте
RTCStatsReport, в порядке добавления. RTCStatsReport.values()-
Возвращает новый объект итератора, который содержит значения (объекты статистики) для каждого элемента в объекте
RTCStatsReport, в порядке добавления. RTCStatsReport[Symbol.iterator]()-
Возвращает новый объект итератора, который содержит массив из двух элементов —
[id, statistic-dictionary]— для каждого элемента в объектеRTCStatsReport, в порядке добавления.
Описание
Promise, разрешающий в RTCStatsReport, возвращается методами RTCRtpReceiver.getStats(), RTCRtpSender.getStats() и RTCPeerConnection.getStats(). Вызов getStats() на RTCPeerConnection позволяет указать, хотите ли вы получить статистику исходящих, входящих данных или статистику для всего соединения. Версии getStats() для RTCRtpReceiver и RTCRtpSender возвращают только входящую и исходящую статистику соответственно.
Отчёт о статистике — это только для чтения Map-подобный объект: упорядоченный словарь, где свойства — id строки, уникально идентифицирующие объект WebRTC, который был проанализирован для получения определённого набора статистики, а значение — объект словаря, содержащий эту статистику. RTCStatsReport можно перебирать и использовать аналогично только для чтения Map.
Отчёт может содержать множество разных категорий статистики, включая входящую и исходящую статистику для текущего и удалённого концов соединения, информацию о кодеках, сертификатах и используемой медиа и т. д. Каждая категория статистики предоставляется в виде разного типа объекта словаря, который можно определить по свойству type.
Общие свойства экземпляра
Все типы словарей имеют следующие свойства:
id-
Строка, которая уникально идентифицирует объект, который отслеживался для получения набора статистики. Это значение сохраняется в отчётах (по крайней мере) в течение всего времени жизни соединения. Однако обратите внимание, что для некоторых статистик идентификатор может отличаться между браузерами и для последующих соединений, даже с тем же участником.
timestamp-
Объект отметки времени высокой точности (
DOMHighResTimeStamp), указывающий время, в которое был получен образец. Многие отчитываемые значения статистики — кумулятивные; отметка времени позволяет рассчитывать скорости и средние значения между любыми двумя отчётами с любой желаемой скоростью отчётов. type-
Строка со значением, которое указывает тип статистики, содержащейся в объекте, например,
candidate-pair,inbound-rtp,certificate, и так далее. Типы статистики и соответствующие им объекты перечислены ниже.
Пользователи обычно перебирают RTCStatsReport, используя цикл forEach() или for...of, выбирая нужную статистику с помощью свойства type. После определения определённого объекта статистики с помощью его свойства type, свойство id может быть в дальнейшем использовано с get() для получения того же отчёта о статистике в другое время.
Отметку времени можно использовать для расчёта средних значений для статистики, которая накапливается в течение всего времени жизни соединения.
Типы статистических данных
Ниже приведены значения статистики type и соответствующие словари.
| Тип | Словарь | Описание |
|---|---|---|
candidate-pair | RTCIceCandidatePairStats | Статистика, описывающая изменение от одного RTCIceTransport к другому, например, во время перезапуска ICE. |
certificate | RTCCertificateStats | Статистика использования сертификата RTCIceTransport. |
codec | RTCCodecStats | Статистика использования определённого кодека для потоков, отправляемых или получаемых по этому соединению. |
data-channel | RTCDataChannelStats | Статистика, связанная с одним RTCDataChannel в соединении. |
inbound-rtp | RTCInboundRtpStreamStats | Статистика состояния одного из входных потоков данных соединения. |
local-candidate | RTCIceCandidateStats | Статистика локального кандидата ICE, связанного с RTCIceTransport соединения. |
media-source |
RTCAudioSourceStats или RTCVideoSourceStats
| Статистика медиаданных, созданных MediaStreamTrack, присоединённым к отправителю RTP. Словарь, на который ссылается этот ключ, зависит от kind трафика. |
outbound-rtp | RTCOutboundRtpStreamStats | Статистика состояния одного из исходящих потоков данных в этом соединении. |
peer-connection | RTCPeerConnectionStats | Статистика состояния RTCPeerConnection. |
remote-candidate | RTCIceCandidateStats | Статистика удалённого кандидата ICE, связанного с RTCIceTransport соединения. |
remote-inbound-rtp | RTCRemoteInboundRtpStreamStats | Статистика состояния входного потока данных с точки зрения удалённого участника. |
remote-outbound-rtp | RTCRemoteOutboundRtpStreamStats | Статистика состояния исходящего потока данных с точки зрения удалённого участника. |
transport | RTCTransportStats | Статистика используемого транспортом соединения. |
Примеры
Итерация отчёта RTCPeerConnection с помощью цикла forEach
В этом примере показано, как вывести статистику видео для локального RTCRtpReceiver, отвечающего за получение потокового медиа.
Учитывая переменную myPeerConnection, являющуюся экземпляром RTCPeerConnection, код использует await для ожидания отчёта о статистике, а затем итерирует его с помощью RTCStatsReport.forEach(). Затем он фильтрует словари, выбирая только те отчёты, у которых type типа inbound-rtp и kind типа video.
const stats = await myPeerConnection.getStats();
stats.forEach((report) => {
if (report.type === "inbound-rtp" && report.kind === "video") {
// Log the frame rate
console.log(report.framesPerSecond);
}
});
Итерация отчёта RTCRtpSender с помощью цикла for...of
В этом примере показано, как итерировать исходящую статистику от RTCRtpSender.
Код следует аналогичной схеме предыдущему примеру, но итерирует значения RTCStatsReport.values() с помощью цикла for...of и фильтрует по type типа outbound-rtp. Предполагается, что у вас уже есть объект RTCRtpSender с именем «sender».
const stats = await sender.getStats();
for (const stat of stats.values()) {
if (stat.type != "outbound-rtp") continue;
Object.keys(stat).forEach((statName) => {
console.log(`${statName}: ${report[statName]}`);
});
}
Спецификации
Совместимость с браузерами
| Настольные | Мобильные | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on IOS | Samsung Internet | WebView Android | |
@@iterator |
58 | 79 | 48 | 45 | 11 | 58 | 48 | 43 | 11 | 7.0 | 58 |
RTCStatsReport |
58 | 79 | 27 | 45 | 11 | 58 | 27 | 43 | 11 | 7.0 | 58 |
entries |
58 | 79 | 48 | 45 | 11 | 58 | 48 | 43 | 11 | 7.0 | 58 |
forEach |
58 | 79 | 27 | 45 | 11 | 58 | 27 | 43 | 11 | 7.0 | 58 |
get |
58 | 79 | 27 | 45 | 11 | 58 | 27 | 43 | 11 | 7.0 | 58 |
has |
58 | 79 | 27 | 45 | 11 | 58 | 27 | 43 | 11 | 7.0 | 58 |
keys |
58 | 79 | 48 | 45 | 11 | 58 | 48 | 43 | 11 | 7.0 | 58 |
size |
59 | 79 | 48 | 46 | 11 | 59 | 48 | 43 | 11 | 7.0 | 59 |
type_candidate-pair |
58 | 79 | 29 | 45 | 11 | 58 | 29 | 43 | 11 | 7.0 | 58 |
type_certificate |
80 | 80 | No | 67 | 13.1 | 80 | No | 57 | 13.4 | 13.0 | 80 |
type_codec |
80 | 80 | 98 | 67 | 13.1 | 80 | 98 | 57 | 13.4 | 13.0 | 80 |
type_data-channel |
80 | 80 | 79 | 67 | 13.1 | 80 | No | 57 | 13.4 | 13.0 | 80 |
type_inbound-rtp |
79 | 79 | 27 | 66 | 11 | 79 | 27 | 57 | 11 | 12.0 | 79 |
type_local-candidate |
80 | 80 | 27 | 67 | 12.1 | 80 | 27 | 57 | 12.2 | 13.0 | 80 |
type_media-playout |
111 | 111 | No | 97 | No | 111 | No | 75 | No | 22.0 | 111 |
type_media-source |
80 | 80 | 113 | 67 | 14.1 | 80 | 113 | 57 | 14.5 | 13.0 | 80 |
type_outbound-rtp |
80 | 80 | 27 | 67 | 11 | 80 | 27 | 57 | 11 | 13.0 | 80 |
type_peer-connection |
80 | 80 | 113 | 67 | 13.1 | 80 | 113 | 57 | 13.4 | 13.0 | 80 |
type_remote-candidate |
80 | 80 | 27 | 67 | 12.1 | 80 | 27 | 57 | 12.2 | 13.0 | 80 |
type_remote-inbound-rtp |
80 | 80 | 27 | 67 | 11 | 80 | 27 | 57 | 11 | 13.0 | 80 |
type_remote-outbound-rtp |
91 | 91 | 27 | 77 | 11 | 91 | 27 | 64 | 11 | 16.0 | 91 |
type_transport |
80 | 80 | No | 67 | 13.1 | 80 | No | 57 | 13.4 | 13.0 | 80 |
values |
58 | 79 | 48 | 45 | 11 | 58 | 48 | 43 | 11 | 7.0 | 58 |
См. также
© 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/RTCStatsReport