react-native-theoplayer 2.5.0 → 2.7.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 (56) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/android/src/main/java/com/theoplayer/PlayerEventEmitter.kt +9 -15
  3. package/android/src/main/java/com/theoplayer/util/PayloadBuilder.kt +2 -1
  4. package/android/src/main/java/com/theoplayer/util/ViewResolver.kt +9 -1
  5. package/ios/THEOplayerRCTDebug.swift +3 -3
  6. package/ios/THEOplayerRCTMainEventHandler.swift +59 -59
  7. package/ios/THEOplayerRCTMediaTrackEventHandler.swift +18 -18
  8. package/ios/THEOplayerRCTNetworkUtils.swift +1 -1
  9. package/ios/THEOplayerRCTPlayerAPI.swift +14 -14
  10. package/ios/THEOplayerRCTPrintUtils.swift +16 -0
  11. package/ios/THEOplayerRCTSourceDescriptionBuilder.swift +6 -6
  12. package/ios/THEOplayerRCTTextTrackEventHandler.swift +21 -21
  13. package/ios/THEOplayerRCTView.swift +29 -29
  14. package/ios/ads/THEOplayerRCTAdsAPI+DAI.swift +6 -6
  15. package/ios/ads/THEOplayerRCTAdsAPI.swift +13 -13
  16. package/ios/ads/THEOplayerRCTAdsEventHandler.swift +27 -27
  17. package/ios/ads/THEOplayerRCTSourceDescriptionBuilder+Ads.swift +5 -5
  18. package/ios/backgroundAudio/THEOplayerRCTNowPlayingManager.swift +63 -37
  19. package/ios/backgroundAudio/THEOplayerRCTRemoteCommandsManager.swift +16 -16
  20. package/ios/casting/THEOplayerRCTCastAPI+Airplay.swift +6 -6
  21. package/ios/casting/THEOplayerRCTCastAPI+Chromecast.swift +10 -10
  22. package/ios/casting/THEOplayerRCTCastAPI.swift +1 -1
  23. package/ios/casting/THEOplayerRCTCastEventHandler.swift +11 -11
  24. package/ios/contentprotection/THEOplayerRCTContentProtectionAPI.swift +1 -1
  25. package/ios/pip/THEOplayerRCTPipControlsManager.swift +1 -1
  26. package/lib/commonjs/api/abr/ABRConfiguration.js +25 -0
  27. package/lib/commonjs/api/abr/ABRConfiguration.js.map +1 -1
  28. package/lib/commonjs/api/track/Track.js +5 -1
  29. package/lib/commonjs/api/track/Track.js.map +1 -1
  30. package/lib/commonjs/internal/THEOplayerView.web.js +2 -6
  31. package/lib/commonjs/internal/THEOplayerView.web.js.map +1 -1
  32. package/lib/commonjs/internal/adapter/THEOplayerAdapter.js +41 -10
  33. package/lib/commonjs/internal/adapter/THEOplayerAdapter.js.map +1 -1
  34. package/lib/commonjs/internal/adapter/THEOplayerWebAdapter.js +105 -52
  35. package/lib/commonjs/internal/adapter/THEOplayerWebAdapter.js.map +1 -1
  36. package/lib/module/api/abr/ABRConfiguration.js +19 -0
  37. package/lib/module/api/abr/ABRConfiguration.js.map +1 -1
  38. package/lib/module/api/track/Track.js +4 -1
  39. package/lib/module/api/track/Track.js.map +1 -1
  40. package/lib/module/internal/THEOplayerView.web.js +2 -6
  41. package/lib/module/internal/THEOplayerView.web.js.map +1 -1
  42. package/lib/module/internal/adapter/THEOplayerAdapter.js +41 -10
  43. package/lib/module/internal/adapter/THEOplayerAdapter.js.map +1 -1
  44. package/lib/module/internal/adapter/THEOplayerWebAdapter.js +106 -53
  45. package/lib/module/internal/adapter/THEOplayerWebAdapter.js.map +1 -1
  46. package/lib/typescript/api/abr/ABRConfiguration.d.ts +5 -1
  47. package/lib/typescript/api/track/Track.d.ts +1 -0
  48. package/lib/typescript/internal/adapter/THEOplayerAdapter.d.ts +2 -0
  49. package/lib/typescript/internal/adapter/THEOplayerWebAdapter.d.ts +3 -3
  50. package/package.json +1 -1
  51. package/react-native-theoplayer.podspec +1 -1
  52. package/src/api/abr/ABRConfiguration.ts +5 -1
  53. package/src/api/track/Track.ts +5 -1
  54. package/src/internal/THEOplayerView.web.tsx +2 -6
  55. package/src/internal/adapter/THEOplayerAdapter.ts +44 -10
  56. package/src/internal/adapter/THEOplayerWebAdapter.ts +97 -50
@@ -2,13 +2,14 @@ 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 { AspectRatio, PresentationMode } from 'react-native-theoplayer';
5
+ import { AspectRatio, PlayerEventType, PresentationMode } from 'react-native-theoplayer';
6
6
  import { THEOplayerWebAdsAdapter } from './ads/THEOplayerWebAdsAdapter';
7
7
  import { THEOplayerWebCastAdapter } from './cast/THEOplayerWebCastAdapter';
8
8
  import { findNativeQualitiesByUid, fromNativeMediaTrackList, fromNativeTextTrackList } from './web/TrackUtils';
9
9
  import { WebEventForwarder } from './WebEventForwarder';
10
10
  import { WebPresentationModeManager } from './web/WebPresentationModeManager';
11
11
  import { WebMediaSession } from './web/WebMediaSession';
12
+ import { BaseEvent } from './event/BaseEvent';
12
13
  const defaultBackgroundAudioConfiguration = {
13
14
  enabled: false
14
15
  };
@@ -19,17 +20,20 @@ export class THEOplayerWebAdapter extends DefaultEventDispatcher {
19
20
  constructor(player, config) {
20
21
  var _config$mediaControl;
21
22
  super();
22
- _defineProperty(this, "_player", void 0);
23
23
  _defineProperty(this, "_adsAdapter", void 0);
24
24
  _defineProperty(this, "_castAdapter", void 0);
25
- _defineProperty(this, "_eventForwarder", void 0);
26
25
  _defineProperty(this, "_presentationModeManager", void 0);
26
+ _defineProperty(this, "_player", void 0);
27
+ _defineProperty(this, "_eventForwarder", void 0);
27
28
  _defineProperty(this, "_mediaSession", undefined);
28
29
  _defineProperty(this, "_targetVideoQuality", undefined);
29
30
  _defineProperty(this, "_backgroundAudioConfiguration", defaultBackgroundAudioConfiguration);
30
31
  _defineProperty(this, "_pipConfiguration", defaultPipConfiguration);
31
32
  _defineProperty(this, "onVisibilityChange", () => {
32
33
  var _this$_mediaSession;
34
+ if (!this._player) {
35
+ return;
36
+ }
33
37
  if (document.visibilityState !== 'visible') {
34
38
  // Apply background configuration: by default, pause when going to background, unless in pip
35
39
  if (this.presentationMode !== PresentationMode.pip && !this.backgroundAudioConfiguration.enabled) {
@@ -52,37 +56,51 @@ export class THEOplayerWebAdapter extends DefaultEventDispatcher {
52
56
  }
53
57
  }
54
58
  get abr() {
55
- return this._player.abr;
59
+ var _this$_player;
60
+ return (_this$_player = this._player) === null || _this$_player === void 0 ? void 0 : _this$_player.abr;
56
61
  }
57
62
  get source() {
58
- return this._player.source;
63
+ var _this$_player2;
64
+ return (_this$_player2 = this._player) === null || _this$_player2 === void 0 ? void 0 : _this$_player2.source;
59
65
  }
60
66
  set source(source) {
61
67
  this._targetVideoQuality = undefined;
62
- this._player.source = source;
68
+ if (this._player) {
69
+ this._player.source = source;
70
+ }
63
71
  }
64
72
  play() {
65
- this._player.play();
73
+ var _this$_player3;
74
+ (_this$_player3 = this._player) === null || _this$_player3 === void 0 ? void 0 : _this$_player3.play();
66
75
  }
67
76
  pause() {
68
- this._player.pause();
77
+ var _this$_player4;
78
+ (_this$_player4 = this._player) === null || _this$_player4 === void 0 ? void 0 : _this$_player4.pause();
69
79
  }
70
80
  get paused() {
71
- return this._player.paused;
81
+ return this._player ? this._player.paused : true;
72
82
  }
73
83
  get autoplay() {
74
- return this._player.autoplay;
84
+ return this._player ? this._player.autoplay : false;
75
85
  }
76
86
  set autoplay(autoplay) {
77
- this._player.autoplay = autoplay;
87
+ if (this._player) {
88
+ this._player.autoplay = autoplay;
89
+ }
78
90
  }
79
91
  set preload(type) {
80
- this._player.preload = type;
92
+ if (this._player) {
93
+ this._player.preload = type;
94
+ }
81
95
  }
82
96
  get preload() {
83
- return this._player.preload;
97
+ var _this$_player5;
98
+ return ((_this$_player5 = this._player) === null || _this$_player5 === void 0 ? void 0 : _this$_player5.preload) || 'none';
84
99
  }
85
100
  get seekable() {
101
+ if (!this._player) {
102
+ return [];
103
+ }
86
104
  const nativeRange = this._player.seekable;
87
105
  return [...Array(nativeRange.length)].map((_, index) => ({
88
106
  start: 1e3 * nativeRange.start(index),
@@ -90,6 +108,9 @@ export class THEOplayerWebAdapter extends DefaultEventDispatcher {
90
108
  }));
91
109
  }
92
110
  get buffered() {
111
+ if (!this._player) {
112
+ return [];
113
+ }
93
114
  const nativeRange = this._player.buffered;
94
115
  return [...Array(nativeRange.length)].map((_, index) => ({
95
116
  start: 1e3 * nativeRange.start(index),
@@ -97,10 +118,12 @@ export class THEOplayerWebAdapter extends DefaultEventDispatcher {
97
118
  }));
98
119
  }
99
120
  get playbackRate() {
100
- return this._player.playbackRate;
121
+ return this._player ? this._player.playbackRate : 1;
101
122
  }
102
123
  set playbackRate(playbackRate) {
103
- this._player.playbackRate = playbackRate;
124
+ if (this._player) {
125
+ this._player.playbackRate = playbackRate;
126
+ }
104
127
  }
105
128
  get pipConfiguration() {
106
129
  return this._pipConfiguration;
@@ -119,19 +142,23 @@ export class THEOplayerWebAdapter extends DefaultEventDispatcher {
119
142
  (_this$_mediaSession2 = this._mediaSession) === null || _this$_mediaSession2 === void 0 ? void 0 : _this$_mediaSession2.updateActionHandlers();
120
143
  }
121
144
  get volume() {
122
- return this._player.volume;
145
+ return this._player ? this._player.volume : 1;
123
146
  }
124
147
  set volume(volume) {
125
- this._player.volume = volume;
148
+ if (this._player) {
149
+ this._player.volume = volume;
150
+ }
126
151
  }
127
152
  get muted() {
128
- return this._player.muted;
153
+ return this._player ? this._player.muted : false;
129
154
  }
130
155
  set muted(muted) {
131
- this._player.muted = muted;
156
+ if (this._player) {
157
+ this._player.muted = muted;
158
+ }
132
159
  }
133
160
  get seeking() {
134
- return this._player.seeking;
161
+ return this._player ? this._player.seeking : false;
135
162
  }
136
163
  get presentationMode() {
137
164
  return this._presentationModeManager.presentationMode;
@@ -140,61 +167,82 @@ export class THEOplayerWebAdapter extends DefaultEventDispatcher {
140
167
  this._presentationModeManager.presentationMode = presentationMode;
141
168
  }
142
169
  get audioTracks() {
143
- return fromNativeMediaTrackList(this._player.audioTracks);
170
+ return this._player ? fromNativeMediaTrackList(this._player.audioTracks) : [];
144
171
  }
145
172
  get videoTracks() {
146
- return fromNativeMediaTrackList(this._player.videoTracks);
173
+ return this._player ? fromNativeMediaTrackList(this._player.videoTracks) : [];
147
174
  }
148
175
  get textTracks() {
149
- return fromNativeTextTrackList(this._player.textTracks);
176
+ return this._player ? fromNativeTextTrackList(this._player.textTracks) : [];
150
177
  }
151
178
  get selectedTextTrack() {
152
- var _this$_player$textTra;
153
- return (_this$_player$textTra = this._player.textTracks.find(textTrack => {
154
- return textTrack.mode === 'showing';
155
- })) === null || _this$_player$textTra === void 0 ? void 0 : _this$_player$textTra.uid;
179
+ if (this._player) {
180
+ var _this$_player$textTra;
181
+ return (_this$_player$textTra = this._player.textTracks.find(textTrack => {
182
+ return textTrack.mode === 'showing';
183
+ })) === null || _this$_player$textTra === void 0 ? void 0 : _this$_player$textTra.uid;
184
+ }
185
+ return undefined;
156
186
  }
157
187
  set selectedTextTrack(selectedTextTrack) {
158
- this._player.textTracks.forEach(textTrack => {
159
- textTrack.mode = textTrack.uid === selectedTextTrack ? 'showing' : 'disabled';
160
- });
188
+ if (this._player) {
189
+ this._player.textTracks.forEach(textTrack => {
190
+ textTrack.mode = textTrack.uid === selectedTextTrack ? 'showing' : 'disabled';
191
+ });
192
+ }
161
193
  }
162
194
  get textTrackStyle() {
163
- return this._player.textTrackStyle;
195
+ var _this$_player6;
196
+ return (_this$_player6 = this._player) === null || _this$_player6 === void 0 ? void 0 : _this$_player6.textTrackStyle;
164
197
  }
165
198
  get selectedVideoTrack() {
166
- var _this$_player$videoTr;
167
- return (_this$_player$videoTr = this._player.videoTracks.find(videoTrack => videoTrack.enabled)) === null || _this$_player$videoTr === void 0 ? void 0 : _this$_player$videoTr.uid;
199
+ if (this._player) {
200
+ var _this$_player$videoTr;
201
+ return (_this$_player$videoTr = this._player.videoTracks.find(videoTrack => videoTrack.enabled)) === null || _this$_player$videoTr === void 0 ? void 0 : _this$_player$videoTr.uid;
202
+ }
203
+ return undefined;
168
204
  }
169
205
  set selectedVideoTrack(selectedVideoTrack) {
170
- this._targetVideoQuality = undefined;
171
- this._player.videoTracks.forEach(videoTrack => {
172
- videoTrack.enabled = videoTrack.uid === selectedVideoTrack;
173
- });
206
+ if (this._player) {
207
+ this._targetVideoQuality = undefined;
208
+ this._player.videoTracks.forEach(videoTrack => {
209
+ videoTrack.enabled = videoTrack.uid === selectedVideoTrack;
210
+ });
211
+ }
174
212
  }
175
213
  get selectedAudioTrack() {
176
- var _this$_player$audioTr;
177
- return (_this$_player$audioTr = this._player.audioTracks.find(audioTrack => {
178
- return audioTrack.enabled;
179
- })) === null || _this$_player$audioTr === void 0 ? void 0 : _this$_player$audioTr.uid;
214
+ if (this._player) {
215
+ var _this$_player$audioTr;
216
+ return (_this$_player$audioTr = this._player.audioTracks.find(audioTrack => {
217
+ return audioTrack.enabled;
218
+ })) === null || _this$_player$audioTr === void 0 ? void 0 : _this$_player$audioTr.uid;
219
+ }
220
+ return undefined;
180
221
  }
181
222
  set selectedAudioTrack(selectedAudioTrack) {
182
- this._player.audioTracks.forEach(audioTrack => {
183
- audioTrack.enabled = audioTrack.uid === selectedAudioTrack;
184
- });
223
+ if (this._player) {
224
+ this._player.audioTracks.forEach(audioTrack => {
225
+ audioTrack.enabled = audioTrack.uid === selectedAudioTrack;
226
+ });
227
+ }
185
228
  }
186
229
  get targetVideoQuality() {
187
- return this._targetVideoQuality;
230
+ if (this._player) {
231
+ return this._targetVideoQuality;
232
+ }
233
+ return undefined;
188
234
  }
189
235
  set targetVideoQuality(targetVideoQuality) {
190
- const enabledVideoTrack = this._player.videoTracks.find(videoTrack => videoTrack.enabled);
191
- if (enabledVideoTrack) {
192
- enabledVideoTrack.targetQuality = findNativeQualitiesByUid(enabledVideoTrack, targetVideoQuality);
236
+ if (this._player) {
237
+ const enabledVideoTrack = this._player.videoTracks.find(videoTrack => videoTrack.enabled);
238
+ if (enabledVideoTrack) {
239
+ enabledVideoTrack.targetQuality = findNativeQualitiesByUid(enabledVideoTrack, targetVideoQuality);
240
+ }
241
+ this._targetVideoQuality = targetVideoQuality;
193
242
  }
194
- this._targetVideoQuality = targetVideoQuality;
195
243
  }
196
244
  get currentTime() {
197
- return 1e3 * this._player.currentTime;
245
+ return this._player ? 1e3 * this._player.currentTime : NaN;
198
246
  }
199
247
  set currentTime(currentTime) {
200
248
  if (isNaN(currentTime)) {
@@ -211,7 +259,7 @@ export class THEOplayerWebAdapter extends DefaultEventDispatcher {
211
259
  // unused
212
260
  }
213
261
  get duration() {
214
- return this._player.duration * 1e3;
262
+ return this._player ? this._player.duration * 1e3 : NaN;
215
263
  }
216
264
  get ads() {
217
265
  return this._adsAdapter;
@@ -220,10 +268,15 @@ export class THEOplayerWebAdapter extends DefaultEventDispatcher {
220
268
  return this._castAdapter;
221
269
  }
222
270
  destroy() {
223
- var _this$_mediaSession3;
224
- this._eventForwarder.unload();
271
+ var _this$_eventForwarder, _this$_mediaSession3, _this$_player7;
272
+ this.dispatchEvent(new BaseEvent(PlayerEventType.DESTROY));
273
+ (_this$_eventForwarder = this._eventForwarder) === null || _this$_eventForwarder === void 0 ? void 0 : _this$_eventForwarder.unload();
225
274
  (_this$_mediaSession3 = this._mediaSession) === null || _this$_mediaSession3 === void 0 ? void 0 : _this$_mediaSession3.destroy();
226
275
  document.removeEventListener('visibilitychange', this.onVisibilityChange);
276
+ this._eventForwarder = undefined;
277
+ this._mediaSession = undefined;
278
+ (_this$_player7 = this._player) === null || _this$_player7 === void 0 ? void 0 : _this$_player7.destroy();
279
+ this._player = undefined;
227
280
  }
228
281
  get nativeHandle() {
229
282
  return this._player;
@@ -1 +1 @@
1
- {"version":3,"names":["DefaultEventDispatcher","AspectRatio","PresentationMode","THEOplayerWebAdsAdapter","THEOplayerWebCastAdapter","findNativeQualitiesByUid","fromNativeMediaTrackList","fromNativeTextTrackList","WebEventForwarder","WebPresentationModeManager","WebMediaSession","defaultBackgroundAudioConfiguration","enabled","defaultPipConfiguration","startsAutomatically","THEOplayerWebAdapter","constructor","player","config","_config$mediaControl","_defineProperty","undefined","_this$_mediaSession","document","visibilityState","presentationMode","pip","backgroundAudioConfiguration","_player","pause","_mediaSession","updateActionHandlers","_adsAdapter","_castAdapter","_eventForwarder","_presentationModeManager","addEventListener","onVisibilityChange","mediaControl","mediaSessionEnabled","abr","source","_targetVideoQuality","play","paused","autoplay","preload","type","seekable","nativeRange","Array","length","map","_","index","start","end","buffered","playbackRate","pipConfiguration","_pipConfiguration","_backgroundAudioConfiguration","_this$_mediaSession2","volume","muted","seeking","audioTracks","videoTracks","textTracks","selectedTextTrack","_this$_player$textTra","find","textTrack","mode","uid","forEach","textTrackStyle","selectedVideoTrack","_this$_player$videoTr","videoTrack","selectedAudioTrack","_this$_player$audioTr","audioTrack","targetVideoQuality","enabledVideoTrack","targetQuality","currentTime","isNaN","aspectRatio","FIT","_ratio","duration","ads","cast","destroy","_this$_mediaSession3","unload","removeEventListener","nativeHandle"],"sources":["THEOplayerWebAdapter.ts"],"sourcesContent":["import { DefaultEventDispatcher } from './event/DefaultEventDispatcher';\nimport type {\n AdsAPI,\n CastAPI,\n MediaTrack,\n NativeHandleType,\n PlayerConfiguration,\n PlayerEventMap,\n PreloadType,\n TextTrack,\n TextTrackStyle,\n THEOplayer,\n} from 'react-native-theoplayer';\nimport { AspectRatio, PresentationMode } from 'react-native-theoplayer';\nimport { THEOplayerWebAdsAdapter } from './ads/THEOplayerWebAdsAdapter';\nimport { THEOplayerWebCastAdapter } from './cast/THEOplayerWebCastAdapter';\nimport type * as THEOplayerWeb from 'theoplayer';\nimport type { MediaTrack as NativeMediaTrack, TextTrack as NativeTextTrack } from 'theoplayer';\nimport { findNativeQualitiesByUid, fromNativeMediaTrackList, fromNativeTextTrackList } from './web/TrackUtils';\nimport type { ABRConfiguration, SourceDescription } from 'src/api/barrel';\nimport { WebEventForwarder } from './WebEventForwarder';\nimport type { PiPConfiguration } from 'src/api/pip/PiPConfiguration';\nimport type { BackgroundAudioConfiguration } from 'src/api/backgroundAudio/BackgroundAudioConfiguration';\nimport { WebPresentationModeManager } from './web/WebPresentationModeManager';\nimport { WebMediaSession } from './web/WebMediaSession';\n\nconst defaultBackgroundAudioConfiguration: BackgroundAudioConfiguration = {\n enabled: false,\n};\n\nconst defaultPipConfiguration: PiPConfiguration = {\n startsAutomatically: false,\n};\n\nexport class THEOplayerWebAdapter extends DefaultEventDispatcher<PlayerEventMap> implements THEOplayer {\n private readonly _player: THEOplayerWeb.ChromelessPlayer;\n private readonly _adsAdapter: THEOplayerWebAdsAdapter;\n private readonly _castAdapter: THEOplayerWebCastAdapter;\n private readonly _eventForwarder: WebEventForwarder;\n private readonly _presentationModeManager: WebPresentationModeManager;\n private readonly _mediaSession: WebMediaSession | undefined = undefined;\n private _targetVideoQuality: number | number[] | undefined = undefined;\n private _backgroundAudioConfiguration: BackgroundAudioConfiguration = defaultBackgroundAudioConfiguration;\n private _pipConfiguration: PiPConfiguration = defaultPipConfiguration;\n\n constructor(player: THEOplayerWeb.ChromelessPlayer, config?: PlayerConfiguration) {\n super();\n this._player = player;\n this._adsAdapter = new THEOplayerWebAdsAdapter(this._player);\n this._castAdapter = new THEOplayerWebCastAdapter(this._player);\n this._eventForwarder = new WebEventForwarder(this._player, this);\n this._presentationModeManager = new WebPresentationModeManager(this._player, this);\n document.addEventListener('visibilitychange', this.onVisibilityChange);\n\n // Optionally create a media session connector\n if (config?.mediaControl?.mediaSessionEnabled !== false) {\n this._mediaSession = new WebMediaSession(this, player);\n }\n }\n\n get abr(): ABRConfiguration | undefined {\n return this._player.abr;\n }\n\n get source(): SourceDescription | undefined {\n return this._player.source as SourceDescription;\n }\n\n set source(source: SourceDescription | undefined) {\n this._targetVideoQuality = undefined;\n this._player.source = source;\n }\n\n play(): void {\n this._player.play();\n }\n\n pause(): void {\n this._player.pause();\n }\n\n get paused(): boolean {\n return this._player.paused;\n }\n\n get autoplay(): boolean {\n return this._player.autoplay;\n }\n\n set autoplay(autoplay: boolean) {\n this._player.autoplay = autoplay;\n }\n\n set preload(type: PreloadType) {\n this._player.preload = type;\n }\n\n get preload(): PreloadType {\n return this._player.preload;\n }\n\n get seekable() {\n const nativeRange = this._player.seekable;\n return [...Array(nativeRange.length)].map((_, index) => ({ start: 1e3 * nativeRange.start(index), end: 1e3 * nativeRange.end(index) }));\n }\n\n get buffered() {\n const nativeRange = this._player.buffered;\n return [...Array(nativeRange.length)].map((_, index) => ({ start: 1e3 * nativeRange.start(index), end: 1e3 * nativeRange.end(index) }));\n }\n\n get playbackRate(): number {\n return this._player.playbackRate;\n }\n\n set playbackRate(playbackRate: number) {\n this._player.playbackRate = playbackRate;\n }\n\n get pipConfiguration(): PiPConfiguration {\n return this._pipConfiguration;\n }\n\n set pipConfiguration(config: PiPConfiguration) {\n this._pipConfiguration = config;\n }\n\n get backgroundAudioConfiguration(): BackgroundAudioConfiguration {\n return this._backgroundAudioConfiguration;\n }\n\n set backgroundAudioConfiguration(config: BackgroundAudioConfiguration) {\n this._backgroundAudioConfiguration = config;\n\n // Notify media session\n this._mediaSession?.updateActionHandlers();\n }\n\n get volume(): number {\n return this._player.volume;\n }\n\n set volume(volume: number) {\n this._player.volume = volume;\n }\n\n get muted(): boolean {\n return this._player.muted;\n }\n\n set muted(muted: boolean) {\n this._player.muted = muted;\n }\n\n get seeking(): boolean {\n return this._player.seeking;\n }\n\n get presentationMode(): PresentationMode {\n return this._presentationModeManager.presentationMode;\n }\n\n set presentationMode(presentationMode: PresentationMode) {\n this._presentationModeManager.presentationMode = presentationMode;\n }\n\n get audioTracks(): MediaTrack[] {\n return fromNativeMediaTrackList(this._player.audioTracks);\n }\n\n get videoTracks(): MediaTrack[] {\n return fromNativeMediaTrackList(this._player.videoTracks);\n }\n\n get textTracks(): TextTrack[] {\n return fromNativeTextTrackList(this._player.textTracks);\n }\n\n get selectedTextTrack(): number | undefined {\n return this._player.textTracks.find((textTrack: NativeTextTrack) => {\n return textTrack.mode === 'showing';\n })?.uid;\n }\n\n set selectedTextTrack(selectedTextTrack: number | undefined) {\n this._player.textTracks.forEach((textTrack: NativeTextTrack) => {\n textTrack.mode = textTrack.uid === selectedTextTrack ? 'showing' : 'disabled';\n });\n }\n\n get textTrackStyle(): TextTrackStyle {\n return this._player.textTrackStyle as TextTrackStyle;\n }\n\n get selectedVideoTrack(): number | undefined {\n return this._player.videoTracks.find((videoTrack: NativeMediaTrack) => videoTrack.enabled)?.uid;\n }\n\n set selectedVideoTrack(selectedVideoTrack: number | undefined) {\n this._targetVideoQuality = undefined;\n this._player.videoTracks.forEach((videoTrack: NativeMediaTrack) => {\n videoTrack.enabled = videoTrack.uid === selectedVideoTrack;\n });\n }\n\n get selectedAudioTrack(): number | undefined {\n return this._player.audioTracks.find((audioTrack: NativeMediaTrack) => {\n return audioTrack.enabled;\n })?.uid;\n }\n\n set selectedAudioTrack(selectedAudioTrack: number | undefined) {\n this._player.audioTracks.forEach((audioTrack: NativeMediaTrack) => {\n audioTrack.enabled = audioTrack.uid === selectedAudioTrack;\n });\n }\n\n get targetVideoQuality(): number | number[] | undefined {\n return this._targetVideoQuality;\n }\n\n set targetVideoQuality(targetVideoQuality: number | number[] | undefined) {\n const enabledVideoTrack = this._player.videoTracks.find((videoTrack: NativeMediaTrack) => videoTrack.enabled);\n if (enabledVideoTrack) {\n enabledVideoTrack.targetQuality = findNativeQualitiesByUid(enabledVideoTrack, targetVideoQuality);\n }\n this._targetVideoQuality = targetVideoQuality;\n }\n\n get currentTime(): number {\n return 1e3 * this._player.currentTime;\n }\n\n set currentTime(currentTime: number) {\n if (isNaN(currentTime)) {\n return;\n }\n if (this._player) {\n this._player.currentTime = currentTime / 1e3;\n }\n }\n\n get aspectRatio(): AspectRatio {\n return AspectRatio.FIT;\n }\n\n set aspectRatio(_ratio: AspectRatio) {\n // unused\n }\n\n get duration(): number {\n return this._player.duration * 1e3;\n }\n\n public get ads(): AdsAPI {\n return this._adsAdapter;\n }\n\n public get cast(): CastAPI {\n return this._castAdapter;\n }\n\n destroy(): void {\n this._eventForwarder.unload();\n this._mediaSession?.destroy();\n document.removeEventListener('visibilitychange', this.onVisibilityChange);\n }\n\n get nativeHandle(): NativeHandleType {\n return this._player;\n }\n\n private readonly onVisibilityChange = () => {\n if (document.visibilityState !== 'visible') {\n // Apply background configuration: by default, pause when going to background, unless in pip\n if (this.presentationMode !== PresentationMode.pip && !this.backgroundAudioConfiguration.enabled) {\n this._player.pause();\n }\n }\n // Apply media session controls\n this._mediaSession?.updateActionHandlers();\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["DefaultEventDispatcher","AspectRatio","PlayerEventType","PresentationMode","THEOplayerWebAdsAdapter","THEOplayerWebCastAdapter","findNativeQualitiesByUid","fromNativeMediaTrackList","fromNativeTextTrackList","WebEventForwarder","WebPresentationModeManager","WebMediaSession","BaseEvent","defaultBackgroundAudioConfiguration","enabled","defaultPipConfiguration","startsAutomatically","THEOplayerWebAdapter","constructor","player","config","_config$mediaControl","_defineProperty","undefined","_this$_mediaSession","_player","document","visibilityState","presentationMode","pip","backgroundAudioConfiguration","pause","_mediaSession","updateActionHandlers","_adsAdapter","_castAdapter","_eventForwarder","_presentationModeManager","addEventListener","onVisibilityChange","mediaControl","mediaSessionEnabled","abr","_this$_player","source","_this$_player2","_targetVideoQuality","play","_this$_player3","_this$_player4","paused","autoplay","preload","type","_this$_player5","seekable","nativeRange","Array","length","map","_","index","start","end","buffered","playbackRate","pipConfiguration","_pipConfiguration","_backgroundAudioConfiguration","_this$_mediaSession2","volume","muted","seeking","audioTracks","videoTracks","textTracks","selectedTextTrack","_this$_player$textTra","find","textTrack","mode","uid","forEach","textTrackStyle","_this$_player6","selectedVideoTrack","_this$_player$videoTr","videoTrack","selectedAudioTrack","_this$_player$audioTr","audioTrack","targetVideoQuality","enabledVideoTrack","targetQuality","currentTime","NaN","isNaN","aspectRatio","FIT","_ratio","duration","ads","cast","destroy","_this$_eventForwarder","_this$_mediaSession3","_this$_player7","dispatchEvent","DESTROY","unload","removeEventListener","nativeHandle"],"sources":["THEOplayerWebAdapter.ts"],"sourcesContent":["import { DefaultEventDispatcher } from './event/DefaultEventDispatcher';\nimport type {\n AdsAPI,\n CastAPI,\n MediaTrack,\n NativeHandleType,\n PlayerConfiguration,\n PlayerEventMap,\n PreloadType,\n TextTrack,\n TextTrackStyle,\n THEOplayer,\n} from 'react-native-theoplayer';\nimport { AspectRatio, PlayerEventType, PresentationMode } from 'react-native-theoplayer';\nimport { THEOplayerWebAdsAdapter } from './ads/THEOplayerWebAdsAdapter';\nimport { THEOplayerWebCastAdapter } from './cast/THEOplayerWebCastAdapter';\nimport type * as THEOplayerWeb from 'theoplayer';\nimport type { MediaTrack as NativeMediaTrack, TextTrack as NativeTextTrack } from 'theoplayer';\nimport { findNativeQualitiesByUid, fromNativeMediaTrackList, fromNativeTextTrackList } from './web/TrackUtils';\nimport type { ABRConfiguration, SourceDescription } from 'src/api/barrel';\nimport { WebEventForwarder } from './WebEventForwarder';\nimport type { PiPConfiguration } from 'src/api/pip/PiPConfiguration';\nimport type { BackgroundAudioConfiguration } from 'src/api/backgroundAudio/BackgroundAudioConfiguration';\nimport { WebPresentationModeManager } from './web/WebPresentationModeManager';\nimport { WebMediaSession } from './web/WebMediaSession';\nimport { BaseEvent } from './event/BaseEvent';\n\nconst defaultBackgroundAudioConfiguration: BackgroundAudioConfiguration = {\n enabled: false,\n};\n\nconst defaultPipConfiguration: PiPConfiguration = {\n startsAutomatically: false,\n};\n\nexport class THEOplayerWebAdapter extends DefaultEventDispatcher<PlayerEventMap> implements THEOplayer {\n private readonly _adsAdapter: THEOplayerWebAdsAdapter;\n private readonly _castAdapter: THEOplayerWebCastAdapter;\n private readonly _presentationModeManager: WebPresentationModeManager;\n private _player: THEOplayerWeb.ChromelessPlayer | undefined;\n private _eventForwarder: WebEventForwarder | undefined;\n private _mediaSession: WebMediaSession | undefined = undefined;\n private _targetVideoQuality: number | number[] | undefined = undefined;\n private _backgroundAudioConfiguration: BackgroundAudioConfiguration = defaultBackgroundAudioConfiguration;\n private _pipConfiguration: PiPConfiguration = defaultPipConfiguration;\n\n constructor(player: THEOplayerWeb.ChromelessPlayer, config?: PlayerConfiguration) {\n super();\n this._player = player;\n this._adsAdapter = new THEOplayerWebAdsAdapter(this._player);\n this._castAdapter = new THEOplayerWebCastAdapter(this._player);\n this._eventForwarder = new WebEventForwarder(this._player, this);\n this._presentationModeManager = new WebPresentationModeManager(this._player, this);\n document.addEventListener('visibilitychange', this.onVisibilityChange);\n\n // Optionally create a media session connector\n if (config?.mediaControl?.mediaSessionEnabled !== false) {\n this._mediaSession = new WebMediaSession(this, player);\n }\n }\n\n get abr(): ABRConfiguration | undefined {\n return this._player?.abr as ABRConfiguration | undefined;\n }\n\n get source(): SourceDescription | undefined {\n return this._player?.source as SourceDescription;\n }\n\n set source(source: SourceDescription | undefined) {\n this._targetVideoQuality = undefined;\n if (this._player) {\n this._player.source = source;\n }\n }\n\n play(): void {\n this._player?.play();\n }\n\n pause(): void {\n this._player?.pause();\n }\n\n get paused(): boolean {\n return this._player ? this._player.paused : true;\n }\n\n get autoplay(): boolean {\n return this._player ? this._player.autoplay : false;\n }\n\n set autoplay(autoplay: boolean) {\n if (this._player) {\n this._player.autoplay = autoplay;\n }\n }\n\n set preload(type: PreloadType) {\n if (this._player) {\n this._player.preload = type;\n }\n }\n\n get preload(): PreloadType {\n return this._player?.preload || 'none';\n }\n\n get seekable() {\n if (!this._player) {\n return [];\n }\n const nativeRange = this._player.seekable;\n return [...Array(nativeRange.length)].map((_, index) => ({ start: 1e3 * nativeRange.start(index), end: 1e3 * nativeRange.end(index) }));\n }\n\n get buffered() {\n if (!this._player) {\n return [];\n }\n const nativeRange = this._player.buffered;\n return [...Array(nativeRange.length)].map((_, index) => ({ start: 1e3 * nativeRange.start(index), end: 1e3 * nativeRange.end(index) }));\n }\n\n get playbackRate(): number {\n return this._player ? this._player.playbackRate : 1;\n }\n\n set playbackRate(playbackRate: number) {\n if (this._player) {\n this._player.playbackRate = playbackRate;\n }\n }\n\n get pipConfiguration(): PiPConfiguration {\n return this._pipConfiguration;\n }\n\n set pipConfiguration(config: PiPConfiguration) {\n this._pipConfiguration = config;\n }\n\n get backgroundAudioConfiguration(): BackgroundAudioConfiguration {\n return this._backgroundAudioConfiguration;\n }\n\n set backgroundAudioConfiguration(config: BackgroundAudioConfiguration) {\n this._backgroundAudioConfiguration = config;\n\n // Notify media session\n this._mediaSession?.updateActionHandlers();\n }\n\n get volume(): number {\n return this._player ? this._player.volume : 1;\n }\n\n set volume(volume: number) {\n if (this._player) {\n this._player.volume = volume;\n }\n }\n\n get muted(): boolean {\n return this._player ? this._player.muted : false;\n }\n\n set muted(muted: boolean) {\n if (this._player) {\n this._player.muted = muted;\n }\n }\n\n get seeking(): boolean {\n return this._player ? this._player.seeking : false;\n }\n\n get presentationMode(): PresentationMode {\n return this._presentationModeManager.presentationMode;\n }\n\n set presentationMode(presentationMode: PresentationMode) {\n this._presentationModeManager.presentationMode = presentationMode;\n }\n\n get audioTracks(): MediaTrack[] {\n return this._player ? fromNativeMediaTrackList(this._player.audioTracks) : [];\n }\n\n get videoTracks(): MediaTrack[] {\n return this._player ? fromNativeMediaTrackList(this._player.videoTracks) : [];\n }\n\n get textTracks(): TextTrack[] {\n return this._player ? fromNativeTextTrackList(this._player.textTracks) : [];\n }\n\n get selectedTextTrack(): number | undefined {\n if (this._player) {\n return this._player.textTracks.find((textTrack: NativeTextTrack) => {\n return textTrack.mode === 'showing';\n })?.uid;\n }\n return undefined;\n }\n\n set selectedTextTrack(selectedTextTrack: number | undefined) {\n if (this._player) {\n this._player.textTracks.forEach((textTrack: NativeTextTrack) => {\n textTrack.mode = textTrack.uid === selectedTextTrack ? 'showing' : 'disabled';\n });\n }\n }\n\n get textTrackStyle(): TextTrackStyle {\n return this._player?.textTrackStyle as TextTrackStyle;\n }\n\n get selectedVideoTrack(): number | undefined {\n if (this._player) {\n return this._player.videoTracks.find((videoTrack: NativeMediaTrack) => videoTrack.enabled)?.uid;\n }\n return undefined;\n }\n\n set selectedVideoTrack(selectedVideoTrack: number | undefined) {\n if (this._player) {\n this._targetVideoQuality = undefined;\n this._player.videoTracks.forEach((videoTrack: NativeMediaTrack) => {\n videoTrack.enabled = videoTrack.uid === selectedVideoTrack;\n });\n }\n }\n\n get selectedAudioTrack(): number | undefined {\n if (this._player) {\n return this._player.audioTracks.find((audioTrack: NativeMediaTrack) => {\n return audioTrack.enabled;\n })?.uid;\n }\n return undefined;\n }\n\n set selectedAudioTrack(selectedAudioTrack: number | undefined) {\n if (this._player) {\n this._player.audioTracks.forEach((audioTrack: NativeMediaTrack) => {\n audioTrack.enabled = audioTrack.uid === selectedAudioTrack;\n });\n }\n }\n\n get targetVideoQuality(): number | number[] | undefined {\n if (this._player) {\n return this._targetVideoQuality;\n }\n return undefined;\n }\n\n set targetVideoQuality(targetVideoQuality: number | number[] | undefined) {\n if (this._player) {\n const enabledVideoTrack = this._player.videoTracks.find((videoTrack: NativeMediaTrack) => videoTrack.enabled);\n if (enabledVideoTrack) {\n enabledVideoTrack.targetQuality = findNativeQualitiesByUid(enabledVideoTrack, targetVideoQuality);\n }\n this._targetVideoQuality = targetVideoQuality;\n }\n }\n\n get currentTime(): number {\n return this._player ? 1e3 * this._player.currentTime : NaN;\n }\n\n set currentTime(currentTime: number) {\n if (isNaN(currentTime)) {\n return;\n }\n if (this._player) {\n this._player.currentTime = currentTime / 1e3;\n }\n }\n\n get aspectRatio(): AspectRatio {\n return AspectRatio.FIT;\n }\n\n set aspectRatio(_ratio: AspectRatio) {\n // unused\n }\n\n get duration(): number {\n return this._player ? this._player.duration * 1e3 : NaN;\n }\n\n public get ads(): AdsAPI {\n return this._adsAdapter;\n }\n\n public get cast(): CastAPI {\n return this._castAdapter;\n }\n\n destroy(): void {\n this.dispatchEvent(new BaseEvent(PlayerEventType.DESTROY));\n this._eventForwarder?.unload();\n this._mediaSession?.destroy();\n document.removeEventListener('visibilitychange', this.onVisibilityChange);\n this._eventForwarder = undefined;\n this._mediaSession = undefined;\n this._player?.destroy();\n this._player = undefined;\n }\n\n get nativeHandle(): NativeHandleType {\n return this._player;\n }\n\n private readonly onVisibilityChange = () => {\n if (!this._player) {\n return;\n }\n if (document.visibilityState !== 'visible') {\n // Apply background configuration: by default, pause when going to background, unless in pip\n if (this.presentationMode !== PresentationMode.pip && !this.backgroundAudioConfiguration.enabled) {\n this._player.pause();\n }\n }\n // Apply media session controls\n this._mediaSession?.updateActionHandlers();\n };\n}\n"],"mappings":"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"}
@@ -6,7 +6,11 @@
6
6
  *
7
7
  * @public
8
8
  */
9
- export declare type ABRStrategyType = 'performance' | 'quality' | 'bandwidth';
9
+ export declare enum ABRStrategyType {
10
+ performance = "performance",
11
+ quality = "quality",
12
+ bandwidth = "bandwidth"
13
+ }
10
14
  /**
11
15
  * Describes the metadata of the adaptive bitrate strategy.
12
16
  *
@@ -44,3 +44,4 @@ export interface Track {
44
44
  export declare function hasTrack<TTrack extends Track>(trackList: TTrack[], track: TTrack): boolean;
45
45
  export declare function removeTrack<TTrack extends Track>(trackList: TTrack[], track: TTrack): TTrack[];
46
46
  export declare function addTrack<TTrack extends Track>(trackList: TTrack[], track: TTrack): TTrack[];
47
+ export declare function sortTracks<TTrack extends Track>(trackList?: TTrack[]): TTrack[];
@@ -12,6 +12,7 @@ export declare class THEOplayerAdapter extends DefaultEventDispatcher<PlayerEven
12
12
  private readonly _textTrackStyleAdapter;
13
13
  constructor(view: THEOplayerView, initialState?: NativePlayerState);
14
14
  private onSourceChange;
15
+ private hasValidSource;
15
16
  private onPause;
16
17
  private onPlaying;
17
18
  private onPresentationModeChange;
@@ -27,6 +28,7 @@ export declare class THEOplayerAdapter extends DefaultEventDispatcher<PlayerEven
27
28
  private onMediaTrackList;
28
29
  get abr(): ABRConfiguration | undefined;
29
30
  get ads(): AdsAPI;
31
+ private applyAutoplay;
30
32
  set autoplay(autoplay: boolean);
31
33
  get autoplay(): boolean;
32
34
  set preload(type: PreloadType);
@@ -6,12 +6,12 @@ import type { ABRConfiguration, SourceDescription } from 'src/api/barrel';
6
6
  import type { PiPConfiguration } from 'src/api/pip/PiPConfiguration';
7
7
  import type { BackgroundAudioConfiguration } from 'src/api/backgroundAudio/BackgroundAudioConfiguration';
8
8
  export declare class THEOplayerWebAdapter extends DefaultEventDispatcher<PlayerEventMap> implements THEOplayer {
9
- private readonly _player;
10
9
  private readonly _adsAdapter;
11
10
  private readonly _castAdapter;
12
- private readonly _eventForwarder;
13
11
  private readonly _presentationModeManager;
14
- private readonly _mediaSession;
12
+ private _player;
13
+ private _eventForwarder;
14
+ private _mediaSession;
15
15
  private _targetVideoQuality;
16
16
  private _backgroundAudioConfiguration;
17
17
  private _pipConfiguration;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-theoplayer",
3
- "version": "2.5.0",
3
+ "version": "2.7.0",
4
4
  "description": "A THEOplayer video component for react-native.",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
@@ -36,7 +36,7 @@ Pod::Spec.new do |s|
36
36
  }
37
37
  else
38
38
  puts "Using THEOplayer-core SDK"
39
- s.dependency "THEOplayerSDK-core", "~> 5.0.1"
39
+ s.dependency "THEOplayerSDK-core", "~> 5.1"
40
40
  if theofeatures.include?("GOOGLE_IMA")
41
41
  puts "Adding THEOplayer-Integration-GoogleIMA"
42
42
  s.dependency "THEOplayer-Integration-GoogleIMA"
@@ -6,7 +6,11 @@
6
6
  *
7
7
  * @public
8
8
  */
9
- export type ABRStrategyType = 'performance' | 'quality' | 'bandwidth';
9
+ export enum ABRStrategyType {
10
+ performance = 'performance',
11
+ quality = 'quality',
12
+ bandwidth = 'bandwidth',
13
+ }
10
14
 
11
15
  /**
12
16
  * Describes the metadata of the adaptive bitrate strategy.
@@ -55,5 +55,9 @@ export function removeTrack<TTrack extends Track>(trackList: TTrack[], track: TT
55
55
  }
56
56
 
57
57
  export function addTrack<TTrack extends Track>(trackList: TTrack[], track: TTrack): TTrack[] {
58
- return trackList && track && !hasTrack(trackList, track) ? [...trackList, track] : trackList;
58
+ return trackList && track && !hasTrack(trackList, track) ? sortTracks([...trackList, track]) : trackList;
59
+ }
60
+
61
+ export function sortTracks<TTrack extends Track>(trackList?: TTrack[]): TTrack[] {
62
+ return trackList?.sort((t1: TTrack, t2: TTrack) => t1.uid - t2.uid) || [];
59
63
  }
@@ -2,8 +2,6 @@ import React, { useEffect, useRef } from 'react';
2
2
  import type { THEOplayerViewProps } from 'react-native-theoplayer';
3
3
  import * as THEOplayer from 'theoplayer';
4
4
  import { THEOplayerWebAdapter } from './adapter/THEOplayerWebAdapter';
5
- import { BaseEvent } from './adapter/event/BaseEvent';
6
- import { PlayerEventType } from 'react-native-theoplayer';
7
5
 
8
6
  export function THEOplayerView(props: React.PropsWithChildren<THEOplayerViewProps>) {
9
7
  const { config, children } = props;
@@ -15,7 +13,7 @@ export function THEOplayerView(props: React.PropsWithChildren<THEOplayerViewProp
15
13
  // Create player inside container.
16
14
  if (container.current) {
17
15
  const chromeless = config?.chromeless === true || config?.chromeless === undefined;
18
- const updatedConfig = {...config, allowNativeFullscreen: true};
16
+ const updatedConfig = { ...config, allowNativeFullscreen: true };
19
17
  if (chromeless) {
20
18
  player.current = new THEOplayer.ChromelessPlayer(container.current, updatedConfig);
21
19
  } else {
@@ -23,7 +21,7 @@ export function THEOplayerView(props: React.PropsWithChildren<THEOplayerViewProp
23
21
  ...updatedConfig,
24
22
  ui: {
25
23
  fluid: true,
26
- }
24
+ },
27
25
  } as THEOplayer.PlayerConfiguration);
28
26
  }
29
27
 
@@ -48,9 +46,7 @@ export function THEOplayerView(props: React.PropsWithChildren<THEOplayerViewProp
48
46
  if (adapter?.current && onPlayerDestroy) {
49
47
  onPlayerDestroy(adapter?.current);
50
48
  }
51
- adapter?.current?.dispatchEvent(new BaseEvent(PlayerEventType.DESTROY));
52
49
  adapter?.current?.destroy();
53
- player?.current?.destroy();
54
50
  };
55
51
  }, [container]);
56
52
 
@@ -103,13 +103,13 @@ export class THEOplayerAdapter extends DefaultEventDispatcher<PlayerEventMap> im
103
103
  }
104
104
 
105
105
  private onSourceChange = () => {
106
- if (this._state.autoplay) {
107
- this.play();
108
- } else {
109
- this.pause();
110
- }
106
+ this.applyAutoplay();
111
107
  };
112
108
 
109
+ private hasValidSource(): boolean {
110
+ return this._state.source !== undefined;
111
+ }
112
+
113
113
  private onPause = () => {
114
114
  this._state.paused = true;
115
115
  };
@@ -225,9 +225,23 @@ export class THEOplayerAdapter extends DefaultEventDispatcher<PlayerEventMap> im
225
225
  return this._adsAdapter;
226
226
  }
227
227
 
228
+ private applyAutoplay() {
229
+ if (!this.hasValidSource()) {
230
+ return;
231
+ }
232
+ if (this._state.autoplay) {
233
+ this.play();
234
+ } else {
235
+ this.pause();
236
+ }
237
+ }
238
+
228
239
  set autoplay(autoplay: boolean) {
229
240
  this._state.autoplay = autoplay;
230
- NativeModules.PlayerModule.setPaused(this._view.nativeHandle, !autoplay);
241
+
242
+ // Apply autoplay in case a source was already set.
243
+ // If autoplay is changed before setting a source, `onSourceChange` applies autoplay.
244
+ this.applyAutoplay();
231
245
  }
232
246
 
233
247
  get autoplay(): boolean {
@@ -265,6 +279,10 @@ export class THEOplayerAdapter extends DefaultEventDispatcher<PlayerEventMap> im
265
279
  }
266
280
 
267
281
  set currentTime(currentTime: number) {
282
+ if (!this.hasValidSource()) {
283
+ return;
284
+ }
285
+
268
286
  if (isNaN(currentTime)) {
269
287
  return;
270
288
  }
@@ -345,6 +363,9 @@ export class THEOplayerAdapter extends DefaultEventDispatcher<PlayerEventMap> im
345
363
  }
346
364
 
347
365
  set selectedAudioTrack(trackUid: number | undefined) {
366
+ if (!this.hasValidSource()) {
367
+ return;
368
+ }
348
369
  this._state.selectedAudioTrack = trackUid;
349
370
  NativeModules.PlayerModule.setSelectedAudioTrack(this._view.nativeHandle, trackUid || -1);
350
371
  }
@@ -358,6 +379,9 @@ export class THEOplayerAdapter extends DefaultEventDispatcher<PlayerEventMap> im
358
379
  }
359
380
 
360
381
  set selectedVideoTrack(trackUid: number | undefined) {
382
+ if (!this.hasValidSource()) {
383
+ return;
384
+ }
361
385
  this._state.selectedVideoTrack = trackUid;
362
386
  this._state.targetVideoQuality = undefined;
363
387
  NativeModules.PlayerModule.setSelectedVideoTrack(this._view.nativeHandle, trackUid || -1);
@@ -372,6 +396,9 @@ export class THEOplayerAdapter extends DefaultEventDispatcher<PlayerEventMap> im
372
396
  }
373
397
 
374
398
  set selectedTextTrack(trackUid: number | undefined) {
399
+ if (!this.hasValidSource()) {
400
+ return;
401
+ }
375
402
  this._state.selectedTextTrack = trackUid;
376
403
  this.textTracks.forEach((track) => {
377
404
  if (track.uid === trackUid) {
@@ -417,6 +444,9 @@ export class THEOplayerAdapter extends DefaultEventDispatcher<PlayerEventMap> im
417
444
  }
418
445
 
419
446
  set targetVideoQuality(target: number | number[] | undefined) {
447
+ if (!this.hasValidSource()) {
448
+ return;
449
+ }
420
450
  // Always pass an array for targetVideoQuality.
421
451
  this._state.targetVideoQuality = !target ? [] : Array.isArray(target) ? target : [target];
422
452
 
@@ -447,13 +477,17 @@ export class THEOplayerAdapter extends DefaultEventDispatcher<PlayerEventMap> im
447
477
  }
448
478
 
449
479
  pause(): void {
450
- this._state.paused = true;
451
- NativeModules.PlayerModule.setPaused(this._view.nativeHandle, true);
480
+ if (this.hasValidSource()) {
481
+ this._state.paused = true;
482
+ NativeModules.PlayerModule.setPaused(this._view.nativeHandle, true);
483
+ }
452
484
  }
453
485
 
454
486
  play(): void {
455
- this._state.paused = false;
456
- NativeModules.PlayerModule.setPaused(this._view.nativeHandle, false);
487
+ if (this.hasValidSource()) {
488
+ this._state.paused = false;
489
+ NativeModules.PlayerModule.setPaused(this._view.nativeHandle, false);
490
+ }
457
491
  }
458
492
 
459
493
  get nativeHandle(): NativeHandleType {