WebRTC: लेगसी getStats() माइग्रेशन गाइड

Henrik Boström
Henrik Boström

getStats() WebRTC API को Chrome 117 से हटा दिया जाएगा. इसलिए, इसका इस्तेमाल करने वाले ऐप्लिकेशन को स्टैंडर्ड एपीआई पर माइग्रेट करना होगा. इस लेख में, कोड को माइग्रेट करने का तरीका बताया गया है. साथ ही, यह भी बताया गया है कि अगर बदलाव करने के लिए आपको ज़्यादा समय चाहिए, तो क्या करें.

WebRTC getStats() API के दो वर्शन ही उपलब्ध हैं. लेगसी getStats() API, जो स्टैंडर्ड प्रोसेस के लिए पहले से तय होता है. साथ ही, यह एक कॉलबैक आर्ग्युमेंट का इस्तेमाल करता है. साथ ही, यह स्टैंडर्ड और बड़े पैमाने पर काम करने वाले एपीआई का इस्तेमाल करता है, जो प्रॉमिस देता है.

स्टैंडर्ड एपीआई में ज़्यादा सुविधाएं होती हैं और इसकी मेट्रिक, W3C स्पेसिफ़िकेशन WebRTC के स्टैटिस्टिक्स एपीआई में सार्वजनिक तौर पर दर्ज हैं. खास जानकारी में, इस गाइड में दी गई हर मेट्रिक के साथ-साथ और भी बहुत कुछ शामिल है.

Chrome 117 के लेगसी getStats() एपीआई को, स्टेबल रिलीज़ चैनल में अपवाद के तौर पर इस्तेमाल किया जाएगा. अपवाद के तौर पर, डेटा थ्रो को धीरे-धीरे रोल आउट किया जाएगा. आसानी से स्टैंडर्ड एपीआई का इस्तेमाल करने के लिए, इस गाइड का पालन करें.

लेगसी बनाम स्टैंडर्ड आंकड़े के टाइप

मानक आंकड़ों की पूरी सूची, स्पेसिफ़िकेशन में RTCStatsType enum को देखकर मिल सकती है. इसमें यह भी शामिल है कि आंकड़ों वाली डिक्शनरी की कौनसी परिभाषा, हर टाइप के लिए इकट्ठा की गई मेट्रिक की जानकारी देती है.

आंकड़ों से जुड़े सभी ऑब्जेक्ट में एक आईडी एट्रिब्यूट होता है, जो कई getStats() कॉल में मौजूद ऑब्जेक्ट की खास तौर पर पहचान करता है. जब भी तरीका कॉल किया जाएगा, एक ही ऑब्जेक्ट का आईडी एक ही होगा. यह मेट्रिक में बदलाव की दर का हिसाब लगाने के लिए मददगार है. इसका उदाहरण अगले सेक्शन में दिया गया है. आईडी, रेफ़रंस के साथ संबंध भी बनाते हैं. उदाहरण के लिए, outbound-rtp आंकड़े ऑब्जेक्ट, outbound-rtp.mediaSourceId एट्रिब्यूट के ज़रिए असोसिएट किए गए media-source आंकड़े ऑब्जेक्ट का रेफ़रंस देता है. सभी ...Id संबंध बनाने पर, आपको एक ग्राफ़ मिलता है.

लेगसी एपीआई में इस तरह के आंकड़े होते हैं जो स्टैंडर्ड टाइप के हिसाब से इस तरह के होते हैं:


अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है लेगसी टाइप

अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है स्टैंडर्ड टाइप
ssrc
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है यह आरटीपी स्ट्रीम और इससे जुड़ी MediaStreamTrack की मेट्रिक दिखाता है.
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है इसके लिए स्टैंडर्ड टाइप inbound-rtp (आरटीपी स्ट्रीम और उससे जुड़े रिमोट MediaStreamTrack पाने के लिए), outbound-rtp (आरटीपी स्ट्रीम भेजने के लिए), और media-source (भेजे गए आरटीपी स्ट्रीम से जुड़ी लोकल MediaStreamTrack मेट्रिक के लिए) हैं. आरटीपी स्ट्रीम मेट्रिक में, उस एन्कोडर या डिकोडर की जानकारी भी शामिल होती है जिसका इस्तेमाल आरटीपी स्ट्रीम करता है.
VideoBwe
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है बैंडविथ का अनुमान लगाने वाली मेट्रिक, टारगेट बिटरेट, एन्कोडर बिटरेट, और असल बिटरेट. इस तरह की मेट्रिक, आरटीपी मेट्रिक (outbound-rtp और inbound-rtp) और ICE कैंडिडेट पेयर मेट्रिक (candidate-pair) का हिस्सा हैं.
googComponent
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है ट्रांसपोर्ट (ICE और DTLS) को दिखाता है. स्टैंडर्ड वर्शन transport है.
localcandidate and remotecandidate
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है ICE उम्मीदवार का प्रतिनिधित्व करता है. स्टैंडर्ड वर्शन local-candidate और remote-candidate हैं.
googCandidatePair
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है ICE उम्मीदवार की जोड़ी का प्रतिनिधित्व करता है. यह स्थानीय और रिमोट उम्मीदवार की जोड़ी होती है. स्टैंडर्ड वर्शन candidate-pair है.
googCertificate
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है यह उस सर्टिफ़िकेट को दिखाता है जिसका इस्तेमाल डीटीएलएस ट्रांसपोर्ट करता है. स्टैंडर्ड वर्शन certificate है.
googLibjingleSession
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है RTCPeerConnection को दिखाता है. इसका कॉन्टेंट स्टैंडर्ड में मौजूद किसी भी चीज़ से मैप नहीं होता है. हालांकि, स्टैंडर्ड में RTCPeerConnection: peer-connection से जुड़ा टाइप होता है.

अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है लेगसी एपीआई में वैल्यू मौजूद नहीं है

अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है इस तरह के आंकड़े स्टैंडर्ड एपीआई में जोड़े गए हैं. इनमें मिलता-जुलता कोई लेगसी टाइप नहीं है:
  • codec: एक कोडेक, जिसका इस्तेमाल इस समय आरटीपी स्ट्रीम के ज़रिए कोड में बदलने या डिकोड करने के लिए किया जा रहा है. यह उन कोडेक का एक सबसेट है, जिनके बारे में SDP में मोल-भाव किया गया है.
  • remote-inbound-rtp: रिमोट एंडपॉइंट की इनबाउंड आरटीपी स्ट्रीम जो आउटबाउंड आरटीपी स्ट्रीम से मेल खाती है, जिसे यह एंडपॉइंट भेज रहा है (outbound-rtp). इसे रिमोट एंडपॉइंट पर मेज़र किया जाता है और इसे आरटीसीपी रिसीवर रिपोर्ट (आरआर) या आरटीसीपी एक्सटेंडेट रिपोर्ट (एक्सआर) में शामिल किया जाता है.
  • remote-outbound-rtp: रिमोट एंडपॉइंट की आउटबाउंड आरटीपी स्ट्रीम जो इस एंडपॉइंट को मिल रही है, इनबाउंड आरटीपी स्ट्रीम (inbound-rtp). इसे रिमोट एंडपॉइंट पर मापा जाता है और इसे आरटीसीपी सेंडर रिपोर्ट (एसआर) में रिपोर्ट किया जाता है.
  • media-playout: किसी इनबाउंड आरटीपी स्ट्रीम (inbound-rtp) से जुड़े रिमोट MediaStreamTrack के प्लेआउट से जुड़ी मेट्रिक.
  • data-channel: RTCDataChannel को दिखाता है.

लेगसी से स्टैंडर्ड मेट्रिक मैपिंग

इस मैपिंग का मकसद डेवलपर को यह पता लगाने में मदद करना है कि कौनसी लेगसी मेट्रिक, किस स्टैंडर्ड मेट्रिक से मेल खाती है. हालांकि, ध्यान रखें कि संबंधित मेट्रिक में अलग-अलग यूनिट का इस्तेमाल हो सकता है या इसे इंस्टैंट वैल्यू के बजाय कुल काउंटर के रूप में दिखाया जा सकता है. मेट्रिक की परिभाषाओं के बारे में खास जानकारी देखें.
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है स्टैंडर्ड एपीआई, दरों के बजाय कुल काउंटर दिखाने को प्राथमिकता देता है. इसका मतलब है कि ऐप्लिकेशन को पुराने एपीआई की तरह, उसी दर (उदाहरण के लिए, बिटरेट) पाने के लिए औसत दर का पता लगाना होगा. इसके लिए, ऐप्लिकेशन को दो getStats() कॉल के बीच डेल्टा का पता लगाना होगा. उदाहरण के लिए:

// Periodically (e.g. every second or every 10 seconds)...
const currReport = await pc.getStats();
// Calculate bitrate since the last getStats() call.
// Handling of undefined is omitted for clarity.
const currOutboundRtp = currReport.values().find(s => s.type == 'outbound-rtp');
const prevOutboundRtp = prevReport.get(currOutboundRtp.id);
const deltaBits = (currOutboundRtp.bytesSent - prevOutboundRtp.bytesSent) * 8;
const deltaSeconds = (currOutboundRtp.timestamp - prevOutboundRtp.timestamp) / 1000;
logBitrateMeasurement(deltaBits / deltaSeconds);
// Remember the report for next time.
prevReport = currReport;

अपने हिसाब से दरों और औसत का हिसाब लगाना थोड़ा मुश्किल लग सकता है, लेकिन इसका एक फ़ायदा भी है कि किसी भी समयावधि में औसत निकाला जाता है. एपीआई के पुराने वर्शन की तुलना में, स्टैंडर्ड एपीआई को कम बार कॉल करने के कुछ फ़ायदे हैं.

लेगसी मेट्रिक googCertificate
स्टैंडर्ड पत्राचार certificate
.googFingerprint .fingerprint
.googFingerprintAlgorithm .fingerprintAlgorithm
.googDerBase64 .base64Certificate
लेगसी मेट्रिक googComponent
स्टैंडर्ड पत्राचार transport
.localCertificateId .localCertificateId
.remoteCertificateId .remoteCertificateId
.selectedCandidatePairId .selectedCandidatePairId
.dtlsCipher .dtlsCipher
.srtpCipher .srtpCipher
लेगसी मेट्रिक localcandidate
स्टैंडर्ड पत्राचार
local-candidate या candidate-pair
.stunKeepaliveRequestsSent candidate-pair.requestsSent (candidate-pair.localCandidateId से होकर candidate-pair रिवर्स लुकअप)
.portNumber local-candidate.port
.networkType local-candidate.networkType
.ipAddress local-candidate.address
.stunKeepaliveResponsesReceived candidate-pair.responsesReceived
.stunKeepaliveRttTotal candidate-pair.totalRoundTripTime
.transport local-candidate.protocol
.candidateType local-candidate.candidateType
.priority local-candidate.priority
लेगसी मेट्रिक remotecandidate
स्टैंडर्ड पत्राचार remote-candidate
ऊपर दिए गए localcandidate के बराबर. ऊपर दिए गए local-candidate के बराबर.
लेगसी मेट्रिक googCandidatePair
स्टैंडर्ड पत्राचार candidate-pair
.responsesSent candidate-pair.responsesSent
.requestsReceived candidate-pair.requestsReceived
.googRemoteCandidateType remote-candidate.candidateType
(
candidate-pair.remoteCandidateId से होकर remote-candidate खोजें)
.googReadable googReadable एक बूलियन है. इससे पता चलता है कि हमने हाल ही में candidate-pair.requestsReceived या candidate-pair.responsesReceived की बढ़ोतरी की है या नहीं
.googLocalAddress local-candidate.address
(
candidate-pair.localCandidateId से होकर local-candidate खोजें)
.consentRequestsSent candidate-pair.consentRequestsSent
.googTransportType local-candidate.protocol और remote-candidate.protocol के बराबर.
.googChannelId candidate-pair.transportId
.googLocalCandidateType local-candidate.candidateType
.googWritable googWritable एक बूलियन है. इससे पता चलता है कि हमने हाल ही में candidate-pair.responsesReceived की बढ़ोतरी की है या नहीं
.googRemoteAddress remote-candidate.address
.googRtt candidate-pair.currentRoundTripTime
.googActiveConnection ऐक्टिव कनेक्शन का मतलब है, उम्मीदवार की वह जोड़ी जिसे फ़िलहाल ट्रांसपोर्ट ने चुना है. जैसे, candidate-pair.id == transport.selectedCandidatePairId
.packetsDiscardedOnSend candidate-pair.packetsDiscardedOnSend
.bytesReceived candidate-pair.bytesReceived
.responsesReceived candidate-pair.responsesReceived
.remoteCandidateId candidate-pair.remoteCandidateId
.localCandidateId candidate-pair.localCandidateId
.bytesSent candidate-pair.bytesSent
.packetsSent candidate-pair.packetsSent
.bytesReceived candidate-pair.bytesReceived
.bytesReceived candidate-pair.bytesReceived
लेगसी मेट्रिक ssrc
स्टैंडर्ड पत्राचार
inbound-rtp, outbound-rtp, और media-source
.audioInputLevel media-source.audioLevel. लेगसी मेट्रिक की रेंज [0..32768] है, लेकिन स्टैंडर्ड मीटर [0..1] रेंज में है.
.audioOutputLevel
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है inbound-rtp.audioLevel. लेगसी मेट्रिक की रेंज [0..32768] है, लेकिन स्टैंडर्ड मीटर [0..1] रेंज में है.
.packetsLost inbound-rtp.packetsLost
.googTrackId लोकल MediaStreamTrack के लिए media-source.trackIdentifier और रिमोट MediaStreamTrack के लिए inbound-rtp.trackIdentifier
.googRtt remote-inbound-rtp.roundTripTime (outbound-rtp.remoteId देखें)
.googEchoCancellationReturnLossEnhancement inbound-rtp.echoReturnLossEnhancement
.googCodecName कोडेक का नाम, "टाइप/सब-टाइप" का सब-टाइप है MIME टाइप, codec.mimeType (inbound-rtp.codecId और outbound-rtp.codecId देखें)
.transportId inbound-rtp.transportId और outbound-rtp.transportId
.mediaType inbound-rtp.kind और outbound-rtp.kind या media-source.kind
.googEchoCancellationReturnLoss inbound-rtp.echoReturnLoss
.totalAudioEnergy inbound-rtp.totalAudioEnergy और media-source.totalAudioEnergy
ssrc.totalSamplesDuration inbound-rtp.totalSamplesDuration और media-source.totalSamplesDuration
.ssrc inbound-rtp.ssrc और outbound-rtp.ssrc
.googJitterReceived inbound-rtp.jitter
.packetsSent outbound-rtp.packetsSent
.bytesSent outbound-rtp.bytesSent
.googContentType inbound-rtp.contentType और outbound-rtp.contentType
.googFrameWidthInput media-source.width
.googFrameHeightInput media-source.height
.googFrameRateInput media-source.framesPerSecond
.googFrameWidthSent outbound-rtp.frameWidth
.googFrameHeightSent outbound-rtp.frameHeight
.googFrameRateSent
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है हालांकि, भेजे जाने वाले एफ़पीएस (फ़्रेम प्रति सेकंड) का मतलब, outbound-rtp.framesSent में होने वाले बदलाव की दर से है. हालांकि, इसे outbound-rtp.framesPerSecond के रूप में लागू किया जाता है, जो एफ़पीएस (फ़्रेम प्रति सेकंड) को कोड में बदलता है.
.googFrameWidthReceived inbound-rtp.frameWidth
.googFrameHeightReceived inbound-rtp.frameHeight
.googFrameRateDecoded
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है inbound-rtp.framesDecoded के बदलाव की दर
.googFrameRateOutput
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है inbound-rtp.framesDecoded - inbound-rtp.framesDropped के बदलाव की दर
.hugeFramesSent outbound-rtp.hugeFramesSent
.qpSum

inbound-rtp.qpSum और outbound-rtp.qpSum

.framesEncoded outbound-rtp.framesEncoded
.googAvgEncodeMs

outbound-rtp.totalEncodeTime / outbound-rtp.framesEncoded

.codecImplementationName

inbound-rtp.decoderImplementation और outbound-rtp.encoderImplementation

.googCpuLimitedResolution
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है सही है, अगर outbound-rtp.qualityLimitationReason == "cpu"
.googBandwidthLimitedResolution
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है सही है, अगर outbound-rtp.qualityLimitationReason == "bandwidth"
.googAdaptationChanges
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है लेगसी मेट्रिक में यह गिना जाता है कि qualityLimitationReason से जुड़ी वजहों से, रिज़ॉल्यूशन या फ़्रेम रेट में कितनी बार बदलाव हुए. इसमें बदलाव करने के लिए, अन्य मेट्रिक इस्तेमाल की जा सकती हैं. जैसे, भेजें रिज़ॉल्यूशन या फ़्रेम रेट, सोर्स रिज़ॉल्यूशन या फ़्रेम रेट से अलग होना चाहिए. हालांकि, रिज़ॉल्यूशन या फ़्रेम रेट में बार-बार बदलाव किए जाने की अवधि को फिर से कॉन्फ़िगर करने की तुलना में, outbound-rtp.qualityLimitationDurations की समयसीमा को सीमित किया जा सकता है. यह ज़्यादा फ़ायदेमंद हो सकता है.
.googNacksReceived inbound-rtp.nackCount
.googNacksSent inbound-rtp.nackCount
.googPlisReceived inbound-rtp.pliCount
.googPlisSent inbound-rtp.pliCount
.googFirsReceived inbound-rtp.firCount
.googFirsSent inbound-rtp.firCount
.googSecondaryDecodedRate
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है उन पैकेट का हाल ही का अनुपात जिनमें गड़बड़ी ठीक करने की जानकारी दी गई है: inbound-rtp.fecPacketsReceived - inbound-rtp.fecPacketsDiscarded
.packetsReceived inbound-rtp.packetsReceived
.googJitterBufferMs inbound-rtp.jitterBufferDelay / inbound-rtp.jitterBufferEmittedCount
.googTargetDelayMs (वीडियो) inbound-rtp.jitterBufferTargetDelay / inbound-rtp.jitterBufferEmittedCount
.googPreferredJitterBufferMs (ऑडियो) inbound-rtp.jitterBufferTargetDelay / inbound-rtp.jitterBufferEmittedCount
.googExpandRate
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है छिपे हुए सैंपल का हाल ही का अनुपात: inbound-rtp.concealedSamples / inbound-rtp.totalSamplesReceived
.googSpeechExpandRate स्ट्रीम शांत नहीं होने पर, छिपे हुए सैंपल का हाल ही का अनुपात: (inbound-rtp.concealedSamples - inbound-rtp.silentConcealedSamples) / inbound-rtp.concealedSamples
.googAccelerateRate प्लेआउट की रफ़्तार बढ़ाने के लिए खारिज किए गए सैंपल का हाल ही का अनुपात: inbound-rtp.removedSamplesForAcceleration / inbound-rtp.totalSamplesReceived
.googPreemptiveExpandRate
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है प्लेआउट स्पीड को कम करने के लिए, हाल ही में बनाए गए सैंपल का अनुपात: inbound-rtp.insertedSamplesForDeceleration / inbound-rtp.totalSamplesReceived
.googSecondaryDiscardedRate inbound-rtp.fecPacketsDiscarded
.bytesReceived inbound-rtp.bytesReceived
s.googCurrentDelayMs inbound-rtp.jitterBufferDelay और Media-playout.totalPlayoutDelay
.googDecodeMs inbound-rtp.totalDecodeTime / inbound-rtp.framesDecoded
.googTimingFrameInfo
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है सिर्फ़ वही goog-मेट्रिक. inbound-rtp.googTimingFrameInfo
.framesDecoded inbound-rtp.framesDecoded
लेगसी मेट्रिक VideoBwe
स्टैंडर्ड पत्राचार
outbound-rtp और candidate-pair
.googTargetEncBitrate
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है तुरंत वैल्यू के तौर पर outbound-rtp.targetBitrate या औसत के तौर पर outbound-rtp.totalEncodedBytesTarget / outbound-rtp.framesEncoded
.googActualEncBitrate एन्कोडर से जनरेट हुई बाइट, पेलोड बाइट होती हैं. इनमें फिर से ट्रांसमिशन को शामिल नहीं किया जाता है: outbound-rtp.bytesSent से outbound-rtp.retransmittedBytesSent तक के बदलाव की दर
.googBucketDelay outbound-rtp.totalPacketSendDelay / outbound-rtp.packetsSent
.googTransmitBitrate हर आरटीपी स्ट्रीम बिटरेट के लिए outbound-rtp.headerBytesSent + outbound-rtp.bytesSent, हर ICE उम्मीदवार के बिटरेट के लिए candidate-pair.bytesSent या हर ट्रांसपोर्ट बिटरेट के लिए transport.bytesSent बदलाव की दर
.googRetransmitBitrate outbound-rtp.retransmittedBytesSent के बदलाव की सीमा
.googAvailableSendBandwidth candidate-pair.availableOutgoingBitrate
.googAvailableReceiveBandwidth candidate-pair.availableIncomingBitrate

स्टैंडर्ड एपीआई, सिमुलकास्ट के बारे में जानकारी देने वाला होता है

अगर आपने सिमुलकास्ट का इस्तेमाल किया है, तो आपने देखा होगा कि लेगसी एपीआई सिर्फ़ एक एसएसआरसी की रिपोर्ट करता है. ऐसा तब भी होता है, जब आपने तीन अलग-अलग एसएसआरसी पर तीन आरटीपी स्ट्रीम भेजने के लिए सिमुलकास्ट का इस्तेमाल किया हो.

स्टैंडर्ड एपीआई इस सीमा को शेयर नहीं करता और हर एसएसआरसी के लिए outbound-rtp आंकड़ों के तीन ऑब्जेक्ट दिखाएगा. इसका मतलब है कि हर आरटीपी स्ट्रीम का अलग-अलग विश्लेषण किया जा सकता है. हालांकि, इसका यह मतलब भी है कि आरटीपी से भेजी गई सभी स्ट्रीम का कुल बिटरेट जानने के लिए, आपको उन्हें खुद ही इकट्ठा करना होगा.

कई स्पेशल लेयर वाली एसवीसी स्ट्रीम या आरटीपी स्ट्रीम, scalabilityMode एपीआई की मदद से कॉन्फ़िगर की गई हैं. वे अब भी एक outbound-rtp के तौर पर दिखती हैं, क्योंकि इन्हें एक ही एसएसआरसी पर भेजा जाता है.

अगर माइग्रेशन के लिए आपको ज़्यादा समय चाहिए

जब Chrome 117 से लेगसी एपीआई को हटाया जाता है, तो इसका इस्तेमाल करने से अपवाद जनरेट होगा. अगर कोड को समय पर माइग्रेट नहीं हो पा रहा है, तो RTCPeerConnection कॉलबैक-आधारित getStats() API का ऑरिजिन ट्रायल, रजिस्टर की गई वेबसाइटों को माइग्रेट करने के लिए ज़्यादा समय देता है. ऑरिजिन ट्रायल टोकन के साथ, लेगसी getStats() API का इस्तेमाल Chrome 121 तक जारी रह सकता है.