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

youtube-player-plus

v0.1.7

Published

Enhanced wrapper for the Youtube Iframe API

Downloads

45

Readme

Youtube Player Plus ✨

Youtube Player Plus is an easy-to-use and customizable library for embedding video playback from Youtube in your web application.

Inspired by this package: yt-player

MIT License NPM version Downloads image

Features

  • 🌐 Utilizes the YouTube IFrame Player API
  • ⚡️ Offers an incredibly fast initial loading time
    • Automatically loads the YouTube IFrame API <script> during first use
    • For an even quicker start, include <script src='https://www.youtube.com/iframe_api' defer></script> in your webpage
    • Ensures API <script> isn't loaded twice by detecting its presence
  • 🚀 API commands are smoothly queued up (wait until both IFrame API and Player instance are ready)
  • ⚠️  Distinguishes between serious errors and unplayable video issues
  • ⏲️ Incorporates the crucial 'timeupdate' event that YouTube API is missing
  • 💡 Clear and detailed code comments for easy comprehension
  • 💯 Strongly typed.
  • 📦 Does not rely on large dependencies or unnecessary code

Installation

Use the package manager npm to install youtube-player-plus.

 npm i youtube-player-plus

Usage

Quick Start

1.  Install and import YouTubePlayerPlus:

import YouTubePlayerPlus from 'youtube-player-plus';

2.  Create an instance with an element reference and an optional config object:

const element = 'your-element-selector'; // Or an HTMLElement reference
const options = {}; // Optional configuration object
const player = new YouTubePlayerPlus(element, options);

3.  Load a video and control playback:

player.load(videoId, autoplay, start);
player.play();
player.pause();
player.stop();

4.  Listen to events:

import type { YTAPI_PlaybackQuality, YTAPI_PlaybackRate } from 'youtube-player-plus/types'

player.on('playing', () => {});

player.on('timeupdate', (current_time: number) => {
    console.log('Current time:', current_time);
})

player.on('playbackQualityChange', (quality: YTAPI_PlaybackQuality) => {
    console.log('Player quality changed to', quality)
})

player.on('playbackRateChange', (rate: YTAPI_PlaybackRate) => {
    console.log('Player rate changed to', rate)
})

Constructor

YouTubePlayerPlus(element: HTMLElement | string, options?: YT_IFRAME_OPTIONS)

Parameters

element : HTMLElement or CSS selector - Target element or CSS selector where the YouTube player will be initialized.

options : Object - Optional configuration object for the YouTube player, default values specified below:

| Property | Type | DefaultValue | Description | | --- | --- | --- | --- | | width | number | 640 | The width of the player | | height | number | 360 | The height of the player | | autoplay | boolean | false | Determines if the video should autoplay when loaded | | captions | string | undefined | Sets the default language for captions | | controls | boolean | true | Indicates whether the video player controls are displayed | | keyboard | boolean | true | Enables/disables keyboard controls | | fullscreen | boolean | true | Determines if the fullscreen button is displayed in the player | | annotations | boolean | true | Displays video annotations by default | | modestBranding | boolean | false | Hides the YouTube logo in the control bar | | relatedVideos | boolean | true | Shows related videos from the same channel (0) or any channel (1) when playback ends | | timeUpdateFrequency | number | 0 | Determines the frequency (in ms) of 'timeupdate' events being emitted | | playsInline | boolean | true | Controls whether videos play inline or fullscreen on iOS | | start | number | 0 | Sets the start time of the video in seconds | | debug | boolean | false | Enables debug mode which logs additional messages to console | | host | string | 'https://www.youtube-nocookie.com' | Determines the hostname where videos are loaded from |

Methods

| Method | Description | | --- | --- | | load(videoId: string, autoplay?: boolean, start?: number) | Load the YouTube video. | | play() | Play the loaded video. | | pause() | Pause the loaded video. | | stop() | Stop the loaded video. | | seek(seconds: number) | Set the current playback time in seconds. | | setVolume(volume: number) | Sets the player volume. | | getVolume(): number | Gets the current player volume. | | mute() | Mutes the player. | | unMute() | Unmutes the player. | | isMuted(): boolean | Get the current mute state of the player. | | setSize(width: number, height: number) | Set the player's size, using the provided width and height values. | | getSize(): {width: number, height: number} | Get the current player size. | | setPlaybackRate(rate: number) | Sets the playback rate. | | getPlaybackRate(): number | Gets the current playback rate. | | getAvailablePlaybackRates(): number[] | Get a list of available playback rates. | | setPlaybackQuality(suggestedQuality: YT_PLAYBACK_QUALITIES) | Sets the suggested playback quality. | | getPlaybackQuality(): string | Gets the current playback quality. | | getAvailablePlaybackQualities(): string[] | Get a list of available playback qualities. | | getDuration(): number | Gets the total video duration in seconds. | | getProgress(): number | Gets the loaded video fraction, ranging from 0 to 1. | | getState(): string | Gets the current player state. | | getYouTubeInstance(): object | Gets the currently used YouTube Player API instance, if available. | | getPercentageWatched(): number | Gets the percentage of the video watched relative to the total duration, 0 to 1. | | getCurrentTime(): number | It returns the current time of the video in seconds. | | destroy() | Destroys the player instance and removes event listeners. |

Getters/Setters

| Property | Getter | Setter | Description | | --- | --- | --- | --- | | currentTime | ✓ | ✓ | Get or set the current playback time in seconds. | | volume | ✓ | ✓ | Get or set the player volume. | | muted | ✓ | ✓ | Get or set the mute state of the player. | | size | ✓ | ✓ | Get or set the player size with a given width and height; retrieves the current size. | | playbackRate | ✓ | ✓ | Get or set the playback rate. | | playbackQuality | ✓ | ✓ | Get or set the current/suggested playback quality. | | availablePlaybackQualities | ✓ |   | Get a list of available playback qualities. | | availablePlaybackRates | ✓ |   | Get a list of available playback rates. | | duration | ✓ |   | Gets the total video duration in seconds. | | progress | ✓ |   | Gets the loaded video fraction, ranging from 0 to 1. | | state | ✓ |   | Gets the current player state. | | youTubeInstance | ✓ |   | Gets the currently used YouTube Player API instance, if available. | | percentageWatched | ✓ |   | Gets the percentage of the video watched relative to the total duration, 0 to 1. |

Events

| Event | Data | | --- | --- | | error | error: Error | | unplayable | videoId: string | | timeupdate | currentTime: number | | unstarted |   | | ended |   | | playing |   | | cued |   | | playbackQualityChange | quality: YTAPI_PlaybackQuality | | playbackRateChange | rate: YTAPI_PlaybackRate | | stateChange |   | | ready |   | | buffering |   |

Listen to events

To listen to an event:

player.on('event-name', (eventData) => {
  // Your event handling logic here
});

To stop listening to an event:

player.removeListener('event-name', eventHandlerFunction);

Examples:

Contributing

Pull requests are welcome. For major changes, please open an issue first
to discuss what you would like to change.

Please make sure to update tests as appropriate.

License

MIT