react-native-theoplayer 2.3.0 → 2.5.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.
Files changed (66) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/android/src/main/java/com/theoplayer/player/PlayerModule.kt +12 -0
  3. package/android/src/main/java/com/theoplayer/presentation/PipUtils.kt +5 -1
  4. package/android/src/main/java/com/theoplayer/track/TrackListAdapter.kt +3 -2
  5. package/android/src/main/java/com/theoplayer/util/TypeUtils.kt +6 -6
  6. package/ios/THEOplayerRCTBridge.m +3 -0
  7. package/ios/THEOplayerRCTMainEventHandler.swift +16 -13
  8. package/ios/THEOplayerRCTPlayerAPI.swift +15 -0
  9. package/ios/THEOplayerRCTTrackMetadataAggregator.swift +2 -2
  10. package/ios/THEOplayerRCTTypeUtils.swift +26 -0
  11. package/ios/THEOplayerRCTView.swift +3 -1
  12. package/ios/backgroundAudio/THEOplayerRCTNowPlayingManager.swift +7 -5
  13. package/ios/backgroundAudio/THEOplayerRCTView+BackgroundAudioConfig.swift +12 -0
  14. package/lib/commonjs/api/player/THEOplayer.js +18 -0
  15. package/lib/commonjs/api/player/THEOplayer.js.map +1 -1
  16. package/lib/commonjs/api/source/SourceDescription.js.map +1 -1
  17. package/lib/commonjs/internal/THEOplayerView.js +6 -1
  18. package/lib/commonjs/internal/THEOplayerView.js.map +1 -1
  19. package/lib/commonjs/internal/THEOplayerView.web.js +7 -7
  20. package/lib/commonjs/internal/THEOplayerView.web.js.map +1 -1
  21. package/lib/commonjs/internal/adapter/NativePlayerState.js.map +1 -1
  22. package/lib/commonjs/internal/adapter/THEOplayerAdapter.js +9 -1
  23. package/lib/commonjs/internal/adapter/THEOplayerAdapter.js.map +1 -1
  24. package/lib/commonjs/internal/adapter/THEOplayerWebAdapter.js +7 -1
  25. package/lib/commonjs/internal/adapter/THEOplayerWebAdapter.js.map +1 -1
  26. package/lib/commonjs/internal/adapter/web/TrackUtils.js +3 -2
  27. package/lib/commonjs/internal/adapter/web/TrackUtils.js.map +1 -1
  28. package/lib/commonjs/internal/adapter/web/WebMediaSession.js +17 -29
  29. package/lib/commonjs/internal/adapter/web/WebMediaSession.js.map +1 -1
  30. package/lib/commonjs/internal/adapter/web/WebPresentationModeManager.js +1 -1
  31. package/lib/commonjs/internal/adapter/web/WebPresentationModeManager.js.map +1 -1
  32. package/lib/module/api/player/THEOplayer.js +16 -1
  33. package/lib/module/api/player/THEOplayer.js.map +1 -1
  34. package/lib/module/api/source/SourceDescription.js.map +1 -1
  35. package/lib/module/internal/THEOplayerView.js +6 -1
  36. package/lib/module/internal/THEOplayerView.js.map +1 -1
  37. package/lib/module/internal/THEOplayerView.web.js +7 -7
  38. package/lib/module/internal/THEOplayerView.web.js.map +1 -1
  39. package/lib/module/internal/adapter/NativePlayerState.js.map +1 -1
  40. package/lib/module/internal/adapter/THEOplayerAdapter.js +10 -2
  41. package/lib/module/internal/adapter/THEOplayerAdapter.js.map +1 -1
  42. package/lib/module/internal/adapter/THEOplayerWebAdapter.js +7 -1
  43. package/lib/module/internal/adapter/THEOplayerWebAdapter.js.map +1 -1
  44. package/lib/module/internal/adapter/web/TrackUtils.js +3 -2
  45. package/lib/module/internal/adapter/web/TrackUtils.js.map +1 -1
  46. package/lib/module/internal/adapter/web/WebMediaSession.js +15 -29
  47. package/lib/module/internal/adapter/web/WebMediaSession.js.map +1 -1
  48. package/lib/module/internal/adapter/web/WebPresentationModeManager.js +1 -1
  49. package/lib/module/internal/adapter/web/WebPresentationModeManager.js.map +1 -1
  50. package/lib/typescript/api/player/THEOplayer.d.ts +22 -0
  51. package/lib/typescript/api/source/SourceDescription.d.ts +6 -0
  52. package/lib/typescript/internal/adapter/NativePlayerState.d.ts +2 -0
  53. package/lib/typescript/internal/adapter/THEOplayerAdapter.d.ts +3 -1
  54. package/lib/typescript/internal/adapter/THEOplayerWebAdapter.d.ts +4 -2
  55. package/lib/typescript/internal/adapter/web/WebMediaSession.d.ts +2 -1
  56. package/package.json +9 -4
  57. package/src/api/player/THEOplayer.ts +24 -0
  58. package/src/api/source/SourceDescription.ts +8 -0
  59. package/src/internal/THEOplayerView.tsx +6 -1
  60. package/src/internal/THEOplayerView.web.tsx +4 -7
  61. package/src/internal/adapter/NativePlayerState.ts +2 -0
  62. package/src/internal/adapter/THEOplayerAdapter.ts +12 -1
  63. package/src/internal/adapter/THEOplayerWebAdapter.ts +10 -2
  64. package/src/internal/adapter/web/TrackUtils.ts +3 -2
  65. package/src/internal/adapter/web/WebMediaSession.ts +14 -29
  66. package/src/internal/adapter/web/WebPresentationModeManager.ts +1 -1
@@ -4,10 +4,11 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.defaultWebMediaSessionConfig = exports.WebMediaSession = void 0;
7
- var _reactNativeTheoplayer = require("react-native-theoplayer");
8
7
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
9
8
  function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
10
9
  function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
10
+ /* eslint-disable @typescript-eslint/no-empty-function */
11
+
11
12
  const defaultWebMediaSessionConfig = {
12
13
  skipTime: 15
13
14
  };
@@ -146,42 +147,29 @@ class WebMediaSession {
146
147
  isLive() {
147
148
  return !isFinite(this._player.duration);
148
149
  }
149
- isAd() {
150
+ isInAd() {
150
151
  var _this$_player$ads5;
151
- return ((_this$_player$ads5 = this._player.ads) === null || _this$_player$ads5 === void 0 ? void 0 : _this$_player$ads5.playing) == true;
152
+ return ((_this$_player$ads5 = this._player.ads) === null || _this$_player$ads5 === void 0 ? void 0 : _this$_player$ads5.playing) === true;
152
153
  }
153
154
  isInBackground() {
154
155
  return document.visibilityState !== 'visible';
155
156
  }
156
- isTrickplayEnabled() {
157
- // By default, no trickplay for live
158
- if (this.isLive()) {
159
- return false;
160
- }
161
157
 
162
- // In PiP mode, disable trick-play for ads.
163
- if (this._webAdapter.presentationMode === _reactNativeTheoplayer.PresentationMode.pip) {
164
- return !this.isAd();
165
- }
166
- // During background playback
167
- if (this.isInBackground()) {
168
- // Disable trick-play for ads.
169
- return !(this.isAd() || this.isLive());
170
- }
171
- return true;
158
+ // By default, only show trick-play buttons if:
159
+ // - backgroundAudio is enabled, or the player is in foreground;
160
+ // - and, the current asset is neither a live stream, nor an ad.
161
+ isTrickplayEnabled() {
162
+ return (this.isBackgroundAudioEnabled() || !this.isInBackground()) && !this.isLive() && !this.isInAd();
172
163
  }
164
+
165
+ // By default, only show a play/pause button if:
166
+ // - backgroundAudio is enabled, or the player is in foreground;
167
+ // - and, the current asset is not an ad.
173
168
  isPlayPauseEnabled() {
174
- // In PiP mode
175
- if (this._webAdapter.presentationMode === _reactNativeTheoplayer.PresentationMode.pip) {
176
- // Disable play/pause for ads
177
- return !this.isAd();
178
- }
179
- // During background playback
180
- if (this.isInBackground()) {
181
- // Disable play/pause for ads & live content.
182
- return !(this.isAd() || this.isLive());
183
- }
184
- return true;
169
+ return (this.isBackgroundAudioEnabled() || !this.isInBackground()) && !this.isInAd();
170
+ }
171
+ isBackgroundAudioEnabled() {
172
+ return this._webAdapter.backgroundAudioConfiguration.enabled === true;
185
173
  }
186
174
  }
187
175
  exports.WebMediaSession = WebMediaSession;
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNativeTheoplayer","require","_defineProperty","obj","key","value","_toPropertyKey","Object","defineProperty","enumerable","configurable","writable","arg","_toPrimitive","String","input","hint","prim","Symbol","toPrimitive","undefined","res","call","TypeError","Number","defaultWebMediaSessionConfig","skipTime","exports","NoOp","mediaSession","_navigator$mediaSessi","_navigator$mediaSessi2","navigator","setActionHandler","setPositionState","window","MediaMetadata","WebMediaSession","constructor","adapter","player","_this$_player$ads","_this$_player$ads2","config","arguments","length","updateMetadata","updatePositionState","updateActionHandlers","source","_player","metadata","artwork","poster","displayIconUri","images","filter","image","map","src","title","artist","subtitle","album","duration","playbackRate","currentTime","isLive","isFinite","isNaN","position","_webAdapter","_config","addEventListener","onSourceChange","onLoadedMetadata","onDurationChange","ads","onAdbreakBegin","onAdbreakEnd","isTrickplayEnabled","event","seekOffset","Math","max","min","isPlayPauseEnabled","_this$_player","play","_this$_player2","pause","destroy","_this$_player$ads3","_this$_player$ads4","removeEventListener","isAd","_this$_player$ads5","playing","isInBackground","document","visibilityState","presentationMode","PresentationMode","pip"],"sources":["WebMediaSession.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-empty-function */\nimport type { ChromelessPlayer } from 'theoplayer';\nimport type { THEOplayerWebAdapter } from '../THEOplayerWebAdapter';\nimport { PresentationMode } from 'react-native-theoplayer';\n\ninterface WebMediaSessionConfig {\n skipTime: number;\n}\n\nexport const defaultWebMediaSessionConfig: WebMediaSessionConfig = {\n skipTime: 15,\n};\n\nconst NoOp = () => {};\n\n// This prevents unnecessary errors when Media Session API is not available.\nconst mediaSession = (function () {\n const mediaSession = navigator.mediaSession || {};\n mediaSession.setActionHandler = navigator.mediaSession?.setActionHandler || function () {};\n mediaSession.setPositionState = navigator.mediaSession?.setPositionState || function () {};\n window.MediaMetadata = window.MediaMetadata || function () {};\n return mediaSession;\n})();\n\n/**\n * The MediaSession interface of the Media Session API allows a web page to provide custom behaviors for standard media playback interactions, and\n * to report metadata that can be sent by the user agent to the device or operating system for presentation in standardized user interface elements.\n *\n * @link https://w3c.github.io/mediasession\n */\nexport class WebMediaSession {\n private readonly _config: WebMediaSessionConfig;\n private readonly _player: ChromelessPlayer;\n private readonly _webAdapter: THEOplayerWebAdapter;\n\n constructor(adapter: THEOplayerWebAdapter, player: ChromelessPlayer, config: WebMediaSessionConfig = defaultWebMediaSessionConfig) {\n this._player = player;\n this._webAdapter = adapter;\n this._config = config;\n\n this._player.addEventListener('sourcechange', this.onSourceChange);\n this._player.addEventListener('loadedmetadata', this.onLoadedMetadata);\n this._player.addEventListener('durationchange', this.onDurationChange);\n this._player.ads?.addEventListener('adbreakbegin', this.onAdbreakBegin);\n this._player.ads?.addEventListener('adbreakend', this.onAdbreakEnd);\n this.updateActionHandlers();\n }\n\n updateActionHandlers() {\n if (this.isTrickplayEnabled()) {\n mediaSession.setActionHandler('seekbackward', (event) => {\n const skipTime = event.seekOffset || this._config.skipTime;\n this._player.currentTime = Math.max(this._player.currentTime - skipTime, 0);\n });\n mediaSession.setActionHandler('seekforward', (event) => {\n const skipTime = event.seekOffset || this._config.skipTime;\n this._player.currentTime = Math.min(this._player.currentTime + skipTime, this._player.duration);\n });\n } else {\n mediaSession.setActionHandler('seekbackward', NoOp);\n mediaSession.setActionHandler('seekforward', NoOp);\n }\n\n if (this.isPlayPauseEnabled()) {\n mediaSession.setActionHandler('play', () => {\n this._player?.play();\n });\n mediaSession?.setActionHandler('pause', () => {\n this._player?.pause();\n });\n } else {\n mediaSession.setActionHandler('play', NoOp);\n mediaSession.setActionHandler('pause', NoOp);\n }\n }\n\n destroy() {\n this._player.removeEventListener('sourcechange', this.onSourceChange);\n this._player.removeEventListener('loadedmetadata', this.onLoadedMetadata);\n this._player.removeEventListener('durationchange', this.onDurationChange);\n this._player.ads?.removeEventListener('adbreakbegin', this.onAdbreakBegin);\n this._player.ads?.removeEventListener('adbreakend', this.onAdbreakEnd);\n mediaSession.setActionHandler('play', NoOp);\n mediaSession.setActionHandler('pause', NoOp);\n mediaSession.setActionHandler('seekbackward', NoOp);\n mediaSession.setActionHandler('seekforward', NoOp);\n }\n\n private onSourceChange = () => {\n this.updateMetadata();\n this.updatePositionState();\n this.updateActionHandlers();\n };\n\n private onLoadedMetadata = () => {\n this.updateActionHandlers();\n };\n\n private onDurationChange = () => {\n this.updateActionHandlers();\n };\n\n private updateMetadata = () => {\n const source = this._player.source;\n const metadata = source?.metadata;\n const artwork = [source?.poster, metadata?.displayIconUri, ...(metadata?.images ? metadata?.images : [])]\n .filter((image) => image !== undefined)\n .map((image) => {\n if (typeof image === 'string') {\n return { src: image };\n }\n return image;\n });\n mediaSession.metadata = new MediaMetadata({\n title: metadata?.title,\n artist: metadata?.artist || metadata?.subtitle,\n album: metadata?.album,\n artwork,\n });\n };\n\n private updatePositionState = () => {\n const { duration, playbackRate, currentTime } = this._player;\n const isLive = !isFinite(duration);\n if (!isLive) {\n mediaSession.setPositionState({\n // The duration is used to specify the duration in seconds.\n // It should always be positive and positive infinity can be used to indicate media without a defined end such as live playback.\n // NOTE: passing Infinite causes an exception to be thrown.\n duration: isNaN(duration) || duration < 0 ? 0 : duration,\n\n // The playbackRate is used to specify the playback rate.\n // It can be positive to represent forward playback or negative to represent backwards playback. It should not be zero.\n playbackRate,\n\n // The position is used to specify the last reported playback position in seconds. It should always be positive.\n position: currentTime,\n });\n }\n };\n\n private onAdbreakBegin = () => {\n this.updateActionHandlers();\n };\n\n private onAdbreakEnd = () => {\n this.updateActionHandlers();\n };\n\n private isLive(): boolean {\n return !isFinite(this._player.duration);\n }\n\n private isAd(): boolean {\n return this._player.ads?.playing == true;\n }\n\n private isInBackground(): boolean {\n return document.visibilityState !== 'visible';\n }\n\n private isTrickplayEnabled(): boolean {\n // By default, no trickplay for live\n if (this.isLive()) {\n return false;\n }\n\n // In PiP mode, disable trick-play for ads.\n if (this._webAdapter.presentationMode === PresentationMode.pip) {\n return !this.isAd();\n }\n // During background playback\n if (this.isInBackground()) {\n // Disable trick-play for ads.\n return !(this.isAd() || this.isLive());\n }\n return true;\n }\n\n private isPlayPauseEnabled(): boolean {\n // In PiP mode\n if (this._webAdapter.presentationMode === PresentationMode.pip) {\n // Disable play/pause for ads\n return !this.isAd();\n }\n // During background playback\n if (this.isInBackground()) {\n // Disable play/pause for ads & live content.\n return !(this.isAd() || this.isLive());\n }\n return true;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["defaultWebMediaSessionConfig","skipTime","exports","NoOp","mediaSession","_navigator$mediaSessi","_navigator$mediaSessi2","navigator","setActionHandler","setPositionState","window","MediaMetadata","WebMediaSession","constructor","adapter","player","_this$_player$ads","_this$_player$ads2","config","arguments","length","undefined","_defineProperty","updateMetadata","updatePositionState","updateActionHandlers","source","_player","metadata","artwork","poster","displayIconUri","images","filter","image","map","src","title","artist","subtitle","album","duration","playbackRate","currentTime","isLive","isFinite","isNaN","position","_webAdapter","_config","addEventListener","onSourceChange","onLoadedMetadata","onDurationChange","ads","onAdbreakBegin","onAdbreakEnd","isTrickplayEnabled","event","seekOffset","Math","max","min","isPlayPauseEnabled","_this$_player","play","_this$_player2","pause","destroy","_this$_player$ads3","_this$_player$ads4","removeEventListener","isInAd","_this$_player$ads5","playing","isInBackground","document","visibilityState","isBackgroundAudioEnabled","backgroundAudioConfiguration","enabled"],"sources":["WebMediaSession.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-empty-function */\nimport type { ChromelessPlayer } from 'theoplayer';\nimport type { THEOplayerWebAdapter } from '../THEOplayerWebAdapter';\n\ninterface WebMediaSessionConfig {\n skipTime: number;\n}\n\nexport const defaultWebMediaSessionConfig: WebMediaSessionConfig = {\n skipTime: 15,\n};\n\nconst NoOp = () => {};\n\n// This prevents unnecessary errors when Media Session API is not available.\nconst mediaSession = (function () {\n const mediaSession = navigator.mediaSession || {};\n mediaSession.setActionHandler = navigator.mediaSession?.setActionHandler || function () {};\n mediaSession.setPositionState = navigator.mediaSession?.setPositionState || function () {};\n window.MediaMetadata = window.MediaMetadata || function () {};\n return mediaSession;\n})();\n\n/**\n * The MediaSession interface of the Media Session API allows a web page to provide custom behaviors for standard media playback interactions, and\n * to report metadata that can be sent by the user agent to the device or operating system for presentation in standardized user interface elements.\n *\n * @link https://w3c.github.io/mediasession\n */\nexport class WebMediaSession {\n private readonly _config: WebMediaSessionConfig;\n private readonly _player: ChromelessPlayer;\n private readonly _webAdapter: THEOplayerWebAdapter;\n\n constructor(adapter: THEOplayerWebAdapter, player: ChromelessPlayer, config: WebMediaSessionConfig = defaultWebMediaSessionConfig) {\n this._player = player;\n this._webAdapter = adapter;\n this._config = config;\n\n this._player.addEventListener('sourcechange', this.onSourceChange);\n this._player.addEventListener('loadedmetadata', this.onLoadedMetadata);\n this._player.addEventListener('durationchange', this.onDurationChange);\n this._player.ads?.addEventListener('adbreakbegin', this.onAdbreakBegin);\n this._player.ads?.addEventListener('adbreakend', this.onAdbreakEnd);\n this.updateActionHandlers();\n }\n\n updateActionHandlers() {\n if (this.isTrickplayEnabled()) {\n mediaSession.setActionHandler('seekbackward', (event) => {\n const skipTime = event.seekOffset || this._config.skipTime;\n this._player.currentTime = Math.max(this._player.currentTime - skipTime, 0);\n });\n mediaSession.setActionHandler('seekforward', (event) => {\n const skipTime = event.seekOffset || this._config.skipTime;\n this._player.currentTime = Math.min(this._player.currentTime + skipTime, this._player.duration);\n });\n } else {\n mediaSession.setActionHandler('seekbackward', NoOp);\n mediaSession.setActionHandler('seekforward', NoOp);\n }\n\n if (this.isPlayPauseEnabled()) {\n mediaSession.setActionHandler('play', () => {\n this._player?.play();\n });\n mediaSession?.setActionHandler('pause', () => {\n this._player?.pause();\n });\n } else {\n mediaSession.setActionHandler('play', NoOp);\n mediaSession.setActionHandler('pause', NoOp);\n }\n }\n\n destroy() {\n this._player.removeEventListener('sourcechange', this.onSourceChange);\n this._player.removeEventListener('loadedmetadata', this.onLoadedMetadata);\n this._player.removeEventListener('durationchange', this.onDurationChange);\n this._player.ads?.removeEventListener('adbreakbegin', this.onAdbreakBegin);\n this._player.ads?.removeEventListener('adbreakend', this.onAdbreakEnd);\n mediaSession.setActionHandler('play', NoOp);\n mediaSession.setActionHandler('pause', NoOp);\n mediaSession.setActionHandler('seekbackward', NoOp);\n mediaSession.setActionHandler('seekforward', NoOp);\n }\n\n private onSourceChange = () => {\n this.updateMetadata();\n this.updatePositionState();\n this.updateActionHandlers();\n };\n\n private onLoadedMetadata = () => {\n this.updateActionHandlers();\n };\n\n private onDurationChange = () => {\n this.updateActionHandlers();\n };\n\n private updateMetadata = () => {\n const source = this._player.source;\n const metadata = source?.metadata;\n const artwork = [source?.poster, metadata?.displayIconUri, ...(metadata?.images ? metadata?.images : [])]\n .filter((image) => image !== undefined)\n .map((image) => {\n if (typeof image === 'string') {\n return { src: image };\n }\n return image;\n });\n mediaSession.metadata = new MediaMetadata({\n title: metadata?.title,\n artist: metadata?.artist || metadata?.subtitle,\n album: metadata?.album,\n artwork,\n });\n };\n\n private updatePositionState = () => {\n const { duration, playbackRate, currentTime } = this._player;\n const isLive = !isFinite(duration);\n if (!isLive) {\n mediaSession.setPositionState({\n // The duration is used to specify the duration in seconds.\n // It should always be positive and positive infinity can be used to indicate media without a defined end such as live playback.\n // NOTE: passing Infinite causes an exception to be thrown.\n duration: isNaN(duration) || duration < 0 ? 0 : duration,\n\n // The playbackRate is used to specify the playback rate.\n // It can be positive to represent forward playback or negative to represent backwards playback. It should not be zero.\n playbackRate,\n\n // The position is used to specify the last reported playback position in seconds. It should always be positive.\n position: currentTime,\n });\n }\n };\n\n private onAdbreakBegin = () => {\n this.updateActionHandlers();\n };\n\n private onAdbreakEnd = () => {\n this.updateActionHandlers();\n };\n\n private isLive(): boolean {\n return !isFinite(this._player.duration);\n }\n\n private isInAd(): boolean {\n return this._player.ads?.playing === true;\n }\n\n private isInBackground(): boolean {\n return document.visibilityState !== 'visible';\n }\n\n // By default, only show trick-play buttons if:\n // - backgroundAudio is enabled, or the player is in foreground;\n // - and, the current asset is neither a live stream, nor an ad.\n private isTrickplayEnabled(): boolean {\n return (this.isBackgroundAudioEnabled() || !this.isInBackground()) && !this.isLive() && !this.isInAd();\n }\n\n // By default, only show a play/pause button if:\n // - backgroundAudio is enabled, or the player is in foreground;\n // - and, the current asset is not an ad.\n private isPlayPauseEnabled(): boolean {\n return (this.isBackgroundAudioEnabled() || !this.isInBackground()) && !this.isInAd();\n }\n\n private isBackgroundAudioEnabled(): boolean {\n return this._webAdapter.backgroundAudioConfiguration.enabled === true;\n }\n}\n"],"mappings":"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"}
@@ -67,7 +67,7 @@ class WebPresentationModeManager {
67
67
  }
68
68
  }
69
69
  // listen for pip updates on element
70
- if (this._element != null) {
70
+ if (this._element !== undefined) {
71
71
  this._element.onenterpictureinpicture = () => {
72
72
  this.updatePresentationMode();
73
73
  };
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNativeTheoplayer","require","_PlayerEvents","_BrowserDetection","_defineProperty","obj","key","value","_toPropertyKey","Object","defineProperty","enumerable","configurable","writable","arg","_toPrimitive","String","input","hint","prim","Symbol","toPrimitive","undefined","res","call","TypeError","Number","WebPresentationModeManager","constructor","player","eventForwarder","PresentationMode","inline","_player","_eventForwarder","presentationMode","_presentationMode","prepareForPresentationModeChanges","browserDetection","IS_SAFARI_","fullscreen","_this$_element","_this$_element$webkit","_element","webkitEnterFullscreen","pip","_this$_element2","_this$_element2$webki","webkitSetPresentationMode","_this$_element3","_this$_element3$webki","appElement","document","getElementById","requestFullscreen","_this$_element4","_this$_element4$reque","requestPictureInPicture","exitFullscreen","exitPictureInPicture","elements","element","children","Array","from","tagName","attributes","getNamedItem","onenterpictureinpicture","updatePresentationMode","onleavepictureinpicture","onfullscreenchange","newPresentationMode","fullscreenElement","pictureInPictureElement","previousPresentationMode","dispatchEvent","DefaultPresentationModeChangeEvent","exports"],"sources":["WebPresentationModeManager.ts"],"sourcesContent":["import type { PlayerEventMap } from 'react-native-theoplayer';\nimport { PresentationMode } from 'react-native-theoplayer';\nimport type * as THEOplayerWeb from 'theoplayer';\nimport { DefaultPresentationModeChangeEvent } from '../event/PlayerEvents';\nimport { browserDetection } from '../../../web/platform/BrowserDetection';\nimport type { DefaultEventDispatcher } from '../event/DefaultEventDispatcher';\n\nexport class WebPresentationModeManager {\n private readonly _player: THEOplayerWeb.ChromelessPlayer;\n private _presentationMode: PresentationMode = PresentationMode.inline;\n private _element: HTMLVideoElement | undefined = undefined;\n private _eventForwarder: DefaultEventDispatcher<PlayerEventMap>;\n\n constructor(player: THEOplayerWeb.ChromelessPlayer, eventForwarder: DefaultEventDispatcher<PlayerEventMap>) {\n this._player = player;\n this._eventForwarder = eventForwarder;\n }\n\n get presentationMode(): PresentationMode {\n return this._presentationMode;\n }\n\n set presentationMode(presentationMode: PresentationMode) {\n if (presentationMode === this._presentationMode) {\n return;\n }\n\n this.prepareForPresentationModeChanges();\n\n // on iOS Safari requestFullscreen isn't supported (https://caniuse.com/?search=requestFullscreen), where we need to use webkit methods on the video element\n if (/*browserDetection.IS_IOS_ && */ browserDetection.IS_SAFARI_) {\n if (presentationMode === PresentationMode.fullscreen) {\n this._element?.webkitEnterFullscreen?.();\n } else if (presentationMode === PresentationMode.pip) {\n this._element?.webkitSetPresentationMode?.(PresentationMode.pip);\n } else {\n this._element?.webkitSetPresentationMode?.(PresentationMode.inline);\n }\n } else {\n // other web-platformsyarn\n\n if (presentationMode === PresentationMode.fullscreen) {\n const appElement = document.getElementById('app');\n void appElement?.requestFullscreen();\n } else if (presentationMode === PresentationMode.pip) {\n void this._element?.requestPictureInPicture?.();\n } else {\n if (this._presentationMode === PresentationMode.fullscreen) {\n void document.exitFullscreen();\n }\n if (this._presentationMode === PresentationMode.pip) {\n void document.exitPictureInPicture();\n }\n }\n }\n }\n\n private prepareForPresentationModeChanges() {\n const elements = this._player.element.children;\n for (const element of Array.from(elements)) {\n if (element.tagName === 'VIDEO' && element.attributes.getNamedItem('src') !== null) {\n this._element = element as HTMLVideoElement;\n }\n }\n // listen for pip updates on element\n if (this._element != null) {\n this._element.onenterpictureinpicture = () => {\n this.updatePresentationMode();\n };\n this._element.onleavepictureinpicture = () => {\n this.updatePresentationMode();\n };\n }\n // listen for fullscreen updates on document\n document.onfullscreenchange = () => {\n this.updatePresentationMode();\n };\n }\n\n private updatePresentationMode() {\n // detect new presentation mode\n let newPresentationMode: PresentationMode = PresentationMode.inline;\n if (document.fullscreenElement !== null) {\n newPresentationMode = PresentationMode.fullscreen;\n } else if (document.pictureInPictureElement !== null) {\n newPresentationMode = PresentationMode.pip;\n }\n\n // when changed, notify by dispatching presentationModeChange event\n const previousPresentationMode = this._presentationMode;\n if (newPresentationMode !== previousPresentationMode) {\n this._presentationMode = newPresentationMode;\n this._eventForwarder.dispatchEvent(new DefaultPresentationModeChangeEvent(this._presentationMode, previousPresentationMode));\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["_reactNativeTheoplayer","require","_PlayerEvents","_BrowserDetection","_defineProperty","obj","key","value","_toPropertyKey","Object","defineProperty","enumerable","configurable","writable","arg","_toPrimitive","String","input","hint","prim","Symbol","toPrimitive","undefined","res","call","TypeError","Number","WebPresentationModeManager","constructor","player","eventForwarder","PresentationMode","inline","_player","_eventForwarder","presentationMode","_presentationMode","prepareForPresentationModeChanges","browserDetection","IS_SAFARI_","fullscreen","_this$_element","_this$_element$webkit","_element","webkitEnterFullscreen","pip","_this$_element2","_this$_element2$webki","webkitSetPresentationMode","_this$_element3","_this$_element3$webki","appElement","document","getElementById","requestFullscreen","_this$_element4","_this$_element4$reque","requestPictureInPicture","exitFullscreen","exitPictureInPicture","elements","element","children","Array","from","tagName","attributes","getNamedItem","onenterpictureinpicture","updatePresentationMode","onleavepictureinpicture","onfullscreenchange","newPresentationMode","fullscreenElement","pictureInPictureElement","previousPresentationMode","dispatchEvent","DefaultPresentationModeChangeEvent","exports"],"sources":["WebPresentationModeManager.ts"],"sourcesContent":["import type { PlayerEventMap } from 'react-native-theoplayer';\nimport { PresentationMode } from 'react-native-theoplayer';\nimport type * as THEOplayerWeb from 'theoplayer';\nimport { DefaultPresentationModeChangeEvent } from '../event/PlayerEvents';\nimport { browserDetection } from '../../../web/platform/BrowserDetection';\nimport type { DefaultEventDispatcher } from '../event/DefaultEventDispatcher';\n\nexport class WebPresentationModeManager {\n private readonly _player: THEOplayerWeb.ChromelessPlayer;\n private _presentationMode: PresentationMode = PresentationMode.inline;\n private _element: HTMLVideoElement | undefined = undefined;\n private _eventForwarder: DefaultEventDispatcher<PlayerEventMap>;\n\n constructor(player: THEOplayerWeb.ChromelessPlayer, eventForwarder: DefaultEventDispatcher<PlayerEventMap>) {\n this._player = player;\n this._eventForwarder = eventForwarder;\n }\n\n get presentationMode(): PresentationMode {\n return this._presentationMode;\n }\n\n set presentationMode(presentationMode: PresentationMode) {\n if (presentationMode === this._presentationMode) {\n return;\n }\n\n this.prepareForPresentationModeChanges();\n\n // on iOS Safari requestFullscreen isn't supported (https://caniuse.com/?search=requestFullscreen), where we need to use webkit methods on the video element\n if (/*browserDetection.IS_IOS_ && */ browserDetection.IS_SAFARI_) {\n if (presentationMode === PresentationMode.fullscreen) {\n this._element?.webkitEnterFullscreen?.();\n } else if (presentationMode === PresentationMode.pip) {\n this._element?.webkitSetPresentationMode?.(PresentationMode.pip);\n } else {\n this._element?.webkitSetPresentationMode?.(PresentationMode.inline);\n }\n } else {\n // other web-platformsyarn\n\n if (presentationMode === PresentationMode.fullscreen) {\n const appElement = document.getElementById('app');\n void appElement?.requestFullscreen();\n } else if (presentationMode === PresentationMode.pip) {\n void this._element?.requestPictureInPicture?.();\n } else {\n if (this._presentationMode === PresentationMode.fullscreen) {\n void document.exitFullscreen();\n }\n if (this._presentationMode === PresentationMode.pip) {\n void document.exitPictureInPicture();\n }\n }\n }\n }\n\n private prepareForPresentationModeChanges() {\n const elements = this._player.element.children;\n for (const element of Array.from(elements)) {\n if (element.tagName === 'VIDEO' && element.attributes.getNamedItem('src') !== null) {\n this._element = element as HTMLVideoElement;\n }\n }\n // listen for pip updates on element\n if (this._element !== undefined) {\n this._element.onenterpictureinpicture = () => {\n this.updatePresentationMode();\n };\n this._element.onleavepictureinpicture = () => {\n this.updatePresentationMode();\n };\n }\n // listen for fullscreen updates on document\n document.onfullscreenchange = () => {\n this.updatePresentationMode();\n };\n }\n\n private updatePresentationMode() {\n // detect new presentation mode\n let newPresentationMode: PresentationMode = PresentationMode.inline;\n if (document.fullscreenElement !== null) {\n newPresentationMode = PresentationMode.fullscreen;\n } else if (document.pictureInPictureElement !== null) {\n newPresentationMode = PresentationMode.pip;\n }\n\n // when changed, notify by dispatching presentationModeChange event\n const previousPresentationMode = this._presentationMode;\n if (newPresentationMode !== previousPresentationMode) {\n this._presentationMode = newPresentationMode;\n this._eventForwarder.dispatchEvent(new DefaultPresentationModeChangeEvent(this._presentationMode, previousPresentationMode));\n }\n }\n}\n"],"mappings":"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"}
@@ -1,2 +1,17 @@
1
- export {};
1
+ /**
2
+ * Specifies an aspect ratio for the player.
3
+ *
4
+ * <br/> - `FIT` (default): Scales the player so that all content fits inside its bounding box, keeping the original aspect ratio of the content..
5
+ * <br/> - `FILL`: Scales the player so that all content fits inside the bounding box, which will be stretched to fill it entirely.
6
+ * <br/> - `ASPECT_FILL`: Scales the player so that the content fills up the entire bounding box, keeping the original aspect ratio of the content.
7
+ *
8
+ * @public
9
+ * @defaultValue `'FIT'`
10
+ */
11
+ export let AspectRatio;
12
+ (function (AspectRatio) {
13
+ AspectRatio["FIT"] = "fit";
14
+ AspectRatio["FILL"] = "fill";
15
+ AspectRatio["ASPECT_FILL"] = "aspectFill";
16
+ })(AspectRatio || (AspectRatio = {}));
2
17
  //# sourceMappingURL=THEOplayer.js.map
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["THEOplayer.ts"],"sourcesContent":["import type { EventDispatcher } from '../event/EventDispatcher';\nimport type { PlayerEventMap } from './PlayerEventMap';\nimport type { ABRConfiguration } from '../abr/ABRConfiguration';\nimport type { SourceDescription } from '../source/SourceDescription';\nimport type { AdsAPI } from '../ads/AdsAPI';\nimport type { CastAPI } from '../cast/CastAPI';\nimport type { MediaTrack } from '../track/MediaTrack';\nimport type { TextTrack } from '../track/TextTrack';\nimport type { TimeRange } from '../timeranges/TimeRange';\nimport type { TextTrackStyle } from '../track/TextTrackStyle';\nimport type { PresentationMode } from '../presentation/PresentationMode';\nimport type { PiPConfiguration } from '../pip/PiPConfiguration';\nimport type { BackgroundAudioConfiguration } from '../backgroundAudio/BackgroundAudioConfiguration';\n\nexport type PreloadType = 'none' | 'metadata' | 'auto' | '';\n\nexport type NativeHandleType = unknown;\n\n/**\n * The THEOplayer API.\n */\nexport interface THEOplayer extends EventDispatcher<PlayerEventMap> {\n /**\n * The player's adaptive bitrate (ABR) configuration.\n *\n * @remarks\n * <br/> - This property is supported on Android & Web platforms only.\n */\n readonly abr: ABRConfiguration | undefined;\n\n /**\n * A source description that determines the current media resource.\n */\n source: SourceDescription | undefined;\n\n /**\n * Start or resume playback.\n */\n play(): void;\n\n /**\n * Pause playback.\n */\n pause(): void;\n\n /**\n * Whether the player is paused.\n */\n readonly paused: boolean;\n\n /**\n * Whether the player should immediately start playback after source change.\n */\n autoplay: boolean;\n\n /**\n * The preload setting of the player.\n */\n preload: PreloadType;\n\n /**\n * Returns a list of TimeRanges that represents the ranges of the media resource that are seekable by the player.\n */\n seekable: TimeRange[];\n\n /**\n * Returns a list of TimeRanges that represents the ranges of the media resource that are buffered by the player.\n */\n buffered: TimeRange[];\n\n /**\n * Used to set the playback rate of the media.\n *\n * @example\n * <br/> - `playbackRate = 0.70` will slow down the playback rate of the media by 30%.\n * <br/> - `playbackRate = 1.25` will speed up the playback rate of the media by 25%.\n *\n * @remarks\n * <br/> - Playback rate is represented by a number where `1` is default playback speed.\n * <br/> - Playback rate must be a positive number.\n * <br/> - It is recommended that you limit the range to between 0.5 and 4.\n */\n playbackRate: number;\n\n /**\n * Used to set the volume of the audio.\n *\n * @remarks\n * <br/> - Volume is represented by a floating point number between `0.0` and `1.0`.\n */\n volume: number;\n\n /**\n * Determines whether audio is muted.\n */\n muted: boolean;\n\n /**\n * Whether the player is seeking.\n */\n readonly seeking: boolean;\n\n /**\n * The PresentationMode of the player. Can be switched to: `picture-in-picture`, `fullscreen` or `inline`\n */\n presentationMode: PresentationMode;\n\n /**\n * List of audio tracks of the current source.\n */\n audioTracks: MediaTrack[];\n\n /**\n * List of video tracks of the current source.\n */\n videoTracks: MediaTrack[];\n\n /**\n * List of text tracks of the current source.\n */\n textTracks: TextTrack[];\n\n /**\n * Used to set the current selected text track by passing its `uid`, or `undefined` to select none.\n */\n selectedTextTrack: number | undefined;\n\n /**\n * The text track style API.\n *\n * @remarks\n * Only available for Web.\n */\n readonly textTrackStyle: TextTrackStyle;\n\n /**\n * Used to set the current selected video track by passing its `uid`, or `undefined` to select none.\n */\n selectedVideoTrack: number | undefined;\n\n /**\n * Used to set the current selected video quality by passing its `uid`, or `undefined` to select none.\n */\n targetVideoQuality: number | number[] | undefined;\n\n /**\n * Used to set the current selected audio track by passing its `uid`, or `undefined` to select none.\n */\n selectedAudioTrack: number | undefined;\n\n /**\n * The current playback position of the media, in milliseconds.\n */\n currentTime: number;\n\n /**\n * The active configuration for PiP.\n */\n pipConfiguration: PiPConfiguration;\n\n /**\n * The active configuration for PiP.\n */\n backgroundAudioConfiguration: BackgroundAudioConfiguration;\n\n /**\n * The duration of the media, in milliseconds.\n */\n readonly duration: number;\n\n /**\n * The API for advertisements.\n */\n readonly ads: AdsAPI;\n\n /**\n * The API for casting devices.\n */\n readonly cast: CastAPI;\n\n /**\n * Native player handle.\n */\n readonly nativeHandle: NativeHandleType;\n}\n"],"mappings":""}
1
+ {"version":3,"names":["AspectRatio"],"sources":["THEOplayer.ts"],"sourcesContent":["import type { EventDispatcher } from '../event/EventDispatcher';\nimport type { PlayerEventMap } from './PlayerEventMap';\nimport type { ABRConfiguration } from '../abr/ABRConfiguration';\nimport type { SourceDescription } from '../source/SourceDescription';\nimport type { AdsAPI } from '../ads/AdsAPI';\nimport type { CastAPI } from '../cast/CastAPI';\nimport type { MediaTrack } from '../track/MediaTrack';\nimport type { TextTrack } from '../track/TextTrack';\nimport type { TimeRange } from '../timeranges/TimeRange';\nimport type { TextTrackStyle } from '../track/TextTrackStyle';\nimport type { PresentationMode } from '../presentation/PresentationMode';\nimport type { PiPConfiguration } from '../pip/PiPConfiguration';\nimport type { BackgroundAudioConfiguration } from '../backgroundAudio/BackgroundAudioConfiguration';\n\nexport type PreloadType = 'none' | 'metadata' | 'auto' | '';\n\n/**\n * Specifies an aspect ratio for the player.\n *\n * <br/> - `FIT` (default): Scales the player so that all content fits inside its bounding box, keeping the original aspect ratio of the content..\n * <br/> - `FILL`: Scales the player so that all content fits inside the bounding box, which will be stretched to fill it entirely.\n * <br/> - `ASPECT_FILL`: Scales the player so that the content fills up the entire bounding box, keeping the original aspect ratio of the content.\n *\n * @public\n * @defaultValue `'FIT'`\n */\nexport enum AspectRatio {\n FIT = 'fit',\n FILL = 'fill',\n ASPECT_FILL = 'aspectFill',\n}\n\nexport type NativeHandleType = unknown;\n\n/**\n * The THEOplayer API.\n */\nexport interface THEOplayer extends EventDispatcher<PlayerEventMap> {\n /**\n * The player's adaptive bitrate (ABR) configuration.\n *\n * @remarks\n * <br/> - This property is supported on Android & Web platforms only.\n */\n readonly abr: ABRConfiguration | undefined;\n\n /**\n * A source description that determines the current media resource.\n */\n source: SourceDescription | undefined;\n\n /**\n * Start or resume playback.\n */\n play(): void;\n\n /**\n * Pause playback.\n */\n pause(): void;\n\n /**\n * Whether the player is paused.\n */\n readonly paused: boolean;\n\n /**\n * Whether the player should immediately start playback after source change.\n */\n autoplay: boolean;\n\n /**\n * The preload setting of the player.\n */\n preload: PreloadType;\n\n /**\n * Returns a list of TimeRanges that represents the ranges of the media resource that are seekable by the player.\n */\n seekable: TimeRange[];\n\n /**\n * Returns a list of TimeRanges that represents the ranges of the media resource that are buffered by the player.\n */\n buffered: TimeRange[];\n\n /**\n * Used to set the playback rate of the media.\n *\n * @example\n * <br/> - `playbackRate = 0.70` will slow down the playback rate of the media by 30%.\n * <br/> - `playbackRate = 1.25` will speed up the playback rate of the media by 25%.\n *\n * @remarks\n * <br/> - Playback rate is represented by a number where `1` is default playback speed.\n * <br/> - Playback rate must be a positive number.\n * <br/> - It is recommended that you limit the range to between 0.5 and 4.\n */\n playbackRate: number;\n\n /**\n * Used to set the volume of the audio.\n *\n * @remarks\n * <br/> - Volume is represented by a floating point number between `0.0` and `1.0`.\n */\n volume: number;\n\n /**\n * Determines whether audio is muted.\n */\n muted: boolean;\n\n /**\n * Whether the player is seeking.\n */\n readonly seeking: boolean;\n\n /**\n * The PresentationMode of the player. Can be switched to: `picture-in-picture`, `fullscreen` or `inline`\n */\n presentationMode: PresentationMode;\n\n /**\n * List of audio tracks of the current source.\n */\n audioTracks: MediaTrack[];\n\n /**\n * List of video tracks of the current source.\n */\n videoTracks: MediaTrack[];\n\n /**\n * List of text tracks of the current source.\n */\n textTracks: TextTrack[];\n\n /**\n * Used to set the current selected text track by passing its `uid`, or `undefined` to select none.\n */\n selectedTextTrack: number | undefined;\n\n /**\n * The text track style API.\n *\n * @remarks\n * Only available for Web.\n */\n readonly textTrackStyle: TextTrackStyle;\n\n /**\n * Used to set the current selected video track by passing its `uid`, or `undefined` to select none.\n */\n selectedVideoTrack: number | undefined;\n\n /**\n * Used to set the current selected video quality by passing its `uid`, or `undefined` to select none.\n */\n targetVideoQuality: number | number[] | undefined;\n\n /**\n * Used to set the current selected audio track by passing its `uid`, or `undefined` to select none.\n */\n selectedAudioTrack: number | undefined;\n\n /**\n * The current playback position of the media, in milliseconds.\n */\n currentTime: number;\n\n /**\n * Used to set the aspect ratio of the player.\n *\n * @remarks\n * Only available for iOS and Android.\n */\n aspectRatio: AspectRatio;\n\n /**\n * The active configuration for PiP.\n */\n pipConfiguration: PiPConfiguration;\n\n /**\n * The active configuration for PiP.\n */\n backgroundAudioConfiguration: BackgroundAudioConfiguration;\n\n /**\n * The duration of the media, in milliseconds.\n */\n readonly duration: number;\n\n /**\n * The API for advertisements.\n */\n readonly ads: AdsAPI;\n\n /**\n * The API for casting devices.\n */\n readonly cast: CastAPI;\n\n /**\n * Native player handle.\n */\n readonly nativeHandle: NativeHandleType;\n}\n"],"mappings":"AAgBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAYA,WAAW;AAItB,WAJWA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;AAAA,GAAXA,WAAW,KAAXA,WAAW"}
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["SourceDescription.ts"],"sourcesContent":["/**\n * Represents a media resource.\n *\n * @remarks\n * <br/> - Can be a string value representing the URL of a media resource, a {@link TypedSource}.\n *\n * @public\n */\nimport type { DashPlaybackConfiguration } from './dash/DashPlaybackConfiguration';\nimport type { DRMConfiguration } from './drm/DRMConfiguration';\nimport type { HlsPlaybackConfiguration } from './hls/HlsPlaybackConfiguration';\nimport type { AdDescription } from './ads/Ads';\nimport type { MetadataDescription } from './metadata/MetadataDescription';\nimport type { ServerSideAdInsertionConfiguration } from \"./ads/ssai/ServerSideAdInsertionConfiguration\";\n\nexport type Source = TypedSource;\n\n/**\n * A media resource or list of media resources.\n *\n * @remarks\n * <br/> - The order of sources when using a list determines their priority when attempting playback.\n *\n * @public\n */\nexport type Sources = Source | Source[];\n\n/**\n * The cross-origin setting of a source, represented by a value from the following list:\n * <br/> - `'anonymous'`: CORS requests will have the credentials flag set to 'same-origin'.\n * <br/> - `'use-credentials'`: CORS requests will have the credentials flag set to 'include'.\n * <br/> - `''`: Setting the empty string is the same as `'anonymous'`\n *\n * @remarks\n * <br/> - See {@link https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes | The crossorigin attribute: Requesting CORS access to content}\n *\n * @public\n */\nexport type CrossOriginSetting = '' | 'anonymous' | 'use-credentials';\n\n/**\n * Describes the configuration of a player's source.\n *\n * @public\n */\nexport interface SourceConfiguration {\n /**\n * List of {@link AdDescription}s to be queued for playback.\n */\n ads?: AdDescription[];\n\n /**\n * Content protection configuration.\n */\n contentProtection?: DRMConfiguration;\n\n /**\n * The poster of the media source.\n *\n * @remarks\n * <br/> - An empty string (`''`) clears the current poster.\n * <br/> - This poster has priority over {@link ChromelessPlayer.poster}.\n */\n poster?: string;\n\n /**\n * List of text tracks to be side-loaded with the media source.\n *\n * @remarks\n * <br/> - A source change will reset side-loaded text tracks.\n */\n textTracks?: TextTrackDescription[];\n\n /**\n * The URL of a time server used by the player to synchronise the time in DASH sources.\n *\n * @remarks\n * <br/> - The time server should return time in ISO-8601 format.\n * <br/> - Overrides the time server provided the DASH manifest's `<UTCTiming>`.\n * <br/> - All sources will use the time server. Alternatively, for one source use {@link BaseSource.timeServer}.\n */\n timeServer?: string;\n\n /**\n * Describes the metadata of a source.\n *\n * @public\n */\n metadata?: MetadataDescription;\n}\n\n/**\n * Describes the configuration of a player's source.\n *\n * @public\n */\nexport interface SourceDescription extends SourceConfiguration {\n /**\n * One or more media resources for playback.\n *\n * @remarks\n * <br/> - Multiple media sources should be used to increase platform compatibility. See examples below for important use cases.\n * <br/> - The player will try each source in the provided order.\n *\n * @example\n * In this example, the player will first try to play the DASH source.\n * This might fail if the browser does not support the {@link https://www.widevine.com/ | Widevine} or {@link https://www.microsoft.com/playready/ | PlayReady} CDM, for example on Safari.\n * In that case, the player will try to play the HLS source instead.\n *\n * ```\n * [{\n * src: 'dash-source-with-drm.mpd'\n * contentProtection: {\n * widevine: {\n * licenseAcquisitionURL: 'https://license.company.com/wv'\n * },\n * playready: {\n * licenseAcquisitionURL: 'https://license.company.com/pr'\n * }\n * }\n * },{\n * src: 'hls-source-with-drm.m3u8',\n * contentProtection: {\n * fairplay: {\n * certificateURL: 'https://license.company.com/fp'\n * }\n * }\n * }]\n * ```\n *\n * @example\n * In this example, the player will first try to play the DASH source.\n * This might fail if the browser does not support the {@link https://developer.mozilla.org/en-US/docs/Web/API/Media_Source_Extensions_API | Media Source Extensions API}.\n * In that case, the player will try to play the MP4 source instead, though without features such as adaptive bitrate switching.\n *\n * ```\n * [{\n * src: 'source.mpd'\n * },{\n * src: 'source.mp4'\n * }]\n * ```\n */\n sources?: Sources;\n}\n\n/**\n * Describes the configuration of a side-loaded text track.\n *\n * @public\n */\nexport interface TextTrackDescription {\n /**\n * Whether the text track should be enabled by default.\n *\n * @remarks\n * <br/> - Only one text track per {@link TextTrack.kind} may be marked as default.\n *\n * @defaultValue `false`\n */\n default?: boolean;\n\n /**\n * The kind of the text track, represented by a value from the following list:\n * <br/> - `'subtitles'`: The track provides subtitles, used to display subtitles in a video.\n * <br/> - `'captions'`: The track provides a translation of dialogue and sound effects (suitable for users with a hearing impairment).\n * <br/> - `'descriptions'`: The track provides a textual description of the video (suitable for users with a vision impairment).\n * <br/> - `'chapters'`: The track provides chapter titles (suitable for navigating the media resource).\n * <br/> - `'metadata'`: The track provides content used by scripts and is not visible for users.\n *\n * @remarks\n * <br/> - If an unrecognized value is provided, the player will interpret it as `'metadata'`.\n *\n * @defaultValue `'subtitles'`\n */\n kind?: string;\n\n /**\n * The format of the track, represented by a value from the following list:\n * <br/> - `'srt'`\n * <br/> - `'ttml'`\n * <br/> - `'webvtt'`\n * <br/> - `'emsg'`\n * <br/> - `'eventstream'`\n * <br/> - `'id3'`\n * <br/> - `'cea608'`\n * <br/> - `'daterange'`\n *\n * @defaultValue `''`\n */\n format?: string;\n\n /**\n * The source URL of the text track.\n */\n src: string;\n\n /**\n * The language of the text track.\n */\n srclang?: string;\n\n /**\n * A label for the text track.\n *\n * @remarks\n * <br/> - This will be used as an identifier on the player API and in the UI.\n */\n label?: string;\n\n /**\n * The identifier of this text track.\n *\n * @internal\n */\n // Note: This works for HLS, but not for DASH.\n id?: string;\n}\n\n/**\n * Represents the common properties of a media resource.\n *\n * @public\n */\nexport interface BaseSource {\n /**\n * The URL of a time server used by the player to synchronise the time in DASH sources.\n *\n * @remarks\n * <br/> - Available since v2.47.0.\n * <br/> - The time server should return time in ISO-8601 format.\n * <br/> - Overrides the time server provided the DASH manifest's `<UTCTiming>`.\n * <br/> - Only this source will use the time server. Alternatively, for all source use {@link SourceConfiguration.timeServer}.\n */\n timeServer?: string;\n\n /**\n * Whether the source should be played in the low-latency-mode of the player.\n *\n * @defaultValue `false`\n *\n * @remarks\n * <br/> - This setting must be `true` when using Low-Latency CMAF with ABR.\n * <br/> - Available since v2.62.0.\n */\n lowLatency?: boolean;\n\n /**\n * The configuration for controlling playback of an MPEG-DASH stream.\n *\n * @remarks\n * <br/> - Available since v2.79.0.\n * <br/> - Ignored for non-DASH streams.\n */\n dash?: DashPlaybackConfiguration;\n\n /**\n * The configuration for controlling playback of an HLS stream.\n *\n * @remarks\n * <br/> - Available since v2.82.0.\n * <br/> - Ignored for non-HLS streams.\n */\n hls?: HlsPlaybackConfiguration;\n}\n\n/**\n * Represents a media resource characterized by a URL to the resource and optionally information about the resource.\n *\n * @public\n */\nexport interface TypedSource extends BaseSource {\n /**\n * The source URL of the media resource.\n *\n * @remarks\n * <br/> - Required if the `ssai` property is absent.\n * <br/> - Available since v2.4.0.\n */\n src?: string;\n\n /**\n * The content type (MIME type) of the media resource, represented by a value from the following list:\n * <br/> - `'application/dash+xml'`: The media resource is an MPEG-DASH stream.\n * <br/> - `'application/x-mpegURL'` or `'application/vnd.apple.mpegurl'`: The media resource is an HLS stream.\n * <br/> - `'video/mp4'`, `'video/webm'` and other formats: The media resource should use native HTML5 playback if supported by the browser.\n * <br/> - `'application/vnd.theo.hesp+json'`: The media resource is an HESP stream.\n *\n * @remarks\n * <br/> - Available since v2.4.0.\n */\n type?: string;\n\n /**\n * The content protection parameters for the media resource.\n *\n * @remarks\n * <br/> - Available since v2.15.0.\n */\n contentProtection?: DRMConfiguration;\n\n /**\n * The Server-side Ad Insertion parameters for the media resource.\n *\n * @remarks\n * <br/> - Available since v2.12.0.\n */\n ssai?: ServerSideAdInsertionConfiguration;\n}\n"],"mappings":""}
1
+ {"version":3,"names":[],"sources":["SourceDescription.ts"],"sourcesContent":["/**\n * Represents a media resource.\n *\n * @remarks\n * <br/> - Can be a string value representing the URL of a media resource, a {@link TypedSource}.\n *\n * @public\n */\nimport type { DashPlaybackConfiguration } from './dash/DashPlaybackConfiguration';\nimport type { DRMConfiguration } from './drm/DRMConfiguration';\nimport type { HlsPlaybackConfiguration } from './hls/HlsPlaybackConfiguration';\nimport type { AdDescription } from './ads/Ads';\nimport type { MetadataDescription } from './metadata/MetadataDescription';\nimport type { ServerSideAdInsertionConfiguration } from \"./ads/ssai/ServerSideAdInsertionConfiguration\";\n\nexport type Source = TypedSource;\n\n/**\n * A media resource or list of media resources.\n *\n * @remarks\n * <br/> - The order of sources when using a list determines their priority when attempting playback.\n *\n * @public\n */\nexport type Sources = Source | Source[];\n\n/**\n * The cross-origin setting of a source, represented by a value from the following list:\n * <br/> - `'anonymous'`: CORS requests will have the credentials flag set to 'same-origin'.\n * <br/> - `'use-credentials'`: CORS requests will have the credentials flag set to 'include'.\n * <br/> - `''`: Setting the empty string is the same as `'anonymous'`\n *\n * @remarks\n * <br/> - See {@link https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes | The crossorigin attribute: Requesting CORS access to content}\n *\n * @public\n */\nexport type CrossOriginSetting = '' | 'anonymous' | 'use-credentials';\n\n/**\n * Describes the configuration of a player's source.\n *\n * @public\n */\nexport interface SourceConfiguration {\n /**\n * List of {@link AdDescription}s to be queued for playback.\n */\n ads?: AdDescription[];\n\n /**\n * Content protection configuration.\n */\n contentProtection?: DRMConfiguration;\n\n /**\n * The poster of the media source.\n *\n * @remarks\n * <br/> - An empty string (`''`) clears the current poster.\n * <br/> - This poster has priority over {@link ChromelessPlayer.poster}.\n */\n poster?: string;\n\n /**\n * List of text tracks to be side-loaded with the media source.\n *\n * @remarks\n * <br/> - A source change will reset side-loaded text tracks.\n */\n textTracks?: TextTrackDescription[];\n\n /**\n * The URL of a time server used by the player to synchronise the time in DASH sources.\n *\n * @remarks\n * <br/> - The time server should return time in ISO-8601 format.\n * <br/> - Overrides the time server provided the DASH manifest's `<UTCTiming>`.\n * <br/> - All sources will use the time server. Alternatively, for one source use {@link BaseSource.timeServer}.\n */\n timeServer?: string;\n\n /**\n * Describes the metadata of a source.\n *\n * @public\n */\n metadata?: MetadataDescription;\n}\n\n/**\n * Describes the configuration of a player's source.\n *\n * @public\n */\nexport interface SourceDescription extends SourceConfiguration {\n /**\n * One or more media resources for playback.\n *\n * @remarks\n * <br/> - Multiple media sources should be used to increase platform compatibility. See examples below for important use cases.\n * <br/> - The player will try each source in the provided order.\n *\n * @example\n * In this example, the player will first try to play the DASH source.\n * This might fail if the browser does not support the {@link https://www.widevine.com/ | Widevine} or {@link https://www.microsoft.com/playready/ | PlayReady} CDM, for example on Safari.\n * In that case, the player will try to play the HLS source instead.\n *\n * ```\n * [{\n * src: 'dash-source-with-drm.mpd'\n * contentProtection: {\n * widevine: {\n * licenseAcquisitionURL: 'https://license.company.com/wv'\n * },\n * playready: {\n * licenseAcquisitionURL: 'https://license.company.com/pr'\n * }\n * }\n * },{\n * src: 'hls-source-with-drm.m3u8',\n * contentProtection: {\n * fairplay: {\n * certificateURL: 'https://license.company.com/fp'\n * }\n * }\n * }]\n * ```\n *\n * @example\n * In this example, the player will first try to play the DASH source.\n * This might fail if the browser does not support the {@link https://developer.mozilla.org/en-US/docs/Web/API/Media_Source_Extensions_API | Media Source Extensions API}.\n * In that case, the player will try to play the MP4 source instead, though without features such as adaptive bitrate switching.\n *\n * ```\n * [{\n * src: 'source.mpd'\n * },{\n * src: 'source.mp4'\n * }]\n * ```\n */\n sources?: Sources;\n}\n\n/**\n * Describes the configuration of a side-loaded text track.\n *\n * @public\n */\nexport interface TextTrackDescription {\n /**\n * Whether the text track should be enabled by default.\n *\n * @remarks\n * <br/> - Only one text track per {@link TextTrack.kind} may be marked as default.\n *\n * @defaultValue `false`\n */\n default?: boolean;\n\n /**\n * The kind of the text track, represented by a value from the following list:\n * <br/> - `'subtitles'`: The track provides subtitles, used to display subtitles in a video.\n * <br/> - `'captions'`: The track provides a translation of dialogue and sound effects (suitable for users with a hearing impairment).\n * <br/> - `'descriptions'`: The track provides a textual description of the video (suitable for users with a vision impairment).\n * <br/> - `'chapters'`: The track provides chapter titles (suitable for navigating the media resource).\n * <br/> - `'metadata'`: The track provides content used by scripts and is not visible for users.\n *\n * @remarks\n * <br/> - If an unrecognized value is provided, the player will interpret it as `'metadata'`.\n *\n * @defaultValue `'subtitles'`\n */\n kind?: string;\n\n /**\n * The format of the track, represented by a value from the following list:\n * <br/> - `'srt'`\n * <br/> - `'ttml'`\n * <br/> - `'webvtt'`\n * <br/> - `'emsg'`\n * <br/> - `'eventstream'`\n * <br/> - `'id3'`\n * <br/> - `'cea608'`\n * <br/> - `'daterange'`\n *\n * @defaultValue `''`\n */\n format?: string;\n\n /**\n * The source URL of the text track.\n */\n src: string;\n\n /**\n * The language of the text track.\n */\n srclang?: string;\n\n /**\n * A label for the text track.\n *\n * @remarks\n * <br/> - This will be used as an identifier on the player API and in the UI.\n */\n label?: string;\n\n /**\n * The identifier of this text track.\n *\n * @internal\n */\n // Note: This works for HLS, but not for DASH.\n id?: string;\n}\n\n/**\n * Represents the common properties of a media resource.\n *\n * @public\n */\nexport interface BaseSource {\n\n /**\n * The cross-origin setting of the source.\n *\n * @defaultValue `''`\n */\n crossOrigin?: CrossOriginSetting;\n\n /**\n * The URL of a time server used by the player to synchronise the time in DASH sources.\n *\n * @remarks\n * <br/> - Available since v2.47.0.\n * <br/> - The time server should return time in ISO-8601 format.\n * <br/> - Overrides the time server provided the DASH manifest's `<UTCTiming>`.\n * <br/> - Only this source will use the time server. Alternatively, for all source use {@link SourceConfiguration.timeServer}.\n */\n timeServer?: string;\n\n /**\n * Whether the source should be played in the low-latency-mode of the player.\n *\n * @defaultValue `false`\n *\n * @remarks\n * <br/> - This setting must be `true` when using Low-Latency CMAF with ABR.\n * <br/> - Available since v2.62.0.\n */\n lowLatency?: boolean;\n\n /**\n * The configuration for controlling playback of an MPEG-DASH stream.\n *\n * @remarks\n * <br/> - Available since v2.79.0.\n * <br/> - Ignored for non-DASH streams.\n */\n dash?: DashPlaybackConfiguration;\n\n /**\n * The configuration for controlling playback of an HLS stream.\n *\n * @remarks\n * <br/> - Available since v2.82.0.\n * <br/> - Ignored for non-HLS streams.\n */\n hls?: HlsPlaybackConfiguration;\n}\n\n/**\n * Represents a media resource characterized by a URL to the resource and optionally information about the resource.\n *\n * @public\n */\nexport interface TypedSource extends BaseSource {\n /**\n * The source URL of the media resource.\n *\n * @remarks\n * <br/> - Required if the `ssai` property is absent.\n * <br/> - Available since v2.4.0.\n */\n src?: string;\n\n /**\n * The content type (MIME type) of the media resource, represented by a value from the following list:\n * <br/> - `'application/dash+xml'`: The media resource is an MPEG-DASH stream.\n * <br/> - `'application/x-mpegURL'` or `'application/vnd.apple.mpegurl'`: The media resource is an HLS stream.\n * <br/> - `'video/mp4'`, `'video/webm'` and other formats: The media resource should use native HTML5 playback if supported by the browser.\n * <br/> - `'application/vnd.theo.hesp+json'`: The media resource is an HESP stream.\n *\n * @remarks\n * <br/> - Available since v2.4.0.\n */\n type?: string;\n\n /**\n * The content protection parameters for the media resource.\n *\n * @remarks\n * <br/> - Available since v2.15.0.\n */\n contentProtection?: DRMConfiguration;\n\n /**\n * The Server-side Ad Insertion parameters for the media resource.\n *\n * @remarks\n * <br/> - Available since v2.12.0.\n */\n ssai?: ServerSideAdInsertionConfiguration;\n}\n"],"mappings":""}
@@ -102,7 +102,12 @@ export class THEOplayerView extends PureComponent {
102
102
  });
103
103
  _defineProperty(this, "_onTextTrackEvent", event => {
104
104
  const nativeEvent = event.nativeEvent;
105
- this._facade.dispatchEvent(new DefaultTextTrackEvent(toTextTrackEventType(nativeEvent.type), nativeEvent.trackUid, nativeEvent.cue));
105
+ const cue = nativeEvent.cue;
106
+ if (cue) {
107
+ cue.startTime = decodeNanInf(cue.startTime);
108
+ cue.endTime = decodeNanInf(cue.endTime);
109
+ }
110
+ this._facade.dispatchEvent(new DefaultTextTrackEvent(toTextTrackEventType(nativeEvent.type), nativeEvent.trackUid, cue));
106
111
  });
107
112
  _defineProperty(this, "_onMediaTrackListEvent", event => {
108
113
  const nativeEvent = event.nativeEvent;
@@ -1 +1 @@
1
- {"version":3,"names":["React","PureComponent","findNodeHandle","Platform","requireNativeComponent","StyleSheet","UIManager","View","CastEventType","PlayerEventType","styles","decodeNanInf","BaseEvent","DefaultAdEvent","DefaultAirplayStateChangeEvent","DefaultChromecastChangeEvent","DefaultChromecastErrorEvent","DefaultDurationChangeEvent","DefaultErrorEvent","DefaultLoadedMetadataEvent","DefaultMediaTrackEvent","DefaultMediaTrackListEvent","DefaultPresentationModeChangeEvent","DefaultProgressEvent","DefaultRateChangeEvent","DefaultReadyStateChangeEvent","DefaultSegmentNotFoundEvent","DefaultTextTrackEvent","DefaultTextTrackListEvent","DefaultVolumeChangeEvent","DefaultTimeupdateEvent","toMediaTrackType","toMediaTrackTypeEventType","toTextTrackEventType","toTrackListEventType","THEOplayerAdapter","INVALID_HANDLE","THEOplayerView","constructor","props","_defineProperty","event","_this$props$onPlayerR","_this$props","state","nativeEvent","_facade","initializeWithNativePlayerState_","onPlayerReady","call","reset","dispatchEvent","SOURCE_CHANGE","LOAD_START","LOADED_DATA","textTracks","audioTracks","videoTracks","duration","selectedTextTrack","selectedVideoTrack","selectedAudioTrack","volume","muted","error","setState","seekable","buffered","CANPLAY","PLAY","PLAYING","PAUSE","SEEKING","SEEKED","WAITING","ENDED","readyState","currentTime","currentProgramDateTime","playbackRate","segmentStartTime","retryCount","type","track","trackUid","cue","trackType","qualities","ad","CHROMECAST_STATE_CHANGE","AIRPLAY_STATE_CHANGE","CHROMECAST_ERROR","presentationMode","previousPresentationMode","context","_root","createRef","initialState","componentWillUnmount","onPlayerDestroy","DESTROY","OS","command","Commands","destroy","dispatchViewManagerCommand","current","clearEventListeners","nativeHandle","render","config","style","children","createElement","base","THEOplayerRCTView","ref","absoluteFill","onNativePlayerReady","_onNativePlayerReady","onNativeSourceChange","_onSourceChange","onNativeLoadStart","_onLoadStart","onNativeLoadedData","_onLoadedData","onNativeLoadedMetadata","_onLoadedMetadata","onNativeVolumeChange","_onVolumeChange","onNativeError","_onError","onNativeProgress","_onProgress","onNativeCanPlay","_onCanPlay","onNativePlay","_onPlay","onNativePlaying","_onPlaying","onNativePause","_onPause","onNativeSeeking","_onSeeking","onNativeSeeked","_onSeeked","onNativeWaiting","_onWaiting","onNativeEnded","_onEnded","onNativeReadyStateChange","_onReadStateChange","onNativeTimeUpdate","_onTimeUpdate","onNativeDurationChange","_onDurationChange","onNativeRateChange","_onRateChange","onNativeSegmentNotFound","_onSegmentNotFound","onNativeTextTrackListEvent","_onTextTrackListEvent","onNativeTextTrackEvent","_onTextTrackEvent","onNativeMediaTrackListEvent","_onMediaTrackListEvent","onNativeMediaTrackEvent","_onMediaTrackEvent","onNativeAdEvent","_onAdEvent","onNativeCastEvent","_onCastEvent","onNativePresentationModeChange","_onPresentationModeChange","undefined","LINKING_ERROR","select","ios","default","ComponentName","getViewManagerConfig","Error"],"sources":["THEOplayerView.tsx"],"sourcesContent":["import React, { PureComponent } from 'react';\nimport {\n findNodeHandle,\n HostComponent,\n NativeSyntheticEvent,\n Platform,\n requireNativeComponent,\n StyleProp,\n StyleSheet,\n UIManager,\n View,\n ViewStyle,\n} from 'react-native';\nimport type { PlayerConfiguration, PlayerError, THEOplayerViewProps } from 'react-native-theoplayer';\nimport { CastEventType, PlayerEventType } from 'react-native-theoplayer';\n\nimport styles from './THEOplayerView.style';\nimport { decodeNanInf } from './utils/TypeUtils';\nimport { BaseEvent } from './adapter/event/BaseEvent';\nimport {\n DefaultAdEvent,\n DefaultAirplayStateChangeEvent,\n DefaultChromecastChangeEvent,\n DefaultChromecastErrorEvent,\n DefaultDurationChangeEvent,\n DefaultErrorEvent,\n DefaultLoadedMetadataEvent,\n DefaultMediaTrackEvent,\n DefaultMediaTrackListEvent,\n DefaultPresentationModeChangeEvent,\n DefaultProgressEvent,\n DefaultRateChangeEvent,\n DefaultReadyStateChangeEvent,\n DefaultSegmentNotFoundEvent,\n DefaultTextTrackEvent,\n DefaultTextTrackListEvent,\n DefaultVolumeChangeEvent,\n DefaultTimeupdateEvent,\n} from './adapter/event/PlayerEvents';\nimport type { NativeCastEvent } from './adapter/event/native/NativeCastEvent';\nimport type {\n NativeMediaTrackEvent,\n NativeMediaTrackListEvent,\n NativeTextTrackEvent,\n NativeTextTrackListEvent,\n} from './adapter/event/native/NativeTrackEvent';\nimport { toMediaTrackType, toMediaTrackTypeEventType, toTextTrackEventType, toTrackListEventType } from './adapter/event/native/NativeTrackEvent';\nimport type {\n NativeDurationChangeEvent,\n NativeErrorEvent,\n NativeLoadedMetadataEvent,\n NativePlayerStateEvent,\n NativePresentationModeChangeEvent,\n NativeProgressEvent,\n NativeRateChangeEvent,\n NativeReadyStateChangeEvent,\n NativeSegmentNotFoundEvent,\n NativeTimeUpdateEvent,\n NativeVolumeChangeEvent,\n} from './adapter/event/native/NativePlayerEvent';\nimport type { NativeAdEvent } from './adapter/event/native/NativeAdEvent';\nimport { THEOplayerAdapter } from './adapter/THEOplayerAdapter';\n\nconst INVALID_HANDLE = -1;\n\ninterface THEOplayerRCTViewProps {\n ref: React.RefObject<THEOplayerViewNativeComponent>;\n style?: StyleProp<ViewStyle>;\n config?: PlayerConfiguration;\n onNativePlayerReady: (event: NativeSyntheticEvent<NativePlayerStateEvent>) => void;\n onNativeSourceChange: () => void;\n onNativeLoadStart: () => void;\n onNativeLoadedData: () => void;\n onNativeLoadedMetadata: (event: NativeSyntheticEvent<NativeLoadedMetadataEvent>) => void;\n onNativeReadyStateChange?: (event: NativeSyntheticEvent<NativeReadyStateChangeEvent>) => void;\n onNativeError: (event: NativeSyntheticEvent<NativeErrorEvent>) => void;\n onNativeProgress: (event: NativeSyntheticEvent<NativeProgressEvent>) => void;\n onNativeVolumeChange: (event: NativeSyntheticEvent<NativeVolumeChangeEvent>) => void;\n onNativeCanPlay: () => void;\n onNativePlay: () => void;\n onNativePlaying: () => void;\n onNativePause: () => void;\n onNativeSeeking: () => void;\n onNativeSeeked: () => void;\n onNativeEnded: () => void;\n onNativeWaiting: () => void;\n onNativeTimeUpdate: (event: NativeSyntheticEvent<NativeTimeUpdateEvent>) => void;\n onNativeDurationChange: (event: NativeSyntheticEvent<NativeDurationChangeEvent>) => void;\n onNativeRateChange: (event: NativeSyntheticEvent<NativeRateChangeEvent>) => void;\n onNativeSegmentNotFound: (event: NativeSyntheticEvent<NativeSegmentNotFoundEvent>) => void;\n onNativeTextTrackListEvent: (event: NativeSyntheticEvent<NativeTextTrackListEvent>) => void;\n onNativeTextTrackEvent: (event: NativeSyntheticEvent<NativeTextTrackEvent>) => void;\n onNativeMediaTrackListEvent: (event: NativeSyntheticEvent<NativeMediaTrackListEvent>) => void;\n onNativeMediaTrackEvent: (event: NativeSyntheticEvent<NativeMediaTrackEvent>) => void;\n onNativeAdEvent: (event: NativeSyntheticEvent<NativeAdEvent>) => void;\n onNativeCastEvent: (event: NativeSyntheticEvent<NativeCastEvent>) => void;\n onNativePresentationModeChange: (event: NativeSyntheticEvent<NativePresentationModeChangeEvent>) => void;\n}\n\ninterface THEOplayerRCTViewState {\n error?: PlayerError;\n}\n\ntype THEOplayerViewNativeComponent = HostComponent<THEOplayerRCTViewProps>;\n\nexport class THEOplayerView extends PureComponent<React.PropsWithChildren<THEOplayerViewProps>, THEOplayerRCTViewState> {\n private readonly _root: React.RefObject<THEOplayerViewNativeComponent>;\n private readonly _facade: THEOplayerAdapter;\n\n private static initialState: THEOplayerRCTViewState = {\n error: undefined,\n };\n\n constructor(props: THEOplayerViewProps) {\n super(props);\n this._root = React.createRef();\n this.state = THEOplayerView.initialState;\n this._facade = new THEOplayerAdapter(this);\n }\n\n componentWillUnmount() {\n // Notify the player will be destroyed.\n const { onPlayerDestroy } = this.props;\n if (onPlayerDestroy) {\n onPlayerDestroy(this._facade);\n }\n this._facade.dispatchEvent(new BaseEvent(PlayerEventType.DESTROY));\n\n if (Platform.OS === 'ios') {\n // TODO: move to native module\n // on iOS, we trigger an explicit 'destroy' to clean up the underlying THEOplayer\n const command = (UIManager as { [index: string]: any })['THEOplayerRCTView'].Commands.destroy;\n UIManager.dispatchViewManagerCommand(findNodeHandle(this._root.current), command, []);\n }\n this._facade.clearEventListeners();\n }\n\n public get nativeHandle(): number {\n return findNodeHandle(this._root.current) || INVALID_HANDLE;\n }\n\n private reset() {\n this.setState(THEOplayerView.initialState);\n }\n\n private _onNativePlayerReady = (event: NativeSyntheticEvent<NativePlayerStateEvent>) => {\n // Optionally apply an initial player state\n const { state } = event?.nativeEvent;\n if (state) {\n this._facade.initializeWithNativePlayerState_(state);\n }\n this.props.onPlayerReady?.(this._facade);\n };\n\n private _onSourceChange = () => {\n this.reset();\n this._facade.dispatchEvent(new BaseEvent(PlayerEventType.SOURCE_CHANGE));\n };\n\n private _onLoadStart = () => {\n this._facade.dispatchEvent(new BaseEvent(PlayerEventType.LOAD_START));\n };\n\n private _onLoadedData = () => {\n this._facade.dispatchEvent(new BaseEvent(PlayerEventType.LOADED_DATA));\n };\n\n private _onLoadedMetadata = (event: NativeSyntheticEvent<NativeLoadedMetadataEvent>) => {\n const nativeEvent = event.nativeEvent;\n this._facade.dispatchEvent(\n new DefaultLoadedMetadataEvent(\n nativeEvent.textTracks,\n nativeEvent.audioTracks,\n nativeEvent.videoTracks,\n decodeNanInf(nativeEvent.duration),\n nativeEvent.selectedTextTrack,\n nativeEvent.selectedVideoTrack,\n nativeEvent.selectedAudioTrack,\n ),\n );\n };\n\n private _onVolumeChange = (event: NativeSyntheticEvent<NativeVolumeChangeEvent>) => {\n this._facade.dispatchEvent(new DefaultVolumeChangeEvent(event.nativeEvent.volume, event.nativeEvent.muted));\n };\n\n private _onError = (event: NativeSyntheticEvent<NativeErrorEvent>) => {\n const { error } = event.nativeEvent;\n this.setState({ error });\n this._facade.dispatchEvent(new DefaultErrorEvent(event.nativeEvent.error));\n };\n\n private _onProgress = (event: NativeSyntheticEvent<NativeProgressEvent>) => {\n this._facade.dispatchEvent(new DefaultProgressEvent(event.nativeEvent.seekable, event.nativeEvent.buffered));\n };\n\n private _onCanPlay = () => {\n this._facade.dispatchEvent(new BaseEvent(PlayerEventType.CANPLAY));\n };\n\n private _onPlay = () => {\n this._facade.dispatchEvent(new BaseEvent(PlayerEventType.PLAY));\n };\n\n private _onPlaying = () => {\n this._facade.dispatchEvent(new BaseEvent(PlayerEventType.PLAYING));\n };\n\n private _onPause = () => {\n this._facade.dispatchEvent(new BaseEvent(PlayerEventType.PAUSE));\n };\n\n private _onSeeking = () => {\n this._facade.dispatchEvent(new BaseEvent(PlayerEventType.SEEKING));\n };\n\n private _onSeeked = () => {\n this._facade.dispatchEvent(new BaseEvent(PlayerEventType.SEEKED));\n };\n\n private _onWaiting = () => {\n this._facade.dispatchEvent(new BaseEvent(PlayerEventType.WAITING));\n };\n\n private _onEnded = () => {\n this._facade.dispatchEvent(new BaseEvent(PlayerEventType.ENDED));\n };\n\n private _onReadStateChange = (event: NativeSyntheticEvent<NativeReadyStateChangeEvent>) => {\n this._facade.dispatchEvent(new DefaultReadyStateChangeEvent(event.nativeEvent.readyState));\n };\n\n private _onTimeUpdate = (event: NativeSyntheticEvent<NativeTimeUpdateEvent>) => {\n this._facade.dispatchEvent(new DefaultTimeupdateEvent(event.nativeEvent.currentTime, event.nativeEvent.currentProgramDateTime));\n };\n\n private _onDurationChange = (event: NativeSyntheticEvent<NativeDurationChangeEvent>) => {\n this._facade.dispatchEvent(new DefaultDurationChangeEvent(decodeNanInf(event.nativeEvent.duration)));\n };\n\n private _onRateChange = (event: NativeSyntheticEvent<NativeRateChangeEvent>) => {\n this._facade.dispatchEvent(new DefaultRateChangeEvent(event.nativeEvent.playbackRate));\n };\n\n private _onSegmentNotFound = (event: NativeSyntheticEvent<NativeSegmentNotFoundEvent>) => {\n const nativeEvent = event.nativeEvent;\n this._facade.dispatchEvent(new DefaultSegmentNotFoundEvent(nativeEvent.segmentStartTime, nativeEvent.error, nativeEvent.retryCount));\n };\n\n private _onTextTrackListEvent = (event: NativeSyntheticEvent<NativeTextTrackListEvent>) => {\n const nativeEvent = event.nativeEvent;\n this._facade.dispatchEvent(new DefaultTextTrackListEvent(toTrackListEventType(nativeEvent.type), nativeEvent.track));\n };\n\n private _onTextTrackEvent = (event: NativeSyntheticEvent<NativeTextTrackEvent>) => {\n const nativeEvent = event.nativeEvent;\n this._facade.dispatchEvent(new DefaultTextTrackEvent(toTextTrackEventType(nativeEvent.type), nativeEvent.trackUid, nativeEvent.cue));\n };\n\n private _onMediaTrackListEvent = (event: NativeSyntheticEvent<NativeMediaTrackListEvent>) => {\n const nativeEvent = event.nativeEvent;\n this._facade.dispatchEvent(\n new DefaultMediaTrackListEvent(toTrackListEventType(nativeEvent.type), toMediaTrackType(nativeEvent.trackType), nativeEvent.track),\n );\n };\n\n private _onMediaTrackEvent = (event: NativeSyntheticEvent<NativeMediaTrackEvent>) => {\n const nativeEvent = event.nativeEvent;\n this._facade.dispatchEvent(\n new DefaultMediaTrackEvent(\n toMediaTrackTypeEventType(nativeEvent.type),\n toMediaTrackType(nativeEvent.trackType),\n nativeEvent.trackUid,\n nativeEvent.qualities,\n ),\n );\n };\n\n private _onAdEvent = (event: NativeSyntheticEvent<NativeAdEvent>) => {\n const nativeEvent = event.nativeEvent;\n this._facade.dispatchEvent(new DefaultAdEvent(nativeEvent.type, nativeEvent.ad));\n };\n\n private _onCastEvent = (event: NativeSyntheticEvent<NativeCastEvent>) => {\n switch (event.nativeEvent.type) {\n case CastEventType.CHROMECAST_STATE_CHANGE:\n this._facade.dispatchEvent(new DefaultChromecastChangeEvent(event.nativeEvent.state));\n break;\n case CastEventType.AIRPLAY_STATE_CHANGE:\n this._facade.dispatchEvent(new DefaultAirplayStateChangeEvent(event.nativeEvent.state));\n break;\n case CastEventType.CHROMECAST_ERROR:\n this._facade.dispatchEvent(new DefaultChromecastErrorEvent(event.nativeEvent.error));\n break;\n }\n };\n\n private _onPresentationModeChange = (event: NativeSyntheticEvent<NativePresentationModeChangeEvent>) => {\n this._facade.dispatchEvent(\n new DefaultPresentationModeChangeEvent(\n event.nativeEvent.presentationMode,\n event.nativeEvent.previousPresentationMode,\n event.nativeEvent.context,\n ),\n );\n };\n\n public render(): JSX.Element {\n const { config, style, children } = this.props;\n return (\n <View style={[styles.base, style]}>\n <THEOplayerRCTView\n ref={this._root}\n style={StyleSheet.absoluteFill}\n config={config || {}}\n onNativePlayerReady={this._onNativePlayerReady}\n onNativeSourceChange={this._onSourceChange}\n onNativeLoadStart={this._onLoadStart}\n onNativeLoadedData={this._onLoadedData}\n onNativeLoadedMetadata={this._onLoadedMetadata}\n onNativeVolumeChange={this._onVolumeChange}\n onNativeError={this._onError}\n onNativeProgress={this._onProgress}\n onNativeCanPlay={this._onCanPlay}\n onNativePlay={this._onPlay}\n onNativePlaying={this._onPlaying}\n onNativePause={this._onPause}\n onNativeSeeking={this._onSeeking}\n onNativeSeeked={this._onSeeked}\n onNativeWaiting={this._onWaiting}\n onNativeEnded={this._onEnded}\n onNativeReadyStateChange={this._onReadStateChange}\n onNativeTimeUpdate={this._onTimeUpdate}\n onNativeDurationChange={this._onDurationChange}\n onNativeRateChange={this._onRateChange}\n onNativeSegmentNotFound={this._onSegmentNotFound}\n onNativeTextTrackListEvent={this._onTextTrackListEvent}\n onNativeTextTrackEvent={this._onTextTrackEvent}\n onNativeMediaTrackListEvent={this._onMediaTrackListEvent}\n onNativeMediaTrackEvent={this._onMediaTrackEvent}\n onNativeAdEvent={this._onAdEvent}\n onNativeCastEvent={this._onCastEvent}\n onNativePresentationModeChange={this._onPresentationModeChange}\n />\n {children}\n </View>\n );\n }\n}\n\nconst LINKING_ERROR =\n `The package 'react-native-theoplayer' doesn't seem to be linked. Make sure: \\n\\n` +\n Platform.select({ ios: \"- You have run 'pod install'\\n\", default: '' }) +\n '- You rebuilt the app after installing the package\\n' +\n '- You are not using Expo managed workflow\\n';\n\nconst ComponentName = 'THEOplayerRCTView';\n\nconst THEOplayerRCTView =\n UIManager.getViewManagerConfig(ComponentName) != null\n ? requireNativeComponent<THEOplayerRCTViewProps>(ComponentName)\n : () => {\n throw new Error(LINKING_ERROR);\n };\n"],"mappings":"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"}
1
+ {"version":3,"names":["React","PureComponent","findNodeHandle","Platform","requireNativeComponent","StyleSheet","UIManager","View","CastEventType","PlayerEventType","styles","decodeNanInf","BaseEvent","DefaultAdEvent","DefaultAirplayStateChangeEvent","DefaultChromecastChangeEvent","DefaultChromecastErrorEvent","DefaultDurationChangeEvent","DefaultErrorEvent","DefaultLoadedMetadataEvent","DefaultMediaTrackEvent","DefaultMediaTrackListEvent","DefaultPresentationModeChangeEvent","DefaultProgressEvent","DefaultRateChangeEvent","DefaultReadyStateChangeEvent","DefaultSegmentNotFoundEvent","DefaultTextTrackEvent","DefaultTextTrackListEvent","DefaultVolumeChangeEvent","DefaultTimeupdateEvent","toMediaTrackType","toMediaTrackTypeEventType","toTextTrackEventType","toTrackListEventType","THEOplayerAdapter","INVALID_HANDLE","THEOplayerView","constructor","props","_defineProperty","event","_this$props$onPlayerR","_this$props","state","nativeEvent","_facade","initializeWithNativePlayerState_","onPlayerReady","call","reset","dispatchEvent","SOURCE_CHANGE","LOAD_START","LOADED_DATA","textTracks","audioTracks","videoTracks","duration","selectedTextTrack","selectedVideoTrack","selectedAudioTrack","volume","muted","error","setState","seekable","buffered","CANPLAY","PLAY","PLAYING","PAUSE","SEEKING","SEEKED","WAITING","ENDED","readyState","currentTime","currentProgramDateTime","playbackRate","segmentStartTime","retryCount","type","track","cue","startTime","endTime","trackUid","trackType","qualities","ad","CHROMECAST_STATE_CHANGE","AIRPLAY_STATE_CHANGE","CHROMECAST_ERROR","presentationMode","previousPresentationMode","context","_root","createRef","initialState","componentWillUnmount","onPlayerDestroy","DESTROY","OS","command","Commands","destroy","dispatchViewManagerCommand","current","clearEventListeners","nativeHandle","render","config","style","children","createElement","base","THEOplayerRCTView","ref","absoluteFill","onNativePlayerReady","_onNativePlayerReady","onNativeSourceChange","_onSourceChange","onNativeLoadStart","_onLoadStart","onNativeLoadedData","_onLoadedData","onNativeLoadedMetadata","_onLoadedMetadata","onNativeVolumeChange","_onVolumeChange","onNativeError","_onError","onNativeProgress","_onProgress","onNativeCanPlay","_onCanPlay","onNativePlay","_onPlay","onNativePlaying","_onPlaying","onNativePause","_onPause","onNativeSeeking","_onSeeking","onNativeSeeked","_onSeeked","onNativeWaiting","_onWaiting","onNativeEnded","_onEnded","onNativeReadyStateChange","_onReadStateChange","onNativeTimeUpdate","_onTimeUpdate","onNativeDurationChange","_onDurationChange","onNativeRateChange","_onRateChange","onNativeSegmentNotFound","_onSegmentNotFound","onNativeTextTrackListEvent","_onTextTrackListEvent","onNativeTextTrackEvent","_onTextTrackEvent","onNativeMediaTrackListEvent","_onMediaTrackListEvent","onNativeMediaTrackEvent","_onMediaTrackEvent","onNativeAdEvent","_onAdEvent","onNativeCastEvent","_onCastEvent","onNativePresentationModeChange","_onPresentationModeChange","undefined","LINKING_ERROR","select","ios","default","ComponentName","getViewManagerConfig","Error"],"sources":["THEOplayerView.tsx"],"sourcesContent":["import React, { PureComponent } from 'react';\nimport {\n findNodeHandle,\n HostComponent,\n NativeSyntheticEvent,\n Platform,\n requireNativeComponent,\n StyleProp,\n StyleSheet,\n UIManager,\n View,\n ViewStyle,\n} from 'react-native';\nimport type { PlayerConfiguration, PlayerError, THEOplayerViewProps } from 'react-native-theoplayer';\nimport { CastEventType, PlayerEventType } from 'react-native-theoplayer';\n\nimport styles from './THEOplayerView.style';\nimport { decodeNanInf } from './utils/TypeUtils';\nimport { BaseEvent } from './adapter/event/BaseEvent';\nimport {\n DefaultAdEvent,\n DefaultAirplayStateChangeEvent,\n DefaultChromecastChangeEvent,\n DefaultChromecastErrorEvent,\n DefaultDurationChangeEvent,\n DefaultErrorEvent,\n DefaultLoadedMetadataEvent,\n DefaultMediaTrackEvent,\n DefaultMediaTrackListEvent,\n DefaultPresentationModeChangeEvent,\n DefaultProgressEvent,\n DefaultRateChangeEvent,\n DefaultReadyStateChangeEvent,\n DefaultSegmentNotFoundEvent,\n DefaultTextTrackEvent,\n DefaultTextTrackListEvent,\n DefaultVolumeChangeEvent,\n DefaultTimeupdateEvent,\n} from './adapter/event/PlayerEvents';\nimport type { NativeCastEvent } from './adapter/event/native/NativeCastEvent';\nimport type {\n NativeMediaTrackEvent,\n NativeMediaTrackListEvent,\n NativeTextTrackEvent,\n NativeTextTrackListEvent,\n} from './adapter/event/native/NativeTrackEvent';\nimport { toMediaTrackType, toMediaTrackTypeEventType, toTextTrackEventType, toTrackListEventType } from './adapter/event/native/NativeTrackEvent';\nimport type {\n NativeDurationChangeEvent,\n NativeErrorEvent,\n NativeLoadedMetadataEvent,\n NativePlayerStateEvent,\n NativePresentationModeChangeEvent,\n NativeProgressEvent,\n NativeRateChangeEvent,\n NativeReadyStateChangeEvent,\n NativeSegmentNotFoundEvent,\n NativeTimeUpdateEvent,\n NativeVolumeChangeEvent,\n} from './adapter/event/native/NativePlayerEvent';\nimport type { NativeAdEvent } from './adapter/event/native/NativeAdEvent';\nimport { THEOplayerAdapter } from './adapter/THEOplayerAdapter';\n\nconst INVALID_HANDLE = -1;\n\ninterface THEOplayerRCTViewProps {\n ref: React.RefObject<THEOplayerViewNativeComponent>;\n style?: StyleProp<ViewStyle>;\n config?: PlayerConfiguration;\n onNativePlayerReady: (event: NativeSyntheticEvent<NativePlayerStateEvent>) => void;\n onNativeSourceChange: () => void;\n onNativeLoadStart: () => void;\n onNativeLoadedData: () => void;\n onNativeLoadedMetadata: (event: NativeSyntheticEvent<NativeLoadedMetadataEvent>) => void;\n onNativeReadyStateChange?: (event: NativeSyntheticEvent<NativeReadyStateChangeEvent>) => void;\n onNativeError: (event: NativeSyntheticEvent<NativeErrorEvent>) => void;\n onNativeProgress: (event: NativeSyntheticEvent<NativeProgressEvent>) => void;\n onNativeVolumeChange: (event: NativeSyntheticEvent<NativeVolumeChangeEvent>) => void;\n onNativeCanPlay: () => void;\n onNativePlay: () => void;\n onNativePlaying: () => void;\n onNativePause: () => void;\n onNativeSeeking: () => void;\n onNativeSeeked: () => void;\n onNativeEnded: () => void;\n onNativeWaiting: () => void;\n onNativeTimeUpdate: (event: NativeSyntheticEvent<NativeTimeUpdateEvent>) => void;\n onNativeDurationChange: (event: NativeSyntheticEvent<NativeDurationChangeEvent>) => void;\n onNativeRateChange: (event: NativeSyntheticEvent<NativeRateChangeEvent>) => void;\n onNativeSegmentNotFound: (event: NativeSyntheticEvent<NativeSegmentNotFoundEvent>) => void;\n onNativeTextTrackListEvent: (event: NativeSyntheticEvent<NativeTextTrackListEvent>) => void;\n onNativeTextTrackEvent: (event: NativeSyntheticEvent<NativeTextTrackEvent>) => void;\n onNativeMediaTrackListEvent: (event: NativeSyntheticEvent<NativeMediaTrackListEvent>) => void;\n onNativeMediaTrackEvent: (event: NativeSyntheticEvent<NativeMediaTrackEvent>) => void;\n onNativeAdEvent: (event: NativeSyntheticEvent<NativeAdEvent>) => void;\n onNativeCastEvent: (event: NativeSyntheticEvent<NativeCastEvent>) => void;\n onNativePresentationModeChange: (event: NativeSyntheticEvent<NativePresentationModeChangeEvent>) => void;\n}\n\ninterface THEOplayerRCTViewState {\n error?: PlayerError;\n}\n\ntype THEOplayerViewNativeComponent = HostComponent<THEOplayerRCTViewProps>;\n\nexport class THEOplayerView extends PureComponent<React.PropsWithChildren<THEOplayerViewProps>, THEOplayerRCTViewState> {\n private readonly _root: React.RefObject<THEOplayerViewNativeComponent>;\n private readonly _facade: THEOplayerAdapter;\n\n private static initialState: THEOplayerRCTViewState = {\n error: undefined,\n };\n\n constructor(props: THEOplayerViewProps) {\n super(props);\n this._root = React.createRef();\n this.state = THEOplayerView.initialState;\n this._facade = new THEOplayerAdapter(this);\n }\n\n componentWillUnmount() {\n // Notify the player will be destroyed.\n const { onPlayerDestroy } = this.props;\n if (onPlayerDestroy) {\n onPlayerDestroy(this._facade);\n }\n this._facade.dispatchEvent(new BaseEvent(PlayerEventType.DESTROY));\n\n if (Platform.OS === 'ios') {\n // TODO: move to native module\n // on iOS, we trigger an explicit 'destroy' to clean up the underlying THEOplayer\n const command = (UIManager as { [index: string]: any })['THEOplayerRCTView'].Commands.destroy;\n UIManager.dispatchViewManagerCommand(findNodeHandle(this._root.current), command, []);\n }\n this._facade.clearEventListeners();\n }\n\n public get nativeHandle(): number {\n return findNodeHandle(this._root.current) || INVALID_HANDLE;\n }\n\n private reset() {\n this.setState(THEOplayerView.initialState);\n }\n\n private _onNativePlayerReady = (event: NativeSyntheticEvent<NativePlayerStateEvent>) => {\n // Optionally apply an initial player state\n const { state } = event?.nativeEvent;\n if (state) {\n this._facade.initializeWithNativePlayerState_(state);\n }\n this.props.onPlayerReady?.(this._facade);\n };\n\n private _onSourceChange = () => {\n this.reset();\n this._facade.dispatchEvent(new BaseEvent(PlayerEventType.SOURCE_CHANGE));\n };\n\n private _onLoadStart = () => {\n this._facade.dispatchEvent(new BaseEvent(PlayerEventType.LOAD_START));\n };\n\n private _onLoadedData = () => {\n this._facade.dispatchEvent(new BaseEvent(PlayerEventType.LOADED_DATA));\n };\n\n private _onLoadedMetadata = (event: NativeSyntheticEvent<NativeLoadedMetadataEvent>) => {\n const nativeEvent = event.nativeEvent;\n this._facade.dispatchEvent(\n new DefaultLoadedMetadataEvent(\n nativeEvent.textTracks,\n nativeEvent.audioTracks,\n nativeEvent.videoTracks,\n decodeNanInf(nativeEvent.duration),\n nativeEvent.selectedTextTrack,\n nativeEvent.selectedVideoTrack,\n nativeEvent.selectedAudioTrack,\n ),\n );\n };\n\n private _onVolumeChange = (event: NativeSyntheticEvent<NativeVolumeChangeEvent>) => {\n this._facade.dispatchEvent(new DefaultVolumeChangeEvent(event.nativeEvent.volume, event.nativeEvent.muted));\n };\n\n private _onError = (event: NativeSyntheticEvent<NativeErrorEvent>) => {\n const { error } = event.nativeEvent;\n this.setState({ error });\n this._facade.dispatchEvent(new DefaultErrorEvent(event.nativeEvent.error));\n };\n\n private _onProgress = (event: NativeSyntheticEvent<NativeProgressEvent>) => {\n this._facade.dispatchEvent(new DefaultProgressEvent(event.nativeEvent.seekable, event.nativeEvent.buffered));\n };\n\n private _onCanPlay = () => {\n this._facade.dispatchEvent(new BaseEvent(PlayerEventType.CANPLAY));\n };\n\n private _onPlay = () => {\n this._facade.dispatchEvent(new BaseEvent(PlayerEventType.PLAY));\n };\n\n private _onPlaying = () => {\n this._facade.dispatchEvent(new BaseEvent(PlayerEventType.PLAYING));\n };\n\n private _onPause = () => {\n this._facade.dispatchEvent(new BaseEvent(PlayerEventType.PAUSE));\n };\n\n private _onSeeking = () => {\n this._facade.dispatchEvent(new BaseEvent(PlayerEventType.SEEKING));\n };\n\n private _onSeeked = () => {\n this._facade.dispatchEvent(new BaseEvent(PlayerEventType.SEEKED));\n };\n\n private _onWaiting = () => {\n this._facade.dispatchEvent(new BaseEvent(PlayerEventType.WAITING));\n };\n\n private _onEnded = () => {\n this._facade.dispatchEvent(new BaseEvent(PlayerEventType.ENDED));\n };\n\n private _onReadStateChange = (event: NativeSyntheticEvent<NativeReadyStateChangeEvent>) => {\n this._facade.dispatchEvent(new DefaultReadyStateChangeEvent(event.nativeEvent.readyState));\n };\n\n private _onTimeUpdate = (event: NativeSyntheticEvent<NativeTimeUpdateEvent>) => {\n this._facade.dispatchEvent(new DefaultTimeupdateEvent(event.nativeEvent.currentTime, event.nativeEvent.currentProgramDateTime));\n };\n\n private _onDurationChange = (event: NativeSyntheticEvent<NativeDurationChangeEvent>) => {\n this._facade.dispatchEvent(new DefaultDurationChangeEvent(decodeNanInf(event.nativeEvent.duration)));\n };\n\n private _onRateChange = (event: NativeSyntheticEvent<NativeRateChangeEvent>) => {\n this._facade.dispatchEvent(new DefaultRateChangeEvent(event.nativeEvent.playbackRate));\n };\n\n private _onSegmentNotFound = (event: NativeSyntheticEvent<NativeSegmentNotFoundEvent>) => {\n const nativeEvent = event.nativeEvent;\n this._facade.dispatchEvent(new DefaultSegmentNotFoundEvent(nativeEvent.segmentStartTime, nativeEvent.error, nativeEvent.retryCount));\n };\n\n private _onTextTrackListEvent = (event: NativeSyntheticEvent<NativeTextTrackListEvent>) => {\n const nativeEvent = event.nativeEvent;\n this._facade.dispatchEvent(new DefaultTextTrackListEvent(toTrackListEventType(nativeEvent.type), nativeEvent.track));\n };\n\n private _onTextTrackEvent = (event: NativeSyntheticEvent<NativeTextTrackEvent>) => {\n const nativeEvent = event.nativeEvent;\n const cue = nativeEvent.cue;\n if (cue) {\n cue.startTime = decodeNanInf(cue.startTime);\n cue.endTime = decodeNanInf(cue.endTime);\n }\n this._facade.dispatchEvent(new DefaultTextTrackEvent(toTextTrackEventType(nativeEvent.type), nativeEvent.trackUid, cue));\n };\n\n private _onMediaTrackListEvent = (event: NativeSyntheticEvent<NativeMediaTrackListEvent>) => {\n const nativeEvent = event.nativeEvent;\n this._facade.dispatchEvent(\n new DefaultMediaTrackListEvent(toTrackListEventType(nativeEvent.type), toMediaTrackType(nativeEvent.trackType), nativeEvent.track),\n );\n };\n\n private _onMediaTrackEvent = (event: NativeSyntheticEvent<NativeMediaTrackEvent>) => {\n const nativeEvent = event.nativeEvent;\n this._facade.dispatchEvent(\n new DefaultMediaTrackEvent(\n toMediaTrackTypeEventType(nativeEvent.type),\n toMediaTrackType(nativeEvent.trackType),\n nativeEvent.trackUid,\n nativeEvent.qualities,\n ),\n );\n };\n\n private _onAdEvent = (event: NativeSyntheticEvent<NativeAdEvent>) => {\n const nativeEvent = event.nativeEvent;\n this._facade.dispatchEvent(new DefaultAdEvent(nativeEvent.type, nativeEvent.ad));\n };\n\n private _onCastEvent = (event: NativeSyntheticEvent<NativeCastEvent>) => {\n switch (event.nativeEvent.type) {\n case CastEventType.CHROMECAST_STATE_CHANGE:\n this._facade.dispatchEvent(new DefaultChromecastChangeEvent(event.nativeEvent.state));\n break;\n case CastEventType.AIRPLAY_STATE_CHANGE:\n this._facade.dispatchEvent(new DefaultAirplayStateChangeEvent(event.nativeEvent.state));\n break;\n case CastEventType.CHROMECAST_ERROR:\n this._facade.dispatchEvent(new DefaultChromecastErrorEvent(event.nativeEvent.error));\n break;\n }\n };\n\n private _onPresentationModeChange = (event: NativeSyntheticEvent<NativePresentationModeChangeEvent>) => {\n this._facade.dispatchEvent(\n new DefaultPresentationModeChangeEvent(\n event.nativeEvent.presentationMode,\n event.nativeEvent.previousPresentationMode,\n event.nativeEvent.context,\n ),\n );\n };\n\n public render(): JSX.Element {\n const { config, style, children } = this.props;\n return (\n <View style={[styles.base, style]}>\n <THEOplayerRCTView\n ref={this._root}\n style={StyleSheet.absoluteFill}\n config={config || {}}\n onNativePlayerReady={this._onNativePlayerReady}\n onNativeSourceChange={this._onSourceChange}\n onNativeLoadStart={this._onLoadStart}\n onNativeLoadedData={this._onLoadedData}\n onNativeLoadedMetadata={this._onLoadedMetadata}\n onNativeVolumeChange={this._onVolumeChange}\n onNativeError={this._onError}\n onNativeProgress={this._onProgress}\n onNativeCanPlay={this._onCanPlay}\n onNativePlay={this._onPlay}\n onNativePlaying={this._onPlaying}\n onNativePause={this._onPause}\n onNativeSeeking={this._onSeeking}\n onNativeSeeked={this._onSeeked}\n onNativeWaiting={this._onWaiting}\n onNativeEnded={this._onEnded}\n onNativeReadyStateChange={this._onReadStateChange}\n onNativeTimeUpdate={this._onTimeUpdate}\n onNativeDurationChange={this._onDurationChange}\n onNativeRateChange={this._onRateChange}\n onNativeSegmentNotFound={this._onSegmentNotFound}\n onNativeTextTrackListEvent={this._onTextTrackListEvent}\n onNativeTextTrackEvent={this._onTextTrackEvent}\n onNativeMediaTrackListEvent={this._onMediaTrackListEvent}\n onNativeMediaTrackEvent={this._onMediaTrackEvent}\n onNativeAdEvent={this._onAdEvent}\n onNativeCastEvent={this._onCastEvent}\n onNativePresentationModeChange={this._onPresentationModeChange}\n />\n {children}\n </View>\n );\n }\n}\n\nconst LINKING_ERROR =\n `The package 'react-native-theoplayer' doesn't seem to be linked. Make sure: \\n\\n` +\n Platform.select({ ios: \"- You have run 'pod install'\\n\", default: '' }) +\n '- You rebuilt the app after installing the package\\n' +\n '- You are not using Expo managed workflow\\n';\n\nconst ComponentName = 'THEOplayerRCTView';\n\nconst THEOplayerRCTView =\n UIManager.getViewManagerConfig(ComponentName) != null\n ? requireNativeComponent<THEOplayerRCTViewProps>(ComponentName)\n : () => {\n throw new Error(LINKING_ERROR);\n };\n"],"mappings":"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"}
@@ -16,21 +16,21 @@ export function THEOplayerView(props) {
16
16
  if (container.current) {
17
17
  var _props$onPlayerReady;
18
18
  const chromeless = (config === null || config === void 0 ? void 0 : config.chromeless) === true || (config === null || config === void 0 ? void 0 : config.chromeless) === undefined;
19
+ const updatedConfig = {
20
+ ...config,
21
+ allowNativeFullscreen: true
22
+ };
19
23
  if (chromeless) {
20
- player.current = new THEOplayer.ChromelessPlayer(container.current, config);
24
+ player.current = new THEOplayer.ChromelessPlayer(container.current, updatedConfig);
21
25
  } else {
22
26
  player.current = new THEOplayer.Player(container.current, {
23
- ...config,
27
+ ...updatedConfig,
24
28
  ui: {
25
29
  fluid: true
26
- },
27
- allowNativeFullscreen: true
30
+ }
28
31
  });
29
32
  }
30
33
 
31
- // Prepare the player to ChromelessPlayer.autoplay on platforms where autoplay is restricted without user action.
32
- player.current.prepareWithUserAction();
33
-
34
34
  // Adapt native player to react-native player.
35
35
  adapter.current = new THEOplayerWebAdapter(player.current, config);
36
36
 
@@ -1 +1 @@
1
- {"version":3,"names":["React","useEffect","useRef","THEOplayer","THEOplayerWebAdapter","BaseEvent","PlayerEventType","THEOplayerView","props","config","children","player","adapter","container","current","_props$onPlayerReady","chromeless","undefined","ChromelessPlayer","Player","ui","fluid","allowNativeFullscreen","prepareWithUserAction","window","nativePlayer","onPlayerReady","call","_adapter$current","_adapter$current2","_player$current","onPlayerDestroy","dispatchEvent","DESTROY","destroy","createElement","Fragment","ref","style","styles","className","display","position","width","height","maxHeight","maxWidth","aspectRatio"],"sources":["THEOplayerView.web.tsx"],"sourcesContent":["import React, { useEffect, useRef } from 'react';\nimport type { THEOplayerViewProps } from 'react-native-theoplayer';\nimport * as THEOplayer from 'theoplayer';\nimport { THEOplayerWebAdapter } from './adapter/THEOplayerWebAdapter';\nimport { BaseEvent } from './adapter/event/BaseEvent';\nimport { PlayerEventType } from 'react-native-theoplayer';\n\nexport function THEOplayerView(props: React.PropsWithChildren<THEOplayerViewProps>) {\n const { config, children } = props;\n const player = useRef<THEOplayer.ChromelessPlayer | null>(null);\n const adapter = useRef<THEOplayerWebAdapter | null>(null);\n const container = useRef<null | HTMLDivElement>(null);\n\n useEffect(() => {\n // Create player inside container.\n if (container.current) {\n const chromeless = config?.chromeless === true || config?.chromeless === undefined;\n if (chromeless) {\n player.current = new THEOplayer.ChromelessPlayer(container.current, config);\n } else {\n player.current = new THEOplayer.Player(container.current, {\n ...config,\n ui: {\n fluid: true,\n },\n allowNativeFullscreen: true,\n } as THEOplayer.PlayerConfiguration);\n }\n\n // Prepare the player to ChromelessPlayer.autoplay on platforms where autoplay is restricted without user action.\n player.current.prepareWithUserAction();\n\n // Adapt native player to react-native player.\n adapter.current = new THEOplayerWebAdapter(player.current, config);\n\n // Expose players for easy access\n // @ts-ignore\n window.player = adapter.current;\n\n // @ts-ignore\n window.nativePlayer = player;\n\n // Notify the player is ready\n props.onPlayerReady?.(adapter.current);\n }\n\n // Clean-up\n return () => {\n // Notify the player will be destroyed.\n const { onPlayerDestroy } = props;\n if (adapter?.current && onPlayerDestroy) {\n onPlayerDestroy(adapter?.current);\n }\n adapter?.current?.dispatchEvent(new BaseEvent(PlayerEventType.DESTROY));\n adapter?.current?.destroy();\n player?.current?.destroy();\n };\n }, [container]);\n\n const chromeless = config?.chromeless === undefined || config?.chromeless === true;\n return (\n <>\n <div\n ref={container}\n style={styles.container}\n className={chromeless ? 'theoplayer-container' : 'theoplayer-container video-js theoplayer-skin'}\n />\n {children}\n </>\n );\n}\n\nconst styles = {\n // by default stretch the video to cover the container.\n // Override using the 'theoplayer-container' class.\n container: {\n display: 'flex',\n position: 'relative',\n width: '100%',\n height: '100%',\n maxHeight: '100vh',\n maxWidth: '100vw',\n aspectRatio: '16 / 9',\n } as React.CSSProperties,\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["React","useEffect","useRef","THEOplayer","THEOplayerWebAdapter","BaseEvent","PlayerEventType","THEOplayerView","props","config","children","player","adapter","container","current","_props$onPlayerReady","chromeless","undefined","updatedConfig","allowNativeFullscreen","ChromelessPlayer","Player","ui","fluid","window","nativePlayer","onPlayerReady","call","_adapter$current","_adapter$current2","_player$current","onPlayerDestroy","dispatchEvent","DESTROY","destroy","createElement","Fragment","ref","style","styles","className","display","position","width","height","maxHeight","maxWidth","aspectRatio"],"sources":["THEOplayerView.web.tsx"],"sourcesContent":["import React, { useEffect, useRef } from 'react';\nimport type { THEOplayerViewProps } from 'react-native-theoplayer';\nimport * as THEOplayer from 'theoplayer';\nimport { THEOplayerWebAdapter } from './adapter/THEOplayerWebAdapter';\nimport { BaseEvent } from './adapter/event/BaseEvent';\nimport { PlayerEventType } from 'react-native-theoplayer';\n\nexport function THEOplayerView(props: React.PropsWithChildren<THEOplayerViewProps>) {\n const { config, children } = props;\n const player = useRef<THEOplayer.ChromelessPlayer | null>(null);\n const adapter = useRef<THEOplayerWebAdapter | null>(null);\n const container = useRef<null | HTMLDivElement>(null);\n\n useEffect(() => {\n // Create player inside container.\n if (container.current) {\n const chromeless = config?.chromeless === true || config?.chromeless === undefined;\n const updatedConfig = {...config, allowNativeFullscreen: true};\n if (chromeless) {\n player.current = new THEOplayer.ChromelessPlayer(container.current, updatedConfig);\n } else {\n player.current = new THEOplayer.Player(container.current, {\n ...updatedConfig,\n ui: {\n fluid: true,\n }\n } as THEOplayer.PlayerConfiguration);\n }\n\n // Adapt native player to react-native player.\n adapter.current = new THEOplayerWebAdapter(player.current, config);\n\n // Expose players for easy access\n // @ts-ignore\n window.player = adapter.current;\n\n // @ts-ignore\n window.nativePlayer = player;\n\n // Notify the player is ready\n props.onPlayerReady?.(adapter.current);\n }\n\n // Clean-up\n return () => {\n // Notify the player will be destroyed.\n const { onPlayerDestroy } = props;\n if (adapter?.current && onPlayerDestroy) {\n onPlayerDestroy(adapter?.current);\n }\n adapter?.current?.dispatchEvent(new BaseEvent(PlayerEventType.DESTROY));\n adapter?.current?.destroy();\n player?.current?.destroy();\n };\n }, [container]);\n\n const chromeless = config?.chromeless === undefined || config?.chromeless === true;\n return (\n <>\n <div\n ref={container}\n style={styles.container}\n className={chromeless ? 'theoplayer-container' : 'theoplayer-container video-js theoplayer-skin'}\n />\n {children}\n </>\n );\n}\n\nconst styles = {\n // by default stretch the video to cover the container.\n // Override using the 'theoplayer-container' class.\n container: {\n display: 'flex',\n position: 'relative',\n width: '100%',\n height: '100%',\n maxHeight: '100vh',\n maxWidth: '100vw',\n aspectRatio: '16 / 9',\n } as React.CSSProperties,\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["NativePlayerState.ts"],"sourcesContent":["import type { MediaTrack, PreloadType, PresentationMode, SourceDescription, TextTrack, TimeRange } from 'react-native-theoplayer';\nimport type { BackgroundAudioConfiguration } from '../../api/backgroundAudio/BackgroundAudioConfiguration';\nimport type { PiPConfiguration } from 'react-native-theoplayer';\n\nexport interface NativePlayerState {\n source: SourceDescription | undefined;\n autoplay: boolean;\n paused: boolean;\n seekable: TimeRange[];\n buffered: TimeRange[];\n pipConfig: PiPConfiguration;\n backgroundAudioConfig: BackgroundAudioConfiguration;\n presentationMode: PresentationMode;\n muted: boolean;\n seeking: boolean;\n volume: number;\n currentTime: number;\n duration: number;\n playbackRate: number;\n preload: PreloadType;\n audioTracks: MediaTrack[];\n videoTracks: MediaTrack[];\n textTracks: TextTrack[];\n targetVideoQuality: number | number[] | undefined;\n selectedVideoTrack: number | undefined;\n selectedAudioTrack: number | undefined;\n selectedTextTrack: number | undefined;\n}\n"],"mappings":""}
1
+ {"version":3,"names":[],"sources":["NativePlayerState.ts"],"sourcesContent":["import type { MediaTrack, PreloadType, PresentationMode, SourceDescription, TextTrack, TimeRange } from 'react-native-theoplayer';\nimport type { BackgroundAudioConfiguration } from '../../api/backgroundAudio/BackgroundAudioConfiguration';\nimport type { PiPConfiguration } from 'react-native-theoplayer';\nimport type { AspectRatio } from 'react-native-theoplayer';\n\nexport interface NativePlayerState {\n source: SourceDescription | undefined;\n autoplay: boolean;\n paused: boolean;\n seekable: TimeRange[];\n buffered: TimeRange[];\n pipConfig: PiPConfiguration;\n backgroundAudioConfig: BackgroundAudioConfiguration;\n presentationMode: PresentationMode;\n muted: boolean;\n seeking: boolean;\n volume: number;\n currentTime: number;\n duration: number;\n playbackRate: number;\n preload: PreloadType;\n aspectRatio: AspectRatio;\n audioTracks: MediaTrack[];\n videoTracks: MediaTrack[];\n textTracks: TextTrack[];\n targetVideoQuality: number | number[] | undefined;\n selectedVideoTrack: number | undefined;\n selectedAudioTrack: number | undefined;\n selectedTextTrack: number | undefined;\n}\n"],"mappings":""}
@@ -2,7 +2,7 @@ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key i
2
2
  function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
3
3
  function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
4
4
  import { DefaultEventDispatcher } from './event/DefaultEventDispatcher';
5
- import { addTrack, findMediaTrackByUid, MediaTrackEventType, MediaTrackType, PlayerEventType, PresentationMode, removeTrack, TextTrackMode, TrackListEventType } from 'react-native-theoplayer';
5
+ import { addTrack, AspectRatio, findMediaTrackByUid, MediaTrackEventType, MediaTrackType, PlayerEventType, PresentationMode, removeTrack, TextTrackMode, TrackListEventType } from 'react-native-theoplayer';
6
6
  import { THEOplayerNativeAdsAdapter } from './ads/THEOplayerNativeAdsAdapter';
7
7
  import { THEOplayerNativeCastAdapter } from './cast/THEOplayerNativeCastAdapter';
8
8
  import { AbrAdapter } from './abr/AbrAdapter';
@@ -28,6 +28,7 @@ const defaultPlayerState = {
28
28
  duration: NaN,
29
29
  playbackRate: 1,
30
30
  preload: 'none',
31
+ aspectRatio: AspectRatio.FIT,
31
32
  audioTracks: [],
32
33
  videoTracks: [],
33
34
  textTracks: [],
@@ -308,7 +309,7 @@ export class THEOplayerAdapter extends DefaultEventDispatcher {
308
309
  set selectedTextTrack(trackUid) {
309
310
  this._state.selectedTextTrack = trackUid;
310
311
  this.textTracks.forEach(track => {
311
- if (track.uid == trackUid) {
312
+ if (track.uid === trackUid) {
312
313
  track.mode = TextTrackMode.showing;
313
314
  } else if (track.mode === TextTrackMode.showing) {
314
315
  track.mode = TextTrackMode.disabled;
@@ -366,6 +367,13 @@ export class THEOplayerAdapter extends DefaultEventDispatcher {
366
367
  this._state.volume = volume;
367
368
  NativeModules.PlayerModule.setVolume(this._view.nativeHandle, volume);
368
369
  }
370
+ get aspectRatio() {
371
+ return this._state.aspectRatio;
372
+ }
373
+ set aspectRatio(ratio) {
374
+ this._state.aspectRatio = ratio;
375
+ NativeModules.PlayerModule.setAspectRatio(this._view.nativeHandle, ratio);
376
+ }
369
377
  pause() {
370
378
  this._state.paused = true;
371
379
  NativeModules.PlayerModule.setPaused(this._view.nativeHandle, true);