RTCStatsReport

Baseline Widely available *

This feature is well established and works across many devices and browser versions. It’s been available across browsers since January 2020.

* Some parts of this feature may have varying levels of support.

Giao diện RTCStatsReport của WebRTC API cung cấp báo cáo thống kê cho RTCPeerConnection, RTCRtpSender, hoặc RTCRtpReceiver.

Một thể hiện RTCStatsReport là một đối tượng giống Map chỉ đọc, trong đó mỗi khóa là một định danh cho đối tượng đang được báo cáo thống kê, và giá trị tương ứng là một đối tượng từ điển cung cấp các thống kê đó.

Thuộc tính thể hiện

RTCStatsReport.size

Trả về số lượng mục trong đối tượng RTCStatsReport.

Phương thức thể hiện

RTCStatsReport.entries()

Trả về một đối tượng Iterator mới chứa một mảng hai phần tử [id, statistic-dictionary] cho mỗi phần tử trong đối tượng RTCStatsReport, theo thứ tự chèn.

RTCStatsReport.forEach()

Gọi callbackFn một lần cho mỗi cặp key-value có trong đối tượng RTCStatsReport, theo thứ tự chèn. Nếu tham số thisArg được cung cấp cho forEach, nó sẽ được dùng làm giá trị this cho mỗi callback.

RTCStatsReport.get()

Trả về từ điển thống kê gắn với id được truyền vào, hoặc undefined nếu không có.

RTCStatsReport.has()

Trả về giá trị boolean cho biết RTCStatsReport có chứa một từ điển thống kê gắn với id đã chỉ định hay không.

RTCStatsReport.keys()

Trả về một đối tượng Iterator mới chứa các khóa (ID) cho mỗi phần tử trong đối tượng RTCStatsReport, theo thứ tự chèn.

RTCStatsReport.values()

Trả về một đối tượng Iterator mới chứa các giá trị (đối tượng thống kê) cho mỗi phần tử trong đối tượng RTCStatsReport, theo thứ tự chèn.

RTCStatsReport[Symbol.iterator]()

Trả về một đối tượng Iterator mới chứa một mảng hai phần tử [id, statistic-dictionary] cho mỗi phần tử trong đối tượng RTCStatsReport, theo thứ tự chèn.

Mô tả

Một Promise phân giải thành RTCStatsReport được trả về từ các phương thức RTCRtpReceiver.getStats(), RTCRtpSender.getStats()RTCPeerConnection.getStats(). Gọi getStats() trên một RTCPeerConnection cho phép bạn chỉ định xem bạn muốn lấy thống kê đầu ra, thống kê đầu vào hay thống kê cho toàn bộ kết nối. Các phiên bản getStats() của RTCRtpReceiverRTCRtpSender chỉ trả về thống kê đầu vào và đầu ra tương ứng.

Báo cáo thống kê là một đối tượng Map-like chỉ đọc: một dictionary có thứ tự, trong đó các thuộc tính là các chuỗi id xác định duy nhất đối tượng WebRTC đã được kiểm tra để tạo ra một bộ thống kê cụ thể, và giá trị là một đối tượng dictionary chứa các thống kê đó. RTCStatsReport có thể được lặp và dùng theo cùng cách như một Map chỉ đọc.

Báo cáo có thể chứa nhiều nhóm thống kê khác nhau, bao gồm thống kê đầu vào và đầu ra cho cả đầu hiện tại và đầu từ xa của peer connection, thông tin về codec, chứng chỉ và media đang dùng, v.v. Mỗi nhóm thống kê được cung cấp trong một kiểu đối tượng dictionary thống kê khác nhau, có thể nhận biết từ thuộc tính type của nó.

Thuộc tính thể hiện chung

Tất cả các kiểu dictionary đều có các thuộc tính sau:

id

Một chuỗi xác định duy nhất đối tượng đã được giám sát để tạo ra bộ thống kê. Giá trị này được giữ qua các báo cáo trong ít nhất vòng đời của kết nối. Lưu ý rằng với một số thống kê, ID có thể khác nhau giữa các trình duyệt và cho các kết nối tiếp theo, ngay cả khi kết nối đến cùng một peer.

timestamp

Một đối tượng dấu thời gian độ phân giải cao (DOMHighResTimeStamp) cho biết thời điểm mẫu được lấy. Nhiều thống kê được báo cáo là các giá trị tích lũy; timestamp cho phép tính tốc độ và trung bình giữa bất kỳ hai báo cáo nào, ở tần suất báo cáo mong muốn.

type

Một chuỗi có giá trị cho biết kiểu thống kê mà đối tượng chứa, như candidate-pair, inbound-rtp, certificate, v.v. Các kiểu thống kê và đối tượng tương ứng được liệt kê bên dưới.

Người dùng thường duyệt một RTCStatsReport bằng cách dùng vòng lặp forEach() hoặc for...of, rồi chọn các thống kê quan tâm bằng thuộc tính type. Khi đã xác định được một đối tượng thống kê cụ thể bằng type của nó, thuộc tính id có thể tiếp tục được dùng với get() để lấy cùng báo cáo thống kê đó ở một thời điểm khác.

Timestamp có thể được dùng để tính giá trị trung bình cho các thống kê tích lũy trong suốt vòng đời của kết nối.

Các kiểu thống kê

Các giá trị type của thống kê và các dictionary tương ứng được liệt kê dưới đây.

type Dictionary Mô tả
candidate-pair RTCIceCandidatePairStats Thống kê mô tả sự thay đổi từ một RTCIceTransport sang một cái khác, chẳng hạn trong lúc ICE restart.
certificate RTCCertificateStats Thống kê về một chứng chỉ đang được RTCIceTransport sử dụng.
codec RTCCodecStats Thống kê về một codec cụ thể đang được các luồng gửi hoặc nhận bởi kết nối này sử dụng.
data-channel RTCDataChannelStats Thống kê liên quan đến một RTCDataChannel trên kết nối.
inbound-rtp RTCInboundRtpStreamStats Thống kê mô tả trạng thái của một trong các luồng dữ liệu đầu vào của kết nối.
local-candidate RTCIceCandidateStats Thống kê về một ICE candidate cục bộ được liên kết với các RTCIceTransport của kết nối.
media-source RTCAudioSourceStats hoặc RTCVideoSourceStats Thống kê về media được tạo ra bởi MediaStreamTrack gắn với một RTP sender. Dictionary mà khóa này ánh xạ tới phụ thuộc vào kind của track, qua kind.
outbound-rtp RTCOutboundRtpStreamStats Thống kê mô tả trạng thái của một trong các luồng dữ liệu đầu ra trên kết nối này.
peer-connection RTCPeerConnectionStats Thống kê mô tả trạng thái của RTCPeerConnection.
remote-candidate RTCIceCandidateStats Thống kê về một ICE candidate từ xa được liên kết với các RTCIceTransport của kết nối.
remote-inbound-rtp RTCRemoteInboundRtpStreamStats Thống kê mô tả trạng thái của luồng dữ liệu đầu vào từ góc nhìn của peer từ xa.
remote-outbound-rtp RTCRemoteOutboundRtpStreamStats Thống kê mô tả trạng thái của luồng dữ liệu đầu ra từ góc nhìn của peer từ xa.
transport RTCTransportStats Thống kê về một transport được kết nối sử dụng.

Ví dụ

Duyệt báo cáo từ RTCPeerConnection bằng vòng lặp forEach

Ví dụ này cho thấy cách bạn có thể ghi lại thống kê liên quan đến video cho RTCRtpReceiver cục bộ chịu trách nhiệm nhận media đang được phát.

Giả sử có biến myPeerConnection, là một thể hiện của RTCPeerConnection, mã dùng await để chờ báo cáo thống kê, rồi duyệt nó bằng RTCStatsReport.forEach(). Sau đó nó lọc các dictionary chỉ còn những báo cáo có typeinbound-rtpkindvideo.

js
const stats = await myPeerConnection.getStats();

stats.forEach((report) => {
  if (report.type === "inbound-rtp" && report.kind === "video") {
    // Ghi log tốc độ khung hình
    console.log(report.framesPerSecond);
  }
});

Duyệt báo cáo từ RTCRtpSender bằng vòng lặp for...of

Ví dụ này cho thấy cách bạn có thể duyệt thống kê đầu ra từ một RTCRtpSender.

Mã làm theo mẫu tương tự ví dụ trước, nhưng duyệt bằng vòng lặp for...of trên RTCStatsReport.values(), và lọc theo typeoutbound-rtp. Ví dụ giả định rằng bạn đã có một đối tượng RTCRtpSender tên là "sender".

js
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]}`);
  });
}

Tiêu chuẩn

Specification
WebRTC: Real-Time Communication in Browsers
# rtcstatsreport-object

Tương thích trình duyệt

Xem thêm