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.
- package/CHANGELOG.md +24 -0
- package/android/src/main/java/com/theoplayer/PlayerEventEmitter.kt +9 -15
- package/android/src/main/java/com/theoplayer/util/PayloadBuilder.kt +2 -1
- package/android/src/main/java/com/theoplayer/util/ViewResolver.kt +9 -1
- package/ios/THEOplayerRCTDebug.swift +3 -3
- package/ios/THEOplayerRCTMainEventHandler.swift +59 -59
- package/ios/THEOplayerRCTMediaTrackEventHandler.swift +18 -18
- package/ios/THEOplayerRCTNetworkUtils.swift +1 -1
- package/ios/THEOplayerRCTPlayerAPI.swift +14 -14
- package/ios/THEOplayerRCTPrintUtils.swift +16 -0
- package/ios/THEOplayerRCTSourceDescriptionBuilder.swift +6 -6
- package/ios/THEOplayerRCTTextTrackEventHandler.swift +21 -21
- package/ios/THEOplayerRCTView.swift +29 -29
- package/ios/ads/THEOplayerRCTAdsAPI+DAI.swift +6 -6
- package/ios/ads/THEOplayerRCTAdsAPI.swift +13 -13
- package/ios/ads/THEOplayerRCTAdsEventHandler.swift +27 -27
- package/ios/ads/THEOplayerRCTSourceDescriptionBuilder+Ads.swift +5 -5
- package/ios/backgroundAudio/THEOplayerRCTNowPlayingManager.swift +63 -37
- package/ios/backgroundAudio/THEOplayerRCTRemoteCommandsManager.swift +16 -16
- package/ios/casting/THEOplayerRCTCastAPI+Airplay.swift +6 -6
- package/ios/casting/THEOplayerRCTCastAPI+Chromecast.swift +10 -10
- package/ios/casting/THEOplayerRCTCastAPI.swift +1 -1
- package/ios/casting/THEOplayerRCTCastEventHandler.swift +11 -11
- package/ios/contentprotection/THEOplayerRCTContentProtectionAPI.swift +1 -1
- package/ios/pip/THEOplayerRCTPipControlsManager.swift +1 -1
- package/lib/commonjs/api/abr/ABRConfiguration.js +25 -0
- package/lib/commonjs/api/abr/ABRConfiguration.js.map +1 -1
- package/lib/commonjs/api/track/Track.js +5 -1
- package/lib/commonjs/api/track/Track.js.map +1 -1
- package/lib/commonjs/internal/THEOplayerView.web.js +2 -6
- package/lib/commonjs/internal/THEOplayerView.web.js.map +1 -1
- package/lib/commonjs/internal/adapter/THEOplayerAdapter.js +41 -10
- package/lib/commonjs/internal/adapter/THEOplayerAdapter.js.map +1 -1
- package/lib/commonjs/internal/adapter/THEOplayerWebAdapter.js +105 -52
- package/lib/commonjs/internal/adapter/THEOplayerWebAdapter.js.map +1 -1
- package/lib/module/api/abr/ABRConfiguration.js +19 -0
- package/lib/module/api/abr/ABRConfiguration.js.map +1 -1
- package/lib/module/api/track/Track.js +4 -1
- package/lib/module/api/track/Track.js.map +1 -1
- package/lib/module/internal/THEOplayerView.web.js +2 -6
- package/lib/module/internal/THEOplayerView.web.js.map +1 -1
- package/lib/module/internal/adapter/THEOplayerAdapter.js +41 -10
- package/lib/module/internal/adapter/THEOplayerAdapter.js.map +1 -1
- package/lib/module/internal/adapter/THEOplayerWebAdapter.js +106 -53
- package/lib/module/internal/adapter/THEOplayerWebAdapter.js.map +1 -1
- package/lib/typescript/api/abr/ABRConfiguration.d.ts +5 -1
- package/lib/typescript/api/track/Track.d.ts +1 -0
- package/lib/typescript/internal/adapter/THEOplayerAdapter.d.ts +2 -0
- package/lib/typescript/internal/adapter/THEOplayerWebAdapter.d.ts +3 -3
- package/package.json +1 -1
- package/react-native-theoplayer.podspec +1 -1
- package/src/api/abr/ABRConfiguration.ts +5 -1
- package/src/api/track/Track.ts +5 -1
- package/src/internal/THEOplayerView.web.tsx +2 -6
- package/src/internal/adapter/THEOplayerAdapter.ts +44 -10
- 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
|
-
|
|
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
|
-
|
|
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
|
|
68
|
+
if (this._player) {
|
|
69
|
+
this._player.source = source;
|
|
70
|
+
}
|
|
63
71
|
}
|
|
64
72
|
play() {
|
|
65
|
-
|
|
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
|
-
|
|
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
|
|
87
|
+
if (this._player) {
|
|
88
|
+
this._player.autoplay = autoplay;
|
|
89
|
+
}
|
|
78
90
|
}
|
|
79
91
|
set preload(type) {
|
|
80
|
-
this._player
|
|
92
|
+
if (this._player) {
|
|
93
|
+
this._player.preload = type;
|
|
94
|
+
}
|
|
81
95
|
}
|
|
82
96
|
get preload() {
|
|
83
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
153
|
-
|
|
154
|
-
return textTrack
|
|
155
|
-
|
|
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
|
|
159
|
-
|
|
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
|
-
|
|
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
|
-
|
|
167
|
-
|
|
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.
|
|
171
|
-
|
|
172
|
-
|
|
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
|
-
|
|
177
|
-
|
|
178
|
-
return audioTrack
|
|
179
|
-
|
|
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
|
|
183
|
-
|
|
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
|
-
|
|
230
|
+
if (this._player) {
|
|
231
|
+
return this._targetVideoQuality;
|
|
232
|
+
}
|
|
233
|
+
return undefined;
|
|
188
234
|
}
|
|
189
235
|
set targetVideoQuality(targetVideoQuality) {
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
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.
|
|
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":";;;AAAA,SAASA,sBAAsB,QAAQ,gCAAgC;AAavE,SAASC,WAAW,EAAEC,eAAe,EAAEC,gBAAgB,QAAQ,yBAAyB;AACxF,SAASC,uBAAuB,QAAQ,+BAA+B;AACvE,SAASC,wBAAwB,QAAQ,iCAAiC;AAG1E,SAASC,wBAAwB,EAAEC,wBAAwB,EAAEC,uBAAuB,QAAQ,kBAAkB;AAE9G,SAASC,iBAAiB,QAAQ,qBAAqB;AAGvD,SAASC,0BAA0B,QAAQ,kCAAkC;AAC7E,SAASC,eAAe,QAAQ,uBAAuB;AACvD,SAASC,SAAS,QAAQ,mBAAmB;AAE7C,MAAMC,mCAAiE,GAAG;EACxEC,OAAO,EAAE;AACX,CAAC;AAED,MAAMC,uBAAyC,GAAG;EAChDC,mBAAmB,EAAE;AACvB,CAAC;AAED,OAAO,MAAMC,oBAAoB,SAASjB,sBAAsB,CAAuC;EAWrGkB,WAAWA,CAACC,MAAsC,EAAEC,MAA4B,EAAE;IAAA,IAAAC,oBAAA;IAChF,KAAK,EAAE;IAACC,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA,wBAN2CC,SAAS;IAAAD,eAAA,8BACDC,SAAS;IAAAD,eAAA,wCACAT,mCAAmC;IAAAS,eAAA,4BAC3DP,uBAAuB;IAAAO,eAAA,6BAgR/B,MAAM;MAAA,IAAAE,mBAAA;MAC1C,IAAI,CAAC,IAAI,CAACC,OAAO,EAAE;QACjB;MACF;MACA,IAAIC,QAAQ,CAACC,eAAe,KAAK,SAAS,EAAE;QAC1C;QACA,IAAI,IAAI,CAACC,gBAAgB,KAAKzB,gBAAgB,CAAC0B,GAAG,IAAI,CAAC,IAAI,CAACC,4BAA4B,CAAChB,OAAO,EAAE;UAChG,IAAI,CAACW,OAAO,CAACM,KAAK,EAAE;QACtB;MACF;MACA;MACA,CAAAP,mBAAA,OAAI,CAACQ,aAAa,cAAAR,mBAAA,uBAAlBA,mBAAA,CAAoBS,oBAAoB,EAAE;IAC5C,CAAC;IAxRC,IAAI,CAACR,OAAO,GAAGN,MAAM;IACrB,IAAI,CAACe,WAAW,GAAG,IAAI9B,uBAAuB,CAAC,IAAI,CAACqB,OAAO,CAAC;IAC5D,IAAI,CAACU,YAAY,GAAG,IAAI9B,wBAAwB,CAAC,IAAI,CAACoB,OAAO,CAAC;IAC9D,IAAI,CAACW,eAAe,GAAG,IAAI3B,iBAAiB,CAAC,IAAI,CAACgB,OAAO,EAAE,IAAI,CAAC;IAChE,IAAI,CAACY,wBAAwB,GAAG,IAAI3B,0BAA0B,CAAC,IAAI,CAACe,OAAO,EAAE,IAAI,CAAC;IAClFC,QAAQ,CAACY,gBAAgB,CAAC,kBAAkB,EAAE,IAAI,CAACC,kBAAkB,CAAC;;IAEtE;IACA,IAAI,CAAAnB,MAAM,aAANA,MAAM,wBAAAC,oBAAA,GAAND,MAAM,CAAEoB,YAAY,cAAAnB,oBAAA,uBAApBA,oBAAA,CAAsBoB,mBAAmB,MAAK,KAAK,EAAE;MACvD,IAAI,CAACT,aAAa,GAAG,IAAIrB,eAAe,CAAC,IAAI,EAAEQ,MAAM,CAAC;IACxD;EACF;EAEA,IAAIuB,GAAGA,CAAA,EAAiC;IAAA,IAAAC,aAAA;IACtC,QAAAA,aAAA,GAAO,IAAI,CAAClB,OAAO,cAAAkB,aAAA,uBAAZA,aAAA,CAAcD,GAAG;EAC1B;EAEA,IAAIE,MAAMA,CAAA,EAAkC;IAAA,IAAAC,cAAA;IAC1C,QAAAA,cAAA,GAAO,IAAI,CAACpB,OAAO,cAAAoB,cAAA,uBAAZA,cAAA,CAAcD,MAAM;EAC7B;EAEA,IAAIA,MAAMA,CAACA,MAAqC,EAAE;IAChD,IAAI,CAACE,mBAAmB,GAAGvB,SAAS;IACpC,IAAI,IAAI,CAACE,OAAO,EAAE;MAChB,IAAI,CAACA,OAAO,CAACmB,MAAM,GAAGA,MAAM;IAC9B;EACF;EAEAG,IAAIA,CAAA,EAAS;IAAA,IAAAC,cAAA;IACX,CAAAA,cAAA,OAAI,CAACvB,OAAO,cAAAuB,cAAA,uBAAZA,cAAA,CAAcD,IAAI,EAAE;EACtB;EAEAhB,KAAKA,CAAA,EAAS;IAAA,IAAAkB,cAAA;IACZ,CAAAA,cAAA,OAAI,CAACxB,OAAO,cAAAwB,cAAA,uBAAZA,cAAA,CAAclB,KAAK,EAAE;EACvB;EAEA,IAAImB,MAAMA,CAAA,EAAY;IACpB,OAAO,IAAI,CAACzB,OAAO,GAAG,IAAI,CAACA,OAAO,CAACyB,MAAM,GAAG,IAAI;EAClD;EAEA,IAAIC,QAAQA,CAAA,EAAY;IACtB,OAAO,IAAI,CAAC1B,OAAO,GAAG,IAAI,CAACA,OAAO,CAAC0B,QAAQ,GAAG,KAAK;EACrD;EAEA,IAAIA,QAAQA,CAACA,QAAiB,EAAE;IAC9B,IAAI,IAAI,CAAC1B,OAAO,EAAE;MAChB,IAAI,CAACA,OAAO,CAAC0B,QAAQ,GAAGA,QAAQ;IAClC;EACF;EAEA,IAAIC,OAAOA,CAACC,IAAiB,EAAE;IAC7B,IAAI,IAAI,CAAC5B,OAAO,EAAE;MAChB,IAAI,CAACA,OAAO,CAAC2B,OAAO,GAAGC,IAAI;IAC7B;EACF;EAEA,IAAID,OAAOA,CAAA,EAAgB;IAAA,IAAAE,cAAA;IACzB,OAAO,EAAAA,cAAA,OAAI,CAAC7B,OAAO,cAAA6B,cAAA,uBAAZA,cAAA,CAAcF,OAAO,KAAI,MAAM;EACxC;EAEA,IAAIG,QAAQA,CAAA,EAAG;IACb,IAAI,CAAC,IAAI,CAAC9B,OAAO,EAAE;MACjB,OAAO,EAAE;IACX;IACA,MAAM+B,WAAW,GAAG,IAAI,CAAC/B,OAAO,CAAC8B,QAAQ;IACzC,OAAO,CAAC,GAAGE,KAAK,CAACD,WAAW,CAACE,MAAM,CAAC,CAAC,CAACC,GAAG,CAAC,CAACC,CAAC,EAAEC,KAAK,MAAM;MAAEC,KAAK,EAAE,GAAG,GAAGN,WAAW,CAACM,KAAK,CAACD,KAAK,CAAC;MAAEE,GAAG,EAAE,GAAG,GAAGP,WAAW,CAACO,GAAG,CAACF,KAAK;IAAE,CAAC,CAAC,CAAC;EACzI;EAEA,IAAIG,QAAQA,CAAA,EAAG;IACb,IAAI,CAAC,IAAI,CAACvC,OAAO,EAAE;MACjB,OAAO,EAAE;IACX;IACA,MAAM+B,WAAW,GAAG,IAAI,CAAC/B,OAAO,CAACuC,QAAQ;IACzC,OAAO,CAAC,GAAGP,KAAK,CAACD,WAAW,CAACE,MAAM,CAAC,CAAC,CAACC,GAAG,CAAC,CAACC,CAAC,EAAEC,KAAK,MAAM;MAAEC,KAAK,EAAE,GAAG,GAAGN,WAAW,CAACM,KAAK,CAACD,KAAK,CAAC;MAAEE,GAAG,EAAE,GAAG,GAAGP,WAAW,CAACO,GAAG,CAACF,KAAK;IAAE,CAAC,CAAC,CAAC;EACzI;EAEA,IAAII,YAAYA,CAAA,EAAW;IACzB,OAAO,IAAI,CAACxC,OAAO,GAAG,IAAI,CAACA,OAAO,CAACwC,YAAY,GAAG,CAAC;EACrD;EAEA,IAAIA,YAAYA,CAACA,YAAoB,EAAE;IACrC,IAAI,IAAI,CAACxC,OAAO,EAAE;MAChB,IAAI,CAACA,OAAO,CAACwC,YAAY,GAAGA,YAAY;IAC1C;EACF;EAEA,IAAIC,gBAAgBA,CAAA,EAAqB;IACvC,OAAO,IAAI,CAACC,iBAAiB;EAC/B;EAEA,IAAID,gBAAgBA,CAAC9C,MAAwB,EAAE;IAC7C,IAAI,CAAC+C,iBAAiB,GAAG/C,MAAM;EACjC;EAEA,IAAIU,4BAA4BA,CAAA,EAAiC;IAC/D,OAAO,IAAI,CAACsC,6BAA6B;EAC3C;EAEA,IAAItC,4BAA4BA,CAACV,MAAoC,EAAE;IAAA,IAAAiD,oBAAA;IACrE,IAAI,CAACD,6BAA6B,GAAGhD,MAAM;;IAE3C;IACA,CAAAiD,oBAAA,OAAI,CAACrC,aAAa,cAAAqC,oBAAA,uBAAlBA,oBAAA,CAAoBpC,oBAAoB,EAAE;EAC5C;EAEA,IAAIqC,MAAMA,CAAA,EAAW;IACnB,OAAO,IAAI,CAAC7C,OAAO,GAAG,IAAI,CAACA,OAAO,CAAC6C,MAAM,GAAG,CAAC;EAC/C;EAEA,IAAIA,MAAMA,CAACA,MAAc,EAAE;IACzB,IAAI,IAAI,CAAC7C,OAAO,EAAE;MAChB,IAAI,CAACA,OAAO,CAAC6C,MAAM,GAAGA,MAAM;IAC9B;EACF;EAEA,IAAIC,KAAKA,CAAA,EAAY;IACnB,OAAO,IAAI,CAAC9C,OAAO,GAAG,IAAI,CAACA,OAAO,CAAC8C,KAAK,GAAG,KAAK;EAClD;EAEA,IAAIA,KAAKA,CAACA,KAAc,EAAE;IACxB,IAAI,IAAI,CAAC9C,OAAO,EAAE;MAChB,IAAI,CAACA,OAAO,CAAC8C,KAAK,GAAGA,KAAK;IAC5B;EACF;EAEA,IAAIC,OAAOA,CAAA,EAAY;IACrB,OAAO,IAAI,CAAC/C,OAAO,GAAG,IAAI,CAACA,OAAO,CAAC+C,OAAO,GAAG,KAAK;EACpD;EAEA,IAAI5C,gBAAgBA,CAAA,EAAqB;IACvC,OAAO,IAAI,CAACS,wBAAwB,CAACT,gBAAgB;EACvD;EAEA,IAAIA,gBAAgBA,CAACA,gBAAkC,EAAE;IACvD,IAAI,CAACS,wBAAwB,CAACT,gBAAgB,GAAGA,gBAAgB;EACnE;EAEA,IAAI6C,WAAWA,CAAA,EAAiB;IAC9B,OAAO,IAAI,CAAChD,OAAO,GAAGlB,wBAAwB,CAAC,IAAI,CAACkB,OAAO,CAACgD,WAAW,CAAC,GAAG,EAAE;EAC/E;EAEA,IAAIC,WAAWA,CAAA,EAAiB;IAC9B,OAAO,IAAI,CAACjD,OAAO,GAAGlB,wBAAwB,CAAC,IAAI,CAACkB,OAAO,CAACiD,WAAW,CAAC,GAAG,EAAE;EAC/E;EAEA,IAAIC,UAAUA,CAAA,EAAgB;IAC5B,OAAO,IAAI,CAAClD,OAAO,GAAGjB,uBAAuB,CAAC,IAAI,CAACiB,OAAO,CAACkD,UAAU,CAAC,GAAG,EAAE;EAC7E;EAEA,IAAIC,iBAAiBA,CAAA,EAAuB;IAC1C,IAAI,IAAI,CAACnD,OAAO,EAAE;MAAA,IAAAoD,qBAAA;MAChB,QAAAA,qBAAA,GAAO,IAAI,CAACpD,OAAO,CAACkD,UAAU,CAACG,IAAI,CAAEC,SAA0B,IAAK;QAClE,OAAOA,SAAS,CAACC,IAAI,KAAK,SAAS;MACrC,CAAC,CAAC,cAAAH,qBAAA,uBAFKA,qBAAA,CAEHI,GAAG;IACT;IACA,OAAO1D,SAAS;EAClB;EAEA,IAAIqD,iBAAiBA,CAACA,iBAAqC,EAAE;IAC3D,IAAI,IAAI,CAACnD,OAAO,EAAE;MAChB,IAAI,CAACA,OAAO,CAACkD,UAAU,CAACO,OAAO,CAAEH,SAA0B,IAAK;QAC9DA,SAAS,CAACC,IAAI,GAAGD,SAAS,CAACE,GAAG,KAAKL,iBAAiB,GAAG,SAAS,GAAG,UAAU;MAC/E,CAAC,CAAC;IACJ;EACF;EAEA,IAAIO,cAAcA,CAAA,EAAmB;IAAA,IAAAC,cAAA;IACnC,QAAAA,cAAA,GAAO,IAAI,CAAC3D,OAAO,cAAA2D,cAAA,uBAAZA,cAAA,CAAcD,cAAc;EACrC;EAEA,IAAIE,kBAAkBA,CAAA,EAAuB;IAC3C,IAAI,IAAI,CAAC5D,OAAO,EAAE;MAAA,IAAA6D,qBAAA;MAChB,QAAAA,qBAAA,GAAO,IAAI,CAAC7D,OAAO,CAACiD,WAAW,CAACI,IAAI,CAAES,UAA4B,IAAKA,UAAU,CAACzE,OAAO,CAAC,cAAAwE,qBAAA,uBAAnFA,qBAAA,CAAqFL,GAAG;IACjG;IACA,OAAO1D,SAAS;EAClB;EAEA,IAAI8D,kBAAkBA,CAACA,kBAAsC,EAAE;IAC7D,IAAI,IAAI,CAAC5D,OAAO,EAAE;MAChB,IAAI,CAACqB,mBAAmB,GAAGvB,SAAS;MACpC,IAAI,CAACE,OAAO,CAACiD,WAAW,CAACQ,OAAO,CAAEK,UAA4B,IAAK;QACjEA,UAAU,CAACzE,OAAO,GAAGyE,UAAU,CAACN,GAAG,KAAKI,kBAAkB;MAC5D,CAAC,CAAC;IACJ;EACF;EAEA,IAAIG,kBAAkBA,CAAA,EAAuB;IAC3C,IAAI,IAAI,CAAC/D,OAAO,EAAE;MAAA,IAAAgE,qBAAA;MAChB,QAAAA,qBAAA,GAAO,IAAI,CAAChE,OAAO,CAACgD,WAAW,CAACK,IAAI,CAAEY,UAA4B,IAAK;QACrE,OAAOA,UAAU,CAAC5E,OAAO;MAC3B,CAAC,CAAC,cAAA2E,qBAAA,uBAFKA,qBAAA,CAEHR,GAAG;IACT;IACA,OAAO1D,SAAS;EAClB;EAEA,IAAIiE,kBAAkBA,CAACA,kBAAsC,EAAE;IAC7D,IAAI,IAAI,CAAC/D,OAAO,EAAE;MAChB,IAAI,CAACA,OAAO,CAACgD,WAAW,CAACS,OAAO,CAAEQ,UAA4B,IAAK;QACjEA,UAAU,CAAC5E,OAAO,GAAG4E,UAAU,CAACT,GAAG,KAAKO,kBAAkB;MAC5D,CAAC,CAAC;IACJ;EACF;EAEA,IAAIG,kBAAkBA,CAAA,EAAkC;IACtD,IAAI,IAAI,CAAClE,OAAO,EAAE;MAChB,OAAO,IAAI,CAACqB,mBAAmB;IACjC;IACA,OAAOvB,SAAS;EAClB;EAEA,IAAIoE,kBAAkBA,CAACA,kBAAiD,EAAE;IACxE,IAAI,IAAI,CAAClE,OAAO,EAAE;MAChB,MAAMmE,iBAAiB,GAAG,IAAI,CAACnE,OAAO,CAACiD,WAAW,CAACI,IAAI,CAAES,UAA4B,IAAKA,UAAU,CAACzE,OAAO,CAAC;MAC7G,IAAI8E,iBAAiB,EAAE;QACrBA,iBAAiB,CAACC,aAAa,GAAGvF,wBAAwB,CAACsF,iBAAiB,EAAED,kBAAkB,CAAC;MACnG;MACA,IAAI,CAAC7C,mBAAmB,GAAG6C,kBAAkB;IAC/C;EACF;EAEA,IAAIG,WAAWA,CAAA,EAAW;IACxB,OAAO,IAAI,CAACrE,OAAO,GAAG,GAAG,GAAG,IAAI,CAACA,OAAO,CAACqE,WAAW,GAAGC,GAAG;EAC5D;EAEA,IAAID,WAAWA,CAACA,WAAmB,EAAE;IACnC,IAAIE,KAAK,CAACF,WAAW,CAAC,EAAE;MACtB;IACF;IACA,IAAI,IAAI,CAACrE,OAAO,EAAE;MAChB,IAAI,CAACA,OAAO,CAACqE,WAAW,GAAGA,WAAW,GAAG,GAAG;IAC9C;EACF;EAEA,IAAIG,WAAWA,CAAA,EAAgB;IAC7B,OAAOhG,WAAW,CAACiG,GAAG;EACxB;EAEA,IAAID,WAAWA,CAACE,MAAmB,EAAE;IACnC;EAAA;EAGF,IAAIC,QAAQA,CAAA,EAAW;IACrB,OAAO,IAAI,CAAC3E,OAAO,GAAG,IAAI,CAACA,OAAO,CAAC2E,QAAQ,GAAG,GAAG,GAAGL,GAAG;EACzD;EAEA,IAAWM,GAAGA,CAAA,EAAW;IACvB,OAAO,IAAI,CAACnE,WAAW;EACzB;EAEA,IAAWoE,IAAIA,CAAA,EAAY;IACzB,OAAO,IAAI,CAACnE,YAAY;EAC1B;EAEAoE,OAAOA,CAAA,EAAS;IAAA,IAAAC,qBAAA,EAAAC,oBAAA,EAAAC,cAAA;IACd,IAAI,CAACC,aAAa,CAAC,IAAI/F,SAAS,CAACV,eAAe,CAAC0G,OAAO,CAAC,CAAC;IAC1D,CAAAJ,qBAAA,OAAI,CAACpE,eAAe,cAAAoE,qBAAA,uBAApBA,qBAAA,CAAsBK,MAAM,EAAE;IAC9B,CAAAJ,oBAAA,OAAI,CAACzE,aAAa,cAAAyE,oBAAA,uBAAlBA,oBAAA,CAAoBF,OAAO,EAAE;IAC7B7E,QAAQ,CAACoF,mBAAmB,CAAC,kBAAkB,EAAE,IAAI,CAACvE,kBAAkB,CAAC;IACzE,IAAI,CAACH,eAAe,GAAGb,SAAS;IAChC,IAAI,CAACS,aAAa,GAAGT,SAAS;IAC9B,CAAAmF,cAAA,OAAI,CAACjF,OAAO,cAAAiF,cAAA,uBAAZA,cAAA,CAAcH,OAAO,EAAE;IACvB,IAAI,CAAC9E,OAAO,GAAGF,SAAS;EAC1B;EAEA,IAAIwF,YAAYA,CAAA,EAAqB;IACnC,OAAO,IAAI,CAACtF,OAAO;EACrB;AAeF"}
|
|
@@ -6,7 +6,11 @@
|
|
|
6
6
|
*
|
|
7
7
|
* @public
|
|
8
8
|
*/
|
|
9
|
-
export declare
|
|
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
|
|
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
|
@@ -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.
|
|
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
|
|
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.
|
package/src/api/track/Track.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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.
|
|
451
|
-
|
|
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.
|
|
456
|
-
|
|
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 {
|