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
getStats()
getStats(selector)
getStats(selector, successCallback, failureCallback) // deprecated
Tham số
selectorOptional-
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
successCallbackDeprecated-
Hàm gọi lại được gọi khi báo cáo đã được tạo thành công.
failureCallbackDeprecated-
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:
InvalidAccessErrorDOMException-
Được ném khi không có
RTCRtpSenderhoặcRTCRtpReceivernào cótrackkhớp vớiselectorđược chỉ định, hoặc khiselectorkhớ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.
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> |