import { Meta } from '@storybook/blocks';
# useMediaStreamMetrics
The `useMediaStreamMetrics` hook returns:
- common metrics for audio stream
- common metrics for video stream of all attendees
- original [RTCStatsReport](https://developer.mozilla.org/en-US/docs/Web/API/RTCStatsReport) returned by [RTCPeerConnection.getStats()](https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/getStats)
This hook re-renders frequently. You should avoid using it high in your app tree, and ideally use it in your leaf components.
### Return Value
```ts
{
audioPacketsSentFractionLossPercent: number | null;
audioPacketsReceivedFractionLossPercent: number | null;
audioSpeakerDelayMs: number | null;
audioUpstreamRoundTripTimeMs: number | null;
audioUpstreamJitterMs: number | null;
audioDownstreamJitterMs: number | null;
currentRoundTripTimeMs: number | null;
availableOutgoingBandwidth: number | null;
availableIncomingBandwidth: number | null;
rtcStatsReport: RTCStatsReport | null;
videoStreamMetrics: { [attendeeId: string]: { [ssrc: string]: { [key: string]: number } } };
}
```
## Importing
```javascript
import { useMediaStreamMetrics } from 'amazon-chime-sdk-component-library-react';
```
## Usage
The hook depends on the `AudioVideoProvider` being rendered. If you are using the `MeetingProvider`, it is rendered by default.
The `videoStreamMetrics` in return value is a map of attendee to stream of video metrics mappings. The format of `videoStreamMetrics` is shown below:
```ts
videoStreamMetrics: {
remoteAttendeeId: {
// remote attendees will have downstream metrics
ssrc: {
videoDownstreamBitrate: number;
videoDownstreamPacketLossPercent: number;
videoDownstreamPacketsReceived: number;
videoDownstreamFramesDecodedPerSecond: number;
videoDownstreamFrameHeight: number;
videoDownstreamFrameWidth: number;
videoDownstreamJitterMs: number;
videoDownstreamDelayMs: number;
}
}
localAttendeeId: {
// local attendee will have upstream metrics
ssrc: {
videoUpstreamBitrate: number;
videoUpstreamPacketsSent: number;
videoUpstreamPacketLossPercent: number;
videoUpstreamFramesEncodedPerSecond: number;
videoUpstreamFrameHeight: number;
videoUpstreamFrameWidth: number;
videoUpstreamJitterMs: number;
videoUpstreamRoundTripTimeMs: number;
}
}
}
```
```jsx
import React from 'react';
import {
MeetingProvider,
useMediaStreamMetrics,
} from 'amazon-chime-sdk-component-library-react';
const App = () => (
{JSON.stringify(report, null, 2)}) ); return (
audioPacketsSentFractionLossPercent: {metrics.audioPacketsSentFractionLossPercent}
audioPacketsReceivedFractionLossPercent: {metrics.audioPacketsReceivedFractionLossPercent}
audioSpeakerDelayMs: {metrics.audioSpeakerDelayMs}
audioUpstreamRoundTripTimeMs: {metrics.audioUpstreamRoundTripTimeMs}
audioUpstreamJitterMs: {metrics.audioUpstreamJitterMs}
audioDownstreamJitterMs: {metrics.audioDownstreamJitterMs}
currentRoundTripTimeMs: {metrics.currentRoundTripTimeMs}
availableOutgoingBandwidth: {metrics.availableOutgoingBandwidth}
availableIncomingBandwidth: {metrics.availableIncomingBandwidth}
videoStreamMetrics
{JSON.stringify(metrics.videoStreamMetrics, null, 2)}
rtcStatsReport
{...rtcStatsReportValues}