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

@project-sunbird/sunbird-video-player-web-component

v1.2.5

Published

The web component package for the sunbird video player

Downloads

47

Readme

Note:

This version of the angular library is compatilbe with angular version 15 and may not work with older versions of the angular 15.

The Video player library for Sunbird platform!

The Video player library is powered by Angular. This player is primarily designed to be used on Sunbird consumption platforms (mobile app, web portal, offline desktop app) to drive reusability and maintainability, hence reducing the redundant development effort significantly, and it can be integrated with any platform irrespective of the platforms and the frontend frameworks. It is exported not only as an angular library but also as a web component.

Getting Started with different integrations steps

The video player can be integrated as a web component and also as an angular library in angular application projects and it can also be integrated into any mobile framework as a web component.

Use as web components

Any web based application can use this library as a web component. It accepts player config as input and triggers player and telemetry events back to the application.

Import this library in any web application and use the custom component.

Follow below-mentioned steps to use it in plain javascript project:


<script  type="text/javascript"  src="sunbird-video-player.js"></script>
  • Add JQuery library to the index.html either from cdn or from local

  • Create a asset folder and copy all the files from here, library requires these assets internally to work well.

  • Get sample playerConfig from here: playerConfig

  • Pass the QuestionListAPI baseUrl if your content is interactive otherwise you can skip this step for eg.


window.questionListUrl = 'https://staging.sunbirded.org/api/question/v1/list';

window.questionSetBaseUrl = 'https://staging.sunbirded.org/api/questionset';
  • Create a custom html element: sunbird-video-player

const  videoElement = document.createElement('sunbird-video-player');
  • Pass data using player-config

videoElement.setAttribute('player-config', JSON.stringify(playerConfig));

Note: Attribute should be in string type

  • Listen for the output events: playerEvent and telemetryEvent


videoElement.addEventListener('playerEvent', (event) => {

console.log("On playerEvent", event);

});

videoElement.addEventListener('telemetryEvent', (event) => {

console.log("On telemetryEvent", event);

});
  • Append this element to existing element

const  myPlayer = document.getElementById("my-player");

myPlayer.appendChild(qumlPlayerElement);

Use as Web component in the Angular app

  • Run command

npm i @project-sunbird/sunbird-video-player-web-component

npm i jquery
  • Add these entries in angular json file inside assets, scripts and styles like below


"assets": [

"src/favicon.ico",

"src/assets",

{

"glob": "**/*.*",

"input": "./node_modules/@project-sunbird/sunbird-video-player-web-component/assets",

"output": "/assets/"

}

],

"styles": [

"src/styles.scss",

"node_modules/@project-sunbird/sunbird-video-player-web-component/styles.css"

],

"scripts": [

"node_modules/reflect-metadata/Reflect.js",
"node_modules/jquery/dist/jquery.min.js",
"node_modules/@project-sunbird/sunbird-video-player-web-component/sunbird-video-player.js"

]

  
  • Import CUSTOM_ELEMENTS_SCHEMA in app module and add it to the NgModule as part of schemas like below


...

import { CUSTOM_ELEMENTS_SCHEMA } from  '@angular/core';

...

  

@NgModule({

...

schemas: [CUSTOM_ELEMENTS_SCHEMA],

...

})

  
  • Integrating sunbird-video-player web component in angular component

Create a viewChild in html template of the angular component like


  

<div #video></div>

  

Refer the viewChild in ts file of the component and create the video player using document.createElement, then attach the player config and listen to the player and telemetry events like below and since we are rendering using viewChild these steps should be under ngAfterViewInit hook of the angular component.


  

....

  

@ViewChild('video') video: ElementRef;

  

....

ngAfterViewInit() {

const playerConfig  = <Config  need  be  added>;

const videoPlayerElement  =  document.createElement('sunbird-video-player');

videoPlayerElement.setAttribute('player-config', JSON.stringify(playerConfig));

  

videoPlayerElement.addEventListener('playerEvent', (event) => {

console.log("On playerEvent", event);

});

  

videoPlayerElement.addEventListener('telemetryEvent', (event) => {

console.log("On telemetryEvent", event);

});

this.video.nativeElement.append(videoPlayerElement);

}

....

  

Note: : Click to see the mock - playerConfig and send input config as string

Use as Angular library in angular app

Step 1: Installation

Just run the following:


ng add @project-sunbird/sunbird-video-player-v9

It will install sunbird-video-player for the default application specified in your angular.json. If you have multiple projects and you want to target a specific application, you could specify the --project option


ng add @project-sunbird/sunbird-video-player-v9 --project myProject

Manual installation

If you prefer not to use schematics or want to add sunbird-video-player-v9 to an older project, you'll need to do the following:

1. Install the packages:


npm install  @project-sunbird/sunbird-video-player-v9  --save

npm install  @project-sunbird/sunbird-quml-player-v9  --save

npm install  @project-sunbird/sb-styles  --save

npm install  @project-sunbird/client-services  --save

npm install  lodash-es  --save

npm install  ngx-bootstrap  --save

npm install  jquery  --save

npm install  [email protected]  --save

npm install  [email protected]  --save

npm install  [email protected]  --save

npm install reflect-metadata

2: Include the styles, scripts and assets in angular.json

Add following under architect.build.assets

{

...

"build": {

"builder": "@angular-devkit/build-angular:browser",

"options": {

...

...

"assets": [

...

...

{

"glob": "**/.",

"input": "./node_modules/@project-sunbird/sunbird-video-player-v9/lib/assets/",

"output": "/assets/"

},

{

"glob": "**/*",

"input": "node_modules/@project-sunbird/sunbird-quml-player-v9/lib/assets/",

"output": "/assets/"

}

],

"styles": [

...

"./node_modules/@project-sunbird/sb-styles/assets/_styles.scss",

"./node_modules/video.js/dist/video-js.min.css",

"./node_modules/@project-sunbird/sunbird-video-player-v9/lib/assets/videojs.markers.min.css",

"./node_modules/videojs-http-source-selector/dist/videojs-http-source-selector.css"

],

"scripts": [

...

"node_modules/jquery/dist/jquery.min.js", "node_modules/reflect-metadata/Reflect.js", "node_modules/video.js/dist/video.js",

"node_modules/@project-sunbird/sunbird-video-player-v9/lib/assets/videojs-markers.js",

"node_modules/videojs-contrib-quality-levels/dist/videojs-contrib-quality-levels.min.js",

"node_modules/videojs-http-source-selector/dist/videojs-http-source-selector.min.js",

"node_modules/@project-sunbird/sunbird-video-player-v9/lib/assets/videojs-transcript-click.min.js"

]

...

...

},

Step 2: Import the modules and components

Import the NgModule where you want to use. Also create a question-cursor-implementation.service


import { SunbirdVideoPlayerModule } from '@project-sunbird/sunbird-video-player-v9';

import { QuestionCursor } from '@project-sunbird/sunbird-quml-player-v9';

import { QuestionCursorImplementationService } from './question-cursor-implementation.service';

  

@NgModule({

...

imports: [SunbirdVideoPlayerModule],

providers: [{ provide: QuestionCursor, useClass: QuestionCursorImplementationService }],

...

})

  

export class TestAppModule { }

  

Step 3: Send input to render VIDEO player

Use the mock config in your component to send input to VIDEO player

Click to see the mock - playerConfig

Player config


var  playerConfig = {

"context": {

"mode":  "play", // To identify preview used by the user to play/edit/preview

"authToken":  "", // Auth key to make api calls

"sid":  "7283cf2e-d215-9944-b0c5-269489c6fa56", // User sessionid on portal or mobile

"did":  "3c0a3724311fe944dec5df559cc4e006", // Unique id to identify the device or browser

"uid":  "anonymous", // Current logged in user id

"channel":  "505c7c48ac6dc1edc9b08f21db5a571d", // Unique id of the channel(Channel ID)

"pdata": {

"id":  "sunbird.portal", // Producer ID. For ex: For sunbird it would be "portal" or "genie"

"ver":  "3.2.12", // Version of the App

"pid":  "sunbird-portal.contentplayer"  // Optional. In case the component is distributed, then which instance of that component

},

"contextRollup": { // Defines the content roll up data

"l1":  "505c7c48ac6dc1edc9b08f21db5a571d"

},

"tags": [ // Defines the tags data

""

],

"cdata": [], // Defines correlation data

"timeDiff":  0, // Defines the time difference

"objectRollup": {}, // Defines the object roll up data

"host":  "", // Defines the from which domain content should be load

"endpoint":  "", // Defines the end point

"userData": { // Defines the user data firstname & lastname

"firstName":  "",

"lastName":  ""

}

},

"config": {

"traceId":  "afhjgh", // Defines trace id

"sideMenu": {

"showShare":  true, // show/hide share button in side menu. default value is true

"showDownload":  true, // show/hide download button in side menu. default value is true

"showReplay":  true, // show/hide replay button in side menu. default value is true

"showExit":  true, // show/hide exit button in side menu. default value is true

},

// tslint:disable-next-line:max-line-length

"transcripts": [] // for default selection we need this , ex: ['kn', 'en'] the last element in the array will be used for default selection and no need of default selection than no need send this in config or send empty array [] or ['off']

},

"metadata": { // Content metadata json object (from API response take -> response.result.content)

"transcripts": [] // Defines the details of the transcripts data array and each object in array conatins details of language,languageCode, identifier, artifactUrl of each transcript

},

}

Telemetry property description

|Property Name| Description| Default Value

|--|----------------------|--|

| context | It is an object it contains the uid,did,sid,mode etc., these will be logged inside the telemetry | {} |

| mode | It is string to identify preview used by the user to play/edit/preview | play|

| authToken | It is string and Auth key to make api calls | ''|

| sid | It is string and User sessionid on portal or mobile | ''|

| did | It is string and Unique id to identify the device or browser| ''|

| uid | It is string and Current logged in user id| ''|

| channel | It is string which defines channel identifier to know which channel is currently using.| in.sunbird |

| pdata | It is an object which defines the producer information it should have identifier and version and canvas will log in the telemetry| {'id':'in.sunbird', 'ver':'1.0'}|

| contextRollup | It is an object which defines content roll up data | {}|

| tags | It is an array which defines the tag data | []|

| objectRollup | It is an object which defines object rollup data | {}|

| host | It is string which defines the from which domain content should be load|window.location.origin |

| userData | It is an object which defines user data | {}|

| cdata | It is an array which defines the correlation data | []|

Config property description

|Property Name| Description| Default Value

|--|----------------------|--|

| config | It is an object it contains the sideMenu, these will be used to configure the canvas | { traceId: "12345", sideMenu: {"showShare": true, "showDownload": true, "showReplay": true, "showExit": true}} |

| config.traceId | It is string which defines the trace id | ''|

| config.sideMenu.showShare | It is boolean to show/hide share button in side menu| true|

| config.sideMenu.showDownload | It is boolean to show/hide download button in side menu| true|

| config.sideMenu.showReplay | It is boolean to show/hide replay button in side menu| true|

| config.sideMenu.showExit | It is boolean to show/hide exit button in side menu| true|

| config.transcripts | It is Array which defines the transcripts default selection details| []|

| metadata | It is an object which defines content metadata json object (from API response take -> response.result.content) | {}|

| metadata.transcripts | It is Array which is having the details of the transcripts data | []|

Available components

|Feature| Notes| Selector|Code|Input|Output

|--|--|--|------------------------------------------------------------------------------------------|---|--|

| Video Player | Can be used to render videos | sunbird-video-player| <sunbird-video-player [playerConfig]="playerConfig"><sunbird-video-player>|playerConfig,action|playerEvent, telemetryEvent|

Use as Web component in Mobile app

For existing apps, follow these steps steps to begin using.

Use as Angular library in Mobile app

For existing apps, follow these steps to begin using.

Step 1: Install the packages

Click to see the steps - InstallPackages

Step 2: Include the sb-styles and assets in angular.json

Click to see the steps - IncludeStyles , but use

src/global.scss instead of src/styles.css in styles.

Step 3: Import the modules and components

Click to see the steps - Import

Step 4: Import in component

<sunbird-video-player [playerConfig]="playerConfig" (playerEvent)="playerEvents($event)"

(telemetryEvent)="playerTelemetryEvents($event)">

Note : An additional property named action can be added to the above statement to implement pause and play functionality for the video player.

Step 5: Send input to render VIDEO player

Click to see the input data - playerConfig

Sample code

Click to see the sample code - sampleCode