UNPKG

dictrigyn-video-player

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

676 lines 77.4 kB
/** * @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 { __awaiter } from "tslib"; import { HttpClient } from '@angular/common/http'; import { Component, ElementRef, EventEmitter, Input, Output, Renderer2, ViewChild, ViewEncapsulation, Optional } 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'; export class VideoPlayerComponent { /** * @param {?} viewerService * @param {?} renderer2 * @param {?} questionCursor * @param {?} http */ constructor(viewerService, renderer2, questionCursor, http) { this.viewerService = viewerService; this.renderer2 = renderer2; this.questionCursor = questionCursor; this.http = http; 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 {?} */ ngOnInit() { this.transcripts = this.viewerService.handleTranscriptsData(_.get(this.config, 'transcripts') || []); } /** * @return {?} */ ngAfterViewInit() { this.viewerService.getPlayerOptions().then((/** * @param {?} options * @return {?} */ (options) => __awaiter(this, void 0, void 0, function* () { this.player = yield videojs(this.target.nativeElement, { fluid: true, responsive: true, sources: options, autoplay: false, 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, } }); this.player.videojshttpsourceselector = videojshttpsourceselector; this.player.videojshttpsourceselector(); /** @type {?} */ const markers = this.viewerService.getMarkers(); if (markers && markers.length > 0) { /** @type {?} */ const identifiers = markers.map((/** * @param {?} item * @return {?} */ item => { return item.identifier; })); if (this.viewerService.questionCursor) { this.viewerService.questionCursor.getAllQuestionSet(identifiers).subscribe((/** * @param {?} response * @return {?} */ (response) => { if (!_.isEmpty(response)) { this.viewerService.maxScore = response.reduce((/** * @param {?} a * @param {?} b * @return {?} */ (a, b) => a + b), 0); } })); } } if (markers) { this.player.markers({ markers, markerStyle: { height: '7px', bottom: '39%', 'background-color': 'orange' }, onMarkerReached: (/** * @param {?} marker * @return {?} */ (marker) => { if (marker) { const { time, text, identifier, duration } = marker; if (!(this.player.currentTime() > (time + duration))) { setTimeout((/** * @return {?} */ () => { this.pause(); this.player.controls(false); }), 1000); this.viewerService.getQuestionSet(identifier).subscribe((/** * @param {?} response * @return {?} */ (response) => { this.questionSetData.emit({ response, time, identifier }); }), (/** * @param {?} error * @return {?} */ (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(); }))); setInterval((/** * @return {?} */ () => { if (!this.isAutoplayPrevented && this.currentPlayerState !== 'pause') { this.showControls = false; } }), 5000); this.unlistenTargetMouseMove = this.renderer2.listen(this.target.nativeElement, 'mousemove', (/** * @return {?} */ () => { this.showControls = true; })); this.unlistenTargetTouchStart = this.renderer2.listen(this.target.nativeElement, 'touchstart', (/** * @return {?} */ () => { this.showControls = true; })); this.viewerService.sidebarMenuEvent.subscribe((/** * @param {?} event * @return {?} */ event => { if (event === 'OPEN_MENU') { this.pause(); } if (event === 'CLOSE_MENU') { this.play(); } })); } /** * @param {?} changes * @return {?} */ ngOnChanges(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!'); } } } } /** * @param {?} e * @return {?} */ onLoadMetadata(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 {?} */ registerEvents() { /** @type {?} */ const promise = this.player.play(); if (promise !== undefined) { promise.catch((/** * @param {?} error * @return {?} */ error => { this.isAutoplayPrevented = true; })); } /** @type {?} */ const events = ['loadstart', 'play', 'pause', 'error', 'playing', 'progress', 'seeked', 'seeking', 'volumechange', 'ratechange']; this.player.on('fullscreenchange', (/** * @param {?} data * @return {?} */ (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 {?} */ (data) => { this.pause(); })); this.player.on('ratechange', (/** * @param {?} data * @return {?} */ (data) => { this.viewerService.metaData.playBackSpeeds.push(this.player.playbackRate()); })); this.player.on('volumechange', (/** * @param {?} data * @return {?} */ (data) => { this.viewerService.metaData.volume.push(this.player.volume()); this.viewerService.metaData.muted = this.player.muted(); })); this.player.on('play', (/** * @param {?} data * @return {?} */ (data) => { this.currentPlayerState = 'play'; this.showPauseButton = true; this.showPlayButton = false; this.viewerService.raiseHeartBeatEvent('PLAY'); this.isAutoplayPrevented = false; })); this.player.on('timeupdate', (/** * @param {?} data * @return {?} */ (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 {?} */ const 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 {?} */ (event, track) => { this.handleEventsForTranscripts(track); })); this.player.on('durationchange', (/** * @param {?} data * @return {?} */ (data) => { if (this.totalDuration === 0) { this.totalDuration = this.viewerService.metaData.totalDuration = this.player.duration(); this.viewerService.playerEvent.emit(Object.assign(Object.assign({}, data), { duration: this.totalDuration })); } })); events.forEach((/** * @param {?} event * @return {?} */ event => { this.player.on(event, (/** * @param {?} data * @return {?} */ (data) => { this.handleVideoControls(data); this.viewerService.playerEvent.emit(data); })); })); this.trackTranscriptEvent(); } /** * @return {?} */ trackTranscriptEvent() { /** @type {?} */ let timeout; /** @type {?} */ const player = this.player; this.player.textTracks().on('change', (/** * @param {?} event * @return {?} */ function action(event) { clearTimeout(timeout); /** @type {?} */ let transcriptObject = {}; this.tracks_.filter((/** * @param {?} track * @return {?} */ (track) => { if ((track.kind === 'captions' || track.kind === 'subtitles') && track.mode === 'showing') { transcriptObject = { artifactUrl: track.src, languageCode: track.language }; return true; } })); timeout = setTimeout((/** * @return {?} */ () => { player.trigger('subtitleChanged', transcriptObject); }), 10); })); } /** * @param {?} track * @return {?} */ handleEventsForTranscripts(track) { /** @type {?} */ let 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 {?} */ toggleForwardRewindButton() { 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 {?} */ play() { if (this.player) { this.player.play(); } this.currentPlayerState = 'play'; this.showPauseButton = true; this.showPlayButton = false; this.toggleForwardRewindButton(); } /** * @return {?} */ pause() { if (this.player) { this.player.pause(); } this.currentPlayerState = 'pause'; this.showPauseButton = false; this.showPlayButton = true; this.toggleForwardRewindButton(); this.viewerService.raiseHeartBeatEvent('PAUSE'); } /** * @return {?} */ backward() { if (this.player) { this.player.currentTime(this.player.currentTime() - this.time); } this.toggleForwardRewindButton(); this.viewerService.raiseHeartBeatEvent('BACKWARD'); } /** * @return {?} */ forward() { if (this.player) { this.player.currentTime(this.player.currentTime() + this.time); } this.toggleForwardRewindButton(); this.viewerService.raiseHeartBeatEvent('FORWARD'); } /** * @param {?} __0 * @return {?} */ handleVideoControls({ 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 }); } if (type === 'pause') { this.totalSpentTime += new Date().getTime() - this.startTime; this.updatePlayerEventsMetadata({ type }); } if (type === 'play') { this.startTime = new Date().getTime(); this.updatePlayerEventsMetadata({ 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 }); 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 {?} */ const markers = this.player.markers.getMarkers(); markers.forEach((/** * @param {?} marker * @return {?} */ 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 {?} */ setPreMetaDataConfig() { 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 {?} */ updatePlayerEventsMetadata({ type }) { /** @type {?} */ const action = {}; action[type + ''] = this.player.currentTime(); this.viewerService.metaData.actions.push(action); } /** * @return {?} */ ngOnDestroy() { if (this.player) { this.player.dispose(); } this.unlistenTargetMouseMove(); this.unlistenTargetTouchStart(); } } VideoPlayerComponent.decorators = [ { type: Component, args: [{ selector: 'video-player', template: "<video #target class=\"video-js\" type=\"video/mp4\" 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{animation:2s scaling;transform:scale(1)}@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{animation:2s scalingColor;fill:var(--white)}@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{animation:2s scaling2;transform:scale(1)}@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{animation:2s scalingColor2;fill:var(--white)}@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 = () => [ { type: ViewerService }, { type: Renderer2 }, { type: QuestionCursor, decorators: [{ type: Optional }] }, { type: HttpClient } ]; VideoPlayerComponent.propDecorators = { config: [{ type: Input }], action: [{ type: Input }], questionSetData: [{ type: Output }], playerInstance: [{ type: Output }], target: [{ type: ViewChild, args: ['target', { static: true },] }], controlDiv: [{ type: ViewChild, args: ['controlDiv', { static: true },] }] }; if (false) { /** @type {?} */ VideoPlayerComponent.prototype.config; /** @type {?} */ VideoPlayerComponent.prototype.action; /** @type {?} */ VideoPlayerComponent.prototype.questionSetData; /** @type {?} */ VideoPlayerComponent.prototype.playerInstance; /** @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; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlkZW8tcGxheWVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2RpY3RyaWd5bi12aWRlby1wbGF5ZXIvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy92aWRlby1wbGF5ZXIvdmlkZW8tcGxheWVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFpQixTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUNsRixTQUFTLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFVLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDekUsT0FBTyxLQUFLLENBQUMsTUFBTSxXQUFXLENBQUM7QUFDL0IsT0FBTyxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLHlCQUF5QixNQUFNLDhCQUE4QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQVM5RCxNQUFNLE9BQU8sb0JBQW9COzs7Ozs7O0lBNEIvQixZQUFtQixhQUE0QixFQUFVLFNBQW9CLEVBQy9DLGNBQThCLEVBQVUsSUFBZ0I7UUFEbkUsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFBVSxjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQy9DLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUFVLFNBQUksR0FBSixJQUFJLENBQVk7UUExQjVFLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNyQyxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDOUMsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFDakIsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQzNCLHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQUMxQixtQkFBYyxHQUFHLElB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