calculateMicLevel method

void calculateMicLevel(
  1. CubeStatsReport report
)

Implementation

void calculateMicLevel(CubeStatsReport report) {
  for (var statsReport in report.stats) {
    var micLevel;
    var trackId;
    var trackIdentifier;
    var statsUserId;

    if (statsReport.type == 'inbound-rtp') {
      if (MEDIA_TYPE_AUDIO == statsReport.values['mediaType'] ||
          MEDIA_TYPE_AUDIO == statsReport.values['kind']) {
        var volume = statsReport.values['audioLevel'];

        micLevel = volume;
        trackId = statsReport.values['trackId']?.toString();
        trackIdentifier = statsReport.values['trackIdentifier']?.toString();
      }
    } else if (statsReport.type == 'ssrc') {
      if (MEDIA_TYPE_AUDIO == statsReport.values['mediaType']) {
        var volume = statsReport.values['audioOutputLevel'];

        if (micLevel == null && volume != null) {
          micLevel = int.parse(volume) / MIC_CORRECTION_COEFFICIENT;
          trackId ??= statsReport.values['trackId']?.toString();
          trackIdentifier ??= statsReport.values['trackIdentifier']?.toString();
        }
      }
    } else if (statsReport.type == 'media-source') {
      if (MEDIA_TYPE_AUDIO == statsReport.values['kind']) {
        var volume = statsReport.values['audioLevel'];

        if (micLevel == null && volume != null) {
          micLevel = double.parse(volume.toString());
          trackId ??= statsReport.values['trackId']?.toString();
          trackIdentifier ??= statsReport.values['trackIdentifier']?.toString();
        }
        statsUserId = CubeSessionManager.instance.activeSession?.userId;
      }
    } else if (statsReport.type == 'track') {}

    if (micLevel != null) {
      var userId = trackId == null && trackIdentifier == null
          ? statsUserId ?? report.userId
          : callSession?.getUserIdForStream(
              trackId, trackIdentifier, statsUserId ?? report.userId);

      if (userId != null) {
        _micLevelStreamController
            .add(CubeMicLevelEvent(userId, micLevel ?? 0.0));
      }
    }
  }
}