@srgssr/pillarbox-web 1.34.2 → 1.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/pillarbox-core.cjs +6 -2
- package/dist/pillarbox-core.cjs.map +1 -1
- package/dist/pillarbox-core.es.js +6 -2
- package/dist/pillarbox-core.es.js.map +1 -1
- package/dist/pillarbox.cjs +7 -5
- package/dist/pillarbox.cjs.map +1 -1
- package/dist/pillarbox.es.js +7 -6
- package/dist/pillarbox.es.js.map +1 -1
- package/dist/pillarbox.umd.js +7 -5
- package/dist/pillarbox.umd.js.map +1 -1
- package/dist/pillarbox.umd.min.js +1 -1
- package/dist/pillarbox.umd.min.js.map +1 -1
- package/dist/types/build.d.ts +2 -1
- package/dist/types/build.d.ts.map +1 -1
- package/dist/types/src/dataProvider/model/MediaComposition.d.ts.map +1 -1
- package/package.json +3 -3
package/dist/pillarbox-core.cjs
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
const videojs = require('video.js');
|
|
4
4
|
require('videojs-contrib-eme');
|
|
5
5
|
|
|
6
|
-
const version = "1.
|
|
6
|
+
const version = "1.35.0";
|
|
7
7
|
|
|
8
8
|
/** @import VJSPlayer from 'video.js/dist/types/player' */
|
|
9
9
|
/** @import AudioTrack from 'video.js/dist/types/tracks/audio-track' */
|
|
@@ -399,16 +399,20 @@ pillarbox.options.fill = true;
|
|
|
399
399
|
* Configuration options for HTML5 settings in Pillarbox.
|
|
400
400
|
*
|
|
401
401
|
* @see [VHS useForcedSubtitles Option]{@link https://github.com/videojs/http-streaming/blob/main/README.md#useforcedsubtitles}
|
|
402
|
+
* @see [VHS overrideNative Option]{@link https://github.com/videojs/http-streaming#overridenative}
|
|
402
403
|
* @type {Object}
|
|
403
404
|
* @property {Object} vhs - Configuration for the Video.js HTTP Streaming.
|
|
404
405
|
* @property {boolean} useForcedSubtitles - Enables the player to display forced subtitles by default.
|
|
405
406
|
* Forced subtitles are pieces of information intended for display when no other text representation
|
|
406
407
|
* is selected. They are used to clarify dialogue, provide alternate languages, display texted graphics,
|
|
407
408
|
* or present location/person IDs that are not otherwise covered in the dubbed/localized audio.
|
|
409
|
+
* @property {boolean} overrideNative - Try to use videojs-http-streaming even on platforms that
|
|
410
|
+
* provide some level of HLS support natively
|
|
408
411
|
*/
|
|
409
412
|
pillarbox.options.html5 = {
|
|
410
413
|
vhs: {
|
|
411
|
-
useForcedSubtitles: true
|
|
414
|
+
useForcedSubtitles: true,
|
|
415
|
+
overrideNative: !pillarbox.browser.IS_SAFARI
|
|
412
416
|
}
|
|
413
417
|
};
|
|
414
418
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pillarbox-core.cjs","sources":["../src/components/player.js","../src/components/audio-track-menu-item.js","../src/pillarbox.js"],"sourcesContent":["import videojs from 'video.js';\nimport 'videojs-contrib-eme';\n\n/** @import VJSPlayer from 'video.js/dist/types/player' */\n/** @import AudioTrack from 'video.js/dist/types/tracks/audio-track' */\n/** @import TextTrack from 'video.js/dist/types/tracks/text-track' */\n/** @import {TrackSelector} from './typedef' */\n\n/**\n * @ignore\n * @type {typeof VJSPlayer}\n */\nconst vjsPlayer = videojs.getComponent('player');\n\n/**\n * This class extends the video.js Player.\n *\n * @class Player\n * @see https://docs.videojs.com/player\n */\nclass Player extends vjsPlayer {\n constructor(tag, options, ready) {\n /**\n * Configuration for plugins.\n *\n * @see [Video.js Plugins Option]{@link https://videojs.com/guides/options/#plugins}\n * @type {Object}\n * @property {boolean} eme - Enable the EME (Encrypted Media Extensions) plugin.\n */\n options = videojs.obj.merge(options, { plugins: { eme: true }});\n super(tag, options, ready);\n }\n\n /**\n * A getter/setter for the media's audio track.\n * Activates the audio track according to the language and kind properties.\n * Falls back on the first audio track found if the kind property is not satisfied.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/AudioTrack/kind\n * @see https://developer.mozilla.org/en-US/docs/Web/API/AudioTrack/language\n *\n * @param {TrackSelector} [trackSelector]\n *\n * @example\n * // Get the current audio track\n * player.audioTrack();\n *\n * @example\n * // Activate an audio track based on language and kind properties\n * player.audioTrack({language:'en', kind:'description'});\n *\n * @example\n * // Activate first audio track found corresponding to language\n * player.audioTrack({language:'fr'});\n *\n * @return {AudioTrack | undefined} The\n * currently enabled audio track. See {@link https://docs.videojs.com/audiotrack}.\n */\n audioTrack(trackSelector) {\n const audioTracks = Array.from(this.player().audioTracks());\n\n if (!trackSelector) {\n return audioTracks.find((audioTrack) => audioTrack.enabled);\n }\n\n const { kind, language } = trackSelector;\n const audioTrack =\n audioTracks.find(\n (audioTrack) =>\n audioTrack.language === language && audioTrack.kind === kind\n ) || audioTracks.find((audioTrack) => audioTrack.language === language);\n\n if (audioTrack) {\n audioTrack.enabled = true;\n }\n\n return audioTrack;\n }\n\n /**\n * Calculates an array of ranges based on the `buffered()` data.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/buffered\n *\n * @returns {Array<{start: number, end: number}>} An array of objects representing start and end points of buffered ranges.\n */\n bufferedRanges() {\n const ranges = [];\n\n for (let i = 0; i < this.buffered().length; i++) {\n const start = this.buffered().start(i);\n const end = this.buffered().end(i);\n\n ranges.push({ start, end });\n }\n\n return ranges;\n }\n\n /**\n * Get the percent (as a decimal) of the media that's been played.\n * This method is not a part of the native HTML video API.\n *\n * Live streams with DVR are not currently supported.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement#htmlmediaelement.played\n *\n * @return {number}\n * A decimal between 0 and 1 representing the percent\n * that is played 0 being 0% and 1 being 100%\n */\n playedPercent() {\n if (!Number.isFinite(this.duration())) return NaN;\n\n let timePlayed = 0;\n\n for (let i = 0; i != this.played().length; i++) {\n timePlayed += this.played().end(i) - this.played().start(i);\n }\n\n const percentPlayed = timePlayed / this.duration();\n\n return percentPlayed;\n }\n\n /**\n * Get an array of ranges based on the `played` data.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement#htmlmediaelement.played\n *\n * @returns {Array<{start: number, end: number}>} An array of objects representing start and end points of played ranges.\n */\n playedRanges() {\n const ranges = [];\n\n for (let i = 0; i < this.played().length; i++) {\n const start = this.played().start(i);\n const end = this.played().end(i);\n\n ranges.push({ start, end });\n }\n\n return ranges;\n }\n\n /**\n * Calculates an array of ranges based on the `seekable()` data.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/seekable\n *\n * @returns {Array<{start: number, end: number}>} An array of objects representing start and end points of seekable ranges.\n */\n seekableRanges() {\n const ranges = [];\n\n for (let i = 0; i < this.seekable().length; i++) {\n const start = this.seekable().start(i);\n const end = this.seekable().end(i);\n\n ranges.push({ start, end });\n }\n\n return ranges;\n }\n\n /**\n * A getter/setter for the media's text track.\n * Activates the text track according to the language and kind properties.\n * Falls back on the first text track found if the kind property is not satisfied.\n * Disables all subtitle tracks that are `showing` if the `trackSelector` is truthy but does not satisfy any condition.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/TextTrack/kind\n * @see https://developer.mozilla.org/en-US/docs/Web/API/textTrack/language\n *\n * @param {TrackSelector} [trackSelector]\n *\n * @example\n * // Get the current text track\n * player.textTrack();\n *\n * @example\n * // Disable all text tracks has a side effect\n * player.textTrack('off');\n * player.textTrack({});\n *\n * @example\n * // Activate an text track based on language and kind properties\n * player.textTrack({language:'en', kind:'captions'});\n *\n * @example\n * // Activate first text track found corresponding to language\n * player.textTrack({language:'fr'});\n *\n * @return {TextTrack | undefined} The\n * currently enabled text track. See {@link https://docs.videojs.com/texttrack}.\n */\n textTrack(trackSelector) {\n const textTracks = Array.from(this.player().textTracks()).filter(\n (textTrack) => !['chapters', 'metadata'].includes(textTrack.kind)\n );\n\n if (!trackSelector) {\n return textTracks.find((textTrack) => textTrack.mode === 'showing');\n }\n\n textTracks.forEach((textTrack) => (textTrack.mode = 'disabled'));\n\n const { kind, language } = trackSelector;\n const textTrack =\n textTracks.find((textTrack) => {\n if (textTrack.language === language && textTrack.kind === kind) {\n textTrack.mode = 'showing';\n }\n\n return textTrack.mode === 'showing';\n }) ||\n textTracks.find((textTrack) => {\n if (textTrack.language === language) {\n textTrack.mode = 'showing';\n }\n\n return textTrack.mode === 'showing';\n });\n\n return textTrack;\n }\n}\n\nvideojs.registerComponent('player', Player);\n\nexport default Player;\n","import videojs from 'video.js';\n\n/** @import MenuItem from 'video.js/dist/types/menu/menu-item' */\n\n/**\n * @ignore\n */\nconst VJSAudioTrackButton = videojs.getComponent('AudioTrackButton');\n\n/**\n * @ignore\n * @type {typeof MenuItem}\n */\nconst MenuItem = videojs.getComponent('MenuItem');\n\n/**\n * An {@link AudioTrack} {@link MenuItem}\n *\n * This is a temporary workaround.\n *\n * @extends MenuItem\n */\nclass AudioTrackMenuItem extends MenuItem {\n\n /**\n * Creates an instance of this class.\n *\n * @param {Player} player\n * The `Player` that this class should be attached to.\n *\n * @param {Object} [options]\n * The key/value store of player options.\n */\n constructor(player, options) {\n const track = options.track;\n const tracks = player.audioTracks();\n\n // Modify options for parent MenuItem class's init.\n options.label = track.label || track.language || 'Unknown';\n options.selected = track.enabled;\n\n super(player, options);\n\n this.track = track;\n\n this.addClass(`vjs-${track.kind}-menu-item`);\n\n const changeHandler = (...args) => {\n this.handleTracksChange.apply(this, args);\n };\n\n tracks.addEventListener('change', changeHandler);\n this.on('dispose', () => {\n tracks.removeEventListener('change', changeHandler);\n });\n }\n\n createEl(type, props, attrs) {\n const el = super.createEl(type, props, attrs);\n const parentSpan = el.querySelector('.vjs-menu-item-text');\n\n if (['main-desc', 'descriptions', 'description'].indexOf(this.options_.track.kind) >= 0) {\n parentSpan.appendChild(videojs.dom.createEl('span', {\n className: 'vjs-icon-placeholder'\n }, {\n 'aria-hidden': true\n }));\n parentSpan.appendChild(videojs.dom.createEl('span', {\n className: 'vjs-control-text',\n textContent: ' ' + this.localize('Descriptions')\n }));\n }\n\n return el;\n }\n\n /**\n * This gets called when an `AudioTrackMenuItem is \"clicked\". See {@link ClickableComponent}\n * for more detailed information on what a click can be.\n *\n * @param {Event} [event]\n * The `keydown`, `tap`, or `click` event that caused this function to be\n * called.\n *\n * @listens tap\n * @listens click\n */\n handleClick(event) {\n super.handleClick(event);\n\n // the audio track list will automatically toggle other tracks\n // off for us.\n this.track.enabled = true;\n\n if (!this.player_.tech_.featuresNativeAudioTracks) return;\n\n // when native audio tracks are used, we want to make sure that other tracks are turned off\n const tracks = this.player_.audioTracks();\n\n for (let i = 0; i < tracks.length; i++) {\n const track = tracks[i];\n\n // skip the current track since we enabled it above\n if (track === this.track) {\n continue;\n }\n\n track.enabled = track === this.track;\n }\n\n }\n\n /**\n * Handle any {@link AudioTrack} change.\n *\n * @param {Event} [event]\n * The {@link AudioTrackList#change} event that caused this to run.\n *\n * @listens AudioTrackList#change\n */\n handleTracksChange() {\n this.selected(this.track.enabled);\n }\n}\n\n/**\n * The base class for buttons that toggle specific {@link AudioTrack} types.\n *\n * @extends VJSAudioTrackButton\n */\nclass AudioTrackButton extends VJSAudioTrackButton {\n\n\n /**\n * Create a menu item for each audio track\n *\n * @param {AudioTrackMenuItem[]} [items=[]]\n * An array of existing menu items to use.\n *\n * @return {AudioTrackMenuItem[]}\n * An array of menu items\n */\n createItems(items = []) {\n // if there's only one audio track, there no point in showing it\n this.hideThreshold_ = 1;\n\n const tracks = this.player_.audioTracks();\n\n for (let i = 0; i < tracks.length; i++) {\n const track = tracks[i];\n\n items.push(new AudioTrackMenuItem(this.player_, {\n track,\n // MenuItem is selectable\n selectable: true,\n // MenuItem is NOT multiSelectable (i.e. only one can be marked \"selected\" at a time)\n multiSelectable: false\n }));\n }\n\n return items;\n }\n}\n\nvideojs.registerComponent('AudioTrackMenuItem', AudioTrackMenuItem);\nvideojs.registerComponent('AudioTrackButton', AudioTrackButton);\n","import { version } from '../package.json';\nimport videojs from 'video.js';\nimport './components/player.js';\nimport './components/audio-track-menu-item.js';\n\n/**\n * Pillarbox is an alias for the video.js namespace with additional options.\n *\n * @namespace\n * @see https://docs.videojs.com/module-videojs-videojs\n * @type {videojs}\n */\nconst pillarbox = videojs;\n\npillarbox.VERSION = {\n pillarbox: version,\n videojs: videojs.VERSION,\n [videojs.VhsSourceHandler.name]: videojs.VhsSourceHandler.VERSION,\n eme: videojs.getPlugin('eme').VERSION,\n};\n\n/**\n * Enable smooth seeking for Pillarbox.\n *\n * @see [Video.js enableSmoothSeeking Option]{@link https://videojs.com/guides/options/#enablesmoothseeking}\n * @type {boolean}\n * @default true\n */\npillarbox.options.enableSmoothSeeking = true;\n/**\n * Enable fill mode for the video player, allowing it to expand to fill the container.\n *\n * @see [Video.js Fill Option]{@link https://videojs.com/guides/layout/#fill-mode}\n * @type {boolean}\n * @default true\n */\npillarbox.options.fill = true;\n/**\n * Configuration options for HTML5 settings in Pillarbox.\n *\n * @see [VHS useForcedSubtitles Option]{@link https://github.com/videojs/http-streaming/blob/main/README.md#useforcedsubtitles}\n * @type {Object}\n * @property {Object} vhs - Configuration for the Video.js HTTP Streaming.\n * @property {boolean} useForcedSubtitles - Enables the player to display forced subtitles by default.\n * Forced subtitles are pieces of information intended for display when no other text representation\n * is selected. They are used to clarify dialogue, provide alternate languages, display texted graphics,\n * or present location/person IDs that are not otherwise covered in the dubbed/localized audio.\n */\npillarbox.options.html5 = {\n vhs: { useForcedSubtitles: true }\n};\n/**\n * Configuration for the live tracker.\n *\n * @see [Video.js liveTracker Option]{@link https://videojs.com/guides/options/#livetrackertrackingthreshold}\n * @type {Object}\n * @property {number} trackingThreshold - A threshold that controls when the liveui should be shown.\n * @property {number} liveTolerance - An option that controls how far from the seekable end should be considered live playback.\n */\npillarbox.options.liveTracker = {\n trackingThreshold: 120,\n liveTolerance: 15,\n};\n/**\n * Allows the player to use the live ui that includes:\n *\n * - A progress bar for seeking within the live window\n * - A button that can be clicked to seek to the live edge with a circle indicating if you are at the live edge or not.\n *\n * @see [Video.js liveui Option]{@link https://videojs.com/guides/options/#liveui}\n * @type {boolean}\n */\npillarbox.options.liveui = true;\n/**\n * Indicates that the video is to be played \"inline\", that is within the element's playback area.\n *\n * @see [Video element playsinline attribute]{@link https://developer.mozilla.org/en-US/docs/Web/HTML/Element/video#playsinline}\n * @type {boolean}\n */\npillarbox.options.playsinline = true;\n/**\n * Enable responsive mode, this will cause the player to customize itself based on responsive breakpoints.\n *\n * @see [Video.js Responsive Option]{@link https://videojs.com/guides/options/#responsive}\n * @type {boolean}\n */\npillarbox.options.responsive = true;\n/**\n * A placeholder for accessing trackers directly from the player.\n *\n * @type {Object}\n */\npillarbox.options.trackers = {};\n\nexport default pillarbox;\n"],"names":["vjsPlayer","videojs","getComponent","Player","constructor","tag","options","ready","obj","merge","plugins","eme","audioTrack","trackSelector","audioTracks","Array","from","player","find","enabled","kind","language","bufferedRanges","ranges","i","buffered","length","start","end","push","playedPercent","Number","isFinite","duration","NaN","timePlayed","played","percentPlayed","playedRanges","seekableRanges","seekable","textTrack","textTracks","filter","includes","mode","forEach","registerComponent","VJSAudioTrackButton","MenuItem","AudioTrackMenuItem","track","tracks","label","selected","addClass","changeHandler","args","handleTracksChange","apply","addEventListener","on","removeEventListener","createEl","type","props","attrs","el","parentSpan","querySelector","indexOf","options_","appendChild","dom","className","textContent","localize","handleClick","event","player_","tech_","featuresNativeAudioTracks","AudioTrackButton","createItems","items","hideThreshold_","selectable","multiSelectable","pillarbox","VERSION","version","VhsSourceHandler","name","getPlugin","enableSmoothSeeking","fill","html5","vhs","useForcedSubtitles","liveTracker","trackingThreshold","liveTolerance","liveui","playsinline","responsive","trackers"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pillarbox-core.cjs","sources":["../src/components/player.js","../src/components/audio-track-menu-item.js","../src/pillarbox.js"],"sourcesContent":["import videojs from 'video.js';\nimport 'videojs-contrib-eme';\n\n/** @import VJSPlayer from 'video.js/dist/types/player' */\n/** @import AudioTrack from 'video.js/dist/types/tracks/audio-track' */\n/** @import TextTrack from 'video.js/dist/types/tracks/text-track' */\n/** @import {TrackSelector} from './typedef' */\n\n/**\n * @ignore\n * @type {typeof VJSPlayer}\n */\nconst vjsPlayer = videojs.getComponent('player');\n\n/**\n * This class extends the video.js Player.\n *\n * @class Player\n * @see https://docs.videojs.com/player\n */\nclass Player extends vjsPlayer {\n constructor(tag, options, ready) {\n /**\n * Configuration for plugins.\n *\n * @see [Video.js Plugins Option]{@link https://videojs.com/guides/options/#plugins}\n * @type {Object}\n * @property {boolean} eme - Enable the EME (Encrypted Media Extensions) plugin.\n */\n options = videojs.obj.merge(options, { plugins: { eme: true }});\n super(tag, options, ready);\n }\n\n /**\n * A getter/setter for the media's audio track.\n * Activates the audio track according to the language and kind properties.\n * Falls back on the first audio track found if the kind property is not satisfied.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/AudioTrack/kind\n * @see https://developer.mozilla.org/en-US/docs/Web/API/AudioTrack/language\n *\n * @param {TrackSelector} [trackSelector]\n *\n * @example\n * // Get the current audio track\n * player.audioTrack();\n *\n * @example\n * // Activate an audio track based on language and kind properties\n * player.audioTrack({language:'en', kind:'description'});\n *\n * @example\n * // Activate first audio track found corresponding to language\n * player.audioTrack({language:'fr'});\n *\n * @return {AudioTrack | undefined} The\n * currently enabled audio track. See {@link https://docs.videojs.com/audiotrack}.\n */\n audioTrack(trackSelector) {\n const audioTracks = Array.from(this.player().audioTracks());\n\n if (!trackSelector) {\n return audioTracks.find((audioTrack) => audioTrack.enabled);\n }\n\n const { kind, language } = trackSelector;\n const audioTrack =\n audioTracks.find(\n (audioTrack) =>\n audioTrack.language === language && audioTrack.kind === kind\n ) || audioTracks.find((audioTrack) => audioTrack.language === language);\n\n if (audioTrack) {\n audioTrack.enabled = true;\n }\n\n return audioTrack;\n }\n\n /**\n * Calculates an array of ranges based on the `buffered()` data.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/buffered\n *\n * @returns {Array<{start: number, end: number}>} An array of objects representing start and end points of buffered ranges.\n */\n bufferedRanges() {\n const ranges = [];\n\n for (let i = 0; i < this.buffered().length; i++) {\n const start = this.buffered().start(i);\n const end = this.buffered().end(i);\n\n ranges.push({ start, end });\n }\n\n return ranges;\n }\n\n /**\n * Get the percent (as a decimal) of the media that's been played.\n * This method is not a part of the native HTML video API.\n *\n * Live streams with DVR are not currently supported.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement#htmlmediaelement.played\n *\n * @return {number}\n * A decimal between 0 and 1 representing the percent\n * that is played 0 being 0% and 1 being 100%\n */\n playedPercent() {\n if (!Number.isFinite(this.duration())) return NaN;\n\n let timePlayed = 0;\n\n for (let i = 0; i != this.played().length; i++) {\n timePlayed += this.played().end(i) - this.played().start(i);\n }\n\n const percentPlayed = timePlayed / this.duration();\n\n return percentPlayed;\n }\n\n /**\n * Get an array of ranges based on the `played` data.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement#htmlmediaelement.played\n *\n * @returns {Array<{start: number, end: number}>} An array of objects representing start and end points of played ranges.\n */\n playedRanges() {\n const ranges = [];\n\n for (let i = 0; i < this.played().length; i++) {\n const start = this.played().start(i);\n const end = this.played().end(i);\n\n ranges.push({ start, end });\n }\n\n return ranges;\n }\n\n /**\n * Calculates an array of ranges based on the `seekable()` data.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/seekable\n *\n * @returns {Array<{start: number, end: number}>} An array of objects representing start and end points of seekable ranges.\n */\n seekableRanges() {\n const ranges = [];\n\n for (let i = 0; i < this.seekable().length; i++) {\n const start = this.seekable().start(i);\n const end = this.seekable().end(i);\n\n ranges.push({ start, end });\n }\n\n return ranges;\n }\n\n /**\n * A getter/setter for the media's text track.\n * Activates the text track according to the language and kind properties.\n * Falls back on the first text track found if the kind property is not satisfied.\n * Disables all subtitle tracks that are `showing` if the `trackSelector` is truthy but does not satisfy any condition.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/TextTrack/kind\n * @see https://developer.mozilla.org/en-US/docs/Web/API/textTrack/language\n *\n * @param {TrackSelector} [trackSelector]\n *\n * @example\n * // Get the current text track\n * player.textTrack();\n *\n * @example\n * // Disable all text tracks has a side effect\n * player.textTrack('off');\n * player.textTrack({});\n *\n * @example\n * // Activate an text track based on language and kind properties\n * player.textTrack({language:'en', kind:'captions'});\n *\n * @example\n * // Activate first text track found corresponding to language\n * player.textTrack({language:'fr'});\n *\n * @return {TextTrack | undefined} The\n * currently enabled text track. See {@link https://docs.videojs.com/texttrack}.\n */\n textTrack(trackSelector) {\n const textTracks = Array.from(this.player().textTracks()).filter(\n (textTrack) => !['chapters', 'metadata'].includes(textTrack.kind)\n );\n\n if (!trackSelector) {\n return textTracks.find((textTrack) => textTrack.mode === 'showing');\n }\n\n textTracks.forEach((textTrack) => (textTrack.mode = 'disabled'));\n\n const { kind, language } = trackSelector;\n const textTrack =\n textTracks.find((textTrack) => {\n if (textTrack.language === language && textTrack.kind === kind) {\n textTrack.mode = 'showing';\n }\n\n return textTrack.mode === 'showing';\n }) ||\n textTracks.find((textTrack) => {\n if (textTrack.language === language) {\n textTrack.mode = 'showing';\n }\n\n return textTrack.mode === 'showing';\n });\n\n return textTrack;\n }\n}\n\nvideojs.registerComponent('player', Player);\n\nexport default Player;\n","import videojs from 'video.js';\n\n/** @import MenuItem from 'video.js/dist/types/menu/menu-item' */\n\n/**\n * @ignore\n */\nconst VJSAudioTrackButton = videojs.getComponent('AudioTrackButton');\n\n/**\n * @ignore\n * @type {typeof MenuItem}\n */\nconst MenuItem = videojs.getComponent('MenuItem');\n\n/**\n * An {@link AudioTrack} {@link MenuItem}\n *\n * This is a temporary workaround.\n *\n * @extends MenuItem\n */\nclass AudioTrackMenuItem extends MenuItem {\n\n /**\n * Creates an instance of this class.\n *\n * @param {Player} player\n * The `Player` that this class should be attached to.\n *\n * @param {Object} [options]\n * The key/value store of player options.\n */\n constructor(player, options) {\n const track = options.track;\n const tracks = player.audioTracks();\n\n // Modify options for parent MenuItem class's init.\n options.label = track.label || track.language || 'Unknown';\n options.selected = track.enabled;\n\n super(player, options);\n\n this.track = track;\n\n this.addClass(`vjs-${track.kind}-menu-item`);\n\n const changeHandler = (...args) => {\n this.handleTracksChange.apply(this, args);\n };\n\n tracks.addEventListener('change', changeHandler);\n this.on('dispose', () => {\n tracks.removeEventListener('change', changeHandler);\n });\n }\n\n createEl(type, props, attrs) {\n const el = super.createEl(type, props, attrs);\n const parentSpan = el.querySelector('.vjs-menu-item-text');\n\n if (['main-desc', 'descriptions', 'description'].indexOf(this.options_.track.kind) >= 0) {\n parentSpan.appendChild(videojs.dom.createEl('span', {\n className: 'vjs-icon-placeholder'\n }, {\n 'aria-hidden': true\n }));\n parentSpan.appendChild(videojs.dom.createEl('span', {\n className: 'vjs-control-text',\n textContent: ' ' + this.localize('Descriptions')\n }));\n }\n\n return el;\n }\n\n /**\n * This gets called when an `AudioTrackMenuItem is \"clicked\". See {@link ClickableComponent}\n * for more detailed information on what a click can be.\n *\n * @param {Event} [event]\n * The `keydown`, `tap`, or `click` event that caused this function to be\n * called.\n *\n * @listens tap\n * @listens click\n */\n handleClick(event) {\n super.handleClick(event);\n\n // the audio track list will automatically toggle other tracks\n // off for us.\n this.track.enabled = true;\n\n if (!this.player_.tech_.featuresNativeAudioTracks) return;\n\n // when native audio tracks are used, we want to make sure that other tracks are turned off\n const tracks = this.player_.audioTracks();\n\n for (let i = 0; i < tracks.length; i++) {\n const track = tracks[i];\n\n // skip the current track since we enabled it above\n if (track === this.track) {\n continue;\n }\n\n track.enabled = track === this.track;\n }\n\n }\n\n /**\n * Handle any {@link AudioTrack} change.\n *\n * @param {Event} [event]\n * The {@link AudioTrackList#change} event that caused this to run.\n *\n * @listens AudioTrackList#change\n */\n handleTracksChange() {\n this.selected(this.track.enabled);\n }\n}\n\n/**\n * The base class for buttons that toggle specific {@link AudioTrack} types.\n *\n * @extends VJSAudioTrackButton\n */\nclass AudioTrackButton extends VJSAudioTrackButton {\n\n\n /**\n * Create a menu item for each audio track\n *\n * @param {AudioTrackMenuItem[]} [items=[]]\n * An array of existing menu items to use.\n *\n * @return {AudioTrackMenuItem[]}\n * An array of menu items\n */\n createItems(items = []) {\n // if there's only one audio track, there no point in showing it\n this.hideThreshold_ = 1;\n\n const tracks = this.player_.audioTracks();\n\n for (let i = 0; i < tracks.length; i++) {\n const track = tracks[i];\n\n items.push(new AudioTrackMenuItem(this.player_, {\n track,\n // MenuItem is selectable\n selectable: true,\n // MenuItem is NOT multiSelectable (i.e. only one can be marked \"selected\" at a time)\n multiSelectable: false\n }));\n }\n\n return items;\n }\n}\n\nvideojs.registerComponent('AudioTrackMenuItem', AudioTrackMenuItem);\nvideojs.registerComponent('AudioTrackButton', AudioTrackButton);\n","import { version } from '../package.json';\nimport videojs from 'video.js';\nimport './components/player.js';\nimport './components/audio-track-menu-item.js';\n\n/**\n * Pillarbox is an alias for the video.js namespace with additional options.\n *\n * @namespace\n * @see https://docs.videojs.com/module-videojs-videojs\n * @type {videojs}\n */\nconst pillarbox = videojs;\n\npillarbox.VERSION = {\n pillarbox: version,\n videojs: videojs.VERSION,\n [videojs.VhsSourceHandler.name]: videojs.VhsSourceHandler.VERSION,\n eme: videojs.getPlugin('eme').VERSION,\n};\n\n/**\n * Enable smooth seeking for Pillarbox.\n *\n * @see [Video.js enableSmoothSeeking Option]{@link https://videojs.com/guides/options/#enablesmoothseeking}\n * @type {boolean}\n * @default true\n */\npillarbox.options.enableSmoothSeeking = true;\n/**\n * Enable fill mode for the video player, allowing it to expand to fill the container.\n *\n * @see [Video.js Fill Option]{@link https://videojs.com/guides/layout/#fill-mode}\n * @type {boolean}\n * @default true\n */\npillarbox.options.fill = true;\n/**\n * Configuration options for HTML5 settings in Pillarbox.\n *\n * @see [VHS useForcedSubtitles Option]{@link https://github.com/videojs/http-streaming/blob/main/README.md#useforcedsubtitles}\n * @see [VHS overrideNative Option]{@link https://github.com/videojs/http-streaming#overridenative}\n * @type {Object}\n * @property {Object} vhs - Configuration for the Video.js HTTP Streaming.\n * @property {boolean} useForcedSubtitles - Enables the player to display forced subtitles by default.\n * Forced subtitles are pieces of information intended for display when no other text representation\n * is selected. They are used to clarify dialogue, provide alternate languages, display texted graphics,\n * or present location/person IDs that are not otherwise covered in the dubbed/localized audio.\n * @property {boolean} overrideNative - Try to use videojs-http-streaming even on platforms that\n * provide some level of HLS support natively\n */\npillarbox.options.html5 = {\n vhs: {\n useForcedSubtitles: true,\n overrideNative: !pillarbox.browser.IS_SAFARI\n }\n};\n/**\n * Configuration for the live tracker.\n *\n * @see [Video.js liveTracker Option]{@link https://videojs.com/guides/options/#livetrackertrackingthreshold}\n * @type {Object}\n * @property {number} trackingThreshold - A threshold that controls when the liveui should be shown.\n * @property {number} liveTolerance - An option that controls how far from the seekable end should be considered live playback.\n */\npillarbox.options.liveTracker = {\n trackingThreshold: 120,\n liveTolerance: 15,\n};\n/**\n * Allows the player to use the live ui that includes:\n *\n * - A progress bar for seeking within the live window\n * - A button that can be clicked to seek to the live edge with a circle indicating if you are at the live edge or not.\n *\n * @see [Video.js liveui Option]{@link https://videojs.com/guides/options/#liveui}\n * @type {boolean}\n */\npillarbox.options.liveui = true;\n/**\n * Indicates that the video is to be played \"inline\", that is within the element's playback area.\n *\n * @see [Video element playsinline attribute]{@link https://developer.mozilla.org/en-US/docs/Web/HTML/Element/video#playsinline}\n * @type {boolean}\n */\npillarbox.options.playsinline = true;\n/**\n * Enable responsive mode, this will cause the player to customize itself based on responsive breakpoints.\n *\n * @see [Video.js Responsive Option]{@link https://videojs.com/guides/options/#responsive}\n * @type {boolean}\n */\npillarbox.options.responsive = true;\n/**\n * A placeholder for accessing trackers directly from the player.\n *\n * @type {Object}\n */\npillarbox.options.trackers = {};\n\nexport default pillarbox;\n"],"names":["vjsPlayer","videojs","getComponent","Player","constructor","tag","options","ready","obj","merge","plugins","eme","audioTrack","trackSelector","audioTracks","Array","from","player","find","enabled","kind","language","bufferedRanges","ranges","i","buffered","length","start","end","push","playedPercent","Number","isFinite","duration","NaN","timePlayed","played","percentPlayed","playedRanges","seekableRanges","seekable","textTrack","textTracks","filter","includes","mode","forEach","registerComponent","VJSAudioTrackButton","MenuItem","AudioTrackMenuItem","track","tracks","label","selected","addClass","changeHandler","args","handleTracksChange","apply","addEventListener","on","removeEventListener","createEl","type","props","attrs","el","parentSpan","querySelector","indexOf","options_","appendChild","dom","className","textContent","localize","handleClick","event","player_","tech_","featuresNativeAudioTracks","AudioTrackButton","createItems","items","hideThreshold_","selectable","multiSelectable","pillarbox","VERSION","version","VhsSourceHandler","name","getPlugin","enableSmoothSeeking","fill","html5","vhs","useForcedSubtitles","overrideNative","browser","IS_SAFARI","liveTracker","trackingThreshold","liveTolerance","liveui","playsinline","responsive","trackers"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import videojs from 'video.js';
|
|
2
2
|
import 'videojs-contrib-eme';
|
|
3
3
|
|
|
4
|
-
const version = "1.
|
|
4
|
+
const version = "1.35.0";
|
|
5
5
|
|
|
6
6
|
/** @import VJSPlayer from 'video.js/dist/types/player' */
|
|
7
7
|
/** @import AudioTrack from 'video.js/dist/types/tracks/audio-track' */
|
|
@@ -397,16 +397,20 @@ pillarbox.options.fill = true;
|
|
|
397
397
|
* Configuration options for HTML5 settings in Pillarbox.
|
|
398
398
|
*
|
|
399
399
|
* @see [VHS useForcedSubtitles Option]{@link https://github.com/videojs/http-streaming/blob/main/README.md#useforcedsubtitles}
|
|
400
|
+
* @see [VHS overrideNative Option]{@link https://github.com/videojs/http-streaming#overridenative}
|
|
400
401
|
* @type {Object}
|
|
401
402
|
* @property {Object} vhs - Configuration for the Video.js HTTP Streaming.
|
|
402
403
|
* @property {boolean} useForcedSubtitles - Enables the player to display forced subtitles by default.
|
|
403
404
|
* Forced subtitles are pieces of information intended for display when no other text representation
|
|
404
405
|
* is selected. They are used to clarify dialogue, provide alternate languages, display texted graphics,
|
|
405
406
|
* or present location/person IDs that are not otherwise covered in the dubbed/localized audio.
|
|
407
|
+
* @property {boolean} overrideNative - Try to use videojs-http-streaming even on platforms that
|
|
408
|
+
* provide some level of HLS support natively
|
|
406
409
|
*/
|
|
407
410
|
pillarbox.options.html5 = {
|
|
408
411
|
vhs: {
|
|
409
|
-
useForcedSubtitles: true
|
|
412
|
+
useForcedSubtitles: true,
|
|
413
|
+
overrideNative: !pillarbox.browser.IS_SAFARI
|
|
410
414
|
}
|
|
411
415
|
};
|
|
412
416
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pillarbox-core.es.js","sources":["../src/components/player.js","../src/components/audio-track-menu-item.js","../src/pillarbox.js"],"sourcesContent":["import videojs from 'video.js';\nimport 'videojs-contrib-eme';\n\n/** @import VJSPlayer from 'video.js/dist/types/player' */\n/** @import AudioTrack from 'video.js/dist/types/tracks/audio-track' */\n/** @import TextTrack from 'video.js/dist/types/tracks/text-track' */\n/** @import {TrackSelector} from './typedef' */\n\n/**\n * @ignore\n * @type {typeof VJSPlayer}\n */\nconst vjsPlayer = videojs.getComponent('player');\n\n/**\n * This class extends the video.js Player.\n *\n * @class Player\n * @see https://docs.videojs.com/player\n */\nclass Player extends vjsPlayer {\n constructor(tag, options, ready) {\n /**\n * Configuration for plugins.\n *\n * @see [Video.js Plugins Option]{@link https://videojs.com/guides/options/#plugins}\n * @type {Object}\n * @property {boolean} eme - Enable the EME (Encrypted Media Extensions) plugin.\n */\n options = videojs.obj.merge(options, { plugins: { eme: true }});\n super(tag, options, ready);\n }\n\n /**\n * A getter/setter for the media's audio track.\n * Activates the audio track according to the language and kind properties.\n * Falls back on the first audio track found if the kind property is not satisfied.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/AudioTrack/kind\n * @see https://developer.mozilla.org/en-US/docs/Web/API/AudioTrack/language\n *\n * @param {TrackSelector} [trackSelector]\n *\n * @example\n * // Get the current audio track\n * player.audioTrack();\n *\n * @example\n * // Activate an audio track based on language and kind properties\n * player.audioTrack({language:'en', kind:'description'});\n *\n * @example\n * // Activate first audio track found corresponding to language\n * player.audioTrack({language:'fr'});\n *\n * @return {AudioTrack | undefined} The\n * currently enabled audio track. See {@link https://docs.videojs.com/audiotrack}.\n */\n audioTrack(trackSelector) {\n const audioTracks = Array.from(this.player().audioTracks());\n\n if (!trackSelector) {\n return audioTracks.find((audioTrack) => audioTrack.enabled);\n }\n\n const { kind, language } = trackSelector;\n const audioTrack =\n audioTracks.find(\n (audioTrack) =>\n audioTrack.language === language && audioTrack.kind === kind\n ) || audioTracks.find((audioTrack) => audioTrack.language === language);\n\n if (audioTrack) {\n audioTrack.enabled = true;\n }\n\n return audioTrack;\n }\n\n /**\n * Calculates an array of ranges based on the `buffered()` data.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/buffered\n *\n * @returns {Array<{start: number, end: number}>} An array of objects representing start and end points of buffered ranges.\n */\n bufferedRanges() {\n const ranges = [];\n\n for (let i = 0; i < this.buffered().length; i++) {\n const start = this.buffered().start(i);\n const end = this.buffered().end(i);\n\n ranges.push({ start, end });\n }\n\n return ranges;\n }\n\n /**\n * Get the percent (as a decimal) of the media that's been played.\n * This method is not a part of the native HTML video API.\n *\n * Live streams with DVR are not currently supported.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement#htmlmediaelement.played\n *\n * @return {number}\n * A decimal between 0 and 1 representing the percent\n * that is played 0 being 0% and 1 being 100%\n */\n playedPercent() {\n if (!Number.isFinite(this.duration())) return NaN;\n\n let timePlayed = 0;\n\n for (let i = 0; i != this.played().length; i++) {\n timePlayed += this.played().end(i) - this.played().start(i);\n }\n\n const percentPlayed = timePlayed / this.duration();\n\n return percentPlayed;\n }\n\n /**\n * Get an array of ranges based on the `played` data.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement#htmlmediaelement.played\n *\n * @returns {Array<{start: number, end: number}>} An array of objects representing start and end points of played ranges.\n */\n playedRanges() {\n const ranges = [];\n\n for (let i = 0; i < this.played().length; i++) {\n const start = this.played().start(i);\n const end = this.played().end(i);\n\n ranges.push({ start, end });\n }\n\n return ranges;\n }\n\n /**\n * Calculates an array of ranges based on the `seekable()` data.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/seekable\n *\n * @returns {Array<{start: number, end: number}>} An array of objects representing start and end points of seekable ranges.\n */\n seekableRanges() {\n const ranges = [];\n\n for (let i = 0; i < this.seekable().length; i++) {\n const start = this.seekable().start(i);\n const end = this.seekable().end(i);\n\n ranges.push({ start, end });\n }\n\n return ranges;\n }\n\n /**\n * A getter/setter for the media's text track.\n * Activates the text track according to the language and kind properties.\n * Falls back on the first text track found if the kind property is not satisfied.\n * Disables all subtitle tracks that are `showing` if the `trackSelector` is truthy but does not satisfy any condition.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/TextTrack/kind\n * @see https://developer.mozilla.org/en-US/docs/Web/API/textTrack/language\n *\n * @param {TrackSelector} [trackSelector]\n *\n * @example\n * // Get the current text track\n * player.textTrack();\n *\n * @example\n * // Disable all text tracks has a side effect\n * player.textTrack('off');\n * player.textTrack({});\n *\n * @example\n * // Activate an text track based on language and kind properties\n * player.textTrack({language:'en', kind:'captions'});\n *\n * @example\n * // Activate first text track found corresponding to language\n * player.textTrack({language:'fr'});\n *\n * @return {TextTrack | undefined} The\n * currently enabled text track. See {@link https://docs.videojs.com/texttrack}.\n */\n textTrack(trackSelector) {\n const textTracks = Array.from(this.player().textTracks()).filter(\n (textTrack) => !['chapters', 'metadata'].includes(textTrack.kind)\n );\n\n if (!trackSelector) {\n return textTracks.find((textTrack) => textTrack.mode === 'showing');\n }\n\n textTracks.forEach((textTrack) => (textTrack.mode = 'disabled'));\n\n const { kind, language } = trackSelector;\n const textTrack =\n textTracks.find((textTrack) => {\n if (textTrack.language === language && textTrack.kind === kind) {\n textTrack.mode = 'showing';\n }\n\n return textTrack.mode === 'showing';\n }) ||\n textTracks.find((textTrack) => {\n if (textTrack.language === language) {\n textTrack.mode = 'showing';\n }\n\n return textTrack.mode === 'showing';\n });\n\n return textTrack;\n }\n}\n\nvideojs.registerComponent('player', Player);\n\nexport default Player;\n","import videojs from 'video.js';\n\n/** @import MenuItem from 'video.js/dist/types/menu/menu-item' */\n\n/**\n * @ignore\n */\nconst VJSAudioTrackButton = videojs.getComponent('AudioTrackButton');\n\n/**\n * @ignore\n * @type {typeof MenuItem}\n */\nconst MenuItem = videojs.getComponent('MenuItem');\n\n/**\n * An {@link AudioTrack} {@link MenuItem}\n *\n * This is a temporary workaround.\n *\n * @extends MenuItem\n */\nclass AudioTrackMenuItem extends MenuItem {\n\n /**\n * Creates an instance of this class.\n *\n * @param {Player} player\n * The `Player` that this class should be attached to.\n *\n * @param {Object} [options]\n * The key/value store of player options.\n */\n constructor(player, options) {\n const track = options.track;\n const tracks = player.audioTracks();\n\n // Modify options for parent MenuItem class's init.\n options.label = track.label || track.language || 'Unknown';\n options.selected = track.enabled;\n\n super(player, options);\n\n this.track = track;\n\n this.addClass(`vjs-${track.kind}-menu-item`);\n\n const changeHandler = (...args) => {\n this.handleTracksChange.apply(this, args);\n };\n\n tracks.addEventListener('change', changeHandler);\n this.on('dispose', () => {\n tracks.removeEventListener('change', changeHandler);\n });\n }\n\n createEl(type, props, attrs) {\n const el = super.createEl(type, props, attrs);\n const parentSpan = el.querySelector('.vjs-menu-item-text');\n\n if (['main-desc', 'descriptions', 'description'].indexOf(this.options_.track.kind) >= 0) {\n parentSpan.appendChild(videojs.dom.createEl('span', {\n className: 'vjs-icon-placeholder'\n }, {\n 'aria-hidden': true\n }));\n parentSpan.appendChild(videojs.dom.createEl('span', {\n className: 'vjs-control-text',\n textContent: ' ' + this.localize('Descriptions')\n }));\n }\n\n return el;\n }\n\n /**\n * This gets called when an `AudioTrackMenuItem is \"clicked\". See {@link ClickableComponent}\n * for more detailed information on what a click can be.\n *\n * @param {Event} [event]\n * The `keydown`, `tap`, or `click` event that caused this function to be\n * called.\n *\n * @listens tap\n * @listens click\n */\n handleClick(event) {\n super.handleClick(event);\n\n // the audio track list will automatically toggle other tracks\n // off for us.\n this.track.enabled = true;\n\n if (!this.player_.tech_.featuresNativeAudioTracks) return;\n\n // when native audio tracks are used, we want to make sure that other tracks are turned off\n const tracks = this.player_.audioTracks();\n\n for (let i = 0; i < tracks.length; i++) {\n const track = tracks[i];\n\n // skip the current track since we enabled it above\n if (track === this.track) {\n continue;\n }\n\n track.enabled = track === this.track;\n }\n\n }\n\n /**\n * Handle any {@link AudioTrack} change.\n *\n * @param {Event} [event]\n * The {@link AudioTrackList#change} event that caused this to run.\n *\n * @listens AudioTrackList#change\n */\n handleTracksChange() {\n this.selected(this.track.enabled);\n }\n}\n\n/**\n * The base class for buttons that toggle specific {@link AudioTrack} types.\n *\n * @extends VJSAudioTrackButton\n */\nclass AudioTrackButton extends VJSAudioTrackButton {\n\n\n /**\n * Create a menu item for each audio track\n *\n * @param {AudioTrackMenuItem[]} [items=[]]\n * An array of existing menu items to use.\n *\n * @return {AudioTrackMenuItem[]}\n * An array of menu items\n */\n createItems(items = []) {\n // if there's only one audio track, there no point in showing it\n this.hideThreshold_ = 1;\n\n const tracks = this.player_.audioTracks();\n\n for (let i = 0; i < tracks.length; i++) {\n const track = tracks[i];\n\n items.push(new AudioTrackMenuItem(this.player_, {\n track,\n // MenuItem is selectable\n selectable: true,\n // MenuItem is NOT multiSelectable (i.e. only one can be marked \"selected\" at a time)\n multiSelectable: false\n }));\n }\n\n return items;\n }\n}\n\nvideojs.registerComponent('AudioTrackMenuItem', AudioTrackMenuItem);\nvideojs.registerComponent('AudioTrackButton', AudioTrackButton);\n","import { version } from '../package.json';\nimport videojs from 'video.js';\nimport './components/player.js';\nimport './components/audio-track-menu-item.js';\n\n/**\n * Pillarbox is an alias for the video.js namespace with additional options.\n *\n * @namespace\n * @see https://docs.videojs.com/module-videojs-videojs\n * @type {videojs}\n */\nconst pillarbox = videojs;\n\npillarbox.VERSION = {\n pillarbox: version,\n videojs: videojs.VERSION,\n [videojs.VhsSourceHandler.name]: videojs.VhsSourceHandler.VERSION,\n eme: videojs.getPlugin('eme').VERSION,\n};\n\n/**\n * Enable smooth seeking for Pillarbox.\n *\n * @see [Video.js enableSmoothSeeking Option]{@link https://videojs.com/guides/options/#enablesmoothseeking}\n * @type {boolean}\n * @default true\n */\npillarbox.options.enableSmoothSeeking = true;\n/**\n * Enable fill mode for the video player, allowing it to expand to fill the container.\n *\n * @see [Video.js Fill Option]{@link https://videojs.com/guides/layout/#fill-mode}\n * @type {boolean}\n * @default true\n */\npillarbox.options.fill = true;\n/**\n * Configuration options for HTML5 settings in Pillarbox.\n *\n * @see [VHS useForcedSubtitles Option]{@link https://github.com/videojs/http-streaming/blob/main/README.md#useforcedsubtitles}\n * @type {Object}\n * @property {Object} vhs - Configuration for the Video.js HTTP Streaming.\n * @property {boolean} useForcedSubtitles - Enables the player to display forced subtitles by default.\n * Forced subtitles are pieces of information intended for display when no other text representation\n * is selected. They are used to clarify dialogue, provide alternate languages, display texted graphics,\n * or present location/person IDs that are not otherwise covered in the dubbed/localized audio.\n */\npillarbox.options.html5 = {\n vhs: { useForcedSubtitles: true }\n};\n/**\n * Configuration for the live tracker.\n *\n * @see [Video.js liveTracker Option]{@link https://videojs.com/guides/options/#livetrackertrackingthreshold}\n * @type {Object}\n * @property {number} trackingThreshold - A threshold that controls when the liveui should be shown.\n * @property {number} liveTolerance - An option that controls how far from the seekable end should be considered live playback.\n */\npillarbox.options.liveTracker = {\n trackingThreshold: 120,\n liveTolerance: 15,\n};\n/**\n * Allows the player to use the live ui that includes:\n *\n * - A progress bar for seeking within the live window\n * - A button that can be clicked to seek to the live edge with a circle indicating if you are at the live edge or not.\n *\n * @see [Video.js liveui Option]{@link https://videojs.com/guides/options/#liveui}\n * @type {boolean}\n */\npillarbox.options.liveui = true;\n/**\n * Indicates that the video is to be played \"inline\", that is within the element's playback area.\n *\n * @see [Video element playsinline attribute]{@link https://developer.mozilla.org/en-US/docs/Web/HTML/Element/video#playsinline}\n * @type {boolean}\n */\npillarbox.options.playsinline = true;\n/**\n * Enable responsive mode, this will cause the player to customize itself based on responsive breakpoints.\n *\n * @see [Video.js Responsive Option]{@link https://videojs.com/guides/options/#responsive}\n * @type {boolean}\n */\npillarbox.options.responsive = true;\n/**\n * A placeholder for accessing trackers directly from the player.\n *\n * @type {Object}\n */\npillarbox.options.trackers = {};\n\nexport default pillarbox;\n"],"names":["vjsPlayer","videojs","getComponent","Player","constructor","tag","options","ready","obj","merge","plugins","eme","audioTrack","trackSelector","audioTracks","Array","from","player","find","enabled","kind","language","bufferedRanges","ranges","i","buffered","length","start","end","push","playedPercent","Number","isFinite","duration","NaN","timePlayed","played","percentPlayed","playedRanges","seekableRanges","seekable","textTrack","textTracks","filter","includes","mode","forEach","registerComponent","VJSAudioTrackButton","MenuItem","AudioTrackMenuItem","track","tracks","label","selected","addClass","changeHandler","args","handleTracksChange","apply","addEventListener","on","removeEventListener","createEl","type","props","attrs","el","parentSpan","querySelector","indexOf","options_","appendChild","dom","className","textContent","localize","handleClick","event","player_","tech_","featuresNativeAudioTracks","AudioTrackButton","createItems","items","hideThreshold_","selectable","multiSelectable","pillarbox","VERSION","version","VhsSourceHandler","name","getPlugin","enableSmoothSeeking","fill","html5","vhs","useForcedSubtitles","liveTracker","trackingThreshold","liveTolerance","liveui","playsinline","responsive","trackers"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pillarbox-core.es.js","sources":["../src/components/player.js","../src/components/audio-track-menu-item.js","../src/pillarbox.js"],"sourcesContent":["import videojs from 'video.js';\nimport 'videojs-contrib-eme';\n\n/** @import VJSPlayer from 'video.js/dist/types/player' */\n/** @import AudioTrack from 'video.js/dist/types/tracks/audio-track' */\n/** @import TextTrack from 'video.js/dist/types/tracks/text-track' */\n/** @import {TrackSelector} from './typedef' */\n\n/**\n * @ignore\n * @type {typeof VJSPlayer}\n */\nconst vjsPlayer = videojs.getComponent('player');\n\n/**\n * This class extends the video.js Player.\n *\n * @class Player\n * @see https://docs.videojs.com/player\n */\nclass Player extends vjsPlayer {\n constructor(tag, options, ready) {\n /**\n * Configuration for plugins.\n *\n * @see [Video.js Plugins Option]{@link https://videojs.com/guides/options/#plugins}\n * @type {Object}\n * @property {boolean} eme - Enable the EME (Encrypted Media Extensions) plugin.\n */\n options = videojs.obj.merge(options, { plugins: { eme: true }});\n super(tag, options, ready);\n }\n\n /**\n * A getter/setter for the media's audio track.\n * Activates the audio track according to the language and kind properties.\n * Falls back on the first audio track found if the kind property is not satisfied.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/AudioTrack/kind\n * @see https://developer.mozilla.org/en-US/docs/Web/API/AudioTrack/language\n *\n * @param {TrackSelector} [trackSelector]\n *\n * @example\n * // Get the current audio track\n * player.audioTrack();\n *\n * @example\n * // Activate an audio track based on language and kind properties\n * player.audioTrack({language:'en', kind:'description'});\n *\n * @example\n * // Activate first audio track found corresponding to language\n * player.audioTrack({language:'fr'});\n *\n * @return {AudioTrack | undefined} The\n * currently enabled audio track. See {@link https://docs.videojs.com/audiotrack}.\n */\n audioTrack(trackSelector) {\n const audioTracks = Array.from(this.player().audioTracks());\n\n if (!trackSelector) {\n return audioTracks.find((audioTrack) => audioTrack.enabled);\n }\n\n const { kind, language } = trackSelector;\n const audioTrack =\n audioTracks.find(\n (audioTrack) =>\n audioTrack.language === language && audioTrack.kind === kind\n ) || audioTracks.find((audioTrack) => audioTrack.language === language);\n\n if (audioTrack) {\n audioTrack.enabled = true;\n }\n\n return audioTrack;\n }\n\n /**\n * Calculates an array of ranges based on the `buffered()` data.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/buffered\n *\n * @returns {Array<{start: number, end: number}>} An array of objects representing start and end points of buffered ranges.\n */\n bufferedRanges() {\n const ranges = [];\n\n for (let i = 0; i < this.buffered().length; i++) {\n const start = this.buffered().start(i);\n const end = this.buffered().end(i);\n\n ranges.push({ start, end });\n }\n\n return ranges;\n }\n\n /**\n * Get the percent (as a decimal) of the media that's been played.\n * This method is not a part of the native HTML video API.\n *\n * Live streams with DVR are not currently supported.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement#htmlmediaelement.played\n *\n * @return {number}\n * A decimal between 0 and 1 representing the percent\n * that is played 0 being 0% and 1 being 100%\n */\n playedPercent() {\n if (!Number.isFinite(this.duration())) return NaN;\n\n let timePlayed = 0;\n\n for (let i = 0; i != this.played().length; i++) {\n timePlayed += this.played().end(i) - this.played().start(i);\n }\n\n const percentPlayed = timePlayed / this.duration();\n\n return percentPlayed;\n }\n\n /**\n * Get an array of ranges based on the `played` data.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement#htmlmediaelement.played\n *\n * @returns {Array<{start: number, end: number}>} An array of objects representing start and end points of played ranges.\n */\n playedRanges() {\n const ranges = [];\n\n for (let i = 0; i < this.played().length; i++) {\n const start = this.played().start(i);\n const end = this.played().end(i);\n\n ranges.push({ start, end });\n }\n\n return ranges;\n }\n\n /**\n * Calculates an array of ranges based on the `seekable()` data.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/seekable\n *\n * @returns {Array<{start: number, end: number}>} An array of objects representing start and end points of seekable ranges.\n */\n seekableRanges() {\n const ranges = [];\n\n for (let i = 0; i < this.seekable().length; i++) {\n const start = this.seekable().start(i);\n const end = this.seekable().end(i);\n\n ranges.push({ start, end });\n }\n\n return ranges;\n }\n\n /**\n * A getter/setter for the media's text track.\n * Activates the text track according to the language and kind properties.\n * Falls back on the first text track found if the kind property is not satisfied.\n * Disables all subtitle tracks that are `showing` if the `trackSelector` is truthy but does not satisfy any condition.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/TextTrack/kind\n * @see https://developer.mozilla.org/en-US/docs/Web/API/textTrack/language\n *\n * @param {TrackSelector} [trackSelector]\n *\n * @example\n * // Get the current text track\n * player.textTrack();\n *\n * @example\n * // Disable all text tracks has a side effect\n * player.textTrack('off');\n * player.textTrack({});\n *\n * @example\n * // Activate an text track based on language and kind properties\n * player.textTrack({language:'en', kind:'captions'});\n *\n * @example\n * // Activate first text track found corresponding to language\n * player.textTrack({language:'fr'});\n *\n * @return {TextTrack | undefined} The\n * currently enabled text track. See {@link https://docs.videojs.com/texttrack}.\n */\n textTrack(trackSelector) {\n const textTracks = Array.from(this.player().textTracks()).filter(\n (textTrack) => !['chapters', 'metadata'].includes(textTrack.kind)\n );\n\n if (!trackSelector) {\n return textTracks.find((textTrack) => textTrack.mode === 'showing');\n }\n\n textTracks.forEach((textTrack) => (textTrack.mode = 'disabled'));\n\n const { kind, language } = trackSelector;\n const textTrack =\n textTracks.find((textTrack) => {\n if (textTrack.language === language && textTrack.kind === kind) {\n textTrack.mode = 'showing';\n }\n\n return textTrack.mode === 'showing';\n }) ||\n textTracks.find((textTrack) => {\n if (textTrack.language === language) {\n textTrack.mode = 'showing';\n }\n\n return textTrack.mode === 'showing';\n });\n\n return textTrack;\n }\n}\n\nvideojs.registerComponent('player', Player);\n\nexport default Player;\n","import videojs from 'video.js';\n\n/** @import MenuItem from 'video.js/dist/types/menu/menu-item' */\n\n/**\n * @ignore\n */\nconst VJSAudioTrackButton = videojs.getComponent('AudioTrackButton');\n\n/**\n * @ignore\n * @type {typeof MenuItem}\n */\nconst MenuItem = videojs.getComponent('MenuItem');\n\n/**\n * An {@link AudioTrack} {@link MenuItem}\n *\n * This is a temporary workaround.\n *\n * @extends MenuItem\n */\nclass AudioTrackMenuItem extends MenuItem {\n\n /**\n * Creates an instance of this class.\n *\n * @param {Player} player\n * The `Player` that this class should be attached to.\n *\n * @param {Object} [options]\n * The key/value store of player options.\n */\n constructor(player, options) {\n const track = options.track;\n const tracks = player.audioTracks();\n\n // Modify options for parent MenuItem class's init.\n options.label = track.label || track.language || 'Unknown';\n options.selected = track.enabled;\n\n super(player, options);\n\n this.track = track;\n\n this.addClass(`vjs-${track.kind}-menu-item`);\n\n const changeHandler = (...args) => {\n this.handleTracksChange.apply(this, args);\n };\n\n tracks.addEventListener('change', changeHandler);\n this.on('dispose', () => {\n tracks.removeEventListener('change', changeHandler);\n });\n }\n\n createEl(type, props, attrs) {\n const el = super.createEl(type, props, attrs);\n const parentSpan = el.querySelector('.vjs-menu-item-text');\n\n if (['main-desc', 'descriptions', 'description'].indexOf(this.options_.track.kind) >= 0) {\n parentSpan.appendChild(videojs.dom.createEl('span', {\n className: 'vjs-icon-placeholder'\n }, {\n 'aria-hidden': true\n }));\n parentSpan.appendChild(videojs.dom.createEl('span', {\n className: 'vjs-control-text',\n textContent: ' ' + this.localize('Descriptions')\n }));\n }\n\n return el;\n }\n\n /**\n * This gets called when an `AudioTrackMenuItem is \"clicked\". See {@link ClickableComponent}\n * for more detailed information on what a click can be.\n *\n * @param {Event} [event]\n * The `keydown`, `tap`, or `click` event that caused this function to be\n * called.\n *\n * @listens tap\n * @listens click\n */\n handleClick(event) {\n super.handleClick(event);\n\n // the audio track list will automatically toggle other tracks\n // off for us.\n this.track.enabled = true;\n\n if (!this.player_.tech_.featuresNativeAudioTracks) return;\n\n // when native audio tracks are used, we want to make sure that other tracks are turned off\n const tracks = this.player_.audioTracks();\n\n for (let i = 0; i < tracks.length; i++) {\n const track = tracks[i];\n\n // skip the current track since we enabled it above\n if (track === this.track) {\n continue;\n }\n\n track.enabled = track === this.track;\n }\n\n }\n\n /**\n * Handle any {@link AudioTrack} change.\n *\n * @param {Event} [event]\n * The {@link AudioTrackList#change} event that caused this to run.\n *\n * @listens AudioTrackList#change\n */\n handleTracksChange() {\n this.selected(this.track.enabled);\n }\n}\n\n/**\n * The base class for buttons that toggle specific {@link AudioTrack} types.\n *\n * @extends VJSAudioTrackButton\n */\nclass AudioTrackButton extends VJSAudioTrackButton {\n\n\n /**\n * Create a menu item for each audio track\n *\n * @param {AudioTrackMenuItem[]} [items=[]]\n * An array of existing menu items to use.\n *\n * @return {AudioTrackMenuItem[]}\n * An array of menu items\n */\n createItems(items = []) {\n // if there's only one audio track, there no point in showing it\n this.hideThreshold_ = 1;\n\n const tracks = this.player_.audioTracks();\n\n for (let i = 0; i < tracks.length; i++) {\n const track = tracks[i];\n\n items.push(new AudioTrackMenuItem(this.player_, {\n track,\n // MenuItem is selectable\n selectable: true,\n // MenuItem is NOT multiSelectable (i.e. only one can be marked \"selected\" at a time)\n multiSelectable: false\n }));\n }\n\n return items;\n }\n}\n\nvideojs.registerComponent('AudioTrackMenuItem', AudioTrackMenuItem);\nvideojs.registerComponent('AudioTrackButton', AudioTrackButton);\n","import { version } from '../package.json';\nimport videojs from 'video.js';\nimport './components/player.js';\nimport './components/audio-track-menu-item.js';\n\n/**\n * Pillarbox is an alias for the video.js namespace with additional options.\n *\n * @namespace\n * @see https://docs.videojs.com/module-videojs-videojs\n * @type {videojs}\n */\nconst pillarbox = videojs;\n\npillarbox.VERSION = {\n pillarbox: version,\n videojs: videojs.VERSION,\n [videojs.VhsSourceHandler.name]: videojs.VhsSourceHandler.VERSION,\n eme: videojs.getPlugin('eme').VERSION,\n};\n\n/**\n * Enable smooth seeking for Pillarbox.\n *\n * @see [Video.js enableSmoothSeeking Option]{@link https://videojs.com/guides/options/#enablesmoothseeking}\n * @type {boolean}\n * @default true\n */\npillarbox.options.enableSmoothSeeking = true;\n/**\n * Enable fill mode for the video player, allowing it to expand to fill the container.\n *\n * @see [Video.js Fill Option]{@link https://videojs.com/guides/layout/#fill-mode}\n * @type {boolean}\n * @default true\n */\npillarbox.options.fill = true;\n/**\n * Configuration options for HTML5 settings in Pillarbox.\n *\n * @see [VHS useForcedSubtitles Option]{@link https://github.com/videojs/http-streaming/blob/main/README.md#useforcedsubtitles}\n * @see [VHS overrideNative Option]{@link https://github.com/videojs/http-streaming#overridenative}\n * @type {Object}\n * @property {Object} vhs - Configuration for the Video.js HTTP Streaming.\n * @property {boolean} useForcedSubtitles - Enables the player to display forced subtitles by default.\n * Forced subtitles are pieces of information intended for display when no other text representation\n * is selected. They are used to clarify dialogue, provide alternate languages, display texted graphics,\n * or present location/person IDs that are not otherwise covered in the dubbed/localized audio.\n * @property {boolean} overrideNative - Try to use videojs-http-streaming even on platforms that\n * provide some level of HLS support natively\n */\npillarbox.options.html5 = {\n vhs: {\n useForcedSubtitles: true,\n overrideNative: !pillarbox.browser.IS_SAFARI\n }\n};\n/**\n * Configuration for the live tracker.\n *\n * @see [Video.js liveTracker Option]{@link https://videojs.com/guides/options/#livetrackertrackingthreshold}\n * @type {Object}\n * @property {number} trackingThreshold - A threshold that controls when the liveui should be shown.\n * @property {number} liveTolerance - An option that controls how far from the seekable end should be considered live playback.\n */\npillarbox.options.liveTracker = {\n trackingThreshold: 120,\n liveTolerance: 15,\n};\n/**\n * Allows the player to use the live ui that includes:\n *\n * - A progress bar for seeking within the live window\n * - A button that can be clicked to seek to the live edge with a circle indicating if you are at the live edge or not.\n *\n * @see [Video.js liveui Option]{@link https://videojs.com/guides/options/#liveui}\n * @type {boolean}\n */\npillarbox.options.liveui = true;\n/**\n * Indicates that the video is to be played \"inline\", that is within the element's playback area.\n *\n * @see [Video element playsinline attribute]{@link https://developer.mozilla.org/en-US/docs/Web/HTML/Element/video#playsinline}\n * @type {boolean}\n */\npillarbox.options.playsinline = true;\n/**\n * Enable responsive mode, this will cause the player to customize itself based on responsive breakpoints.\n *\n * @see [Video.js Responsive Option]{@link https://videojs.com/guides/options/#responsive}\n * @type {boolean}\n */\npillarbox.options.responsive = true;\n/**\n * A placeholder for accessing trackers directly from the player.\n *\n * @type {Object}\n */\npillarbox.options.trackers = {};\n\nexport default pillarbox;\n"],"names":["vjsPlayer","videojs","getComponent","Player","constructor","tag","options","ready","obj","merge","plugins","eme","audioTrack","trackSelector","audioTracks","Array","from","player","find","enabled","kind","language","bufferedRanges","ranges","i","buffered","length","start","end","push","playedPercent","Number","isFinite","duration","NaN","timePlayed","played","percentPlayed","playedRanges","seekableRanges","seekable","textTrack","textTracks","filter","includes","mode","forEach","registerComponent","VJSAudioTrackButton","MenuItem","AudioTrackMenuItem","track","tracks","label","selected","addClass","changeHandler","args","handleTracksChange","apply","addEventListener","on","removeEventListener","createEl","type","props","attrs","el","parentSpan","querySelector","indexOf","options_","appendChild","dom","className","textContent","localize","handleClick","event","player_","tech_","featuresNativeAudioTracks","AudioTrackButton","createItems","items","hideThreshold_","selectable","multiSelectable","pillarbox","VERSION","version","VhsSourceHandler","name","getPlugin","enableSmoothSeeking","fill","html5","vhs","useForcedSubtitles","overrideNative","browser","IS_SAFARI","liveTracker","trackingThreshold","liveTolerance","liveui","playsinline","responsive","trackers"],"mappings":"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"}
|
package/dist/pillarbox.cjs
CHANGED
|
@@ -94,7 +94,7 @@ function _toPropertyKey(t) {
|
|
|
94
94
|
return "symbol" == typeof i ? i : i + "";
|
|
95
95
|
}
|
|
96
96
|
|
|
97
|
-
const version = "1.
|
|
97
|
+
const version = "1.35.0";
|
|
98
98
|
|
|
99
99
|
/** @import VJSPlayer from 'video.js/dist/types/player' */
|
|
100
100
|
/** @import AudioTrack from 'video.js/dist/types/tracks/audio-track' */
|
|
@@ -490,16 +490,20 @@ pillarbox.options.fill = true;
|
|
|
490
490
|
* Configuration options for HTML5 settings in Pillarbox.
|
|
491
491
|
*
|
|
492
492
|
* @see [VHS useForcedSubtitles Option]{@link https://github.com/videojs/http-streaming/blob/main/README.md#useforcedsubtitles}
|
|
493
|
+
* @see [VHS overrideNative Option]{@link https://github.com/videojs/http-streaming#overridenative}
|
|
493
494
|
* @type {Object}
|
|
494
495
|
* @property {Object} vhs - Configuration for the Video.js HTTP Streaming.
|
|
495
496
|
* @property {boolean} useForcedSubtitles - Enables the player to display forced subtitles by default.
|
|
496
497
|
* Forced subtitles are pieces of information intended for display when no other text representation
|
|
497
498
|
* is selected. They are used to clarify dialogue, provide alternate languages, display texted graphics,
|
|
498
499
|
* or present location/person IDs that are not otherwise covered in the dubbed/localized audio.
|
|
500
|
+
* @property {boolean} overrideNative - Try to use videojs-http-streaming even on platforms that
|
|
501
|
+
* provide some level of HLS support natively
|
|
499
502
|
*/
|
|
500
503
|
pillarbox.options.html5 = {
|
|
501
504
|
vhs: {
|
|
502
|
-
useForcedSubtitles: true
|
|
505
|
+
useForcedSubtitles: true,
|
|
506
|
+
overrideNative: !pillarbox.browser.IS_SAFARI
|
|
503
507
|
}
|
|
504
508
|
};
|
|
505
509
|
/**
|
|
@@ -2926,9 +2930,6 @@ class MediaComposition {
|
|
|
2926
2930
|
if (!this.mainChapter) {
|
|
2927
2931
|
this.mainChapter = this.findChapterByUrn(this.chapterUrn);
|
|
2928
2932
|
}
|
|
2929
|
-
if (!this.mainChapter && this.chapterList && this.chapterList.length > 0) {
|
|
2930
|
-
[this.mainChapter] = this.chapterList;
|
|
2931
|
-
}
|
|
2932
2933
|
return this.mainChapter;
|
|
2933
2934
|
}
|
|
2934
2935
|
|
|
@@ -4542,6 +4543,7 @@ pillarbox.options.srgOptions = {
|
|
|
4542
4543
|
};
|
|
4543
4544
|
|
|
4544
4545
|
exports.DataProvider = DataProvider;
|
|
4546
|
+
exports.ImageUtils = Image;
|
|
4545
4547
|
exports.MediaComposition = MediaComposition;
|
|
4546
4548
|
exports.PillarboxMonitoring = PillarboxMonitoring;
|
|
4547
4549
|
exports.Player = Player;
|