monitorStats method

  1. @override
Future<bool> monitorStats()

Implementation

@override
Future<bool> monitorStats() async {
  if (events.isDisposed || !isActive) {
    _currentBitrate = 0;
    return false;
  }
  List<VideoSenderStats> stats = [];
  try {
    stats = await getSenderStats();
  } catch (e) {
    logger.warning('Failed to get sender stats: $e');
    return false;
  }
  final Map<String, VideoSenderStats> statsMap = {};

  for (var s in stats) {
    statsMap[s.rid ?? 'f'] = s;
  }

  if (prevStats != null) {
    num totalBitrate = 0;
    statsMap.forEach((key, s) {
      final prev = prevStats![key];
      if (prev == null) {
        return;
      }
      try {
        final bitRateForlayer = computeBitrateForSenderStats(s, prev).toInt();
        _bitrateFoLayers[key] = bitRateForlayer;
        totalBitrate += bitRateForlayer;
      } catch (e) {
        logger.warning('Failed to compute bitrate for layer: $e');
      }
    });
    _currentBitrate = totalBitrate;
    events.emit(
      VideoSenderStatsEvent(
        stats: statsMap,
        currentBitrate: totalBitrate,
        bitrateForLayers: _bitrateFoLayers,
      ),
    );
  }

  prevStats = statsMap;
  return true;
}