RTCPeerConnection: phương thức getStats()

Baseline Widely available

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

Phương thức getStats() của giao diện RTCPeerConnection trả về một promise được giải quyết với dữ liệu cung cấp thống kê về toàn bộ kết nối hoặc về MediaStreamTrack được chỉ định.

Cú pháp

js
getStats()
getStats(selector)

getStats(selector, successCallback, failureCallback) // deprecated

Tham số

selector Optional

Một MediaStreamTrack để thu thập thống kê. Nếu giá trị này là null (giá trị mặc định), thống kê sẽ được thu thập cho toàn bộ RTCPeerConnection.

Tham số lỗi thời

successCallback Deprecated

Hàm gọi lại được gọi khi báo cáo đã được tạo thành công.

failureCallback Deprecated

Hàm gọi lại được gọi khi báo cáo không thể được tạo.

Giá trị trả về

Một Promise được giải quyết với một đối tượng RTCStatsReport cung cấp thống kê kết nối. Nội dung báo cáo phụ thuộc vào selector và các chi tiết khác của kết nối.

Ngoại lệ

Phương thức này không ném ngoại lệ; thay vào đó, nó từ chối promise trả về với một trong các lỗi sau:

InvalidAccessError DOMException

Được ném khi không có RTCRtpSender hoặc RTCRtpReceiver nào có track khớp với selector được chỉ định, hoặc khi selector khớp với nhiều hơn một sender hoặc receiver.

Ví dụ

Ví dụ này tạo một hàm định kỳ bằng setInterval() để thu thập thống kê cho một RTCPeerConnection mỗi giây, tạo báo cáo ở dạng HTML và chèn nó vào một phần tử cụ thể trong DOM.

js
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`;

      // Bây giờ là thống kê cho báo cáo này; chúng ta cố ý bỏ qua những
      // mục đã được đưa lên đầu ở trên

      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);

Đoạn mã này hoạt động bằng cách gọi getStats(), rồi khi promise được giải quyết, lặp qua các đối tượng RTCStatsReport được trả về. Mỗi báo cáo sẽ có một phần riêng với tiêu đề và toàn bộ thống kê bên dưới, trong đó type, ID và timestamp được xử lý riêng để đặt chúng ở đầu danh sách.

Sau khi HTML cho báo cáo được tạo, nó được chèn vào phần tử có lớp "stats-box" bằng cách đặt thuộc tính innerHTML của phần tử đó.

Thông số kỹ thuật

Specification
WebRTC: Real-Time Communication in Browsers
# widl-RTCPeerConnection-getStats-Promise-RTCStatsReport--MediaStreamTrack-selector

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