import { Meta } from '@storybook/blocks'; # useLocalVideo The `useLocalVideo` hook returns `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`. ### Return Value ```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; } ``` ## Importing ```javascript import { useLocalVideo } from 'amazon-chime-sdk-component-library-react'; ``` ## Usage The hook depends on the `MeetingProvider` being rendered. ```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'}

); }; ``` ### Dependencies - `MeetingProvider`