import { Meta } from '@storybook/blocks';
# LocalVideoProvider
The `LocalVideoProvider` provides `tileId` of video tile associated with the local video, `isVideoEnabled` specifying the local video state, `setIsVideoEnabled` function to set the value of `isVideoEnabled`, `hasReachedVideoLimit` specifying whether or not video limit is reached, and `toggleVideo()` to toggle local video.
> Note: `setIsVideoEnabled` is a workaround for [GitHub Issue 529](https://github.com/aws/amazon-chime-sdk-component-library-react/issues/529) to synchronize the state of `PreviewVideo` and `LocalVideo` internally. This function does not change the actual state of `LocalVideo` and `PreviewVideo`. Don't use this in your application.
The React SDK depends on the Amazon Chime SDK for JavaScript, wherein, a single video stream is attached to a video element at a time. Hence, if `PreviewVideo` and `LocalVideo` component both are rendered on the same page and if both are enabled, stopping the video preview in `PreviewVideo` component will result into disconnecting the video stream for `LocalVideo` as well showing a black screen.
To start/stop a video preview, please check `PreviewVideo` component [documentation](/docs/sdk-components-previewvideo--page).
To start/stop user's local video, use `toggleVideo` function from the `LocalVideoProvider`.
In the case of a video being unplugged, the React SDK will automatically stop the local video tile, and will not choose another video device automatically.
## State
```javascript
{
// The tile ID associated with the local video
tileId: null | number;
// Whether or not the local user has video enabled
// This does not tell whether the video preview from `PreviewVideo` component is enabled or not.
isVideoEnabled: boolean;
// A function to set the value of `isVideoEnabled`, it can not change the state of camera
// This is aimed to be used internally to synchronize the state of `PreviewVideo` and `LocalVideo`
setIsVideoEnabled: (isEnabled: boolean) => void;
// Whether or not video limit is reached, it defaults to false
hasReachedVideoLimit: boolean;
// A function that toggles the local video
toggleVideo: () => Promise;
}
```
You can access the state by using the [useLocalVideo](/docs/sdk-hooks-uselocalvideo--page) hook.
## Usage
If you are using `MeetingProvider`, `LocalVideoProvider` is rendered by default.
```jsx
import React from 'react';
import {
MeetingProvider,
useLocalVideo
} from 'amazon-chime-sdk-component-library-react';
const App = () => (
);
const MyChild = () => {
const { tileId, isVideoEnabled, hasReachedVideoLimit, toggleVideo } = useLocalVideo();
return (
Tile ID: {tileId}
{isVideoEnabled ? 'LocalVideo is enabled' : 'LocalVideo is disabled'}
{hasReachedVideoLimit ? 'Video limit reached' : 'Video limit not reached'}