npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@custom-react-hooks/use-media-devices

v1.5.1

Published

`useMediaDevices` is a React hook that offers an easy way to access and monitor media devices like cameras, microphones, and speakers. It not only lists all available media input and output devices but also manages user permissions to retrieve detailed de

Downloads

753

Readme

useMediaDevices Hook

useMediaDevices is a React hook that offers an easy way to access and monitor media devices like cameras, microphones, and speakers. It not only lists all available media input and output devices but also manages user permissions to retrieve detailed device information.

Features

  • Device Enumeration: Enumerates all available media devices with details like labels, kinds, and IDs.
  • Optional Permission Handling: Optionally prompts the user for access to media devices to retrieve full device information.
  • Loading State: Provides a loading state indicating the process of retrieving media devices.
  • Error Handling: Offers comprehensive error handling if media devices cannot be accessed or are not available.
  • Server-Side Rendering (SSR) Compatibility: Designed to be safely executed in a server-side rendering environment, gracefully handling the absence of browser-specific APIs.

Installation

Installing This Hook Individually

npm install @custom-react-hooks/use-media-devices

or

yarn add @custom-react-hooks/use-media-devices

Installing the Complete Hooks Package

npm install @custom-react-hooks/all

or

yarn add @custom-react-hooks/all

Importing the Hook

The useMediaDevices hook must be imported using a named import as shown below:

Named Import:

import { useMediaDevices } from '@custom-react-hooks/use-media-devices';

This approach ensures that the hook integrates seamlessly into your project, maintaining consistency and predictability in how you use our package.

Usage

import React from 'react';
import { useMediaDevices } from '@custom-react-hooks/all';

const MediaDevicesComponent = () => {
  const { devices, isLoading, error } = useMediaDevices(false);

  if (isLoading) {
    return <div>Loading devices...</div>;
  }

  if (error) {
    return <div>Error: {error}</div>;
  }

  return (
    <div className="media-devices">
      <h2>Available Media Devices</h2>
      {devices.length === 0 ? (
        <div>No devices found.</div>
      ) : (
        <ul>
          {devices.map((device) => (
            <li key={device.id}>
              <strong>{device.kind}:</strong> {device.label}
            </li>
          ))}
        </ul>
      )}
    </div>
  );
};

export default MediaDevicesComponent;

In this example, useMediaDevices(true) is used to request user permission and list all available media devices.

API Reference

Parameters

  • requestPermission (optional, default = false): A boolean parameter that, when set to true, prompts the user for permission to access media devices such as the camera and microphone. If false, the hook will only list the available devices without requesting access.

Returns object

  • devices: An array of MediaDevice objects, each representing an available media device. Each MediaDevice object contains the following properties:
    • id: A string representing the unique identifier of the device.
    • kind: A string indicating the type of the device (e.g., 'videoinput', 'audioinput', 'audiooutput').
    • label: A string representing the label of the device, or 'Unknown Device' if the label is unavailable.
  • isLoading: A boolean indicating whether the hook is currently in the process of loading the list of media devices.
  • error: A string representing an error message if an error occurred while fetching the list of devices, or null if no error occurred.

Use Cases

  • Device Selection: Let users select from available input/output devices for media capture.
  • Feature Accessibility: Check for the availability of media devices for features like video calls.
  • Dynamic Device Updates: Update the UI when new devices are connected or disconnected.
  • Permission Management: Manage user permissions for accessing media devices.

Contributing

We welcome contributions to enhance useMediaDevices. For bug reports or feature suggestions, please open issues or submit pull requests to our repository.