fix(screenshare): default to not flowing is peer was lost
The media monitor responsible for triggering the reconnecting view in the screen sharing component was maintaing the previous state (eg flowing) in cases where the peer just failed before media stopped flowing. That triggered an error in the bps calculations that caused the previous state to be preserved - eg stuck in flowing while it should be not_flowing. These changes make it so that if there's not peer to fetch stats from, them the bps calculations will correctly return 0 (which translates to not_flowing).
This commit is contained in:
parent
d2e8e74471
commit
bd0dfa17cc
@ -242,9 +242,16 @@ class ScreenshareComponent extends React.Component {
|
||||
|
||||
try {
|
||||
mediaFlowing = isMediaFlowing(previousStats, currentStats);
|
||||
} catch (_error) {
|
||||
} catch (error) {
|
||||
// Stats processing failed for whatever reason - maintain previous state
|
||||
mediaFlowing = prevMediaFlowing;
|
||||
logger.warn({
|
||||
logCode: 'screenshare_media_monitor_stats_failed',
|
||||
extraInfo: {
|
||||
errorName: error.name,
|
||||
errorMessage: error.message,
|
||||
},
|
||||
}, 'Failed to collect screenshare stats, flow monitor');
|
||||
}
|
||||
|
||||
previousStats = currentStats;
|
||||
@ -323,9 +330,7 @@ class ScreenshareComponent extends React.Component {
|
||||
this.clearMediaFlowingMonitor();
|
||||
// Current state is media not flowing - stream is now healthy so flip it
|
||||
if (!mediaFlowing) this.setState({ mediaFlowing: isStreamHealthy });
|
||||
} else {
|
||||
if (this.mediaFlowMonitor == null) this.monitorMediaFlow();
|
||||
}
|
||||
} else if (this.mediaFlowMonitor == null) this.monitorMediaFlow();
|
||||
}
|
||||
|
||||
renderFullscreenButton() {
|
||||
|
@ -245,8 +245,8 @@ const getStats = async (statsTypes = DEFAULT_SCREENSHARE_STATS_TYPES) => {
|
||||
// This method may throw errors
|
||||
const isMediaFlowing = (previousStats, currentStats) => {
|
||||
const bpsData = ConnectionStatusService.calculateBitsPerSecond(
|
||||
currentStats.screenshareStats,
|
||||
previousStats.screenshareStats,
|
||||
currentStats?.screenshareStats,
|
||||
previousStats?.screenshareStats,
|
||||
);
|
||||
const bpsDataAggr = Object.values(bpsData)
|
||||
.reduce((sum, partialBpsData = 0) => sum + parseFloat(partialBpsData), 0);
|
||||
|
Loading…
Reference in New Issue
Block a user