react-native-theoplayer 2.6.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 +10 -0
- 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 +16 -15
- 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/internal/adapter/THEOplayerAdapter.js +41 -10
- package/lib/commonjs/internal/adapter/THEOplayerAdapter.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/typescript/internal/adapter/THEOplayerAdapter.d.ts +2 -0
- package/package.json +1 -1
- package/src/internal/adapter/THEOplayerAdapter.ts +44 -10
|
@@ -19,7 +19,7 @@ extension THEOplayerRCTCastAPI {
|
|
|
19
19
|
resolve(chromecast.casting)
|
|
20
20
|
} else {
|
|
21
21
|
reject(ERROR_CODE_CHROMECAST_ACCESS_FAILURE, ERROR_MESSAGE_CHROMECAST_ACCESS_FAILURE, nil)
|
|
22
|
-
if DEBUG_CAST_API {
|
|
22
|
+
if DEBUG_CAST_API { PrintUtils.printLog(logText: "[NATIVE] Could not retrieve current chromecast casting status.") }
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
25
|
}
|
|
@@ -33,7 +33,7 @@ extension THEOplayerRCTCastAPI {
|
|
|
33
33
|
resolve(chromecast.state?._rawValue)
|
|
34
34
|
} else {
|
|
35
35
|
reject(ERROR_CODE_CHROMECAST_ACCESS_FAILURE, ERROR_MESSAGE_CHROMECAST_ACCESS_FAILURE, nil)
|
|
36
|
-
if DEBUG_CAST_API {
|
|
36
|
+
if DEBUG_CAST_API { PrintUtils.printLog(logText: "[NATIVE] Could not retrieve current chromecast state.") }
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
39
|
}
|
|
@@ -44,10 +44,10 @@ extension THEOplayerRCTCastAPI {
|
|
|
44
44
|
let theView = self.bridge.uiManager.view(forReactTag: node) as! THEOplayerRCTView
|
|
45
45
|
if let cast = theView.cast(),
|
|
46
46
|
let chromecast = cast.chromecast {
|
|
47
|
-
if DEBUG_CAST_API {
|
|
47
|
+
if DEBUG_CAST_API { PrintUtils.printLog(logText: "[NATIVE] Starting chromecast session.") }
|
|
48
48
|
chromecast.start()
|
|
49
49
|
} else {
|
|
50
|
-
if DEBUG_CAST_API {
|
|
50
|
+
if DEBUG_CAST_API { PrintUtils.printLog(logText: "[NATIVE] Could not start chromecast session.") }
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
53
|
}
|
|
@@ -58,10 +58,10 @@ extension THEOplayerRCTCastAPI {
|
|
|
58
58
|
let theView = self.bridge.uiManager.view(forReactTag: node) as! THEOplayerRCTView
|
|
59
59
|
if let cast = theView.cast(),
|
|
60
60
|
let chromecast = cast.chromecast {
|
|
61
|
-
if DEBUG_CAST_API {
|
|
61
|
+
if DEBUG_CAST_API { PrintUtils.printLog(logText: "[NATIVE] Stopping chromecast session.") }
|
|
62
62
|
chromecast.stop()
|
|
63
63
|
} else {
|
|
64
|
-
if DEBUG_CAST_API {
|
|
64
|
+
if DEBUG_CAST_API { PrintUtils.printLog(logText: "[NATIVE] Could not stop chromecast session.") }
|
|
65
65
|
}
|
|
66
66
|
}
|
|
67
67
|
}
|
|
@@ -72,10 +72,10 @@ extension THEOplayerRCTCastAPI {
|
|
|
72
72
|
let theView = self.bridge.uiManager.view(forReactTag: node) as! THEOplayerRCTView
|
|
73
73
|
if let cast = theView.cast(),
|
|
74
74
|
let chromecast = cast.chromecast {
|
|
75
|
-
if DEBUG_CAST_API {
|
|
75
|
+
if DEBUG_CAST_API { PrintUtils.printLog(logText: "[NATIVE] Joining chromecast session.") }
|
|
76
76
|
chromecast.join()
|
|
77
77
|
} else {
|
|
78
|
-
if DEBUG_CAST_API {
|
|
78
|
+
if DEBUG_CAST_API { PrintUtils.printLog(logText: "[NATIVE] Could not join chromecast session.") }
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
81
|
}
|
|
@@ -86,10 +86,10 @@ extension THEOplayerRCTCastAPI {
|
|
|
86
86
|
let theView = self.bridge.uiManager.view(forReactTag: node) as! THEOplayerRCTView
|
|
87
87
|
if let cast = theView.cast(),
|
|
88
88
|
let chromecast = cast.chromecast {
|
|
89
|
-
if DEBUG_CAST_API {
|
|
89
|
+
if DEBUG_CAST_API { PrintUtils.printLog(logText: "[NATIVE] Leaving chromecast session.") }
|
|
90
90
|
chromecast.leave()
|
|
91
91
|
} else {
|
|
92
|
-
if DEBUG_CAST_API {
|
|
92
|
+
if DEBUG_CAST_API { PrintUtils.printLog(logText: "[NATIVE] Could not leave chromecast session.") }
|
|
93
93
|
}
|
|
94
94
|
}
|
|
95
95
|
}
|
|
@@ -35,7 +35,7 @@ class THEOplayerRCTCastAPI: NSObject, RCTBridgeModule {
|
|
|
35
35
|
resolve(cast.casting)
|
|
36
36
|
} else {
|
|
37
37
|
reject(ERROR_CODE_CAST_ACCESS_FAILURE, ERROR_MESSAGE_CAST_ACCESS_FAILURE, nil)
|
|
38
|
-
if DEBUG_CAST_API {
|
|
38
|
+
if DEBUG_CAST_API { PrintUtils.printLog(logText: "[NATIVE] Could not retrieve current casting status (cast module unavailable).") }
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
41
|
}
|
|
@@ -49,21 +49,21 @@ class THEOplayerRCTCastEventHandler {
|
|
|
49
49
|
#if os(iOS) && (CHROMECAST || canImport(THEOplayerGoogleCastIntegration))
|
|
50
50
|
// CHROMECAST STATE_CHANGE
|
|
51
51
|
self.chromecastStateChangeListener = player.cast?.chromecast?.addEventListener(type: ChromecastEventTypes.STATE_CHANGE) { [weak self] event in
|
|
52
|
-
if DEBUG_THEOPLAYER_EVENTS {
|
|
52
|
+
if DEBUG_THEOPLAYER_EVENTS { PrintUtils.printLog(logText: "[NATIVE] Received Chromecast STATE_CHANGE event from THEOplayer cast.chromecast") }
|
|
53
53
|
if let forwardedCastEvent = self?.onNativeCastEvent {
|
|
54
54
|
let newCastState = event.state._rawValue
|
|
55
|
-
if DEBUG_THEOPLAYER_EVENTS {
|
|
55
|
+
if DEBUG_THEOPLAYER_EVENTS { PrintUtils.printLog(logText: "[NATIVE] New Chromecast state: \(newCastState)") }
|
|
56
56
|
forwardedCastEvent([
|
|
57
57
|
CAST_EVENT_PROP_TYPE: EVENT_TYPE_CHROMECAST_STATE_CHANGE,
|
|
58
58
|
CAST_EVENT_PROP_STATE: newCastState
|
|
59
59
|
])
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
|
-
if DEBUG_EVENTHANDLER {
|
|
62
|
+
if DEBUG_EVENTHANDLER { PrintUtils.printLog(logText: "[NATIVE] Chromecast StateChange listener attached to THEOplayer cast.chromecast") }
|
|
63
63
|
|
|
64
64
|
// CHROMECAST ERROR
|
|
65
65
|
self.chromecastErrorListener = player.cast?.chromecast?.addEventListener(type: ChromecastEventTypes.ERROR) { [weak self] event in
|
|
66
|
-
if DEBUG_THEOPLAYER_EVENTS {
|
|
66
|
+
if DEBUG_THEOPLAYER_EVENTS { PrintUtils.printLog(logText: "[NATIVE] Received Chromecast ERROR event from THEOplayer cast.chromecast") }
|
|
67
67
|
if let forwardedCastEvent = self?.onNativeCastEvent {
|
|
68
68
|
let error = event.error
|
|
69
69
|
forwardedCastEvent([
|
|
@@ -75,23 +75,23 @@ class THEOplayerRCTCastEventHandler {
|
|
|
75
75
|
])
|
|
76
76
|
}
|
|
77
77
|
}
|
|
78
|
-
if DEBUG_EVENTHANDLER {
|
|
78
|
+
if DEBUG_EVENTHANDLER { PrintUtils.printLog(logText: "[NATIVE] Chromecast Error listener attached to THEOplayer cast.chromecast") }
|
|
79
79
|
#endif
|
|
80
80
|
|
|
81
81
|
#if os(iOS)
|
|
82
82
|
// AIRPLAY STATE_CHANGE
|
|
83
83
|
self.airplayStateChangeListener = player.cast?.airPlay?.addEventListener(type: AirPlayEventTypes.STATE_CHANGE) { [weak self] event in
|
|
84
|
-
if DEBUG_THEOPLAYER_EVENTS {
|
|
84
|
+
if DEBUG_THEOPLAYER_EVENTS { PrintUtils.printLog(logText: "[NATIVE] Received Airplay STATE_CHANGE event from THEOplayer cast.airplay") }
|
|
85
85
|
if let forwardedCastEvent = self?.onNativeCastEvent,
|
|
86
86
|
let castState = event.state {
|
|
87
|
-
if DEBUG_THEOPLAYER_EVENTS {
|
|
87
|
+
if DEBUG_THEOPLAYER_EVENTS { PrintUtils.printLog(logText: "[NATIVE] New Airplay state: \(castState)") }
|
|
88
88
|
forwardedCastEvent([
|
|
89
89
|
CAST_EVENT_PROP_TYPE: EVENT_TYPE_AIRPLAY_STATE_CHANGE,
|
|
90
90
|
CAST_EVENT_PROP_STATE: castState._rawValue
|
|
91
91
|
])
|
|
92
92
|
}
|
|
93
93
|
}
|
|
94
|
-
if DEBUG_EVENTHANDLER {
|
|
94
|
+
if DEBUG_EVENTHANDLER { PrintUtils.printLog(logText: "[NATIVE] Airplay StateChange listener attached to THEOplayer cast.airplay") }
|
|
95
95
|
#endif
|
|
96
96
|
}
|
|
97
97
|
|
|
@@ -105,11 +105,11 @@ class THEOplayerRCTCastEventHandler {
|
|
|
105
105
|
// CHROMECAST STATE_CHANGE
|
|
106
106
|
if let chromecastStateChangeListener = self.chromecastStateChangeListener {
|
|
107
107
|
player.cast?.chromecast?.removeEventListener(type: ChromecastEventTypes.STATE_CHANGE, listener: chromecastStateChangeListener)
|
|
108
|
-
if DEBUG_EVENTHANDLER {
|
|
108
|
+
if DEBUG_EVENTHANDLER { PrintUtils.printLog(logText: "[NATIVE] Chromecast StateChange listener dettached from THEOplayer cast.chromecast") }
|
|
109
109
|
}
|
|
110
110
|
if let chromecastErrorListener = self.chromecastErrorListener {
|
|
111
111
|
player.cast?.chromecast?.removeEventListener(type: ChromecastEventTypes.ERROR, listener: chromecastErrorListener)
|
|
112
|
-
if DEBUG_EVENTHANDLER {
|
|
112
|
+
if DEBUG_EVENTHANDLER { PrintUtils.printLog(logText: "[NATIVE] Chromecast Error listener dettached from THEOplayer cast.chromecast") }
|
|
113
113
|
}
|
|
114
114
|
#endif
|
|
115
115
|
|
|
@@ -117,7 +117,7 @@ class THEOplayerRCTCastEventHandler {
|
|
|
117
117
|
// AIRPLAY STATE_CHANGE
|
|
118
118
|
if let airplayStateChangeListener = self.airplayStateChangeListener {
|
|
119
119
|
player.cast?.airPlay?.removeEventListener(type: AirPlayEventTypes.STATE_CHANGE, listener: airplayStateChangeListener)
|
|
120
|
-
if DEBUG_EVENTHANDLER {
|
|
120
|
+
if DEBUG_EVENTHANDLER { PrintUtils.printLog(logText: "[NATIVE] Airplay StateChange listener dettached from THEOplayer cast.airplay") }
|
|
121
121
|
}
|
|
122
122
|
#endif
|
|
123
123
|
}
|
|
@@ -216,7 +216,7 @@ class THEOplayerRCTContentProtectionAPI: RCTEventEmitter {
|
|
|
216
216
|
if let responseError = error {
|
|
217
217
|
print(CPI_TAG, "Certificate request failure: error = \(responseError.localizedDescription)")
|
|
218
218
|
} else if statusCode >= 400 {
|
|
219
|
-
|
|
219
|
+
PrintUtils.printLog(logText: "Certificate request failure: statusCode = \(statusCode)")
|
|
220
220
|
} else {
|
|
221
221
|
if DEBUG_CONTENT_PROTECTION_API {print(CPI_TAG, "Certificate request success: statusCode = \(statusCode)") }
|
|
222
222
|
let certificateRequest = CertificateRequest(url: urlString, method: method, headers: headers, body: bodyData)
|
|
@@ -58,7 +58,7 @@ class THEOplayerRCTPipControlsManager: NSObject {
|
|
|
58
58
|
if let player = self.player,
|
|
59
59
|
let pip = player.pip {
|
|
60
60
|
pip.configure(configuration: self.newPipConfiguration())
|
|
61
|
-
if DEBUG_PIPCONTROLS {
|
|
61
|
+
if DEBUG_PIPCONTROLS { PrintUtils.printLog(logText: "[NATIVE] Pip controls updated for \(self.isLive ? "LIVE" : "VOD") (\(self.inAd ? "AD IS PLAYING" : "NO AD PLAYING")). (requiresLinearPlayback = \(self.isLive || self.inAd), canStartPictureInPictureAutomaticallyFromInline = \(self.pipConfig.canStartPictureInPictureAutomaticallyFromInline))") }
|
|
62
62
|
}
|
|
63
63
|
}
|
|
64
64
|
|
|
@@ -54,11 +54,7 @@ class THEOplayerAdapter extends _DefaultEventDispatcher.DefaultEventDispatcher {
|
|
|
54
54
|
_defineProperty(this, "_abrAdapter", void 0);
|
|
55
55
|
_defineProperty(this, "_textTrackStyleAdapter", void 0);
|
|
56
56
|
_defineProperty(this, "onSourceChange", () => {
|
|
57
|
-
|
|
58
|
-
this.play();
|
|
59
|
-
} else {
|
|
60
|
-
this.pause();
|
|
61
|
-
}
|
|
57
|
+
this.applyAutoplay();
|
|
62
58
|
});
|
|
63
59
|
_defineProperty(this, "onPause", () => {
|
|
64
60
|
this._state.paused = true;
|
|
@@ -192,15 +188,31 @@ class THEOplayerAdapter extends _DefaultEventDispatcher.DefaultEventDispatcher {
|
|
|
192
188
|
this.addEventListener(_reactNativeTheoplayer.PlayerEventType.MEDIA_TRACK_LIST, this.onMediaTrackList);
|
|
193
189
|
this.addEventListener(_reactNativeTheoplayer.PlayerEventType.PRESENTATIONMODE_CHANGE, this.onPresentationModeChange);
|
|
194
190
|
}
|
|
191
|
+
hasValidSource() {
|
|
192
|
+
return this._state.source !== undefined;
|
|
193
|
+
}
|
|
195
194
|
get abr() {
|
|
196
195
|
return _reactNative.Platform.OS === 'android' ? this._abrAdapter : undefined;
|
|
197
196
|
}
|
|
198
197
|
get ads() {
|
|
199
198
|
return this._adsAdapter;
|
|
200
199
|
}
|
|
200
|
+
applyAutoplay() {
|
|
201
|
+
if (!this.hasValidSource()) {
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
if (this._state.autoplay) {
|
|
205
|
+
this.play();
|
|
206
|
+
} else {
|
|
207
|
+
this.pause();
|
|
208
|
+
}
|
|
209
|
+
}
|
|
201
210
|
set autoplay(autoplay) {
|
|
202
211
|
this._state.autoplay = autoplay;
|
|
203
|
-
|
|
212
|
+
|
|
213
|
+
// Apply autoplay in case a source was already set.
|
|
214
|
+
// If autoplay is changed before setting a source, `onSourceChange` applies autoplay.
|
|
215
|
+
this.applyAutoplay();
|
|
204
216
|
}
|
|
205
217
|
get autoplay() {
|
|
206
218
|
return this._state.autoplay;
|
|
@@ -229,6 +241,9 @@ class THEOplayerAdapter extends _DefaultEventDispatcher.DefaultEventDispatcher {
|
|
|
229
241
|
return this._state.currentTime;
|
|
230
242
|
}
|
|
231
243
|
set currentTime(currentTime) {
|
|
244
|
+
if (!this.hasValidSource()) {
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
232
247
|
if (isNaN(currentTime)) {
|
|
233
248
|
return;
|
|
234
249
|
}
|
|
@@ -292,6 +307,9 @@ class THEOplayerAdapter extends _DefaultEventDispatcher.DefaultEventDispatcher {
|
|
|
292
307
|
return this._state.selectedAudioTrack;
|
|
293
308
|
}
|
|
294
309
|
set selectedAudioTrack(trackUid) {
|
|
310
|
+
if (!this.hasValidSource()) {
|
|
311
|
+
return;
|
|
312
|
+
}
|
|
295
313
|
this._state.selectedAudioTrack = trackUid;
|
|
296
314
|
_reactNative.NativeModules.PlayerModule.setSelectedAudioTrack(this._view.nativeHandle, trackUid || -1);
|
|
297
315
|
}
|
|
@@ -302,6 +320,9 @@ class THEOplayerAdapter extends _DefaultEventDispatcher.DefaultEventDispatcher {
|
|
|
302
320
|
return this._state.selectedVideoTrack;
|
|
303
321
|
}
|
|
304
322
|
set selectedVideoTrack(trackUid) {
|
|
323
|
+
if (!this.hasValidSource()) {
|
|
324
|
+
return;
|
|
325
|
+
}
|
|
305
326
|
this._state.selectedVideoTrack = trackUid;
|
|
306
327
|
this._state.targetVideoQuality = undefined;
|
|
307
328
|
_reactNative.NativeModules.PlayerModule.setSelectedVideoTrack(this._view.nativeHandle, trackUid || -1);
|
|
@@ -313,6 +334,9 @@ class THEOplayerAdapter extends _DefaultEventDispatcher.DefaultEventDispatcher {
|
|
|
313
334
|
return this._state.selectedTextTrack;
|
|
314
335
|
}
|
|
315
336
|
set selectedTextTrack(trackUid) {
|
|
337
|
+
if (!this.hasValidSource()) {
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
316
340
|
this._state.selectedTextTrack = trackUid;
|
|
317
341
|
this.textTracks.forEach(track => {
|
|
318
342
|
if (track.uid === trackUid) {
|
|
@@ -353,6 +377,9 @@ class THEOplayerAdapter extends _DefaultEventDispatcher.DefaultEventDispatcher {
|
|
|
353
377
|
return this._state.targetVideoQuality;
|
|
354
378
|
}
|
|
355
379
|
set targetVideoQuality(target) {
|
|
380
|
+
if (!this.hasValidSource()) {
|
|
381
|
+
return;
|
|
382
|
+
}
|
|
356
383
|
// Always pass an array for targetVideoQuality.
|
|
357
384
|
this._state.targetVideoQuality = !target ? [] : Array.isArray(target) ? target : [target];
|
|
358
385
|
|
|
@@ -381,12 +408,16 @@ class THEOplayerAdapter extends _DefaultEventDispatcher.DefaultEventDispatcher {
|
|
|
381
408
|
_reactNative.NativeModules.PlayerModule.setAspectRatio(this._view.nativeHandle, ratio);
|
|
382
409
|
}
|
|
383
410
|
pause() {
|
|
384
|
-
this.
|
|
385
|
-
|
|
411
|
+
if (this.hasValidSource()) {
|
|
412
|
+
this._state.paused = true;
|
|
413
|
+
_reactNative.NativeModules.PlayerModule.setPaused(this._view.nativeHandle, true);
|
|
414
|
+
}
|
|
386
415
|
}
|
|
387
416
|
play() {
|
|
388
|
-
this.
|
|
389
|
-
|
|
417
|
+
if (this.hasValidSource()) {
|
|
418
|
+
this._state.paused = false;
|
|
419
|
+
_reactNative.NativeModules.PlayerModule.setPaused(this._view.nativeHandle, false);
|
|
420
|
+
}
|
|
390
421
|
}
|
|
391
422
|
get nativeHandle() {
|
|
392
423
|
return this._view.nativeHandle;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_DefaultEventDispatcher","require","_reactNativeTheoplayer","_THEOplayerNativeAdsAdapter","_THEOplayerNativeCastAdapter","_AbrAdapter","_reactNative","_TextTrackStyleAdapter","_defineProperty","obj","key","value","_toPropertyKey","Object","defineProperty","enumerable","configurable","writable","arg","_toPrimitive","String","input","hint","prim","Symbol","toPrimitive","undefined","res","call","TypeError","Number","defaultPlayerState","source","autoplay","paused","seekable","buffered","pipConfig","startsAutomatically","backgroundAudioConfig","enabled","presentationMode","PresentationMode","inline","muted","seeking","volume","currentTime","duration","NaN","playbackRate","preload","aspectRatio","AspectRatio","FIT","audioTracks","videoTracks","textTracks","targetVideoQuality","selectedVideoTrack","selectedAudioTrack","selectedTextTrack","THEOplayerAdapter","DefaultEventDispatcher","constructor","view","initialState","arguments","length","_state","play","pause","event","_event$seekable","_event$buffered","sort","a","b","end","subType","track","TrackListEventType","ADD_TRACK","addTrack","REMOVE_TRACK","removeTrack","CHANGE_TRACK","trackType","trackUid","tracks","MediaTrackType","VIDEO","findMediaTrackByUid","MediaTrackEventType","ACTIVE_QUALITY_CHANGED","assign","activeQuality","qualities","isAudio","AUDIO","_view","_adsAdapter","THEOplayerNativeAdsAdapter","_castAdapter","THEOplayerNativeCastAdapter","_abrAdapter","AbrAdapter","_textTrackStyleAdapter","TextTrackStyleAdapter","addEventListener","PlayerEventType","SOURCE_CHANGE","onSourceChange","LOADED_METADATA","onLoadedMetadata","PAUSE","onPause","PLAYING","onPlaying","TIME_UPDATE","onTimeupdate","DURATION_CHANGE","onDurationChange","RATE_CHANGE","onRateChange","SEEKING","onSeeking","SEEKED","onSeeked","PROGRESS","onProgress","TEXT_TRACK_LIST","onTextTrackList","MEDIA_TRACK","onMediaTrack","MEDIA_TRACK_LIST","onMediaTrackList","PRESENTATIONMODE_CHANGE","onPresentationModeChange","abr","Platform","OS","ads","NativeModules","PlayerModule","setPaused","nativeHandle","type","setPreload","seekableEnd","ranges","cast","isNaN","seekTime","Infinity","setCurrentTime","pipConfiguration","setPipConfig","backgroundAudioConfiguration","setBackgroundAudioConfig","setPresentationMode","setMuted","setPlaybackRate","setSelectedAudioTrack","setSelectedVideoTrack","forEach","uid","mode","TextTrackMode","showing","disabled","setSelectedTextTrack","textTrackStyle","setSource","target","Array","isArray","targetQuality","setTargetVideoQuality","setVolume","ratio","setAspectRatio","initializeWithNativePlayerState_","state","init_","exports"],"sources":["THEOplayerAdapter.ts"],"sourcesContent":["import { DefaultEventDispatcher } from './event/DefaultEventDispatcher';\nimport type {\n ABRConfiguration,\n AdsAPI,\n CastAPI,\n DurationChangeEvent,\n LoadedMetadataEvent,\n MediaTrack,\n MediaTrackEvent,\n MediaTrackListEvent,\n NativeHandleType,\n PiPConfiguration,\n PlayerEventMap,\n PresentationModeChangeEvent,\n ProgressEvent,\n RateChangeEvent,\n SourceDescription,\n TextTrack,\n TextTrackListEvent,\n THEOplayer,\n THEOplayerView,\n TimeUpdateEvent,\n} from 'react-native-theoplayer';\nimport {\n addTrack,\n AspectRatio,\n findMediaTrackByUid,\n MediaTrackEventType,\n MediaTrackType,\n PlayerEventType,\n PreloadType,\n PresentationMode,\n removeTrack,\n TextTrackMode,\n TextTrackStyle,\n TrackListEventType,\n} from 'react-native-theoplayer';\nimport { THEOplayerNativeAdsAdapter } from './ads/THEOplayerNativeAdsAdapter';\nimport { THEOplayerNativeCastAdapter } from './cast/THEOplayerNativeCastAdapter';\nimport { AbrAdapter } from './abr/AbrAdapter';\nimport { NativeModules, Platform } from 'react-native';\nimport { TextTrackStyleAdapter } from './track/TextTrackStyleAdapter';\nimport type { BackgroundAudioConfiguration } from 'src/api/backgroundAudio/BackgroundAudioConfiguration';\nimport type { NativePlayerState } from './NativePlayerState';\n\nconst defaultPlayerState: NativePlayerState = {\n source: undefined,\n autoplay: false,\n paused: false,\n seekable: [],\n buffered: [],\n pipConfig: { startsAutomatically: false },\n backgroundAudioConfig: { enabled: false },\n presentationMode: PresentationMode.inline,\n muted: false,\n seeking: false,\n volume: 1,\n currentTime: 0,\n duration: NaN,\n playbackRate: 1,\n preload: 'none',\n aspectRatio: AspectRatio.FIT,\n audioTracks: [],\n videoTracks: [],\n textTracks: [],\n targetVideoQuality: undefined,\n selectedVideoTrack: undefined,\n selectedAudioTrack: undefined,\n selectedTextTrack: undefined,\n};\n\nexport class THEOplayerAdapter extends DefaultEventDispatcher<PlayerEventMap> implements THEOplayer {\n private readonly _view: THEOplayerView;\n private readonly _state: NativePlayerState;\n private readonly _adsAdapter: THEOplayerNativeAdsAdapter;\n private readonly _castAdapter: THEOplayerNativeCastAdapter;\n private readonly _abrAdapter: AbrAdapter;\n private readonly _textTrackStyleAdapter: TextTrackStyleAdapter;\n\n constructor(view: THEOplayerView, initialState: NativePlayerState = defaultPlayerState) {\n super();\n this._view = view;\n this._state = { ...initialState };\n this._adsAdapter = new THEOplayerNativeAdsAdapter(this._view);\n this._castAdapter = new THEOplayerNativeCastAdapter(this, this._view);\n this._abrAdapter = new AbrAdapter(this._view);\n this._textTrackStyleAdapter = new TextTrackStyleAdapter(this._view);\n\n this.addEventListener(PlayerEventType.SOURCE_CHANGE, this.onSourceChange);\n this.addEventListener(PlayerEventType.LOADED_METADATA, this.onLoadedMetadata);\n this.addEventListener(PlayerEventType.PAUSE, this.onPause);\n this.addEventListener(PlayerEventType.PLAYING, this.onPlaying);\n this.addEventListener(PlayerEventType.TIME_UPDATE, this.onTimeupdate);\n this.addEventListener(PlayerEventType.DURATION_CHANGE, this.onDurationChange);\n this.addEventListener(PlayerEventType.RATE_CHANGE, this.onRateChange);\n this.addEventListener(PlayerEventType.SEEKING, this.onSeeking);\n this.addEventListener(PlayerEventType.SEEKED, this.onSeeked);\n this.addEventListener(PlayerEventType.PROGRESS, this.onProgress);\n this.addEventListener(PlayerEventType.TEXT_TRACK_LIST, this.onTextTrackList);\n this.addEventListener(PlayerEventType.MEDIA_TRACK, this.onMediaTrack);\n this.addEventListener(PlayerEventType.MEDIA_TRACK_LIST, this.onMediaTrackList);\n this.addEventListener(PlayerEventType.PRESENTATIONMODE_CHANGE, this.onPresentationModeChange);\n }\n\n private onSourceChange = () => {\n if (this._state.autoplay) {\n this.play();\n } else {\n this.pause();\n }\n };\n\n private onPause = () => {\n this._state.paused = true;\n };\n\n private onPlaying = () => {\n this._state.paused = false;\n };\n\n private onPresentationModeChange = (event: PresentationModeChangeEvent) => {\n this._state.presentationMode = event.presentationMode;\n };\n\n private onTimeupdate = (event: TimeUpdateEvent) => {\n this._state.currentTime = event.currentTime;\n };\n\n private onLoadedMetadata = (event: LoadedMetadataEvent) => {\n this._state.duration = event.duration;\n this._state.audioTracks = event.audioTracks;\n this._state.videoTracks = event.videoTracks;\n this._state.textTracks = event.textTracks;\n this._state.selectedAudioTrack = event.selectedAudioTrack;\n this._state.selectedVideoTrack = event.selectedVideoTrack;\n this._state.selectedTextTrack = event.selectedTextTrack;\n };\n\n private onDurationChange = (event: DurationChangeEvent) => {\n this._state.duration = event.duration;\n };\n\n private onRateChange = (event: RateChangeEvent) => {\n this._state.playbackRate = event.playbackRate;\n };\n\n private onSeeking = () => {\n this._state.seeking = true;\n };\n\n private onSeeked = () => {\n this._state.seeking = false;\n };\n\n private onProgress = (event: ProgressEvent) => {\n this._state.seekable = event.seekable?.sort((a, b) => a.end - b.end);\n this._state.buffered = event.buffered?.sort((a, b) => a.end - b.end);\n };\n\n private onTextTrackList = (event: TextTrackListEvent) => {\n const { subType, track } = event;\n switch (subType) {\n case TrackListEventType.ADD_TRACK:\n this._state.textTracks = addTrack(this._state.textTracks, track);\n break;\n case TrackListEventType.REMOVE_TRACK:\n this._state.textTracks = removeTrack(this._state.textTracks, track);\n break;\n case TrackListEventType.CHANGE_TRACK:\n this._state.textTracks = removeTrack(this._state.textTracks, track);\n this._state.textTracks = addTrack(this._state.textTracks, track);\n break;\n }\n };\n\n private onMediaTrack = (event: MediaTrackEvent) => {\n const { subType, trackType, trackUid } = event;\n const tracks = trackType === MediaTrackType.VIDEO ? this._state.videoTracks : this._state.audioTracks;\n const track = findMediaTrackByUid(tracks, trackUid);\n switch (subType) {\n case MediaTrackEventType.ACTIVE_QUALITY_CHANGED:\n // Update local state\n if (track) {\n Object.assign(track, { ...track, activeQuality: event.qualities });\n }\n break;\n }\n };\n\n private onMediaTrackList = (event: MediaTrackListEvent) => {\n const { subType, trackType, track } = event;\n const isAudio = trackType === MediaTrackType.AUDIO;\n switch (subType) {\n case TrackListEventType.ADD_TRACK:\n if (isAudio) {\n this._state.audioTracks = addTrack(this._state.audioTracks, track);\n } else {\n this._state.videoTracks = addTrack(this._state.videoTracks, track);\n }\n break;\n case TrackListEventType.REMOVE_TRACK:\n if (isAudio) {\n this._state.audioTracks = removeTrack(this._state.audioTracks, track);\n } else {\n this._state.videoTracks = removeTrack(this._state.videoTracks, track);\n }\n break;\n case TrackListEventType.CHANGE_TRACK:\n if (isAudio) {\n this._state.audioTracks = removeTrack(this._state.audioTracks, track);\n this._state.audioTracks = addTrack(this._state.audioTracks, track);\n } else {\n this._state.videoTracks = removeTrack(this._state.videoTracks, track);\n this._state.videoTracks = addTrack(this._state.videoTracks, track);\n }\n break;\n }\n };\n\n get abr(): ABRConfiguration | undefined {\n return Platform.OS === 'android' ? this._abrAdapter : undefined;\n }\n\n get ads(): AdsAPI {\n return this._adsAdapter;\n }\n\n set autoplay(autoplay: boolean) {\n this._state.autoplay = autoplay;\n NativeModules.PlayerModule.setPaused(this._view.nativeHandle, !autoplay);\n }\n\n get autoplay(): boolean {\n return this._state.autoplay;\n }\n\n set preload(type: PreloadType) {\n this._state.preload = type;\n NativeModules.PlayerModule.setPreload(this._view.nativeHandle, type);\n }\n\n get preload(): PreloadType {\n return this._state.preload;\n }\n\n get seekable() {\n return this._state.seekable;\n }\n\n private seekableEnd(): number {\n const ranges = this.seekable;\n return ranges.length === 0 ? 0 : ranges[ranges.length - 1].end;\n }\n\n get buffered() {\n return this._state.buffered;\n }\n\n get cast(): CastAPI {\n return this._castAdapter;\n }\n\n get currentTime(): number {\n return this._state.currentTime;\n }\n\n set currentTime(currentTime: number) {\n if (isNaN(currentTime)) {\n return;\n }\n\n // Sanitise currentTime\n let seekTime = currentTime;\n if (currentTime === Infinity) {\n seekTime = this.seekableEnd();\n }\n\n this._state.currentTime = seekTime;\n NativeModules.PlayerModule.setCurrentTime(this._view.nativeHandle, seekTime);\n }\n\n get duration(): number {\n return this._state.duration;\n }\n\n get pipConfiguration(): PiPConfiguration {\n return this._state.pipConfig;\n }\n\n set pipConfiguration(pipConfiguration: PiPConfiguration) {\n this._state.pipConfig = pipConfiguration;\n NativeModules.PlayerModule.setPipConfig(this._view.nativeHandle, pipConfiguration);\n }\n\n get backgroundAudioConfiguration(): BackgroundAudioConfiguration {\n return this._state.backgroundAudioConfig;\n }\n\n set backgroundAudioConfiguration(backgroundAudioConfiguration: BackgroundAudioConfiguration) {\n this._state.backgroundAudioConfig = backgroundAudioConfiguration;\n NativeModules.PlayerModule.setBackgroundAudioConfig(this._view.nativeHandle, backgroundAudioConfiguration);\n }\n\n get presentationMode(): PresentationMode {\n return this._state.presentationMode;\n }\n\n set presentationMode(presentationMode: PresentationMode) {\n this._state.presentationMode = presentationMode;\n NativeModules.PlayerModule.setPresentationMode(this._view.nativeHandle, presentationMode);\n }\n\n get muted(): boolean {\n return this._state.muted;\n }\n\n set muted(muted: boolean) {\n this._state.muted = muted;\n NativeModules.PlayerModule.setMuted(this._view.nativeHandle, muted);\n }\n\n get seeking(): boolean {\n return this._state.seeking;\n }\n\n get paused(): boolean {\n return this._state.paused;\n }\n\n get playbackRate(): number {\n return this._state.playbackRate;\n }\n\n set playbackRate(playbackRate: number) {\n this._state.playbackRate = playbackRate;\n NativeModules.PlayerModule.setPlaybackRate(this._view.nativeHandle, playbackRate);\n }\n\n get audioTracks(): MediaTrack[] {\n return this._state.audioTracks;\n }\n\n get selectedAudioTrack(): number | undefined {\n return this._state.selectedAudioTrack;\n }\n\n set selectedAudioTrack(trackUid: number | undefined) {\n this._state.selectedAudioTrack = trackUid;\n NativeModules.PlayerModule.setSelectedAudioTrack(this._view.nativeHandle, trackUid || -1);\n }\n\n get videoTracks(): MediaTrack[] {\n return this._state.videoTracks;\n }\n\n get selectedVideoTrack(): number | undefined {\n return this._state.selectedVideoTrack;\n }\n\n set selectedVideoTrack(trackUid: number | undefined) {\n this._state.selectedVideoTrack = trackUid;\n this._state.targetVideoQuality = undefined;\n NativeModules.PlayerModule.setSelectedVideoTrack(this._view.nativeHandle, trackUid || -1);\n }\n\n get textTracks(): TextTrack[] {\n return this._state.textTracks;\n }\n\n get selectedTextTrack(): number | undefined {\n return this._state.selectedTextTrack;\n }\n\n set selectedTextTrack(trackUid: number | undefined) {\n this._state.selectedTextTrack = trackUid;\n this.textTracks.forEach((track) => {\n if (track.uid === trackUid) {\n track.mode = TextTrackMode.showing;\n } else if (track.mode === TextTrackMode.showing) {\n track.mode = TextTrackMode.disabled;\n }\n });\n NativeModules.PlayerModule.setSelectedTextTrack(this._view.nativeHandle, trackUid || -1);\n }\n\n get textTrackStyle(): TextTrackStyle {\n return this._textTrackStyleAdapter;\n }\n\n get source(): SourceDescription | undefined {\n return this._state.source;\n }\n\n set source(source: SourceDescription | undefined) {\n // This is to correctly reset autoplay during a source change.\n this.pause();\n this._state.source = source;\n NativeModules.PlayerModule.setSource(this._view.nativeHandle, source);\n // Reset state for play-out of new source\n Object.assign(this._state, {\n playbackRate: 1,\n seeking: false,\n audioTracks: [],\n videoTracks: [],\n textTracks: [],\n seekable: [],\n buffered: [],\n selectedTextTrack: undefined,\n selectedVideoTrack: undefined,\n selectedAudioTrack: undefined,\n targetVideoQuality: undefined,\n });\n }\n\n get targetVideoQuality(): number | number[] | undefined {\n return this._state.targetVideoQuality;\n }\n\n set targetVideoQuality(target: number | number[] | undefined) {\n // Always pass an array for targetVideoQuality.\n this._state.targetVideoQuality = !target ? [] : Array.isArray(target) ? target : [target];\n\n // Update local state\n const track = findMediaTrackByUid(this._state.videoTracks, this.selectedVideoTrack);\n if (track) {\n Object.assign(track, { ...track, targetQuality: this._state.targetVideoQuality });\n }\n NativeModules.PlayerModule.setTargetVideoQuality(this._view.nativeHandle, this._state.targetVideoQuality);\n }\n\n get volume(): number {\n return this._state.volume;\n }\n\n set volume(volume: number) {\n this._state.volume = volume;\n NativeModules.PlayerModule.setVolume(this._view.nativeHandle, volume);\n }\n\n get aspectRatio(): AspectRatio {\n return this._state.aspectRatio;\n }\n\n set aspectRatio(ratio: AspectRatio) {\n this._state.aspectRatio = ratio;\n NativeModules.PlayerModule.setAspectRatio(this._view.nativeHandle, ratio);\n }\n\n pause(): void {\n this._state.paused = true;\n NativeModules.PlayerModule.setPaused(this._view.nativeHandle, true);\n }\n\n play(): void {\n this._state.paused = false;\n NativeModules.PlayerModule.setPaused(this._view.nativeHandle, false);\n }\n\n get nativeHandle(): NativeHandleType {\n return this._view.nativeHandle;\n }\n\n initializeWithNativePlayerState_(state: NativePlayerState) {\n Object.assign(this._state, state);\n this._castAdapter.init_();\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_DefaultEventDispatcher","require","_reactNativeTheoplayer","_THEOplayerNativeAdsAdapter","_THEOplayerNativeCastAdapter","_AbrAdapter","_reactNative","_TextTrackStyleAdapter","_defineProperty","obj","key","value","_toPropertyKey","Object","defineProperty","enumerable","configurable","writable","arg","_toPrimitive","String","input","hint","prim","Symbol","toPrimitive","undefined","res","call","TypeError","Number","defaultPlayerState","source","autoplay","paused","seekable","buffered","pipConfig","startsAutomatically","backgroundAudioConfig","enabled","presentationMode","PresentationMode","inline","muted","seeking","volume","currentTime","duration","NaN","playbackRate","preload","aspectRatio","AspectRatio","FIT","audioTracks","videoTracks","textTracks","targetVideoQuality","selectedVideoTrack","selectedAudioTrack","selectedTextTrack","THEOplayerAdapter","DefaultEventDispatcher","constructor","view","initialState","arguments","length","applyAutoplay","_state","event","_event$seekable","_event$buffered","sort","a","b","end","subType","track","TrackListEventType","ADD_TRACK","addTrack","REMOVE_TRACK","removeTrack","CHANGE_TRACK","trackType","trackUid","tracks","MediaTrackType","VIDEO","findMediaTrackByUid","MediaTrackEventType","ACTIVE_QUALITY_CHANGED","assign","activeQuality","qualities","isAudio","AUDIO","_view","_adsAdapter","THEOplayerNativeAdsAdapter","_castAdapter","THEOplayerNativeCastAdapter","_abrAdapter","AbrAdapter","_textTrackStyleAdapter","TextTrackStyleAdapter","addEventListener","PlayerEventType","SOURCE_CHANGE","onSourceChange","LOADED_METADATA","onLoadedMetadata","PAUSE","onPause","PLAYING","onPlaying","TIME_UPDATE","onTimeupdate","DURATION_CHANGE","onDurationChange","RATE_CHANGE","onRateChange","SEEKING","onSeeking","SEEKED","onSeeked","PROGRESS","onProgress","TEXT_TRACK_LIST","onTextTrackList","MEDIA_TRACK","onMediaTrack","MEDIA_TRACK_LIST","onMediaTrackList","PRESENTATIONMODE_CHANGE","onPresentationModeChange","hasValidSource","abr","Platform","OS","ads","play","pause","type","NativeModules","PlayerModule","setPreload","nativeHandle","seekableEnd","ranges","cast","isNaN","seekTime","Infinity","setCurrentTime","pipConfiguration","setPipConfig","backgroundAudioConfiguration","setBackgroundAudioConfig","setPresentationMode","setMuted","setPlaybackRate","setSelectedAudioTrack","setSelectedVideoTrack","forEach","uid","mode","TextTrackMode","showing","disabled","setSelectedTextTrack","textTrackStyle","setSource","target","Array","isArray","targetQuality","setTargetVideoQuality","setVolume","ratio","setAspectRatio","setPaused","initializeWithNativePlayerState_","state","init_","exports"],"sources":["THEOplayerAdapter.ts"],"sourcesContent":["import { DefaultEventDispatcher } from './event/DefaultEventDispatcher';\nimport type {\n ABRConfiguration,\n AdsAPI,\n CastAPI,\n DurationChangeEvent,\n LoadedMetadataEvent,\n MediaTrack,\n MediaTrackEvent,\n MediaTrackListEvent,\n NativeHandleType,\n PiPConfiguration,\n PlayerEventMap,\n PresentationModeChangeEvent,\n ProgressEvent,\n RateChangeEvent,\n SourceDescription,\n TextTrack,\n TextTrackListEvent,\n THEOplayer,\n THEOplayerView,\n TimeUpdateEvent,\n} from 'react-native-theoplayer';\nimport {\n addTrack,\n AspectRatio,\n findMediaTrackByUid,\n MediaTrackEventType,\n MediaTrackType,\n PlayerEventType,\n PreloadType,\n PresentationMode,\n removeTrack,\n TextTrackMode,\n TextTrackStyle,\n TrackListEventType,\n} from 'react-native-theoplayer';\nimport { THEOplayerNativeAdsAdapter } from './ads/THEOplayerNativeAdsAdapter';\nimport { THEOplayerNativeCastAdapter } from './cast/THEOplayerNativeCastAdapter';\nimport { AbrAdapter } from './abr/AbrAdapter';\nimport { NativeModules, Platform } from 'react-native';\nimport { TextTrackStyleAdapter } from './track/TextTrackStyleAdapter';\nimport type { BackgroundAudioConfiguration } from 'src/api/backgroundAudio/BackgroundAudioConfiguration';\nimport type { NativePlayerState } from './NativePlayerState';\n\nconst defaultPlayerState: NativePlayerState = {\n source: undefined,\n autoplay: false,\n paused: false,\n seekable: [],\n buffered: [],\n pipConfig: { startsAutomatically: false },\n backgroundAudioConfig: { enabled: false },\n presentationMode: PresentationMode.inline,\n muted: false,\n seeking: false,\n volume: 1,\n currentTime: 0,\n duration: NaN,\n playbackRate: 1,\n preload: 'none',\n aspectRatio: AspectRatio.FIT,\n audioTracks: [],\n videoTracks: [],\n textTracks: [],\n targetVideoQuality: undefined,\n selectedVideoTrack: undefined,\n selectedAudioTrack: undefined,\n selectedTextTrack: undefined,\n};\n\nexport class THEOplayerAdapter extends DefaultEventDispatcher<PlayerEventMap> implements THEOplayer {\n private readonly _view: THEOplayerView;\n private readonly _state: NativePlayerState;\n private readonly _adsAdapter: THEOplayerNativeAdsAdapter;\n private readonly _castAdapter: THEOplayerNativeCastAdapter;\n private readonly _abrAdapter: AbrAdapter;\n private readonly _textTrackStyleAdapter: TextTrackStyleAdapter;\n\n constructor(view: THEOplayerView, initialState: NativePlayerState = defaultPlayerState) {\n super();\n this._view = view;\n this._state = { ...initialState };\n this._adsAdapter = new THEOplayerNativeAdsAdapter(this._view);\n this._castAdapter = new THEOplayerNativeCastAdapter(this, this._view);\n this._abrAdapter = new AbrAdapter(this._view);\n this._textTrackStyleAdapter = new TextTrackStyleAdapter(this._view);\n\n this.addEventListener(PlayerEventType.SOURCE_CHANGE, this.onSourceChange);\n this.addEventListener(PlayerEventType.LOADED_METADATA, this.onLoadedMetadata);\n this.addEventListener(PlayerEventType.PAUSE, this.onPause);\n this.addEventListener(PlayerEventType.PLAYING, this.onPlaying);\n this.addEventListener(PlayerEventType.TIME_UPDATE, this.onTimeupdate);\n this.addEventListener(PlayerEventType.DURATION_CHANGE, this.onDurationChange);\n this.addEventListener(PlayerEventType.RATE_CHANGE, this.onRateChange);\n this.addEventListener(PlayerEventType.SEEKING, this.onSeeking);\n this.addEventListener(PlayerEventType.SEEKED, this.onSeeked);\n this.addEventListener(PlayerEventType.PROGRESS, this.onProgress);\n this.addEventListener(PlayerEventType.TEXT_TRACK_LIST, this.onTextTrackList);\n this.addEventListener(PlayerEventType.MEDIA_TRACK, this.onMediaTrack);\n this.addEventListener(PlayerEventType.MEDIA_TRACK_LIST, this.onMediaTrackList);\n this.addEventListener(PlayerEventType.PRESENTATIONMODE_CHANGE, this.onPresentationModeChange);\n }\n\n private onSourceChange = () => {\n this.applyAutoplay();\n };\n\n private hasValidSource(): boolean {\n return this._state.source !== undefined;\n }\n\n private onPause = () => {\n this._state.paused = true;\n };\n\n private onPlaying = () => {\n this._state.paused = false;\n };\n\n private onPresentationModeChange = (event: PresentationModeChangeEvent) => {\n this._state.presentationMode = event.presentationMode;\n };\n\n private onTimeupdate = (event: TimeUpdateEvent) => {\n this._state.currentTime = event.currentTime;\n };\n\n private onLoadedMetadata = (event: LoadedMetadataEvent) => {\n this._state.duration = event.duration;\n this._state.audioTracks = event.audioTracks;\n this._state.videoTracks = event.videoTracks;\n this._state.textTracks = event.textTracks;\n this._state.selectedAudioTrack = event.selectedAudioTrack;\n this._state.selectedVideoTrack = event.selectedVideoTrack;\n this._state.selectedTextTrack = event.selectedTextTrack;\n };\n\n private onDurationChange = (event: DurationChangeEvent) => {\n this._state.duration = event.duration;\n };\n\n private onRateChange = (event: RateChangeEvent) => {\n this._state.playbackRate = event.playbackRate;\n };\n\n private onSeeking = () => {\n this._state.seeking = true;\n };\n\n private onSeeked = () => {\n this._state.seeking = false;\n };\n\n private onProgress = (event: ProgressEvent) => {\n this._state.seekable = event.seekable?.sort((a, b) => a.end - b.end);\n this._state.buffered = event.buffered?.sort((a, b) => a.end - b.end);\n };\n\n private onTextTrackList = (event: TextTrackListEvent) => {\n const { subType, track } = event;\n switch (subType) {\n case TrackListEventType.ADD_TRACK:\n this._state.textTracks = addTrack(this._state.textTracks, track);\n break;\n case TrackListEventType.REMOVE_TRACK:\n this._state.textTracks = removeTrack(this._state.textTracks, track);\n break;\n case TrackListEventType.CHANGE_TRACK:\n this._state.textTracks = removeTrack(this._state.textTracks, track);\n this._state.textTracks = addTrack(this._state.textTracks, track);\n break;\n }\n };\n\n private onMediaTrack = (event: MediaTrackEvent) => {\n const { subType, trackType, trackUid } = event;\n const tracks = trackType === MediaTrackType.VIDEO ? this._state.videoTracks : this._state.audioTracks;\n const track = findMediaTrackByUid(tracks, trackUid);\n switch (subType) {\n case MediaTrackEventType.ACTIVE_QUALITY_CHANGED:\n // Update local state\n if (track) {\n Object.assign(track, { ...track, activeQuality: event.qualities });\n }\n break;\n }\n };\n\n private onMediaTrackList = (event: MediaTrackListEvent) => {\n const { subType, trackType, track } = event;\n const isAudio = trackType === MediaTrackType.AUDIO;\n switch (subType) {\n case TrackListEventType.ADD_TRACK:\n if (isAudio) {\n this._state.audioTracks = addTrack(this._state.audioTracks, track);\n } else {\n this._state.videoTracks = addTrack(this._state.videoTracks, track);\n }\n break;\n case TrackListEventType.REMOVE_TRACK:\n if (isAudio) {\n this._state.audioTracks = removeTrack(this._state.audioTracks, track);\n } else {\n this._state.videoTracks = removeTrack(this._state.videoTracks, track);\n }\n break;\n case TrackListEventType.CHANGE_TRACK:\n if (isAudio) {\n this._state.audioTracks = removeTrack(this._state.audioTracks, track);\n this._state.audioTracks = addTrack(this._state.audioTracks, track);\n } else {\n this._state.videoTracks = removeTrack(this._state.videoTracks, track);\n this._state.videoTracks = addTrack(this._state.videoTracks, track);\n }\n break;\n }\n };\n\n get abr(): ABRConfiguration | undefined {\n return Platform.OS === 'android' ? this._abrAdapter : undefined;\n }\n\n get ads(): AdsAPI {\n return this._adsAdapter;\n }\n\n private applyAutoplay() {\n if (!this.hasValidSource()) {\n return;\n }\n if (this._state.autoplay) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n set autoplay(autoplay: boolean) {\n this._state.autoplay = autoplay;\n\n // Apply autoplay in case a source was already set.\n // If autoplay is changed before setting a source, `onSourceChange` applies autoplay.\n this.applyAutoplay();\n }\n\n get autoplay(): boolean {\n return this._state.autoplay;\n }\n\n set preload(type: PreloadType) {\n this._state.preload = type;\n NativeModules.PlayerModule.setPreload(this._view.nativeHandle, type);\n }\n\n get preload(): PreloadType {\n return this._state.preload;\n }\n\n get seekable() {\n return this._state.seekable;\n }\n\n private seekableEnd(): number {\n const ranges = this.seekable;\n return ranges.length === 0 ? 0 : ranges[ranges.length - 1].end;\n }\n\n get buffered() {\n return this._state.buffered;\n }\n\n get cast(): CastAPI {\n return this._castAdapter;\n }\n\n get currentTime(): number {\n return this._state.currentTime;\n }\n\n set currentTime(currentTime: number) {\n if (!this.hasValidSource()) {\n return;\n }\n\n if (isNaN(currentTime)) {\n return;\n }\n\n // Sanitise currentTime\n let seekTime = currentTime;\n if (currentTime === Infinity) {\n seekTime = this.seekableEnd();\n }\n\n this._state.currentTime = seekTime;\n NativeModules.PlayerModule.setCurrentTime(this._view.nativeHandle, seekTime);\n }\n\n get duration(): number {\n return this._state.duration;\n }\n\n get pipConfiguration(): PiPConfiguration {\n return this._state.pipConfig;\n }\n\n set pipConfiguration(pipConfiguration: PiPConfiguration) {\n this._state.pipConfig = pipConfiguration;\n NativeModules.PlayerModule.setPipConfig(this._view.nativeHandle, pipConfiguration);\n }\n\n get backgroundAudioConfiguration(): BackgroundAudioConfiguration {\n return this._state.backgroundAudioConfig;\n }\n\n set backgroundAudioConfiguration(backgroundAudioConfiguration: BackgroundAudioConfiguration) {\n this._state.backgroundAudioConfig = backgroundAudioConfiguration;\n NativeModules.PlayerModule.setBackgroundAudioConfig(this._view.nativeHandle, backgroundAudioConfiguration);\n }\n\n get presentationMode(): PresentationMode {\n return this._state.presentationMode;\n }\n\n set presentationMode(presentationMode: PresentationMode) {\n this._state.presentationMode = presentationMode;\n NativeModules.PlayerModule.setPresentationMode(this._view.nativeHandle, presentationMode);\n }\n\n get muted(): boolean {\n return this._state.muted;\n }\n\n set muted(muted: boolean) {\n this._state.muted = muted;\n NativeModules.PlayerModule.setMuted(this._view.nativeHandle, muted);\n }\n\n get seeking(): boolean {\n return this._state.seeking;\n }\n\n get paused(): boolean {\n return this._state.paused;\n }\n\n get playbackRate(): number {\n return this._state.playbackRate;\n }\n\n set playbackRate(playbackRate: number) {\n this._state.playbackRate = playbackRate;\n NativeModules.PlayerModule.setPlaybackRate(this._view.nativeHandle, playbackRate);\n }\n\n get audioTracks(): MediaTrack[] {\n return this._state.audioTracks;\n }\n\n get selectedAudioTrack(): number | undefined {\n return this._state.selectedAudioTrack;\n }\n\n set selectedAudioTrack(trackUid: number | undefined) {\n if (!this.hasValidSource()) {\n return;\n }\n this._state.selectedAudioTrack = trackUid;\n NativeModules.PlayerModule.setSelectedAudioTrack(this._view.nativeHandle, trackUid || -1);\n }\n\n get videoTracks(): MediaTrack[] {\n return this._state.videoTracks;\n }\n\n get selectedVideoTrack(): number | undefined {\n return this._state.selectedVideoTrack;\n }\n\n set selectedVideoTrack(trackUid: number | undefined) {\n if (!this.hasValidSource()) {\n return;\n }\n this._state.selectedVideoTrack = trackUid;\n this._state.targetVideoQuality = undefined;\n NativeModules.PlayerModule.setSelectedVideoTrack(this._view.nativeHandle, trackUid || -1);\n }\n\n get textTracks(): TextTrack[] {\n return this._state.textTracks;\n }\n\n get selectedTextTrack(): number | undefined {\n return this._state.selectedTextTrack;\n }\n\n set selectedTextTrack(trackUid: number | undefined) {\n if (!this.hasValidSource()) {\n return;\n }\n this._state.selectedTextTrack = trackUid;\n this.textTracks.forEach((track) => {\n if (track.uid === trackUid) {\n track.mode = TextTrackMode.showing;\n } else if (track.mode === TextTrackMode.showing) {\n track.mode = TextTrackMode.disabled;\n }\n });\n NativeModules.PlayerModule.setSelectedTextTrack(this._view.nativeHandle, trackUid || -1);\n }\n\n get textTrackStyle(): TextTrackStyle {\n return this._textTrackStyleAdapter;\n }\n\n get source(): SourceDescription | undefined {\n return this._state.source;\n }\n\n set source(source: SourceDescription | undefined) {\n // This is to correctly reset autoplay during a source change.\n this.pause();\n this._state.source = source;\n NativeModules.PlayerModule.setSource(this._view.nativeHandle, source);\n // Reset state for play-out of new source\n Object.assign(this._state, {\n playbackRate: 1,\n seeking: false,\n audioTracks: [],\n videoTracks: [],\n textTracks: [],\n seekable: [],\n buffered: [],\n selectedTextTrack: undefined,\n selectedVideoTrack: undefined,\n selectedAudioTrack: undefined,\n targetVideoQuality: undefined,\n });\n }\n\n get targetVideoQuality(): number | number[] | undefined {\n return this._state.targetVideoQuality;\n }\n\n set targetVideoQuality(target: number | number[] | undefined) {\n if (!this.hasValidSource()) {\n return;\n }\n // Always pass an array for targetVideoQuality.\n this._state.targetVideoQuality = !target ? [] : Array.isArray(target) ? target : [target];\n\n // Update local state\n const track = findMediaTrackByUid(this._state.videoTracks, this.selectedVideoTrack);\n if (track) {\n Object.assign(track, { ...track, targetQuality: this._state.targetVideoQuality });\n }\n NativeModules.PlayerModule.setTargetVideoQuality(this._view.nativeHandle, this._state.targetVideoQuality);\n }\n\n get volume(): number {\n return this._state.volume;\n }\n\n set volume(volume: number) {\n this._state.volume = volume;\n NativeModules.PlayerModule.setVolume(this._view.nativeHandle, volume);\n }\n\n get aspectRatio(): AspectRatio {\n return this._state.aspectRatio;\n }\n\n set aspectRatio(ratio: AspectRatio) {\n this._state.aspectRatio = ratio;\n NativeModules.PlayerModule.setAspectRatio(this._view.nativeHandle, ratio);\n }\n\n pause(): void {\n if (this.hasValidSource()) {\n this._state.paused = true;\n NativeModules.PlayerModule.setPaused(this._view.nativeHandle, true);\n }\n }\n\n play(): void {\n if (this.hasValidSource()) {\n this._state.paused = false;\n NativeModules.PlayerModule.setPaused(this._view.nativeHandle, false);\n }\n }\n\n get nativeHandle(): NativeHandleType {\n return this._view.nativeHandle;\n }\n\n initializeWithNativePlayerState_(state: NativePlayerState) {\n Object.assign(this._state, state);\n this._castAdapter.init_();\n }\n}\n"],"mappings":"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"}
|
|
@@ -48,11 +48,7 @@ export class THEOplayerAdapter extends DefaultEventDispatcher {
|
|
|
48
48
|
_defineProperty(this, "_abrAdapter", void 0);
|
|
49
49
|
_defineProperty(this, "_textTrackStyleAdapter", void 0);
|
|
50
50
|
_defineProperty(this, "onSourceChange", () => {
|
|
51
|
-
|
|
52
|
-
this.play();
|
|
53
|
-
} else {
|
|
54
|
-
this.pause();
|
|
55
|
-
}
|
|
51
|
+
this.applyAutoplay();
|
|
56
52
|
});
|
|
57
53
|
_defineProperty(this, "onPause", () => {
|
|
58
54
|
this._state.paused = true;
|
|
@@ -186,15 +182,31 @@ export class THEOplayerAdapter extends DefaultEventDispatcher {
|
|
|
186
182
|
this.addEventListener(PlayerEventType.MEDIA_TRACK_LIST, this.onMediaTrackList);
|
|
187
183
|
this.addEventListener(PlayerEventType.PRESENTATIONMODE_CHANGE, this.onPresentationModeChange);
|
|
188
184
|
}
|
|
185
|
+
hasValidSource() {
|
|
186
|
+
return this._state.source !== undefined;
|
|
187
|
+
}
|
|
189
188
|
get abr() {
|
|
190
189
|
return Platform.OS === 'android' ? this._abrAdapter : undefined;
|
|
191
190
|
}
|
|
192
191
|
get ads() {
|
|
193
192
|
return this._adsAdapter;
|
|
194
193
|
}
|
|
194
|
+
applyAutoplay() {
|
|
195
|
+
if (!this.hasValidSource()) {
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
if (this._state.autoplay) {
|
|
199
|
+
this.play();
|
|
200
|
+
} else {
|
|
201
|
+
this.pause();
|
|
202
|
+
}
|
|
203
|
+
}
|
|
195
204
|
set autoplay(autoplay) {
|
|
196
205
|
this._state.autoplay = autoplay;
|
|
197
|
-
|
|
206
|
+
|
|
207
|
+
// Apply autoplay in case a source was already set.
|
|
208
|
+
// If autoplay is changed before setting a source, `onSourceChange` applies autoplay.
|
|
209
|
+
this.applyAutoplay();
|
|
198
210
|
}
|
|
199
211
|
get autoplay() {
|
|
200
212
|
return this._state.autoplay;
|
|
@@ -223,6 +235,9 @@ export class THEOplayerAdapter extends DefaultEventDispatcher {
|
|
|
223
235
|
return this._state.currentTime;
|
|
224
236
|
}
|
|
225
237
|
set currentTime(currentTime) {
|
|
238
|
+
if (!this.hasValidSource()) {
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
226
241
|
if (isNaN(currentTime)) {
|
|
227
242
|
return;
|
|
228
243
|
}
|
|
@@ -286,6 +301,9 @@ export class THEOplayerAdapter extends DefaultEventDispatcher {
|
|
|
286
301
|
return this._state.selectedAudioTrack;
|
|
287
302
|
}
|
|
288
303
|
set selectedAudioTrack(trackUid) {
|
|
304
|
+
if (!this.hasValidSource()) {
|
|
305
|
+
return;
|
|
306
|
+
}
|
|
289
307
|
this._state.selectedAudioTrack = trackUid;
|
|
290
308
|
NativeModules.PlayerModule.setSelectedAudioTrack(this._view.nativeHandle, trackUid || -1);
|
|
291
309
|
}
|
|
@@ -296,6 +314,9 @@ export class THEOplayerAdapter extends DefaultEventDispatcher {
|
|
|
296
314
|
return this._state.selectedVideoTrack;
|
|
297
315
|
}
|
|
298
316
|
set selectedVideoTrack(trackUid) {
|
|
317
|
+
if (!this.hasValidSource()) {
|
|
318
|
+
return;
|
|
319
|
+
}
|
|
299
320
|
this._state.selectedVideoTrack = trackUid;
|
|
300
321
|
this._state.targetVideoQuality = undefined;
|
|
301
322
|
NativeModules.PlayerModule.setSelectedVideoTrack(this._view.nativeHandle, trackUid || -1);
|
|
@@ -307,6 +328,9 @@ export class THEOplayerAdapter extends DefaultEventDispatcher {
|
|
|
307
328
|
return this._state.selectedTextTrack;
|
|
308
329
|
}
|
|
309
330
|
set selectedTextTrack(trackUid) {
|
|
331
|
+
if (!this.hasValidSource()) {
|
|
332
|
+
return;
|
|
333
|
+
}
|
|
310
334
|
this._state.selectedTextTrack = trackUid;
|
|
311
335
|
this.textTracks.forEach(track => {
|
|
312
336
|
if (track.uid === trackUid) {
|
|
@@ -347,6 +371,9 @@ export class THEOplayerAdapter extends DefaultEventDispatcher {
|
|
|
347
371
|
return this._state.targetVideoQuality;
|
|
348
372
|
}
|
|
349
373
|
set targetVideoQuality(target) {
|
|
374
|
+
if (!this.hasValidSource()) {
|
|
375
|
+
return;
|
|
376
|
+
}
|
|
350
377
|
// Always pass an array for targetVideoQuality.
|
|
351
378
|
this._state.targetVideoQuality = !target ? [] : Array.isArray(target) ? target : [target];
|
|
352
379
|
|
|
@@ -375,12 +402,16 @@ export class THEOplayerAdapter extends DefaultEventDispatcher {
|
|
|
375
402
|
NativeModules.PlayerModule.setAspectRatio(this._view.nativeHandle, ratio);
|
|
376
403
|
}
|
|
377
404
|
pause() {
|
|
378
|
-
this.
|
|
379
|
-
|
|
405
|
+
if (this.hasValidSource()) {
|
|
406
|
+
this._state.paused = true;
|
|
407
|
+
NativeModules.PlayerModule.setPaused(this._view.nativeHandle, true);
|
|
408
|
+
}
|
|
380
409
|
}
|
|
381
410
|
play() {
|
|
382
|
-
this.
|
|
383
|
-
|
|
411
|
+
if (this.hasValidSource()) {
|
|
412
|
+
this._state.paused = false;
|
|
413
|
+
NativeModules.PlayerModule.setPaused(this._view.nativeHandle, false);
|
|
414
|
+
}
|
|
384
415
|
}
|
|
385
416
|
get nativeHandle() {
|
|
386
417
|
return this._view.nativeHandle;
|