Skip to content

useDisplayMedia ​

Hook that provides screen sharing functionality

browser
test coverage
Last changed: last month

TIP

This hook uses mediaDevices.getDisplayMedia browser api to provide enhanced functionality. Make sure to check for compatibility with different browsers when using this api

Installation ​

Library
CLI
Manual
typescript
import { useDisplayMedia } from '@siberiacancode/reactuse';

Usage ​

typescript
const { stream, sharing, start, stop } = useDisplayMedia(ref);
// or
const { ref, stream, sharing, start, stop } = useDisplayMedia<HTMLVideoElement>();

Demo ​

Api ​

Parameters

NameTypeDefaultNote
targetHookTarget-The target video element to display the media stream
options.audio?boolean | MediaTrackConstraints-Whether to enable audio sharing
options.immediately?booleanfalseWhether to start immediately
options.video?boolean | MediaTrackConstraints-Whether to enable video sharing

Returns

UseDisplayMediaReturn

Parameters

NameTypeDefaultNote
options.audio?boolean | MediaTrackConstraints-Whether to enable audio sharing
options.immediately?booleanfalseWhether to start immediately
options.video?boolean | MediaTrackConstraints-Whether to enable video sharing

Returns

UseDisplayMediaReturn & { ref: StateRef<HTMLVideoElement> }

Type declaration ​

typescript
import type { HookTarget } from '@/utils/helpers';

import type { StateRef } from '../useRefState/useRefState';

export interface UseDisplayMediaReturn {
  /** Whether screen sharing is currently active */
  sharing: boolean;
  /** The media stream object */
  stream: MediaStream | null;
  /** Whether the display media API is supported */
  supported: boolean;
  /** Start screen sharing */
  start: () => Promise<void>;
  /** Stop screen sharing */
  stop: () => void;
}

export interface UseDisplayMediaOptions {
  /** Whether to enable audio sharing */
  audio?: boolean | MediaTrackConstraints;
  /** Whether to start immediately */
  immediately?: boolean;
  /** Whether to enable video sharing */
  video?: boolean | MediaTrackConstraints;
}

export interface UseDisplayMedia {
  (target: HookTarget, options?: UseDisplayMediaOptions): UseDisplayMediaReturn;

  <Target extends HTMLVideoElement>(
    options?: UseDisplayMediaOptions,
    target?: never
  ): { ref: StateRef<Target> } & UseDisplayMediaReturn;
}

Source ​

Source • Demo

Contributors ​

D
debabin
debabin

Released under the MIT License.