cloudinary-video-player 2.3.4-edge.0 → 2.3.4-edge.10

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.
@@ -545,21 +545,20 @@
545
545
  }
546
546
  }
547
547
  .cld-video-player .vjs-text-track-display {
548
- margin: auto;
549
- bottom: 0 !important;
550
- }
551
-
552
- .cld-video-player .vjs-text-track-display > div {
553
- margin: 3% !important;
548
+ bottom: 5em;
549
+ z-index: 2;
554
550
  }
555
551
 
556
552
  .cld-video-player .vjs-text-track-display.cld-paced-text-tracks b {
557
553
  color: var(--color-accent);
558
554
  }
559
555
 
556
+ .cld-video-player.vjs-controls-disabled .vjs-text-track-display, .cld-video-player.vjs-user-inactive.vjs-playing .vjs-text-track-display {
557
+ bottom: 1em;
558
+ }
559
+
560
560
  .cld-video-player .vjs-text-track-cue {
561
- top: auto !important;
562
- bottom: 3.4rem !important;
561
+ max-width: 100%;
563
562
  }
564
563
 
565
564
  .cld-video-player .vjs-text-track-cue > div {
@@ -568,10 +567,6 @@
568
567
  background-color: rgba(0, 0, 0, 0.5) !important;
569
568
  }
570
569
 
571
- .cld-video-player.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-text-track-cue {
572
- bottom: 1.5rem !important;
573
- }
574
-
575
570
  .cld-video-player .cld-paced-text-tracks .vjs-text-track-cue b {
576
571
  color: var(--color-accent);
577
572
  }
@@ -715,7 +710,7 @@
715
710
  visibility: visible;
716
711
  }
717
712
  .cld-video-player.vjs-error .vjs-error-display {
718
- background: #90A0B3;
713
+ background: #90a0b3;
719
714
  }
720
715
  .cld-video-player.vjs-error .vjs-error-display:before {
721
716
  display: none;
@@ -743,18 +738,28 @@
743
738
  visibility: hidden;
744
739
  opacity: 0;
745
740
  }
746
- .cld-video-player .vjs-progress-control.vjs-control::before, .cld-video-player .vjs-control-bar .vjs-control.vjs-progress-control-events-blocker::before {
741
+ .cld-video-player::before {
747
742
  content: "";
748
743
  pointer-events: none;
749
744
  position: absolute;
750
- bottom: 0;
745
+ bottom: 3em;
751
746
  left: 0;
752
747
  right: 0;
753
748
  width: 100%;
754
749
  height: 5rem;
755
- background: linear-gradient(to bottom, transparent 0%, currentColor 100%);
750
+ background: linear-gradient(to bottom, transparent 0%, var(--color-base) 100%);
756
751
  opacity: 0.4;
757
- z-index: 0;
752
+ z-index: 1;
753
+ font-size: 120%;
754
+ display: none;
755
+ }
756
+ .cld-video-player.vjs-audio-only-mode::before, .cld-video-player.vjs-has-started::before {
757
+ display: flex;
758
+ transition: opacity 0.1s;
759
+ }
760
+ .cld-video-player.vjs-has-started.vjs-user-inactive.vjs-playing::before {
761
+ opacity: 0;
762
+ transition: opacity 1s;
758
763
  }
759
764
  .cld-video-player .vjs-control {
760
765
  width: 2.5em;
@@ -8327,7 +8327,11 @@ __webpack_require__.r(__webpack_exports__);
8327
8327
  allowUsageReport: true,
8328
8328
  playedEventPercents: [25, 50, 75, 100],
8329
8329
  html5: {
8330
- nativeTextTracks: false
8330
+ handlePartialData: false,
8331
+ nativeTextTracks: false,
8332
+ vhs: {
8333
+ overrideNative: (video_js__WEBPACK_IMPORTED_MODULE_0___default())?.browser ? !(video_js__WEBPACK_IMPORTED_MODULE_0___default().browser).IS_IOS && !(video_js__WEBPACK_IMPORTED_MODULE_0___default().browser).IS_SAFARI : true
8334
+ }
8331
8335
  },
8332
8336
  disableSeekWhileScrubbingOnMobile: true
8333
8337
  });
@@ -9384,7 +9388,7 @@ class CloudinaryAnalytics {
9384
9388
  this.cloudinaryAnalytics.startManualTracking(metadata, {
9385
9389
  ...(lodash_isPlainObject__WEBPACK_IMPORTED_MODULE_1___default()(this.analyticsOptions) ? this.analyticsOptions : {}),
9386
9390
  videoPlayerType: 'cloudinary video player',
9387
- videoPlayerVersion: "2.3.4-edge.0"
9391
+ videoPlayerVersion: "2.3.4-edge.10"
9388
9392
  });
9389
9393
  } else if (this.currentVideMetadata.cloudName !== metadata.cloudName || this.currentVideMetadata.publicId !== metadata.publicId) {
9390
9394
  this.cloudinaryAnalytics.stopManualTracking();
@@ -9757,7 +9761,7 @@ class CloudinaryContext {
9757
9761
  options.sourceTypes = options.sourceTypes || _this.sourceTypes();
9758
9762
  options.poster = options.poster || posterOptionsForCurrent();
9759
9763
  options.queryParams = Object.assign(options.queryParams || {}, options.usageReport ? {
9760
- _s: `vp-${"2.3.4-edge.0"}`
9764
+ _s: `vp-${"2.3.4-edge.10"}`
9761
9765
  } : {});
9762
9766
  if (options.sourceTypes.indexOf('audio') > -1) {
9763
9767
  builtSrc = new _models_audio_source_audio_source__WEBPACK_IMPORTED_MODULE_7__["default"](publicId, options);
@@ -11012,7 +11016,7 @@ const contextMenuContent = player => {
11012
11016
  const isFullscreen = player.isFullscreen();
11013
11017
  const aboutMenuItem = {
11014
11018
  class: 'player-version',
11015
- label: 'Cloudinary Player v' + "2.3.4-edge.0"
11019
+ label: 'Cloudinary Player v' + "2.3.4-edge.10"
11016
11020
  };
11017
11021
  if (!player.controls()) {
11018
11022
  return [aboutMenuItem];
@@ -13217,6 +13221,7 @@ const getAnalyticsFromPlayerOptions = playerOptions => filterDefaultsAndNulls({
13217
13221
  width: playerOptions.width,
13218
13222
  withCredentials: playerOptions.withCredentials,
13219
13223
  debug: playerOptions.debug,
13224
+ type: playerOptions.type,
13220
13225
  colors: playerOptions.colors && JSON.stringify(playerOptions.colors),
13221
13226
  controlBar: JSON.stringify(playerOptions.controlBar) !== JSON.stringify(config_defaults__WEBPACK_IMPORTED_MODULE_0__["default"].controlBar) && JSON.stringify(playerOptions.controlBar),
13222
13227
  ...getCloudinaryOptions(playerOptions.cloudinary),
@@ -13448,6 +13453,41 @@ function sliceAndUnsetProperties(obj) {
13448
13453
  }
13449
13454
 
13450
13455
 
13456
+ /***/ }),
13457
+
13458
+ /***/ "./utils/video-retry.js":
13459
+ /*!******************************!*\
13460
+ !*** ./utils/video-retry.js ***!
13461
+ \******************************/
13462
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
13463
+
13464
+ "use strict";
13465
+ __webpack_require__.r(__webpack_exports__);
13466
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
13467
+ /* harmony export */ checkIfVideoIsAvailable: () => (/* binding */ checkIfVideoIsAvailable),
13468
+ /* harmony export */ isVideoInReadyState: () => (/* binding */ isVideoInReadyState)
13469
+ /* harmony export */ });
13470
+ const checkIfVideoIsAvailable = function (videoUrl) {
13471
+ let videoType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'default';
13472
+ return new Promise((resolve, reject) => {
13473
+ const tempVideo = document.createElement('video');
13474
+ tempVideo.setAttribute('crossorigin', 'anonymous');
13475
+ const targetEvent = videoType === 'live' ? 'onprogress' : 'canplay';
13476
+ tempVideo[targetEvent] = () => {
13477
+ tempVideo.onerror = null;
13478
+ tempVideo[targetEvent] = null;
13479
+ resolve();
13480
+ };
13481
+ tempVideo.onerror = () => reject();
13482
+ tempVideo.src = videoUrl;
13483
+ tempVideo.load();
13484
+ });
13485
+ };
13486
+ const isVideoInReadyState = readyState => {
13487
+ return readyState >= (/iPad|iPhone|iPod/.test(navigator.userAgent) ? 1 : 4);
13488
+ };
13489
+
13490
+
13451
13491
  /***/ }),
13452
13492
 
13453
13493
  /***/ "./validators/validators-functions.js":
@@ -13556,26 +13596,14 @@ __webpack_require__.r(__webpack_exports__);
13556
13596
  /* harmony export */ AUTO_PLAY_MODE: () => (/* binding */ AUTO_PLAY_MODE),
13557
13597
  /* harmony export */ CLOUDINARY_CONFIG_PARAM: () => (/* binding */ CLOUDINARY_CONFIG_PARAM),
13558
13598
  /* harmony export */ CLOUDINARY_PARAMS: () => (/* binding */ CLOUDINARY_PARAMS),
13559
- /* harmony export */ DEFAULT_HLS_OPTIONS: () => (/* binding */ DEFAULT_HLS_OPTIONS),
13560
13599
  /* harmony export */ FLOATING_TO: () => (/* binding */ FLOATING_TO),
13561
13600
  /* harmony export */ FLUID_CLASS_NAME: () => (/* binding */ FLUID_CLASS_NAME),
13562
13601
  /* harmony export */ PLAYER_PARAMS: () => (/* binding */ PLAYER_PARAMS),
13563
13602
  /* harmony export */ PRELOAD: () => (/* binding */ PRELOAD)
13564
13603
  /* harmony export */ });
13565
- /* harmony import */ var video_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! video.js */ "../node_modules/video.js/dist/video.es-exposed.js");
13566
- /* harmony import */ var video_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(video_js__WEBPACK_IMPORTED_MODULE_0__);
13567
-
13568
13604
  const CLOUDINARY_PARAMS = ['cloudinaryConfig', 'transformation', 'sourceTypes', 'sourceTransformation', 'posterOptions', 'autoShowRecommendations', 'fontFace', 'secure'];
13569
- const PLAYER_PARAMS = CLOUDINARY_PARAMS.concat(['_internalAnalyticsMetadata', 'debug', 'publicId', 'source', 'autoplayMode', 'playedEventPercents', 'playedEventTimes', 'analytics', 'cloudinaryAnalytics', 'allowUsageReport', 'fluid', 'ima', 'playlistWidget', 'hideContextMenu', 'colors', 'floatingWhenNotVisible', 'ads', 'showJumpControls', 'chaptersButton', 'pictureInPictureToggle', 'textTracks', 'qualitySelector', 'fetchErrorUsingGet', 'withCredentials', 'seekThumbnails', 'aiHighlightsGraph', 'chapters', 'queryParams']);
13605
+ const PLAYER_PARAMS = CLOUDINARY_PARAMS.concat(['_internalAnalyticsMetadata', 'debug', 'publicId', 'source', 'autoplayMode', 'playedEventPercents', 'playedEventTimes', 'analytics', 'cloudinaryAnalytics', 'allowUsageReport', 'fluid', 'ima', 'playlistWidget', 'hideContextMenu', 'colors', 'floatingWhenNotVisible', 'ads', 'showJumpControls', 'chaptersButton', 'pictureInPictureToggle', 'textTracks', 'qualitySelector', 'fetchErrorUsingGet', 'withCredentials', 'seekThumbnails', 'aiHighlightsGraph', 'chapters', 'queryParams', 'type']);
13570
13606
  const CLOUDINARY_CONFIG_PARAM = ['cloud_name', 'secure', 'private_cdn', 'secure_distribution', 'cdn_subdomain', 'secure_cdn_subdomain', 'cname', 'shorten', 'sign_url', 'api_secret', 'url_suffix', 'use_root_path', 'auth_token'];
13571
- const DEFAULT_HLS_OPTIONS = {
13572
- html5: {
13573
- handlePartialData: false,
13574
- vhs: {
13575
- overrideNative: (video_js__WEBPACK_IMPORTED_MODULE_0___default()) && (video_js__WEBPACK_IMPORTED_MODULE_0___default().browser) ? !(video_js__WEBPACK_IMPORTED_MODULE_0___default().browser).IS_IOS && !(video_js__WEBPACK_IMPORTED_MODULE_0___default().browser).IS_SAFARI : true
13576
- }
13577
- }
13578
- };
13579
13607
  const FLUID_CLASS_NAME = 'cld-fluid';
13580
13608
  const AUTO_PLAY_MODE = {
13581
13609
  ALWAYS: 'always',
@@ -13612,7 +13640,7 @@ __webpack_require__.r(__webpack_exports__);
13612
13640
  /* harmony export */ });
13613
13641
  /* harmony import */ var video_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! video.js */ "../node_modules/video.js/dist/video.es-exposed.js");
13614
13642
  /* harmony import */ var video_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(video_js__WEBPACK_IMPORTED_MODULE_0__);
13615
- /* harmony import */ var uuid__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! uuid */ "../node_modules/uuid/dist/esm-browser/v4.js");
13643
+ /* harmony import */ var uuid__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! uuid */ "../node_modules/uuid/dist/esm-browser/v4.js");
13616
13644
  /* harmony import */ var lodash_isEmpty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash/isEmpty */ "../node_modules/lodash/isEmpty.js");
13617
13645
  /* harmony import */ var lodash_isEmpty__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash_isEmpty__WEBPACK_IMPORTED_MODULE_1__);
13618
13646
  /* harmony import */ var lodash_get__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash/get */ "../node_modules/lodash/get.js");
@@ -13638,7 +13666,9 @@ __webpack_require__.r(__webpack_exports__);
13638
13666
  /* harmony import */ var _utils_consts__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./utils/consts */ "./utils/consts.js");
13639
13667
  /* harmony import */ var _utils_get_analytics_player_options__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./utils/get-analytics-player-options */ "./utils/get-analytics-player-options.js");
13640
13668
  /* harmony import */ var _plugins_cloudinary_common__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./plugins/cloudinary/common */ "./plugins/cloudinary/common.js");
13641
- /* harmony import */ var _components_qualitySelector_qualitySelector_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./components/qualitySelector/qualitySelector.js */ "./components/qualitySelector/qualitySelector.js");
13669
+ /* harmony import */ var _utils_video_retry__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./utils/video-retry */ "./utils/video-retry.js");
13670
+ /* harmony import */ var _components_qualitySelector_qualitySelector_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./components/qualitySelector/qualitySelector.js */ "./components/qualitySelector/qualitySelector.js");
13671
+
13642
13672
 
13643
13673
 
13644
13674
 
@@ -13665,6 +13695,7 @@ __webpack_require__.r(__webpack_exports__);
13665
13695
  // #endif
13666
13696
 
13667
13697
  const INTERNAL_ANALYTICS_URL = 'https://analytics-api-s.cloudinary.com';
13698
+ const RETRY_DEFAULT_TIMEOUT = 5 * 1000;
13668
13699
 
13669
13700
  // Register all plugins
13670
13701
  Object.keys(_plugins__WEBPACK_IMPORTED_MODULE_8__["default"]).forEach(key => {
@@ -13684,7 +13715,6 @@ class VideoPlayer extends _utils__WEBPACK_IMPORTED_MODULE_9__["default"].mixin(_
13684
13715
  }
13685
13716
  constructor(elem, initOptions, ready) {
13686
13717
  super();
13687
- this.nbCalls = 0;
13688
13718
  this.videoElement = (0,_video_player_utils__WEBPACK_IMPORTED_MODULE_14__.getResolveVideoElement)(elem);
13689
13719
  this.options = (0,_video_player_utils__WEBPACK_IMPORTED_MODULE_14__.extractOptions)(this.videoElement, initOptions);
13690
13720
  this._videojsOptions = this.options.videojsOptions;
@@ -13725,7 +13755,7 @@ class VideoPlayer extends _utils__WEBPACK_IMPORTED_MODULE_9__["default"].mixin(_
13725
13755
  }
13726
13756
  getVPInstanceId() {
13727
13757
  if (!this.vpInstanceId) {
13728
- this.vpInstanceId = (0,uuid__WEBPACK_IMPORTED_MODULE_21__["default"])();
13758
+ this.vpInstanceId = (0,uuid__WEBPACK_IMPORTED_MODULE_22__["default"])();
13729
13759
  }
13730
13760
  return this.vpInstanceId;
13731
13761
  }
@@ -13740,7 +13770,7 @@ class VideoPlayer extends _utils__WEBPACK_IMPORTED_MODULE_9__["default"].mixin(_
13740
13770
  const analyticsData = (0,_utils_get_analytics_player_options__WEBPACK_IMPORTED_MODULE_18__.getAnalyticsFromPlayerOptions)(options);
13741
13771
  const analyticsParams = new URLSearchParams(analyticsData).toString();
13742
13772
  const baseParams = new URLSearchParams({
13743
- vpVersion: "2.3.4-edge.0",
13773
+ vpVersion: "2.3.4-edge.10",
13744
13774
  vpInstanceId: this.getVPInstanceId(),
13745
13775
  // #if (process.env.WEBPACK_BUILD_LIGHT)
13746
13776
  // vpLightBuild: true,
@@ -13753,8 +13783,9 @@ class VideoPlayer extends _utils__WEBPACK_IMPORTED_MODULE_9__["default"].mixin(_
13753
13783
  console.warn(err);
13754
13784
  }
13755
13785
  }
13756
- _clearTimeOut = () => {
13757
- this.videojs.clearTimeout(this.reTryId);
13786
+ _resetReTryVideoState = () => {
13787
+ this.reTryVideoStateRetriesCount = 0;
13788
+ this.videojs.clearTimeout(this.reTryVideoStateTimeoutId);
13758
13789
  };
13759
13790
  _setVideoJsListeners(ready) {
13760
13791
  this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_17__.PLAYER_EVENT.ERROR, () => {
@@ -13764,27 +13795,35 @@ class VideoPlayer extends _utils__WEBPACK_IMPORTED_MODULE_9__["default"].mixin(_
13764
13795
 
13765
13796
  /*
13766
13797
  error codes :
13767
- 3 - media playback was aborted due to a corruption problem
13768
- 4 - media error, media source not supported
13798
+ 3 - media playback was aborted due to a corruption problem
13799
+ 4 - media error, media source not supported
13769
13800
  */
13770
13801
  const isCorrupted = error.code === 3 && (video_js__WEBPACK_IMPORTED_MODULE_0___default().browser).IS_SAFARI;
13771
13802
  if ([isCorrupted, error.code === 4].includes(true) && [_utils_consts__WEBPACK_IMPORTED_MODULE_17__.SOURCE_TYPE.AUDIO, _utils_consts__WEBPACK_IMPORTED_MODULE_17__.SOURCE_TYPE.VIDEO].includes(type)) {
13772
- this.videojs.error(null);
13773
- _utils__WEBPACK_IMPORTED_MODULE_9__["default"].handleCldError(this, this.playerOptions);
13803
+ if (this.isLiveStream) {
13804
+ this.videojs.error({
13805
+ code: _plugins_cloudinary_common__WEBPACK_IMPORTED_MODULE_19__.ERROR_CODE.CUSTOM,
13806
+ message: 'Live Stream not started'
13807
+ });
13808
+ this.reloadVideoUntilAvailable();
13809
+ } else {
13810
+ this.videojs.error(null);
13811
+ _utils__WEBPACK_IMPORTED_MODULE_9__["default"].handleCldError(this, this.playerOptions);
13812
+ }
13774
13813
  } else {
13775
- this._clearTimeOut();
13814
+ this._resetReTryVideoState();
13776
13815
  }
13777
13816
  }
13778
13817
  });
13779
13818
  this.videojs.tech_.on(_utils_consts__WEBPACK_IMPORTED_MODULE_17__.PLAYER_EVENT.RETRY_PLAYLIST, () => {
13780
13819
  const mediaRequestsErrored = lodash_get__WEBPACK_IMPORTED_MODULE_2___default()(this.videojs, 'hls.stats.mediaRequestsErrored', 0);
13781
13820
  if (mediaRequestsErrored > 0) {
13782
- this._clearTimeOut();
13821
+ this._resetReTryVideoState();
13783
13822
  _utils__WEBPACK_IMPORTED_MODULE_9__["default"].handleCldError(this, this.playerOptions);
13784
13823
  }
13785
13824
  });
13786
- this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_17__.PLAYER_EVENT.PLAY, this._clearTimeOut);
13787
- this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_17__.PLAYER_EVENT.CAN_PLAY_THROUGH, this._clearTimeOut);
13825
+ this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_17__.PLAYER_EVENT.PLAY, this._resetReTryVideoState);
13826
+ this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_17__.PLAYER_EVENT.CAN_PLAY_THROUGH, this._resetReTryVideoState);
13788
13827
  this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_17__.PLAYER_EVENT.CLD_SOURCE_CHANGED, this._onSourceChange.bind(this));
13789
13828
  this.videojs.ready(() => {
13790
13829
  this._onReady();
@@ -13950,12 +13989,12 @@ class VideoPlayer extends _utils__WEBPACK_IMPORTED_MODULE_9__["default"].mixin(_
13950
13989
  default: 'auto'
13951
13990
  });
13952
13991
  this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_17__.PLAYER_EVENT.LOADED_METADATA, () => {
13953
- _components_qualitySelector_qualitySelector_js__WEBPACK_IMPORTED_MODULE_20__["default"].init(this.videojs);
13992
+ _components_qualitySelector_qualitySelector_js__WEBPACK_IMPORTED_MODULE_21__["default"].init(this.videojs);
13954
13993
  });
13955
13994
 
13956
13995
  // Show only if more than one option available
13957
13996
  this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_17__.PLAYER_EVENT.LOADED_DATA, () => {
13958
- _components_qualitySelector_qualitySelector_js__WEBPACK_IMPORTED_MODULE_20__["default"].setVisibility(this.videojs);
13997
+ _components_qualitySelector_qualitySelector_js__WEBPACK_IMPORTED_MODULE_21__["default"].setVisibility(this.videojs);
13959
13998
  });
13960
13999
  }
13961
14000
  }
@@ -14016,24 +14055,43 @@ class VideoPlayer extends _utils__WEBPACK_IMPORTED_MODULE_9__["default"].mixin(_
14016
14055
  this.videojs.cloudinaryAnalytics(options);
14017
14056
  }
14018
14057
  }
14019
- reTryVideo(maxNumberOfCalls, timeout) {
14020
- if (!this.isVideoReady()) {
14021
- if (this.nbCalls < maxNumberOfCalls) {
14022
- this.nbCalls++;
14023
- this.reTryId = this.videojs.setTimeout(() => this.reTryVideo(maxNumberOfCalls, timeout), timeout);
14058
+ reTryVideoStateUntilAvailable() {
14059
+ let maxNumberOfCalls = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Number.POSITIVE_INFINITY;
14060
+ let timeout = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : RETRY_DEFAULT_TIMEOUT;
14061
+ if (typeof this.reTryVideoStateRetriesCount !== 'number') {
14062
+ this.reTryVideoStateRetriesCount = 0;
14063
+ }
14064
+ if (!(0,_utils_video_retry__WEBPACK_IMPORTED_MODULE_20__.isVideoInReadyState)(this.videojs.readyState())) {
14065
+ if (this.reTryVideoStateRetriesCount < maxNumberOfCalls) {
14066
+ this.reTryVideoStateRetriesCount++;
14067
+ this.reTryVideoStateTimeoutId = this.videojs.setTimeout(() => this.reTryVideoStateUntilAvailable(maxNumberOfCalls, timeout), timeout);
14024
14068
  } else {
14025
14069
  let e = new Error('Video is not ready please try later');
14026
14070
  this.videojs.trigger('error', e);
14027
14071
  }
14072
+ } else {
14073
+ this.reTryVideoStateRetriesCount = 0;
14028
14074
  }
14029
14075
  }
14030
- isVideoReady() {
14031
- const s = this.videojs.readyState();
14032
- if (s >= (/iPad|iPhone|iPod/.test(navigator.userAgent) ? 1 : 4)) {
14033
- this.nbCalls = 0;
14034
- return true;
14076
+ _resetReloadVideo = () => {
14077
+ this.reloadVideoRetriesCount = 0;
14078
+ this.videojs.clearTimeout(this.reloadVideoTimeoutId);
14079
+ };
14080
+ reloadVideoUntilAvailable() {
14081
+ let maxNumberOfCalls = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Number.POSITIVE_INFINITY;
14082
+ let timeout = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : RETRY_DEFAULT_TIMEOUT;
14083
+ if (typeof this.reloadVideoRetriesCount !== 'number') {
14084
+ this.reloadVideoRetriesCount = 0;
14085
+ }
14086
+ if (this.reloadVideoRetriesCount < maxNumberOfCalls) {
14087
+ this.reloadVideoRetriesCount++;
14088
+ this.reloadVideoTimeoutId = this.videojs.setTimeout(() => {
14089
+ const videoUrl = this.currentSourceUrl();
14090
+ (0,_utils_video_retry__WEBPACK_IMPORTED_MODULE_20__.checkIfVideoIsAvailable)(videoUrl, this.isLiveStream ? 'live' : 'default').then(() => this.source(videoUrl)).catch(() => this.reloadVideoUntilAvailable(maxNumberOfCalls, timeout));
14091
+ }, timeout);
14092
+ } else {
14093
+ this.videojs.trigger('error', new Error('Sorry, we could not load your video'));
14035
14094
  }
14036
- return false;
14037
14095
  }
14038
14096
  _initAutoplay() {
14039
14097
  const autoplayMode = this.playerOptions.autoplayMode;
@@ -14069,6 +14127,7 @@ class VideoPlayer extends _utils__WEBPACK_IMPORTED_MODULE_9__["default"].mixin(_
14069
14127
  }
14070
14128
  _onSourceChange(e, _ref5) {
14071
14129
  let {
14130
+ source,
14072
14131
  sourceOptions
14073
14132
  } = _ref5;
14074
14133
  this._sendInternalAnalytics({
@@ -14079,6 +14138,7 @@ class VideoPlayer extends _utils__WEBPACK_IMPORTED_MODULE_9__["default"].mixin(_
14079
14138
  // #if (!process.env.WEBPACK_BUILD_LIGHT)
14080
14139
  this._initQualitySelector();
14081
14140
  // #endif
14141
+ this.isLiveStream = source.resourceConfig().type === 'live';
14082
14142
  }
14083
14143
  _setExtendedEvents() {
14084
14144
  const events = [];
@@ -14148,11 +14208,11 @@ class VideoPlayer extends _utils__WEBPACK_IMPORTED_MODULE_9__["default"].mixin(_
14148
14208
  if (this.playerOptions.withCredentials) {
14149
14209
  options.withCredentials = true;
14150
14210
  }
14151
- clearTimeout(this.reTryId);
14152
- this.nbCalls = 0;
14211
+ this._resetReloadVideo();
14212
+ this._resetReTryVideoState();
14153
14213
  const maxTries = this.videojs.options_.maxTries || 3;
14154
14214
  const videoReadyTimeout = this.videojs.options_.videoTimeout || 55000;
14155
- this.reTryVideo(maxTries, videoReadyTimeout);
14215
+ this.reTryVideoStateUntilAvailable(maxTries, videoReadyTimeout);
14156
14216
  return this.videojs.cloudinary.source(publicId, options);
14157
14217
  }
14158
14218
  posterOptions(options) {
@@ -14422,8 +14482,8 @@ const extractOptions = (elem, options) => {
14422
14482
  if (video_js__WEBPACK_IMPORTED_MODULE_0___default().dom.hasClass(elem, _video_player_const__WEBPACK_IMPORTED_MODULE_3__.FLUID_CLASS_NAME) || video_js__WEBPACK_IMPORTED_MODULE_0___default().dom.hasClass(elem, 'vjs-fluid')) {
14423
14483
  options.fluid = true;
14424
14484
  }
14425
- // Default HLS options < Default options < Markup options < Player options
14426
- options = Object.assign({}, _video_player_const__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_HLS_OPTIONS, _config_defaults__WEBPACK_IMPORTED_MODULE_2__["default"], elemOptions, options);
14485
+ // Default options < Markup options < Player options
14486
+ options = video_js__WEBPACK_IMPORTED_MODULE_0___default().obj.merge({}, _config_defaults__WEBPACK_IMPORTED_MODULE_2__["default"], elemOptions, options);
14427
14487
 
14428
14488
  // In case of 'autoplay on scroll', we need to make sure normal HTML5 autoplay is off
14429
14489
  normalizeAutoplay(options);
@@ -545,21 +545,20 @@
545
545
  }
546
546
  }
547
547
  .cld-video-player .vjs-text-track-display {
548
- margin: auto;
549
- bottom: 0 !important;
550
- }
551
-
552
- .cld-video-player .vjs-text-track-display > div {
553
- margin: 3% !important;
548
+ bottom: 5em;
549
+ z-index: 2;
554
550
  }
555
551
 
556
552
  .cld-video-player .vjs-text-track-display.cld-paced-text-tracks b {
557
553
  color: var(--color-accent);
558
554
  }
559
555
 
556
+ .cld-video-player.vjs-controls-disabled .vjs-text-track-display, .cld-video-player.vjs-user-inactive.vjs-playing .vjs-text-track-display {
557
+ bottom: 1em;
558
+ }
559
+
560
560
  .cld-video-player .vjs-text-track-cue {
561
- top: auto !important;
562
- bottom: 3.4rem !important;
561
+ max-width: 100%;
563
562
  }
564
563
 
565
564
  .cld-video-player .vjs-text-track-cue > div {
@@ -568,10 +567,6 @@
568
567
  background-color: rgba(0, 0, 0, 0.5) !important;
569
568
  }
570
569
 
571
- .cld-video-player.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-text-track-cue {
572
- bottom: 1.5rem !important;
573
- }
574
-
575
570
  .cld-video-player .cld-paced-text-tracks .vjs-text-track-cue b {
576
571
  color: var(--color-accent);
577
572
  }
@@ -715,7 +710,7 @@
715
710
  visibility: visible;
716
711
  }
717
712
  .cld-video-player.vjs-error .vjs-error-display {
718
- background: #90A0B3;
713
+ background: #90a0b3;
719
714
  }
720
715
  .cld-video-player.vjs-error .vjs-error-display:before {
721
716
  display: none;
@@ -743,18 +738,28 @@
743
738
  visibility: hidden;
744
739
  opacity: 0;
745
740
  }
746
- .cld-video-player .vjs-progress-control.vjs-control::before, .cld-video-player .vjs-control-bar .vjs-control.vjs-progress-control-events-blocker::before {
741
+ .cld-video-player::before {
747
742
  content: "";
748
743
  pointer-events: none;
749
744
  position: absolute;
750
- bottom: 0;
745
+ bottom: 3em;
751
746
  left: 0;
752
747
  right: 0;
753
748
  width: 100%;
754
749
  height: 5rem;
755
- background: linear-gradient(to bottom, transparent 0%, currentColor 100%);
750
+ background: linear-gradient(to bottom, transparent 0%, var(--color-base) 100%);
756
751
  opacity: 0.4;
757
- z-index: 0;
752
+ z-index: 1;
753
+ font-size: 120%;
754
+ display: none;
755
+ }
756
+ .cld-video-player.vjs-audio-only-mode::before, .cld-video-player.vjs-has-started::before {
757
+ display: flex;
758
+ transition: opacity 0.1s;
759
+ }
760
+ .cld-video-player.vjs-has-started.vjs-user-inactive.vjs-playing::before {
761
+ opacity: 0;
762
+ transition: opacity 1s;
758
763
  }
759
764
  .cld-video-player .vjs-control {
760
765
  width: 2.5em;