Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/thuoe/mp4-video-player

A customisable MP4 video player web component made using Polymer.js.
https://github.com/thuoe/mp4-video-player

google javascript mp4 player polymer polymer-3 video video-player webcomponent webcomponents

Last synced: 1 day ago
JSON representation

A customisable MP4 video player web component made using Polymer.js.

Awesome Lists containing this project

README

        

<mp4-video-player>

A simple and customizable MP4 video player web component created using Polymer 3.



npm (scoped with tag)


Build Status on mp4-video-player


npm

![Player](player-screenshot.png)

## Installation

```
$ npm install --save @thuoe/mp4-video-player
```

## Import within a Polymer 3 element

```js
import { PolymerElement, html } from '@polymer/polymer';
import '@thuoe/mp4-video-player';

class SampleElement extends PolymerElement {
static get template() {
return html`

`;
}
}
customElements.define('sample-element', SampleElement);
```

## Running Demo

```
$ npm start
```
This involves using the Polymer CLI command `polymer serve`.

First, make sure you have the [Polymer CLI](https://www.npmjs.com/package/polymer-cli) and npm (packaged with [Node.js](https://nodejs.org)) installed. Run `npm install` to install the element's dependencies. This development server will transpile ES6 code to ES5 using [Babel](https://babeljs.io/) during runtime.

The live demo page will be available to view via `http://127.0.0.1:8081/components/@thuoe/mp4-video-player/`

## Running Tests

```
$ npm test
```

## Running ESLint

```
$ npm run lint
```

## Video Player Properties

The following properties below are accessible and writable to use:

| Property | Description | Type | Default Value |
|------------------------|-------------------------------------------------------------------------------------------------------|---------|---------------|
| `title` | Title positioned on top of the video player | String | `undefined` |
| `src` | File path to .mp4 video | String | `undefined` |
| `poster` | File path to poster image. It can be a relative or absolute URL | String | `undefined` |
| `timelinePreview` | Determines if the timeline preview above the track appears when hovering | Boolean | `false` |
| `autoPlay` | Whether the video should start playing as soon as it is loaded | Boolean | `false` |
| `loop` | Whether the video should start over again, every time it is finished | Boolean | `false` |
| `volume` | The volume scaled from 0-1 | Number | `0.5` |
| `time` | The current time in seconds of the video playback | Number | `0` |
| `skipBy` | Skip ahead or behind (in seconds) the current time based on the right or left arrow keys respectively | Number | `5` |

## Video Player Read-Only Properties

The following properties below are accessible but cannot be altered dynamically:

| Read-only property | Description | Type | Default Value |
|--------------------|----------------------------------------------------------|---------|---------------|
| `duration` | The total duration of the video file after it has loaded | Number | `0` |
| `playing` | If the video is playing | Boolean | `false` |
| `muted` | If the video is muted | Boolean | `false` |
| `ended` | If the video has ended | Boolean | `false` |
| `fullscreen` | If the video is in fullscreen mode | Boolean | `false` |

## Custom CSS Properties

The following custom CSS variables are also available for custom styling the video player:

Custom property | Description | Default Value
------------------------------------------|-------------------------------------------------------------|----------------------
`--video-title-color` | Color of the video title | `rgba(255,255,255,.9)`
`--video-large-play-button-color` | Large play button color | `#d32f2f`
`--video-large-play-button-hover-color` | Large play button hover color | `#9a0007`
`--video-track-fill-color` | Track fill color | `#d32f2f`
`--video-thumb-color` | Thumb color used for dragging | `#fff`
`--video-control-icons-background-hover-color` | Control icons background hover color | `#d32f2f`
`---video-time-preview-background-color` | Timeline preview background color | `#d32f2f`
`--video-menu-background-color` | Menu background color | `rgba(255,255,255,.9)`
`--video-menu-item-color` | Menu item background color | `rgba(255,255,255,.9)`
`--video-menu-item-icon-color` | Menu icon color | `black`
`--video-menu-item-hover-color` | Menu item hover color | `#d32f2f`
`--video-menu-item-icon-hover-color` | Menu icon hover color | `white`
`--video-tooltip-background-color` | Tooltip background color | `rgba(255,255,255,.9)`
`--video-pulse-icon-color` | Pulse icon background color | `#d32f2f`
`--video-font-family` | Font-family used throughout video player | `Arial`, `Helvetica`, `sans-serif`

### HTML Example:

```html



mp4-video-player demo

import '@webcomponents/webcomponentsjs/webcomponents-loader.js';
// custom-style element invokes the custom properties polyfill
import '@polymer/polymer/lib/elements/custom-style.js';
import '@thuoe/mp4-video-player/mp4-video-player.js'

Video player using custom CSS properties





mp4-video-player {
/* Set the values for the custom CSS properties */
--video-thumb-color: red;
--video-tooltip-background-color: orange;
--video-menu-item-hover-color: magenta;
}


```

Or you can dynamically change the CSS properties at runtime..

```js
window.addEventListener('WebComponentsReady', () => {
// when the video player element has finished initializing..
const player = document.querySelector('mp4-video-player');
player.updateStyles({
'--video-min-width': '750px',
'--video-min-height': '300px',
'--video-title-color': 'red'
...
});
});
```
## Keyboard Shortcuts

This video player has intergrated the following shortcuts to further enhance
playback experience:

| Keyboard Shortcut | Intended Action |
|-------------------|-------------------|
| `space` or `p` | Toggle play |
| `m` | Toggle mute |
| `f` | Toggle fullscreen |
| `→` | Skip ahead |
| `←` | Skip behind |
| `↑` | Volume up |
| `↓` | Volume down |

## Custom Events

The player has a suite of events created using the CustomEvent API at your disposal to listen out for:

| Event | Description | `event.detail` properties |
|-------------------|-----------------------------------------------------|---------------------------|
| `play` | When the video begins to play | `currentTime` |
| `pause` | When the video has been paused | `currentTime` |
| `ended` | When the video has ended | `currentTime` |
| `exitFullscreen` | When exiting fullscreen mode | `currentTime` |
| `enterFullscreen` | When entering fullscreen mode | `currentTime` |
| `timeUpdated` | When the current time has updated to a new position | `currentTime` |
| `volumeChange` | When the volume has been changed | `volume` |

Code Example:

```js
const videoPlayer = document.querySelector('mp4-video-player');
videoPlayer.addEventListener('timeUpdated', (event) => {
console.log('Time Updated!', event.detail.currentTime);
});
```