in src/hooks/sdk/useMediaStreamMetrics.tsx [23:98]
export function useMediaStreamMetrics() {
const audioVideo = useAudioVideo();
const [mediaStreamMetrics, setMediaStreamMetrics] =
useState<MediaStreamMetrics>({
audioPacketsSentFractionLossPercent: null,
audioPacketsReceivedFractionLossPercent: null,
availableOutgoingBandwidth: null,
availableIncomingBandwidth: null,
videoStreamMetrics: {},
});
useEffect(() => {
if (!audioVideo) {
return;
}
const observer = {
metricsDidReceive(clientMetricReport: ClientMetricReport): void {
const {
audioPacketLossPercent,
audioPacketsReceivedFractionLoss,
availableSendBandwidth,
availableReceiveBandwidth,
availableOutgoingBitrate,
availableIncomingBitrate,
} = clientMetricReport.getObservableMetrics();
let videoStreamMetrics = {};
let availableOutgoingBandwidth = 0;
let availableIncomingBandwidth = 0;
let audioPacketsSentFractionLossPercent = 0;
let audioPacketsReceivedFractionLossPercent = 0;
if (isValidMetric(audioPacketLossPercent)) {
audioPacketsSentFractionLossPercent = Math.trunc(
audioPacketLossPercent
);
}
if (isValidMetric(audioPacketsReceivedFractionLoss)) {
audioPacketsReceivedFractionLossPercent = Math.trunc(
audioPacketsReceivedFractionLoss
);
}
if (clientMetricReport.getObservableVideoMetrics) {
videoStreamMetrics = clientMetricReport.getObservableVideoMetrics();
}
if (isValidMetric(availableSendBandwidth)) {
availableOutgoingBandwidth = availableSendBandwidth / 1000;
} else if (isValidMetric(availableOutgoingBitrate)) {
availableOutgoingBandwidth = availableOutgoingBitrate / 1000;
}
if (isValidMetric(availableReceiveBandwidth)) {
availableIncomingBandwidth = availableReceiveBandwidth / 1000;
} else if (isValidMetric(availableIncomingBitrate)) {
availableIncomingBandwidth = availableIncomingBitrate / 1000;
}
setMediaStreamMetrics({
audioPacketsSentFractionLossPercent,
audioPacketsReceivedFractionLossPercent,
availableOutgoingBandwidth,
availableIncomingBandwidth,
videoStreamMetrics,
});
},
};
audioVideo.addObserver(observer);
return () => audioVideo.removeObserver(observer);
}, [audioVideo]);
return mediaStreamMetrics;
}