RemoteVideoStats

Statistics of the remote video stream.

@JsonSerializable(explicitToJson: true, includeIfNull: false)
class RemoteVideoStats {
  const RemoteVideoStats(
      {this.uid,
      this.delay,
      this.e2eDelay,
      this.width,
      this.height,
      this.receivedBitrate,
      this.decoderOutputFrameRate,
      this.rendererOutputFrameRate,
      this.frameLossRate,
      this.packetLossRate,
      this.rxStreamType,
      this.totalFrozenTime,
      this.frozenRate,
      this.avSyncTimeMs,
      this.totalActiveTime,
      this.publishDuration,
      this.mosValue,
      this.rxVideoBytes});

  @JsonKey(name: 'uid')
  final int? uid;

  @JsonKey(name: 'delay')
  final int? delay;

  @JsonKey(name: 'e2eDelay')
  final int? e2eDelay;

  @JsonKey(name: 'width')
  final int? width;

  @JsonKey(name: 'height')
  final int? height;

  @JsonKey(name: 'receivedBitrate')
  final int? receivedBitrate;

  @JsonKey(name: 'decoderOutputFrameRate')
  final int? decoderOutputFrameRate;

  @JsonKey(name: 'rendererOutputFrameRate')
  final int? rendererOutputFrameRate;

  @JsonKey(name: 'frameLossRate')
  final int? frameLossRate;

  @JsonKey(name: 'packetLossRate')
  final int? packetLossRate;

  @JsonKey(name: 'rxStreamType')
  final VideoStreamType? rxStreamType;

  @JsonKey(name: 'totalFrozenTime')
  final int? totalFrozenTime;

  @JsonKey(name: 'frozenRate')
  final int? frozenRate;

  @JsonKey(name: 'avSyncTimeMs')
  final int? avSyncTimeMs;

  @JsonKey(name: 'totalActiveTime')
  final int? totalActiveTime;

  @JsonKey(name: 'publishDuration')
  final int? publishDuration;

  @JsonKey(name: 'mosValue')
  final int? mosValue;

  @JsonKey(name: 'rxVideoBytes')
  final int? rxVideoBytes;

  factory RemoteVideoStats.fromJson(Map<String, dynamic> json) =>
      _$RemoteVideoStatsFromJson(json);

  Map<String, dynamic> toJson() => _$RemoteVideoStatsToJson(this);
}

Properties

uid
User ID that identifies which user's video stream it is.
delay
Delay (ms).
Note: Deprecated: In audio and video scenarios with audio-video sync mechanism, you can refer to the values of networkTransportDelay and jitterBufferDelay in RemoteAudioStats to understand video delay data.
e2eDelay
End-to-end video delay (ms), i.e., the total time from video capture by the remote user to video rendering by the local user.
width
Video stream width (pixels).
height
Video stream height (pixels).
receivedBitrate
Bitrate received (Kbps) since last statistics.
decoderOutputFrameRate
Output frame rate of the remote video decoder, in fps.
rendererOutputFrameRate
Output frame rate of the remote video renderer, in fps.
frameLossRate
Remote video frame loss rate (%).
packetLossRate
Packet loss rate (%) of the remote video after applying anti-packet-loss techniques.
rxStreamType
Video stream type, either high or low. See VideoStreamType.
totalFrozenTime
Total duration (ms) of video freezes experienced by the remote user after joining the channel. During a call, if the video frame rate is set to no less than 5 fps and the interval between two consecutive rendered frames exceeds 500 ms, it is counted as a video freeze.
frozenRate
Percentage (%) of the total duration of video freezes experienced by the remote user after joining the channel relative to the total effective video duration. Effective video duration refers to the time after the remote user joins the channel during which the video is neither stopped nor disabled.
totalActiveTime
Effective video duration (ms). The total effective video duration is the time during which the remote user or host has joined the channel and neither stopped sending the video stream nor disabled the video module.
publishDuration
Total published duration (ms) of the remote video stream.
avSyncTimeMs
Time (ms) that audio leads video.
Note: If the value is negative, it means audio lags behind video.
mosValue
Quality of the remote audio stream during the statistics period. The quality is measured using Agora's real-time audio MOS (Mean Opinion Score) method. The return value ranges from [0, 500]; divide by 100 to get the MOS score, ranging from 0 to 5. The higher the score, the better the audio quality. The subjective audio quality corresponding to the Agora MOS score is:
  • Greater than 4: Excellent audio quality, clear and smooth.
  • 3.5 - 4: Good audio quality, occasional distortion but still clear.
  • 3 - 3.5: Fair audio quality, occasional stuttering, not very smooth, requires some attention to hear clearly.
  • 2.5 - 3: Poor audio quality, frequent stuttering, requires concentration to hear clearly.
  • 2 - 2.5: Very poor audio quality, occasional noise, partial semantic loss, difficult to communicate.
  • Less than 2: Extremely poor audio quality, frequent noise, significant semantic loss, communication impossible.