RTCStatsReport
Baseline 廣泛可用 *
RTCStatsReport 介面是 WebRTC API 的一部分,它為 RTCPeerConnection、RTCRtpSender 或 RTCRtpReceiver 提供統計資訊報告。
RTCStatsReport 例項是一個只讀的 類似 Map 的物件,其中每個鍵是正在報告統計資訊的物件的識別符號,而對應的值是一個提供統計資訊的字典物件。
例項屬性
RTCStatsReport.size-
返回
RTCStatsReport物件中的專案數量。
例項方法
RTCStatsReport.entries()-
返回一個新的 迭代器 物件,其中包含
RTCStatsReport物件中每個元素的[id, statistic-dictionary]形式的雙成員陣列,按插入順序排列。 RTCStatsReport.forEach()-
按插入順序,對
RTCStatsReport物件中存在的每個鍵值對呼叫一次callbackFn。如果向forEach提供了thisArg引數,它將用作每個回撥的this值。 RTCStatsReport.get()-
返回與傳入的
id關聯的統計資訊字典,如果不存在則返回undefined。 RTCStatsReport.has()-
返回一個布林值,指示
RTCStatsReport是否包含與指定的id關聯的統計資訊字典。 RTCStatsReport.keys()-
返回一個新的 迭代器 物件,其中包含
RTCStatsReport物件中每個元素的鍵(ID),按插入順序排列。 RTCStatsReport.values()-
返回一個新的 迭代器 物件,其中包含
RTCStatsReport物件中每個元素的值(統計資訊物件),按插入順序排列。 RTCStatsReport[Symbol.iterator]()-
返回一個新的 迭代器 物件,其中包含
RTCStatsReport物件中每個元素的[id, statistic-dictionary]形式的雙成員陣列,按插入順序排列。
描述
從 RTCRtpReceiver.getStats()、RTCRtpSender.getStats() 和 RTCPeerConnection.getStats() 方法返回一個解析為 RTCStatsReport 的 Promise。對 RTCPeerConnection 呼叫 getStats() 可以讓你指定是希望獲取出站統計資訊、入站統計資訊還是整個連線的統計資訊。getStats() 的 RTCRtpReceiver 和 RTCRtpSender 版本分別只返回入站和出站統計資訊。
統計報告是一個只讀的 類似 Map 的物件:一個有序字典,其屬性是唯一標識用於生成特定統計資訊集的 WebRTC 物件的 id 字串,值是一個包含這些統計資訊的字典物件。RTCStatsReport 可以像只讀 Map 一樣進行迭代和使用。
報告可能包含許多不同的統計類別,包括當前和遠端端點之間對等連線的入站和出站統計資訊、有關編解碼器、證書和使用的媒體的資訊等等。每種統計類別都以不同型別的統計資訊字典物件提供,可以透過其 type 屬性來識別。
常見例項屬性
所有字典型別都具有以下屬性
id-
一個唯一標識用於生成統計資訊集的物件的字串。此值在報告之間(至少在連線生命週期內)保持不變。請注意,對於某些統計資訊,ID 可能在瀏覽器之間以及後續連線(即使是與同一對等方)之間有所不同。
時間戳-
一個高精度時間戳物件(
DOMHighResTimeStamp),指示取樣時間。許多報告的統計資訊是累積值;時間戳允許計算任何兩次報告之間、以任何所需報告速率下的速率和平均值。 type-
一個字串,其值指示物件包含的統計資訊型別,例如
candidate-pair、inbound-rtp、certificate等等。下文列出了 統計資訊的型別及其對應的物件。
使用者通常會迭代 RTCStatsReport,使用 forEach() 或 for...of 迴圈,並透過 type 屬性選擇感興趣的統計資訊。一旦使用 type 識別出特定的統計資訊物件,隨後就可以使用 id 屬性結合 get() 來在不同時間獲取相同的統計資訊報告。
時間戳可用於計算連線生命週期內累積的統計資訊的平均值。
統計資訊型別
下表列出了統計資訊 type 的值及其對應的字典。
| type | 字典 | 描述 |
|---|---|---|
candidate-pair |
RTCIceCandidatePairStats |
描述從一個 RTCIceTransport 切換到另一個的統計資訊,例如在 ICE 重啟期間。 |
certificate |
RTCCertificateStats |
關於 RTCIceTransport 使用的證書的統計資訊。 |
codec |
RTCCodecStats |
關於此連線傳送或接收的流所使用的特定編解碼器的統計資訊。 |
data-channel |
RTCDataChannelStats |
與連線上的一個 RTCDataChannel 相關的統計資訊。 |
inbound-rtp |
RTCInboundRtpStreamStats |
描述連線的一個入站資料流狀態的統計資訊。 |
local-candidate |
RTCIceCandidateStats |
關於與連線的 RTCIceTransports 關聯的本地 ICE 候選的統計資訊。 |
media-source |
RTCAudioSourceStats 或 RTCVideoSourceStats |
關於附加到 RTP 傳送器的 MediaStreamTrack 生成的媒體的統計資訊。此鍵對映到的字典取決於軌道的 kind。 |
outbound-rtp |
RTCOutboundRtpStreamStats |
描述此連線的一個出站資料流狀態的統計資訊。 |
peer-connection |
RTCPeerConnectionStats |
描述 RTCPeerConnection 狀態的統計資訊。 |
remote-candidate |
RTCIceCandidateStats |
關於與連線的 RTCIceTransports 關聯的遠端 ICE 候選的統計資訊。 |
remote-inbound-rtp |
RTCRemoteInboundRtpStreamStats |
從遠端對等方的角度描述入站資料流狀態的統計資訊。 |
remote-outbound-rtp |
RTCRemoteOutboundRtpStreamStats |
從遠端對等方的角度描述出站資料流狀態的統計資訊。 |
transport |
RTCTransportStats |
關於連線使用的傳輸的統計資訊。 |
示例
使用 forEach 迴圈迭代 RTCPeerConnection 的報告
此示例日誌顯示瞭如何記錄本地 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);
}
});
使用 for...of 迴圈迭代 RTCRtpSender 的報告
此示例顯示瞭如何迭代 RTCRtpSender 的出站統計資訊。
程式碼遵循與上一個示例類似的模式,但透過 for...of 迴圈對 RTCStatsReport.values() 進行迭代,並過濾 type 為 outbound-rtp 的項。它假設你已經有一個名為“sender”的 RTCRtpSender 物件。
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}: ${stat[statName]}`);
});
}
規範
| 規範 |
|---|
| WebRTC:瀏覽器中的即時通訊 # rtcstatsreport-object |
瀏覽器相容性
載入中…