getSenderStats method

Future<AudioSenderStats?> getSenderStats()

Implementation

Future<AudioSenderStats?> getSenderStats() async {
  if (sender == null) {
    return null;
  }

  late List<rtc.StatsReport> stats;
  try {
    stats = await sender!.getStats();
  } catch (e) {
    rethrow;
  }

  AudioSenderStats? senderStats;
  for (var v in stats) {
    if (v.type == 'outbound-rtp') {
      senderStats ??= AudioSenderStats(v.id, v.timestamp);
      senderStats.packetsSent = getNumValFromReport(v.values, 'packetsSent');
      senderStats.packetsLost = getNumValFromReport(v.values, 'packetsLost');
      senderStats.bytesSent = getNumValFromReport(v.values, 'bytesSent');
      senderStats.roundTripTime =
          getNumValFromReport(v.values, 'roundTripTime');
      senderStats.jitter = getNumValFromReport(v.values, 'jitter');

      final c = stats.firstWhereOrNull((element) => element.type == 'codec');
      if (c != null) {
        senderStats.mimeType = getStringValFromReport(c.values, 'mimeType');
        senderStats.payloadType =
            getNumValFromReport(c.values, 'payloadType');
        senderStats.channels = getNumValFromReport(c.values, 'channels');
        senderStats.clockRate = getNumValFromReport(c.values, 'clockRate');
      }
    } else if (v.type == 'media-source') {
      senderStats ??= AudioSenderStats(v.id, v.timestamp);
      senderStats.audioSourceStats = AudioSourceStats.fromReport(v);
    }
  }
  return senderStats;
}