calculateMicLevel method
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));
}
}
}
}