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

capacitor-youtube-player

v1.1.0

Published

Capacitor Youtube Player

Downloads

6,220

Readme

Built With Capacitor

CapacitorYoutubePlayer

Ask me anything Version Downloads License

If this project has been useful to you and you want to help me to keep contributing to the open source with projects, examples, plugins,... collaborate and buy me a coffee.

Capacitor Youtube Player is a custom Native Capacitor plugin to show Youtube Player on Web, IOS and Android platforms.

Technologies

Capacitor

Capacitor is a cross-platform API and code execution layer that makes it easy to call Native SDKs from web code and to write custom Native plugins that your app might need. Additionally, Capacitor provides first-class Progressive Web App support so you can write one app and deploy it to the app stores, and the mobile web.

Capacitor is being designed by the Ionic Framework team as an eventual alternative to Cordova, though backwards compatibility with Cordova plugins is a priority and is actively being worked on. Capacitor can be used without Ionic Framework, but soon it'll become a core part of the Ionic developer experience.

Capacitor also comes with a Plugin API for building native plugins. On iOS, first-class Swift support is available, and much of the iOS Capacitor runtime is written in Swift. Plugins may also be written in Objective-C. On Android, support for writing plugins with Java and Kotlin is supported.

Plugin preview

Ionic App

App

Plugin log mode

When initializing a youtube player you can enable debug mode to display the logs in the console.

    async initializeYoutubePlayerPluginWeb() {
      const options = {playerId: 'youtube-player', playerSize: {width: 640, height: 360}, videoId: 'tDW2C6rcH6M', debug: true};
      const result = await YoutubePlayerWeb.initialize(options);
  }

Methods available

WEB

IMPORTANT NOTE


Autoplay

Currently most browsers do not support autoplay unless the video is loaded without sound.

This is the behaviour of the web plugin if you pass a value of 1 in the autoplay parameter of playerVars. The video will start playing but without sound.

  ...
  playerVars: {
      autoplay: 1,
      rel: 0,
      color: 'white',
      showinfo: 1,
    },
  ...

You can read more about the autoplay policy in different browsers by clicking on the following links:

Google Chrome

Firefox

Fullscreen

To display a video in full screen, user interaction is required... either by clicking on the play button, another button,...

You can read more about the fullscreen policy in different browsers by clicking on the following links:

Google Chrome


Functionality | Methods | Description | Expects | Returns ----------------|----------------|-------------|--------|-------- Load player API & Create Player & Destroy Player | initialize(options: {playerId: string, playerSize: IPlayerSize, playerVars?: IPlayerVars, videoId: string, debug?: boolean}) | Promise - Load player API & create player. | JSON Object | data Load player API & Create Player & Destroy Player | destroy(playerId: string) | Promise - Destroy player | string | data Playback controls and player settings | stopVideo(playerId: string) | Promise - Stops and cancels loading of the current video. This function should be reserved for rare situations when you know that the user will not be watching additional video in the player. If your intent is to pause the video, you should just call the pauseVideo function. If you want to change the video that the player is playing, you can call one of the queueing functions without calling stopVideo first. | string | data Playback controls and player settings | playVideo(playerId: string) | Promise - Plays the currently cued/loaded video. The final player state after this function executes will be playing (1). | string | data Playback controls and player settings | pauseVideo(playerId: string) | Promise - Pauses the currently playing video. The final player state after this function executes will be paused (2) unless the player is in the ended (0) state when the function is called, in which case the player state will not change. | string | data Playback controls and player settings | seekTo(playerId: string, seconds: number, allowSeekAhead: boolean) | Promise - Seeks to a specified time in the video. If the player is paused when the function is called, it will remain paused. If the function is called from another state (playing, video cued, etc.), the player will play the video. | string, number, boolean | data Playback controls and player settings | loadVideoById(playerId: string, options: {videoId: string, startSeconds?: number, endSeconds?: number, suggestedQuality?: string}) | Promise - Loads and plays the specified video. | string, JSON Object | data Playback controls and player settings | cueVideoById(playerId: string, options: {videoId: string, startSeconds?: number, endSeconds?: number, suggestedQuality?: string}) | Promise - Loads the specified video's thumbnail and prepares the player to play the video. The player does not request the FLV until playVideo() or seekTo() is called. | string, JSON Object | data Changing the player volume | mute(playerId: string) | Promise - Mutes the player. | string | data Changing the player volume | unMute(playerId: string) | Promise - Unmutes the player. | string | data Changing the player volume | isMuted(playerId: string) | Promise - Returns true if the player is muted, false if not. | string | data Changing the player volume | setVolume(playerId: string, volume: Number) | Promise - Sets the volume. Accepts an integer between 0 and 100. | string, number | data Changing the player volume | getVolume(playerId: string) | Promise - Returns the player's current volume, an integer between 0 and 100. Note that getVolume() will return the volume even if the player is muted. | string | data Setting the player size | setSize(playerId: string, width:Number, height:Number) | Promise - Sets the size in pixels of the that contains the player. | string, number, number | data Playback status | getVideoLoadedFraction(playerId: string) | Promise - Returns a number between 0 and 1 that specifies the percentage of the video that the player shows as buffered. This method returns a more reliable number than the now-deprecated getVideoBytesLoaded and getVideoBytesTotal methods. | string | data Playback status | getPlayerState(playerId: string) | Promise - Returns the state of the player. Possible values are: -1 unstarted / 0 ended / 1 playing / 2 paused / 3 buffering / 5 video cued | string | data Playback status | getAllPlayersEventsState() | Promise - Returns the state of events of all players. | | Map<string, IPlayerState> Playback status | getCurrentTime(playerId: string) | Promise - Returns the elapsed time in seconds since the video started playing. | string | data

ANDROID

Functionality | Methods | Description | Expects | Returns ----------------|----------------|-------------|--------|-------- Load player API & Create Player | initialize(options: {playerSize: IPlayerSize, videoId: string}): Promise<{playerReady: boolean}>; | Promise - Load player API & create player. | JSON Object | data

IOS

Functionality | Methods | Description | Expects | Returns ----------------|----------------|-------------|--------|-------- Load player API & Create Player | initialize(options: {playerSize: IPlayerSize, videoId: string}): Promise<{playerReady: boolean}>; | Promise - Load player API & create player. | JSON Object | data

Install Plugin

    npm install --save capacitor-youtube-player@latest

Using this plugin

IMPORTANT NOTES ANDROID

-> If you get this error in ANDROID STUDIO

Error

To use the CAPACITOR YOUTUBE PLAYER plugin you need to add the YOUTUBE API KEY in the file local.properties.

YOUTUBE_API_KEY="YOUR_YOUTUBE_API_KEY"

If you don't have a local.properties file, create one. By default, this file is in the .gitignore. If not add it so that your keys are not visible to anyone.

In the official Capacitor documentation you have the instructions to migrate to version 3.0.

-> If you get this error in ANDROID STUDIO and your device uses Android 11 (API 30)

Error

Add the following to manifest tag in AndroidManifest to fix it:

<queries>
   <intent>
     <action android:name="com.google.android.youtube.api.service.START" />
   </intent>
</queries>

IMPORTANT NOTE ANDROID (CAPACITOR 2.0)


public class MainActivity extends BridgeActivity {
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Initializes the Bridge
    this.init(savedInstanceState, new ArrayList<Class<? extends Plugin>>() {{
      // Additional plugins you've installed go here
      // Ex: add(TotallyAwesomePlugin.class);
      add(YoutubePlayer.class); <= ADD THIS LINE
    }});
  }
}

In the official Capacitor documentation appears how to register the plugin.

IMPORTANT NOTE iOS (CAPACITOR 2.0)

Currently there is a small error when you testing the plugin in iOS. The following line of code needs to be modified in xcode:

YouTubePlayer.swift:339:102: 'UIWebViewNavigationType' has been renamed to 'UIWebView.NavigationType'

Ionic / Angular project

  1. Install the plugin.
npm install --save capacitor-youtube-player@latest
  1. Import plugin in your page.
import { Component, OnInit, AfterViewInit } from '@angular/core';

import { YoutubePlayerWeb } from 'capacitor-youtube-player'; // Web version

import { Plugins, Capacitor } from '@capacitor/core'; // Native version

@Component({
  selector: 'app-home',
  templateUrl: 'home.page.html',
  styleUrls: ['home.page.scss'],
})
export class HomePage implements OnInit, AfterViewInit {

  currentYear = new Date().getFullYear();

  constructor() {
  }

  ngOnInit() {
  }

  ngAfterViewInit() {
    if (Capacitor.platform === 'web') {
      this.initializeYoutubePlayerPluginWeb();
    } else { // Native
      this.initializeYoutubePlayerPluginNative();
    }
  }

  async initializeYoutubePlayerPluginWeb() {
    const options = {playerId: 'youtube-player', playerSize: {width: 640, height: 360}, videoId: 'tDW2C6rcH6M'};
    const result = await YoutubePlayerWeb.initialize(options);
    console.log('playerReady', result);
  }

  async destroyYoutubePlayerPluginWeb() {
    const result = await YoutubePlayerWeb.destroy('youtube-player');
    console.log('destroyYoutubePlayer', result);
  }

  async initializeYoutubePlayerPluginNative() {

    const { YoutubePlayer } = Plugins;

    const options = {width: 640, height: 360, videoId: 'tDW2C6rcH6M'};
    const playerReady = await YoutubePlayer.initialize(options);
  }

}
  1. Build your app.

You must build your Ionic / Angular project at least once before adding any native platforms.

    ionic build // Ionic
    ng build // Angular
  1. Add Platforms.
    npx cap add ios
    npx cap add android
  1. Open IDE to build, run, and deploy.
    npx cap open ios
    npx cap open android

Examples

Ionic project (Angular)

WEB

Plugin

iOS

Plugin

Android

Plugin

Angular project

  • Plugin in Angular project: https://github.com/abritopach/angular-ionic-ngxs-movies

Vue project

React project