ng-plyr
Version:
An HTML5 media player for developers, built using Angular, having interface similar to Youtube player.
92 lines • 10.4 kB
JavaScript
import { Injectable } from '@angular/core';
import { ErrorCodes } from '../models/error.model';
import { Playlist } from '../models/playlist.model';
import * as i0 from "@angular/core";
export class PlayerService {
constructor() { }
_checkForErrors(elements) {
let check = new Set(elements);
if (!this._plyr)
throw new Error(ErrorCodes['player/not-initialized']);
if (check?.has('video') && !this._plyr.video)
throw new Error(ErrorCodes['video/element-not-initialized']);
}
// Accessing `this` from player component
addComponentRef(plyrComponent) {
this._plyr = plyrComponent;
}
removeComponentRef() {
this._plyr = undefined;
}
// Public functions
// Actions
play() {
this._checkForErrors(['video']);
this._plyr.video?.nativeElement.play();
}
pause() {
this._checkForErrors(['video']);
this._plyr.video?.nativeElement.pause();
}
next() {
this._checkForErrors();
this._plyr.playNextMedia();
}
prev() {
this._checkForErrors();
this._plyr.playPrevMedia();
}
enableMediaLooping(loop = true) {
this._checkForErrors();
this._plyr.isLoopingEnabled = loop;
}
enablePlaylistLooping(loop = true) {
this._checkForErrors();
this._plyr.loopPlaylist = loop;
}
changeVolume(level) {
this._checkForErrors(['video']);
this._plyr.changeVolume(level);
}
seekTo(atSecond) {
this._checkForErrors(['video']);
this._plyr.seekTo(atSecond);
}
setPlaybackSpeed(rate) {
this._checkForErrors();
this._plyr.setPlaybackSpeed(rate);
}
// Getter functions
getCurrentlyPlaying() {
this._checkForErrors();
return this._plyr.media;
}
getNextMedia() {
this._checkForErrors();
return this._plyr.nextMedia;
}
getNumOfMediaInPlaylist() {
this._checkForErrors();
return this._plyr.playlist.itemCount;
}
// Modify playlist
addToPlaylist(mediaItems, atStart) {
this._checkForErrors();
let items = Playlist.mediaArrToPaylistItems(mediaItems);
this._plyr.playlist.appendPlaylist(items, atStart);
}
playNext(media) {
this._checkForErrors();
let items = Playlist.mediaArrToPaylistItems([...media]);
this._plyr.playlist.addNext(items);
}
}
PlayerService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: PlayerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
PlayerService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: PlayerService, providedIn: 'root' });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: PlayerService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], ctorParameters: function () { return []; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctcGx5ci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctcGx5ci9zcmMvbGliL3NlcnZpY2VzL25nLXBseXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVuRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7O0FBS3BELE1BQU0sT0FBTyxhQUFhO0lBR3hCLGdCQUFnQixDQUFDO0lBRVQsZUFBZSxDQUFDLFFBQW9CO1FBQzFDLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTlCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQztRQUN2RSxJQUFJLEtBQUssRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUs7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDLENBQUM7SUFDN0csQ0FBQztJQUVELHlDQUF5QztJQUN6QyxlQUFlLENBQUMsYUFBaUI7UUFDL0IsSUFBSSxDQUFDLEtBQUssR0FBRyxhQUFhLENBQUM7SUFDN0IsQ0FBQztJQUNELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQztJQUN6QixDQUFDO0lBRUQsbUJBQW1CO0lBQ3BCLFVBQVU7SUFDVixJQUFJO1FBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFD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dGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRXJyb3JDb2RlcyB9IGZyb20gJy4uL21vZGVscy9lcnJvci5tb2RlbCc7XHJcbmltcG9ydCB7IE1lZGlhIH0gZnJvbSAnLi4vbW9kZWxzL21lZGlhLm1vZGVsJztcclxuaW1wb3J0IHsgUGxheWxpc3QgfSBmcm9tICcuLi9tb2RlbHMvcGxheWxpc3QubW9kZWwnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUGxheWVyU2VydmljZSB7XHJcbiAgcHJpdmF0ZSBfcGx5cjphbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gIHByaXZhdGUgX2NoZWNrRm9yRXJyb3JzKGVsZW1lbnRzPzpBcnJheTxhbnk+KSB7XHJcbiAgICBsZXQgY2hlY2sgPSBuZXcgU2V0KGVsZW1lbnRzKTtcclxuICAgIFxyXG4gICAgaWYgKCF0aGlzLl9wbHlyKSB0aHJvdyBuZXcgRXJyb3IoRXJyb3JDb2Rlc1sncGxheWVyL25vdC1pbml0aWFsaXplZCddKTtcclxuICAgIGlmIChjaGVjaz8uaGFzKCd2aWRlbycpICYmICF0aGlzLl9wbHlyLnZpZGVvKSB0aHJvdyBuZXcgRXJyb3IoRXJyb3JDb2Rlc1sndmlkZW8vZWxlbWVudC1ub3QtaW5pdGlhbGl6ZWQnXSk7XHJcbiAgfVxyXG5cclxuICAvLyBBY2Nlc3NpbmcgYHRoaXNgIGZyb20gcGxheWVyIGNvbXBvbmVudFxyXG4gIGFkZENvbXBvbmVudFJlZihwbHlyQ29tcG9uZW50OmFueSkge1xyXG4gICAgdGhpcy5fcGx5ciA9IHBseXJDb21wb25lbnQ7XHJcbiAgfVxyXG4gIHJlbW92ZUNvbXBvbmVudFJlZigpIHtcclxuICAgIHRoaXMuX3BseXIgPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG4gIFxyXG4gIC8vIFB1YmxpYyBmdW5jdGlvbnNcclxuXHQvLyBBY3Rpb25zXHJcblx0cGxheSgpIHtcclxuICAgIHRoaXMuX2NoZWNrRm9yRXJyb3JzKFsndmlkZW8nXSk7XHJcbiAgICB0aGlzLl9wbHlyLnZpZGVvPy5uYXRpdmVFbGVtZW50LnBsYXkoKTtcclxuXHR9XHJcblx0cGF1c2UoKSB7XHJcbiAgICB0aGlzLl9jaGVja0ZvckVycm9ycyhbJ3ZpZGVvJ10pO1xyXG5cdFx0dGhpcy5fcGx5ci52aWRlbz8ubmF0aXZlRWxlbWVudC5wYXVzZSgpO1xyXG5cdH1cclxuXHJcblx0bmV4dCgpIHtcclxuICAgIHRoaXMuX2NoZWNrRm9yRXJyb3JzKCk7XHJcbiAgICB0aGlzLl9wbHlyLnBsYXlOZXh0TWVkaWEoKTtcclxuICB9XHJcblx0cHJldigpIHtcclxuICAgIHRoaXMuX2NoZWNrRm9yRXJyb3JzKCk7XHJcbiAgICB0aGlzLl9wbHlyLnBsYXlQcmV2TWVkaWEoKTtcclxuICB9XHJcblxyXG5cdGVuYWJsZU1lZGlhTG9vcGluZyhsb29wOmJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICB0aGlzLl9jaGVja0ZvckVycm9ycygpO1xyXG4gICAgdGhpcy5fcGx5ci5pc0xvb3BpbmdFbmFibGVkID0gbG9vcDtcclxuICB9XHJcblx0ZW5hYmxlUGxheWxpc3RMb29waW5nKGxvb3A6Ym9vbGVhbiA9IHRydWUpIHtcclxuICAgIHRoaXMuX2NoZWNrRm9yRXJyb3JzKCk7XHJcbiAgICB0aGlzLl9wbHlyLmxvb3BQbGF5bGlzdCA9IGxvb3A7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VWb2x1bWUobGV2ZWw6bnVtYmVyKSB7XHJcbiAgICB0aGlzLl9jaGVja0ZvckVycm9ycyhbJ3ZpZGVvJ10pO1xyXG4gICAgdGhpcy5fcGx5ci5jaGFuZ2VWb2x1bWUobGV2ZWwpO1xyXG4gIH1cclxuICBzZWVrVG8oYXRTZWNvbmQ6bnVtYmVyKSB7XHJcbiAgICB0aGlzLl9jaGVja0ZvckVycm9ycyhbJ3ZpZGVvJ10pO1xyXG4gICAgdGhpcy5fcGx5ci5zZWVrVG8oYXRTZWNvbmQpO1xyXG4gIH1cclxuXHJcbiAgc2V0UGxheWJhY2tTcGVlZChyYXRlOm51bWJlcikge1xyXG4gICAgdGhpcy5fY2hlY2tGb3JFcnJvcnMoKTtcclxuICAgIHRoaXMuX3BseXIuc2V0UGxheWJhY2tTcGVlZChyYXRlKTtcclxuICB9XHJcblxyXG5cdC8vIEdldHRlciBmdW5jdGlvbnNcclxuXHRnZXRDdXJyZW50bHlQbGF5aW5nKCkge1xyXG4gICAgdGhpcy5fY2hlY2tGb3JFcnJvcnMoKTtcclxuXHRcdHJldHVybiB0aGlzLl9wbHlyLm1lZGlhO1xyXG5cdH1cclxuXHRnZXROZXh0TWVkaWEoKSB7XHJcbiAgICB0aGlzLl9jaGVja0ZvckVycm9ycygpO1xyXG5cdFx0cmV0dXJuIHRoaXMuX3BseXIubmV4dE1lZGlhO1xyXG5cdH1cclxuXHRnZXROdW1PZk1lZGlhSW5QbGF5bGlzdCgpIHtcclxuICAgIHRoaXMuX2NoZWNrRm9yRXJyb3JzKCk7XHJcblx0XHRyZXR1cm4gdGhpcy5fcGx5ci5wbGF5bGlzdC5pdGVtQ291bnQ7XHJcblx0fVxyXG5cclxuXHQvLyBNb2RpZnkgcGxheWxpc3RcclxuICBhZGRUb1BsYXlsaXN0KG1lZGlhSXRlbXM6TWVkaWFbXSwgYXRTdGFydD86Ym9vbGVhbikge1xyXG4gICAgdGhpcy5fY2hlY2tGb3JFcnJvcnMoKTtcclxuICAgIGxldCBpdGVtcyA9IFBsYXlsaXN0Lm1lZGlhQXJyVG9QYXlsaXN0SXRlbXMobWVkaWFJdGVtcyk7XHJcbiAgICB0aGlzLl9wbHlyLnBsYXlsaXN0LmFwcGVuZFBsYXlsaXN0KGl0ZW1zLCBhdFN0YXJ0KTtcclxuICB9XHJcbiAgcGxheU5leHQobWVkaWE6TWVkaWFbXSkge1xyXG4gICAgdGhpcy5fY2hlY2tGb3JFcnJvcnMoKTtcclxuICAgIGxldCBpdGVtcyA9IFBsYXlsaXN0Lm1lZGlhQXJyVG9QYXlsaXN0SXRlbXMoWy4uLm1lZGlhXSk7XHJcbiAgICB0aGlzLl9wbHlyLnBsYXlsaXN0LmFkZE5leHQoaXRlbXMpO1xyXG4gIH1cclxuXHJcbn1cclxuIl19