class CallStats { /// Recording timestamp final int recordTs; /// Remote address, duh final String remoteAddress; /// Based on local RTP statistics and RTCP feedback, a quality rating is computed /// and updated during all the duration of the call. This function returns its /// value at the time of the function call. It is expected that the rating is /// updated at least every 5 seconds or so. The rating is a floating point number /// comprised between 0 and 5. /// - 4-5 = good quality /// - 3-4 = average quality /// - 2-3 = poor quality /// - 1-2 = very poor quality /// - 0-1 = can't be worse, mostly unusable /// - -1 = unavailable final double currentQuality; /// Bandwidth measurement of the received stream, expressed in kbit/s, including IP/UDP/RTP headers final double downloadBandwidth; /// Estimated bandwidth measurement of the received stream, expressed in kbit/s, including IP/UDP/RTP headers final double estimatedDownloadBandwidth; /// If the FEC is enabled, gets the cumulative number of lost source packets of the RTP session that have not been repaired by the current FEC stream final int fecCumulativeLostPacketsNumber; /// Bandwidth measurement of the part of the received stream dedicated to FEC, expressed in kbit/s, including IP/UDP/RTP headers final double fecDownloadBandwidth; /// If the FEC is enabled, gets the cumulative number of source packets of the RTP session that have been repaired by the current FEC stream final int fecRepairedPacketsNumber; /// Bandwidth measurement of the part of the sent stream dedicated to FEC, expressed in kbit/s, including IP/UDP/RTP headers final double fecUploadBandwidth; /// State of ICE processing final String iceState; /// Jitter buffer size in ms final double jitterBufferSizeMs; /// Cumulative number of late packets final int latePacketsCumulativeNumber; /// Local late rate since last report, expressed as a percentage final double localLateRate; /// Local loss rate since last report, expressed as a percentage final double localLossRate; /// Remote reported interarrival jitter, expressed in seconds final double receiverInterarrivalJitter; /// Remote reported loss rate since last report, expressed as a percentage final double receiverLossRate; /// Round trip delay in s final double roundTripDelay; /// Bandwidth measurement of the received RTCP, expressed in kbit/s, including IP/UDP/RTP headers final double rtcpDownloadBandwidth; /// Bandwidth measurement of the sent RTCP, expressed in kbit/s, including IP/UDP/RTP headers final double rtcpUploadBandwidth; /// RTP cumulative number of incoming packet lost final int rtpCumPacketLoss; /// RTP incoming packets discarded because the queue exceeds its max size final int rtpDiscarded; /// Number of received bytes excluding IPv4/IPv6/UDP headers and including late and duplicate packets final int rtpHwRecv; /// Number of RTP received packets final int rtpPacketRecv; /// Number of RTP outgoing packets final int rtpPacketSent; /// RTP incoming recv_bytes of payload and delivered in time to the application final int rtpRecv; /// RTP outgoing sent_bytes (excluding IP header) final int rtpSent; /// Local interarrival jitter, expressed in seconds final double senderInterarrivalJitter; /// Local loss rate since last report, expressed as a percentage final double senderLossRate; /// Method used for SRTP key exchange final String srtpSource; /// SRTP Cryto suite in use final String srtpSuite; /// Bandwidth measurement of the sent stream, expressed in kbit/s, including IP/UDP/RTP headers final double uploadBandwidth; /// State of uPnP processing final String upnpState; /// ZRTP algorithm statistics details (authentication method) final String zrtpAuthTagAlgo; /// ZRTP algorithm statistics details (cipher) final String zrtpCipherAlgo; /// ZRTP algorithm statistics details (hash function) final String zrtpHashAlgo; /// ZRTP algorithm statistics details (key agreeement) final String zrtpKeyAgreementAlgo; /// ZRTP algorithm statistics details (SAS display) final String zrtpSasAlgo; /// Did ZRTP used a Post Quantum algorithm to perform a key exchange final bool isZrtpKeyAgreementAlgoPostQuantum; const CallStats( this.recordTs, this.remoteAddress, this.currentQuality, this.downloadBandwidth, this.estimatedDownloadBandwidth, this.fecCumulativeLostPacketsNumber, this.fecDownloadBandwidth, this.fecRepairedPacketsNumber, this.fecUploadBandwidth, this.iceState, this.jitterBufferSizeMs, this.latePacketsCumulativeNumber, this.localLateRate, this.localLossRate, this.receiverInterarrivalJitter, this.receiverLossRate, this.roundTripDelay, this.rtcpDownloadBandwidth, this.rtcpUploadBandwidth, this.rtpCumPacketLoss, this.rtpDiscarded, this.rtpHwRecv, this.rtpPacketRecv, this.rtpPacketSent, this.rtpRecv, this.rtpSent, this.senderInterarrivalJitter, this.senderLossRate, this.srtpSource, this.srtpSuite, this.uploadBandwidth, this.upnpState, this.zrtpAuthTagAlgo, this.zrtpCipherAlgo, this.zrtpHashAlgo, this.zrtpKeyAgreementAlgo, this.zrtpSasAlgo, this.isZrtpKeyAgreementAlgoPostQuantum, ); factory CallStats.fromJson(Map json) => CallStats( json["recordTs"], json["remoteAddress"], json["currentQuality"], json["downloadBandwidth"], json["estimatedDownloadBandwidth"], json["fecCumulativeLostPacketsNumber"], json["fecDownloadBandwidth"], json["fecRepairedPacketsNumber"], json["fecUploadBandwidth"], json["iceState"], json["jitterBufferSizeMs"], json["latePacketsCumulativeNumber"], json["localLateRate"], json["localLossRate"], json["receiverInterarrivalJitter"], json["receiverLossRate"], json["roundTripDelay"], json["rtcpDownloadBandwidth"], json["rtcpUploadBandwidth"], json["rtpCumPacketLoss"], json["rtpDiscarded"], json["rtpHwRecv"], json["rtpPacketRecv"], json["rtpPacketSent"], json["rtpRecv"], json["rtpSent"], json["senderInterarrivalJitter"], json["senderLossRate"], json["srtpSource"], json["srtpSuite"], json["uploadBandwidth"], json["upnpState"], json["zrtpAuthTagAlgo"], json["zrtpCipherAlgo"], json["zrtpHashAlgo"], json["zrtpKeyAgreementAlgo"], json["zrtpSasAlgo"], json["isZrtpKeyAgreementAlgoPostQuantum"], ); Map toJson() { return { "recordTs": recordTs, "remoteAddress": remoteAddress, "currentQuality": currentQuality, "downloadBandwidth": downloadBandwidth, "estimatedDownloadBandwidth": estimatedDownloadBandwidth, "fecCumulativeLostPacketsNumber": fecCumulativeLostPacketsNumber, "fecDownloadBandwidth": fecDownloadBandwidth, "fecRepairedPacketsNumber": fecRepairedPacketsNumber, "fecUploadBandwidth": fecUploadBandwidth, "iceState": iceState, "jitterBufferSizeMs": jitterBufferSizeMs, "latePacketsCumulativeNumber": latePacketsCumulativeNumber, "localLateRate": localLateRate, "localLossRate": localLossRate, "receiverInterarrivalJitter": receiverInterarrivalJitter, "receiverLossRate": receiverLossRate, "roundTripDelay": roundTripDelay, "rtcpDownloadBandwidth": rtcpDownloadBandwidth, "rtcpUploadBandwidth": rtcpUploadBandwidth, "rtpCumPacketLoss": rtpCumPacketLoss, "rtpDiscarded": rtpDiscarded, "rtpHwRecv": rtpHwRecv, "rtpPacketRecv": rtpPacketRecv, "rtpPacketSent": rtpPacketSent, "rtpRecv": rtpRecv, "rtpSent": rtpSent, "senderInterarrivalJitter": senderInterarrivalJitter, "senderLossRate": senderLossRate, "srtpSource": srtpSource, "srtpSuite": srtpSuite, "uploadBandwidth": uploadBandwidth, "upnpState": upnpState, "zrtpAuthTagAlgo": zrtpAuthTagAlgo, "zrtpCipherAlgo": zrtpCipherAlgo, "zrtpHashAlgo": zrtpHashAlgo, "zrtpKeyAgreementAlgo": zrtpKeyAgreementAlgo, "zrtpSasAlgo": zrtpSasAlgo, "isZrtpKeyAgreementAlgoPostQuantum": isZrtpKeyAgreementAlgoPostQuantum, }; } }