@dicdikshaorg/video-player-v9
Version:
Contains Video player library components powered by angular. These components are designed to be used in sunbird consumption platforms *(mobile app, web portal, offline desktop app)* to drive reusability, maintainability hence reducing the redundant devel
782 lines • 86.5 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: lib/components/video-player/video-player.component.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { __assign, __awaiter, __generator } from "tslib";
import { HttpClient } from '@angular/common/http';
import { Component, ElementRef, EventEmitter, Input, Output, Renderer2, ViewChild, ViewEncapsulation, Optional, ChangeDetectorRef } from '@angular/core';
import { QuestionCursor } from '@project-sunbird/sunbird-quml-player-v9';
import * as _ from 'lodash-es';
import 'videojs-contrib-quality-levels';
import videojshttpsourceselector from 'videojs-http-source-selector';
import { ViewerService } from '../../services/viewer.service';
var VideoPlayerComponent = /** @class */ (function () {
function VideoPlayerComponent(viewerService, renderer2, questionCursor, http, changeDetector) {
this.viewerService = viewerService;
this.renderer2 = renderer2;
this.questionCursor = questionCursor;
this.http = http;
this.changeDetector = changeDetector;
this.questionSetData = new EventEmitter();
this.playerInstance = new EventEmitter();
this.transcripts = [];
this.showBackwardButton = false;
this.showForwardButton = false;
this.showPlayButton = true;
this.showPauseButton = false;
this.showControls = true;
this.currentPlayerState = 'none';
this.totalSeekedLength = 0;
this.previousTime = 0;
this.currentTime = 0;
this.seekStart = null;
this.time = 10;
this.totalSpentTime = 0;
this.isAutoplayPrevented = false;
this.setMetaDataConfig = false;
this.totalDuration = 0;
}
/**
* @return {?}
*/
VideoPlayerComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
this.transcripts = this.viewerService.handleTranscriptsData(_.get(this.config, 'transcripts') || []);
};
/**
* @return {?}
*/
VideoPlayerComponent.prototype.ngAfterViewInit = /**
* @return {?}
*/
function () {
var _this = this;
this.viewerService.getPlayerOptions().then((/**
* @param {?} options
* @return {?}
*/
function (options) { return __awaiter(_this, void 0, void 0, function () {
var _a, markers, identifiers;
var _this = this;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
_a = this;
return [4 /*yield*/, videojs(this.target.nativeElement, {
fluid: true,
responsive: true,
sources: options,
autoplay: true,
muted: _.get(this.config, 'muted'),
playbackRates: [0.5, 1, 1.5, 2],
controlBar: {
children: ['playToggle', 'volumePanel', 'durationDisplay',
'progressControl', 'remainingTimeDisplay', 'CaptionsButton',
'playbackRateMenuButton', 'fullscreenToggle']
},
plugins: {
httpSourceSelector: {
default: 'low'
}
},
html5: {
hls: {
overrideNative: true
},
nativeAudioTracks: false,
nativeVideoTracks: false,
}
})];
case 1:
_a.player = _b.sent();
this.player.videojshttpsourceselector = videojshttpsourceselector;
this.player.videojshttpsourceselector();
markers = this.viewerService.getMarkers();
if (markers && markers.length > 0) {
identifiers = markers.map((/**
* @param {?} item
* @return {?}
*/
function (item) {
return item.identifier;
}));
if (this.viewerService.questionCursor) {
this.viewerService.questionCursor.getAllQuestionSet(identifiers).subscribe((/**
* @param {?} response
* @return {?}
*/
function (response) {
if (!_.isEmpty(response)) {
_this.viewerService.maxScore = response.reduce((/**
* @param {?} a
* @param {?} b
* @return {?}
*/
function (a, b) { return a + b; }), 0);
}
}));
}
}
if (markers) {
this.player.markers({
markers: markers,
markerStyle: {
height: '7px',
bottom: '39%',
'background-color': 'orange'
},
onMarkerReached: (/**
* @param {?} marker
* @return {?}
*/
function (marker) {
if (marker) {
var time_1 = marker.time, text = marker.text, identifier_1 = marker.identifier, duration = marker.duration;
if (!(_this.player.currentTime() > (time_1 + duration))) {
setTimeout((/**
* @return {?}
*/
function () {
_this.pause();
_this.player.controls(false);
}), 1000);
_this.viewerService.getQuestionSet(identifier_1).subscribe((/**
* @param {?} response
* @return {?}
*/
function (response) {
_this.questionSetData.emit({ response: response, time: time_1, identifier: identifier_1 });
}), (/**
* @param {?} error
* @return {?}
*/
function (error) {
_this.play();
_this.player.controls(true);
console.log(error);
}));
}
}
})
});
this.playerInstance.emit(this.player);
this.viewerService.playerInstance = this.player;
this.viewerService.preFetchContent();
}
this.registerEvents();
return [2 /*return*/];
}
});
}); }));
setInterval((/**
* @return {?}
*/
function () {
if (!_this.isAutoplayPrevented && _this.currentPlayerState !== 'pause') {
_this.showControls = false;
}
}), 5000);
this.unlistenTargetMouseMove = this.renderer2.listen(this.target.nativeElement, 'mousemove', (/**
* @return {?}
*/
function () {
_this.showControls = true;
}));
this.unlistenTargetTouchStart = this.renderer2.listen(this.target.nativeElement, 'touchstart', (/**
* @return {?}
*/
function () {
_this.showControls = true;
}));
this.viewerService.sidebarMenuEvent.subscribe((/**
* @param {?} event
* @return {?}
*/
function (event) {
if (event === 'OPEN_MENU') {
_this.pause();
}
if (event === 'CLOSE_MENU') {
_this.play();
}
}));
};
/**
* @param {?} changes
* @return {?}
*/
VideoPlayerComponent.prototype.ngOnChanges = /**
* @param {?} changes
* @return {?}
*/
function (changes) {
if (changes.action && this.player) {
if (changes.action.currentValue !== changes.action.previousValue) {
switch (changes.action.currentValue.name) {
case 'play':
this.play();
break;
case 'pause':
this.pause();
break;
default: console.warn('Invalid Case!');
}
}
}
this.updateVideoTimestamp();
};
/**
* @return {?}
*/
VideoPlayerComponent.prototype.updateVideoTimestamp = /**
* @return {?}
*/
function () {
if (this.playVideoFromTimestamp) {
// Define the value you want to add
/** @type {?} */
var additionalValue = 1;
// Log the original playVideoFromTimestamp
console.log("Original playVideoFromTimestamp====", this.playVideoFromTimestamp);
/** @type {?} */
var videostartTime = this.playVideoFromTimestamp.videoStartTime;
// Add the additional value to the playVideoFromTimestamp
/** @type {?} */
var updatedPlayVideoFromTimestamp = videostartTime + additionalValue;
console.log("Updated playVideoFromTimestamp====", updatedPlayVideoFromTimestamp);
// Update the metadata and current time with the new value
this.viewerService.metaData.currentDuration = updatedPlayVideoFromTimestamp;
this.currentTime = updatedPlayVideoFromTimestamp;
this.player.currentTime(updatedPlayVideoFromTimestamp);
this.player.controls(true);
// Update the playVideoFromTimestamp input field with the new value
this.playVideoFromTimestamp = updatedPlayVideoFromTimestamp;
// Notify Angular of the change
this.changeDetector.detectChanges();
// Optionally, you can play the video
// this.play();
}
};
/**
* @param {?} e
* @return {?}
*/
VideoPlayerComponent.prototype.onLoadMetadata = /**
* @param {?} e
* @return {?}
*/
function (e) {
this.totalDuration = this.viewerService.metaData.totalDuration = this.player.duration();
this.viewerService.totalLength = this.totalDuration;
if (this.transcripts && this.transcripts.length && this.player.transcript) {
this.player.transcript({
showTitle: true,
showTrackSelector: true,
});
}
};
/**
* @return {?}
*/
VideoPlayerComponent.prototype.registerEvents = /**
* @return {?}
*/
function () {
var _this = this;
/** @type {?} */
var promise = this.player.play();
if (promise !== undefined) {
promise.catch((/**
* @param {?} error
* @return {?}
*/
function (error) {
_this.isAutoplayPrevented = true;
}));
}
/** @type {?} */
var events = ['loadstart', 'play', 'pause',
'error', 'playing', 'progress', 'seeked', 'seeking', 'volumechange',
'ratechange'];
this.player.on('fullscreenchange', (/**
* @param {?} data
* @return {?}
*/
function (data) {
// This code is to show the controldiv in fullscreen mode
if (_this.player.isFullscreen()) {
_this.target.nativeElement.parentNode.appendChild(_this.controlDiv.nativeElement);
}
_this.viewerService.raiseHeartBeatEvent('FULLSCREEN');
}));
this.player.on('pause', (/**
* @param {?} data
* @return {?}
*/
function (data) {
_this.pause();
}));
this.player.on('ratechange', (/**
* @param {?} data
* @return {?}
*/
function (data) {
_this.viewerService.metaData.playBackSpeeds.push(_this.player.playbackRate());
}));
this.player.on('volumechange', (/**
* @param {?} data
* @return {?}
*/
function (data) {
_this.viewerService.metaData.volume.push(_this.player.volume());
_this.viewerService.metaData.muted = _this.player.muted();
}));
this.player.on('play', (/**
* @param {?} data
* @return {?}
*/
function (data) {
_this.currentPlayerState = 'play';
_this.showPauseButton = true;
_this.showPlayButton = false;
_this.viewerService.raiseHeartBeatEvent('PLAY');
_this.isAutoplayPrevented = false;
}));
this.player.on('timeupdate', (/**
* @param {?} data
* @return {?}
*/
function (data) {
_this.viewerService.metaData.currentDuration = _this.player.currentTime();
_this.handleVideoControls(data);
_this.viewerService.playerEvent.emit(data);
_this.viewerService.currentlength = _this.viewerService.metaData.currentDuration;
_this.viewerService.visitedLength = _this.totalSpentTime;
/** @type {?} */
var remainingTime = Math.floor(_this.totalDuration - _this.player.currentTime());
if (remainingTime <= 0) {
_this.viewerService.metaData.currentDuration = 0;
_this.handleVideoControls({ type: 'ended' });
_this.viewerService.playerEvent.emit({ type: 'ended' });
}
}));
this.player.on('subtitleChanged', (/**
* @param {?} event
* @param {?} track
* @return {?}
*/
function (event, track) {
_this.handleEventsForTranscripts(track);
}));
this.player.on('durationchange', (/**
* @param {?} data
* @return {?}
*/
function (data) {
if (_this.totalDuration === 0) {
_this.totalDuration = _this.viewerService.metaData.totalDuration = _this.player.duration();
_this.viewerService.playerEvent.emit(__assign(__assign({}, data), { duration: _this.totalDuration }));
}
}));
events.forEach((/**
* @param {?} event
* @return {?}
*/
function (event) {
_this.player.on(event, (/**
* @param {?} data
* @return {?}
*/
function (data) {
_this.handleVideoControls(data);
_this.viewerService.playerEvent.emit(data);
}));
}));
this.trackTranscriptEvent();
};
/**
* @return {?}
*/
VideoPlayerComponent.prototype.trackTranscriptEvent = /**
* @return {?}
*/
function () {
/** @type {?} */
var timeout;
/** @type {?} */
var player = this.player;
this.player.textTracks().on('change', (/**
* @param {?} event
* @return {?}
*/
function action(event) {
clearTimeout(timeout);
/** @type {?} */
var transcriptObject = {};
this.tracks_.filter((/**
* @param {?} track
* @return {?}
*/
function (track) {
if ((track.kind === 'captions' || track.kind === 'subtitles') && track.mode === 'showing') {
transcriptObject = { artifactUrl: track.src, languageCode: track.language };
return true;
}
}));
timeout = setTimeout((/**
* @return {?}
*/
function () {
player.trigger('subtitleChanged', transcriptObject);
}), 10);
}));
};
/**
* @param {?} track
* @return {?}
*/
VideoPlayerComponent.prototype.handleEventsForTranscripts = /**
* @param {?} track
* @return {?}
*/
function (track) {
/** @type {?} */
var telemetryObject;
if (!_.isEmpty(track)) {
telemetryObject = {
type: 'TRANSCRIPT_LANGUAGE_SELECTED',
extraValues: {
transcript: {
language: _.get(_.filter(this.transcripts, { artifactUrl: track.artifactUrl, languageCode: track.languageCode })[0], 'language')
},
videoTimeStamp: this.player.currentTime()
}
};
if (_.last(this.viewerService.metaData.transcripts) !== track.languageCode) {
this.viewerService.metaData.transcripts.push(track.languageCode);
}
}
else {
telemetryObject = {
type: 'TRANSCRIPT_LANGUAGE_OFF',
extraValues: {
videoTimeStamp: this.player.currentTime()
}
};
this.viewerService.metaData.transcripts.push('off');
}
this.viewerService.raiseHeartBeatEvent(telemetryObject.type, telemetryObject.extraValues);
};
/**
* @return {?}
*/
VideoPlayerComponent.prototype.toggleForwardRewindButton = /**
* @return {?}
*/
function () {
this.showForwardButton = true;
this.showBackwardButton = true;
if ((this.player.currentTime() + this.time) > this.totalDuration) {
this.showForwardButton = false;
}
if ((this.player.currentTime() - this.time) < 0) {
this.showBackwardButton = false;
}
};
/**
* @return {?}
*/
VideoPlayerComponent.prototype.play = /**
* @return {?}
*/
function () {
if (this.player) {
this.player.play();
}
this.currentPlayerState = 'play';
this.showPauseButton = true;
this.showPlayButton = false;
this.toggleForwardRewindButton();
};
/**
* @return {?}
*/
VideoPlayerComponent.prototype.pause = /**
* @return {?}
*/
function () {
if (this.player) {
this.player.pause();
}
this.currentPlayerState = 'pause';
this.showPauseButton = false;
this.showPlayButton = true;
this.toggleForwardRewindButton();
this.viewerService.raiseHeartBeatEvent('PAUSE');
};
/**
* @return {?}
*/
VideoPlayerComponent.prototype.backward = /**
* @return {?}
*/
function () {
if (this.player) {
this.player.currentTime(this.player.currentTime() - this.time);
}
this.toggleForwardRewindButton();
this.viewerService.raiseHeartBeatEvent('BACKWARD');
};
/**
* @return {?}
*/
VideoPlayerComponent.prototype.forward = /**
* @return {?}
*/
function () {
if (this.player) {
this.player.currentTime(this.player.currentTime() + this.time);
}
this.toggleForwardRewindButton();
this.viewerService.raiseHeartBeatEvent('FORWARD');
};
/**
* @param {?} __0
* @return {?}
*/
VideoPlayerComponent.prototype.handleVideoControls = /**
* @param {?} __0
* @return {?}
*/
function (_a) {
var _this = this;
var type = _a.type;
if (type === 'playing') {
this.showPlayButton = false;
this.showPauseButton = true;
if (this.setMetaDataConfig) {
this.setMetaDataConfig = false;
this.setPreMetaDataConfig();
}
}
if (type === 'ended') {
this.totalSpentTime += new Date().getTime() - this.startTime;
this.viewerService.visitedLength = this.totalSpentTime;
if (this.player) {
this.viewerService.currentlength = this.player.currentTime();
}
this.viewerService.totalLength = this.totalDuration;
this.updatePlayerEventsMetadata({ type: type });
}
if (type === 'pause') {
this.totalSpentTime += new Date().getTime() - this.startTime;
this.updatePlayerEventsMetadata({ type: type });
}
if (type === 'play') {
this.startTime = new Date().getTime();
this.updatePlayerEventsMetadata({ type: type });
}
if (type === 'loadstart') {
this.startTime = new Date().getTime();
this.setMetaDataConfig = true;
}
// Calculating total seeked length
if (type === 'timeupdate') {
this.previousTime = this.currentTime;
if (this.player) {
this.currentTime = this.player.currentTime();
}
this.toggleForwardRewindButton();
}
if (type === 'seeking') {
if (this.seekStart === null) {
this.seekStart = this.previousTime;
}
}
if (type === 'seeked') {
this.updatePlayerEventsMetadata({ type: type });
if (this.currentTime > this.seekStart) {
this.totalSeekedLength = this.totalSeekedLength + (this.currentTime - this.seekStart);
}
else if (this.seekStart > this.currentTime) {
this.totalSeekedLength = this.totalSeekedLength + (this.seekStart - this.currentTime);
}
this.viewerService.totalSeekedLength = this.totalSeekedLength;
this.seekStart = null;
if (this.player.markers && this.player.markers.getMarkers) {
/** @type {?} */
var markers = this.player.markers.getMarkers();
markers.forEach((/**
* @param {?} marker
* @return {?}
*/
function (marker) {
if (!_this.viewerService.interceptionResponses[marker.time] && marker.time < _this.currentTime) {
_this.viewerService.interceptionResponses[marker.time] = {
score: 0,
isSkipped: false
};
document.querySelector("[data-marker-time=\"" + marker.time + "\"]")['style'].backgroundColor = 'red';
}
}));
}
}
};
/**
* @return {?}
*/
VideoPlayerComponent.prototype.setPreMetaDataConfig = /**
* @return {?}
*/
function () {
if (!_.isEmpty(_.get(this.config, 'volume'))) {
this.player.volume(_.last(_.get(this.config, 'volume')));
}
if (_.get(this.config, 'currentDuration')) {
this.player.currentTime(_.get(this.config, 'currentDuration'));
}
if (!_.isEmpty(_.get(this.config, 'playBackSpeeds'))) {
this.player.playbackRate(_.last(_.get(this.config, 'playBackSpeeds')));
}
};
/**
* @param {?} __0
* @return {?}
*/
VideoPlayerComponent.prototype.updatePlayerEventsMetadata = /**
* @param {?} __0
* @return {?}
*/
function (_a) {
var type = _a.type;
/** @type {?} */
var action = {};
action[type + ''] = this.player.currentTime();
this.viewerService.metaData.actions.push(action);
};
/**
* @return {?}
*/
VideoPlayerComponent.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
if (this.player) {
this.player.dispose();
}
this.unlistenTargetMouseMove();
this.unlistenTargetTouchStart();
};
VideoPlayerComponent.decorators = [
{ type: Component, args: [{
selector: 'video-player',
template: "<video #target class=\"video-js\" controls crossorigin=\"anonymous\" (loadeddata)=\"onLoadMetadata($event)\">\r\n <track *ngFor=\"let trans of transcripts\" default=\"{{trans.default}}\" kind=\"captions\" src=\"{{trans.artifactUrl}}\" srclang=\"{{trans.languageCode}}\" label=\"{{trans.language}}\" >\r\n</video>\r\n<div #controlDiv>\r\n <div [ngClass]=\"{'player-for-back-ward-controls': currentPlayerState === 'pause' || showControls }\">\r\n <div class=\"player-container\" *ngIf=\"currentPlayerState === 'pause' || showControls\">\r\n <div class=\"back-ward hide-in-desktop\" [style.visibility]=\"showBackwardButton ? 'visible !important' : 'hidden'\" (click)=\"backward()\">\r\n <svg width=\"39px\" height=\"49px\" viewBox=\"0 0 39 49\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\">\r\n <g id=\"video/default-copy-2\" transform=\"translate(-70.000000, -77.000000)\" fill=\"#FFFFFF\">\r\n <path\r\n d=\"M108.4,106.3 C108.4,116.86 99.76,125.5 89.2,125.5 C78.64,125.5 70,116.86 70,106.3 L74.8,106.3 C74.8,114.22 81.28,120.7 89.2,120.7 C97.12,120.7 103.6,114.22 103.6,106.3 C103.6,98.38 97.12,91.9 89.2,91.9 L89.2,101.5 L77.2,89.5 L89.2,77.5 L89.2,87.1 C99.76,87.1 108.4,95.74 108.4,106.3 L108.4,106.3 Z M86.4320312,113.5 L84.4,113.5 L84.4,105.667187 L81.9742187,106.419531 L81.9742187,104.767187 L86.2140625,103.248437 L86.4320312,103.248437 L86.4320312,113.5 Z M96.6484375,109.267188 C96.6484375,110.68282 96.3554717,111.765621 95.7695312,112.515625 C95.1835908,113.265629 94.3257869,113.640625 93.1960937,113.640625 C92.0804632,113.640625 91.2273467,113.27266 90.6367187,112.536719 C90.0460908,111.800778 89.7437501,110.746101 89.7296875,109.372656 L89.7296875,107.488281 C89.7296875,106.058587 90.0261689,104.973441 90.6191406,104.232812 C91.2121123,103.492184 92.0664007,103.121875 93.1820312,103.121875 C94.2976618,103.121875 95.1507783,103.488668 95.7414062,104.222266 C96.3320342,104.955863 96.6343749,106.009368 96.6484375,107.382812 L96.6484375,109.267188 Z M94.6164062,107.2 C94.6164062,106.351558 94.5003918,105.733986 94.2683594,105.347266 C94.036327,104.960545 93.6742212,104.767188 93.1820312,104.767188 C92.7039039,104.767188 92.351173,104.95117 92.1238281,105.319141 C91.8964832,105.687111 91.7757813,106.262496 91.7617187,107.045312 L91.7617187,109.534375 C91.7617187,110.368754 91.8753895,110.98867 92.1027344,111.394141 C92.3300793,111.799611 92.6945287,112.002344 93.1960937,112.002344 C93.6929712,112.002344 94.0515614,111.807814 94.271875,111.41875 C94.4921886,111.029686 94.6070312,110.434379 94.6164062,109.632812 L94.6164062,107.2 Z\"\r\n id=\"Shape-Copy\"></path>\r\n </g>\r\n </svg>\r\n </div>\r\n <div class=\"pause-play\">\r\n <span class=\"pause\" *ngIf=\"showPauseButton\" (click)=\"pause()\">\r\n <svg width=\"48px\" height=\"48px\" viewBox=\"0 0 48 48\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\">\r\n <g id=\"video/default-copy-2\" transform=\"translate(-156.000000, -77.000000)\" fill=\"#FFFFFF\">\r\n <path\r\n d=\"M180.4,77.5 C167.152,77.5 156.4,88.252 156.4,101.5 C156.4,114.748 167.152,125.5 180.4,125.5 C193.648,125.5 204.4,114.748 204.4,101.5 C204.4,88.252 193.648,77.5 180.4,77.5 L180.4,77.5 Z M178,111.1 L173.2,111.1 L173.2,91.9 L178,91.9 L178,111.1 L178,111.1 Z M187.6,111.1 L182.8,111.1 L182.8,91.9 L187.6,91.9 L187.6,111.1 L187.6,111.1 Z\"\r\n id=\"Shape\"></path>\r\n </g>\r\n </svg>\r\n </span>\r\n <span class=\"play\" *ngIf=\"showPlayButton\" (click)=\"play()\">\r\n <svg width=\"48px\" height=\"48px\" viewBox=\"0 0 48 48\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\">\r\n <g id=\"video/default-copy\" transform=\"translate(-296.000000, -156.000000)\" fill=\"#FFFFFF\">\r\n <path\r\n d=\"M320,156 C306.752,156 296,166.752 296,180 C296,193.248 306.752,204 320,204 C333.248,204 344,193.248 344,180 C344,166.752 333.248,156 320,156 L320,156 Z M315.2,190.8 L315.2,169.2 L329.6,180 L315.2,190.8 L315.2,190.8 Z\"\r\n id=\"Shape\"></path>\r\n </g>\r\n </svg>\r\n </span>\r\n </div>\r\n <div class=\"forward hide-in-desktop\" [style.visibility]=\"showForwardButton ? 'visible !important' : 'hidden'\" (click)=\"forward()\">\r\n <svg width=\"39px\" height=\"49px\" viewBox=\"0 0 39 49\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\">\r\n <g id=\"video/default-copy-2\" transform=\"translate(-251.000000, -77.000000)\" fill=\"#FFFFFF\">\r\n <path\r\n d=\"M251.4,106.3 C251.4,116.86 260.04,125.5 270.6,125.5 C281.16,125.5 289.8,116.86 289.8,106.3 L285,106.3 C285,114.22 278.52,120.7 270.6,120.7 C262.68,120.7 256.2,114.22 256.2,106.3 C256.2,98.38 262.68,91.9 270.6,91.9 L270.6,101.5 L282.6,89.5 L270.6,77.5 L270.6,87.1 C260.04,87.1 251.4,95.74 251.4,106.3 L251.4,106.3 Z M267.832031,113.5 L265.8,113.5 L265.8,105.667187 L263.374219,106.419531 L263.374219,104.767187 L267.614062,103.248437 L267.832031,103.248437 L267.832031,113.5 Z M278.048438,109.267188 C278.048438,110.68282 277.755472,111.765621 277.169531,112.515625 C276.583591,113.265629 275.725787,113.640625 274.596094,113.640625 C273.480463,113.640625 272.627347,113.27266 272.036719,112.536719 C271.446091,111.800778 271.14375,110.746101 271.129687,109.372656 L271.129687,107.488281 C271.129687,106.058587 271.426169,104.973441 272.019141,104.232812 C272.612112,103.492184 273.466401,103.121875 274.582031,103.121875 C275.697662,103.121875 276.550778,103.488668 277.141406,104.222266 C277.732034,104.955863 278.034375,106.009368 278.048438,107.382812 L278.048438,109.267188 Z M276.016406,107.2 C276.016406,106.351558 275.900392,105.733986 275.668359,105.347266 C275.436327,104.960545 275.074221,104.767188 274.582031,104.767188 C274.103904,104.767188 273.751173,104.95117 273.523828,105.319141 C273.296483,105.687111 273.175781,106.262496 273.161719,107.045312 L273.161719,109.534375 C273.161719,110.368754 273.275389,110.98867 273.502734,111.394141 C273.730079,111.799611 274.094529,112.002344 274.596094,112.002344 C275.092971,112.002344 275.451561,111.807814 275.671875,111.41875 C275.892189,111.029686 276.007031,110.434379 276.016406,109.632812 L276.016406,107.2 Z\"\r\n id=\"Shape\"></path>\r\n </g>\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n</div>",
encapsulation: ViewEncapsulation.None,
styles: [".video-js{width:100%;height:100%}.video-player{width:100%}.video-js .vjs-duration{display:block}.video-js .vjs-big-play-button{display:none}.video-js .vjs-control-bar{z-index:3;font-size:12px;background:rgba(0,0,0,.75)}@media (min-width:1600px){.video-js .vjs-control-bar{font-size:16px}}.video-js .vjs-slider{background:#7b7b7b}.video-js .vjs-load-progress{background:#797979}.video-js .vjs-load-progress div{background:#a09f9f}.video-js .vjs-progress-holder,.video-js .vjs-progress-holder .vjs-load-progress,.video-js .vjs-progress-holder .vjs-load-progress div,.video-js .vjs-progress-holder .vjs-play-progress{border-radius:.2em}.vjs-menu-button-popup .vjs-menu .vjs-menu-content{background-color:rgba(0,0,0,.72)}.js-focus-visible .vjs-menu li.vjs-selected:hover,.vjs-menu li.vjs-selected,.vjs-menu li.vjs-selected:focus,.vjs-menu li.vjs-selected:hover{background-color:rgba(216,216,216,.2);color:var(--white)}.video-js .vjs-play-progress:before{top:-.3em}.vjs-playback-rate .vjs-playback-rate-value{line-height:2.75}.vjs-menu li,.vjs-playback-rate .vjs-playback-rate-value{font-size:1.1em}@media screen and (min-width:768px){.video-js .vjs-tech{pointer-events:none}}@media (hover:hover){.hide-in-desktop{visibility:hidden!important}}@media (pointer:fine){.hide-in-desktop{visibility:hidden!important}}.player-for-back-ward-controls{display:flex;align-items:center;justify-content:center;position:absolute;width:100%;height:100%;top:0;left:0;right:0;bottom:0;z-index:2}.player-for-back-ward-controls .player-container{display:flex;align-items:center}.player-for-back-ward-controls .player-container .back-ward,.player-for-back-ward-controls .player-container .forward,.player-for-back-ward-controls .player-container .pause-play{width:2.5rem;height:2.5rem;padding:.5rem;transition:.3s ease-in-out;box-sizing:content-box;display:flex;align-items:center;justify-content:center;background:rgba(var(--rc-rgba-black),.5);border-radius:50%;transform:scale(1)}@media (min-width:768px){.player-for-back-ward-controls .player-container .back-ward:hover,.player-for-back-ward-controls .player-container .forward:hover,.player-for-back-ward-controls .player-container .pause-play:hover{background:rgba(var(--rc-rgba-black),1);border-radius:100%;transform:scale(1.25);cursor:pointer}.player-for-back-ward-controls .player-container .back-ward:hover svg g,.player-for-back-ward-controls .player-container .forward:hover svg g,.player-for-back-ward-controls .player-container .pause-play:hover svg g{fill:var(--primary-theme)}}.player-for-back-ward-controls .player-container .back-ward.touched,.player-for-back-ward-controls .player-container .forward.touched,.player-for-back-ward-controls .player-container .pause-play.touched{-webkit-animation:2s scaling;animation:2s scaling;transform:scale(1)}@-webkit-keyframes scaling{0%,100%{transform:scale(1)}50%{transform:scale(1.25)}}@keyframes scaling{0%,100%{transform:scale(1)}50%{transform:scale(1.25)}}.player-for-back-ward-controls .player-container .back-ward.touched svg g,.player-for-back-ward-controls .player-container .forward.touched svg g,.player-for-back-ward-controls .player-container .pause-play.touched svg g{-webkit-animation:2s scalingColor;animation:2s scalingColor;fill:var(--white)}@-webkit-keyframes scalingColor{0%,100%{fill:var(--white)}50%{fill:var(--primary-theme)}}@keyframes scalingColor{0%,100%{fill:var(--white)}50%{fill:var(--primary-theme)}}.player-for-back-ward-controls .player-container .back-ward.touchout,.player-for-back-ward-controls .player-container .forward.touchout,.player-for-back-ward-controls .player-container .pause-play.touchout{-webkit-animation:2s scaling2;animation:2s scaling2;transform:scale(1)}@-webkit-keyframes scaling2{0%,100%{transform:scale(1)}50%{transform:scale(1.25)}}@keyframes scaling2{0%,100%{transform:scale(1)}50%{transform:scale(1.25)}}.player-for-back-ward-controls .player-container .back-ward.touchout svg g,.player-for-back-ward-controls .player-container .forward.touchout svg g,.player-for-back-ward-controls .player-container .pause-play.touchout svg g{-webkit-animation:2s scalingColor2;animation:2s scalingColor2;fill:var(--white)}@-webkit-keyframes scalingColor2{0%,100%{fill:var(--white)}50%{fill:var(--primary-theme)}}@keyframes scalingColor2{0%,100%{fill:var(--white)}50%{fill:var(--primary-theme)}}.player-for-back-ward-controls .player-container .back-ward svg,.player-for-back-ward-controls .player-container .forward svg,.player-for-back-ward-controls .player-container .pause-play svg{width:100%}.player-for-back-ward-controls .player-container .pause-play{margin:0 1.5rem}.player-for-back-ward-controls .player-container .pause-play .pause,.player-for-back-ward-controls .player-container .pause-play .play{display:flex;align-items:center}div[data-marker-key]{margin-left:.7%!important}.vjs-texttrack-settings{display:none}"]
}] }
];
/** @nocollapse */
VideoPlayerComponent.ctorParameters = function () { return [
{ type: ViewerService },
{ type: Renderer2 },
{ type: QuestionCursor, decorators: [{ type: Optional }] },
{ type: HttpClient },
{ type: ChangeDetectorRef }
]; };
VideoPlayerComponent.propDecorators = {
config: [{ type: Input }],
action: [{ type: Input }],
questionSetData: [{ type: Output }],
playerInstance: [{ type: Output }],
playVideoFromTimestamp: [{ type: Input }],
target: [{ type: ViewChild, args: ['target', { static: true },] }],
controlDiv: [{ type: ViewChild, args: ['controlDiv', { static: true },] }]
};
return VideoPlayerComponent;
}());
export { VideoPlayerComponent };
if (false) {
/** @type {?} */
VideoPlayerComponent.prototype.config;
/** @type {?} */
VideoPlayerComponent.prototype.action;
/** @type {?} */
VideoPlayerComponent.prototype.questionSetData;
/** @type {?} */
VideoPlayerComponent.prototype.playerInstance;
/** @type {?} */
VideoPlayerComponent.prototype.playVideoFromTimestamp;
/** @type {?} */
VideoPlayerComponent.prototype.transcripts;
/** @type {?} */
VideoPlayerComponent.prototype.showBackwardButton;
/** @type {?} */
VideoPlayerComponent.prototype.showForwardButton;
/** @type {?} */
VideoPlayerComponent.prototype.showPlayButton;
/** @type {?} */
VideoPlayerComponent.prototype.showPauseButton;
/** @type {?} */
VideoPlayerComponent.prototype.showControls;
/** @type {?} */
VideoPlayerComponent.prototype.currentPlayerState;
/**
* @type {?}
* @private
*/
VideoPlayerComponent.prototype.unlistenTargetMouseMove;
/**
* @type {?}
* @private
*/
VideoPlayerComponent.prototype.unlistenTargetTouchStart;
/** @type {?} */
VideoPlayerComponent.prototype.target;
/** @type {?} */
VideoPlayerComponent.prototype.controlDiv;
/** @type {?} */
VideoPlayerComponent.prototype.player;
/** @type {?} */
VideoPlayerComponent.prototype.totalSeekedLength;
/** @type {?} */
VideoPlayerComponent.prototype.previousTime;
/** @type {?} */
VideoPlayerComponent.prototype.currentTime;
/** @type {?} */
VideoPlayerComponent.prototype.seekStart;
/** @type {?} */
VideoPlayerComponent.prototype.time;
/** @type {?} */
VideoPlayerComponent.prototype.startTime;
/** @type {?} */
VideoPlayerComponent.prototype.totalSpentTime;
/** @type {?} */
VideoPlayerComponent.prototype.isAutoplayPrevented;
/** @type {?} */
VideoPlayerComponent.prototype.setMetaDataConfig;
/** @type {?} */
VideoPlayerComponent.prototype.totalDuration;
/** @type {?} */
VideoPlayerComponent.prototype.viewerService;
/**
* @type {?}
* @private
*/
VideoPlayerComponent.prototype.renderer2;
/** @type {?} */
VideoPlayerComponent.prototype.questionCursor;
/**
* @type {?}
* @private
*/
VideoPlayerComponent.prototype.http;
/**
* @type {?}
* @private
*/
VideoPlayerComponent.prototype.changeDetector;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlkZW8tcGxheWVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BkaWNkaWtzaGFvcmcvdmlkZW8tcGxheWVyLXY5LyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvdmlkZW8tcGxheWVyL3ZpZGVvLXBsYXllci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFDVSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUM1RSxTQUFTLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFVLFFBQVEsRUFDekQsaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN6RSxPQUFPLEtBQUssQ0FBQyxNQUFNLFdBQVcsQ0FBQztBQUMvQixPQUFPLGdDQUFnQyxDQUFDO0FBQ3hDLE9BQU8seUJBQXlCLE1BQU0sOEJBQThCLENBQUM7QUFDckUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRzlEO0lBbUNFLDhCQUFtQixhQUE0QixFQUFVLFNBQW9CLEVBQ3hELGNBQThCLEVBQVUsSUFBZ0IsRUFBUyxjQUFpQztRQURwRyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUFVLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFDeEQsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQVUsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUFTLG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQTNCN0csb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3JDLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUU5QyxnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUNqQix1QkFBa0IsR0FBRyxLQUFLLENBQUM7UUFDM0Isc0JBQWlC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