react-native-theoplayer 10.0.0 → 10.2.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 +31 -0
- package/android/build.gradle +5 -6
- package/android/src/main/AndroidManifest.xml +1 -1
- package/android/src/main/java/com/theoplayer/PlayerEventEmitter.kt +21 -9
- package/android/src/main/java/com/theoplayer/cache/CacheModule.kt +8 -9
- package/android/src/main/java/com/theoplayer/cast/CastEventAdapter.kt +11 -7
- package/android/src/main/java/com/theoplayer/media/ConditionalMediaButtonReceiver.kt +38 -0
- package/android/src/main/java/com/theoplayer/player/PlayerModule.kt +1 -1
- package/android/src/main/java/com/theoplayer/source/SourceAdapter.kt +1 -1
- package/android/src/main/java/com/theoplayer/theoads/THEOadsAdapter.kt +10 -1
- package/android/src/main/java/com/theoplayer/theoads/THEOadsEventAdapter.kt +6 -3
- package/android/src/main/java/com/theoplayer/theoads/THEOadsModule.kt +14 -0
- package/android/src/main/java/com/theoplayer/theolive/THEOliveEventAdapter.kt +21 -8
- package/android/src/main/java/com/theoplayer/theolive/THEOliveModule.kt +1 -1
- package/android/src/main/java/com/theoplayer/track/TextTrackStyleAdapter.kt +8 -1
- package/android/src/main/java/com/theoplayer/util/PayloadBuilder.kt +8 -0
- package/ios/THEOplayerRCTBridge.m +8 -1
- package/ios/THEOplayerRCTMainEventHandler.swift +24 -21
- package/ios/THEOplayerRCTPlayerAPI.swift +9 -0
- package/ios/THEOplayerRCTView.swift +19 -4
- package/ios/backgroundAudio/THEOplayerRCTNowPlayingManager.swift +96 -50
- package/ios/backgroundAudio/THEOplayerRCTRemoteCommandsManager.swift +0 -1
- package/ios/casting/THEOplayerRCTCastEventHandler.swift +1 -1
- package/ios/presentationMode/THEOplayerRCTPresentationModeManager.swift +26 -8
- package/ios/theoAds/THEOplayerRCTTHEOAdsAPI.swift +19 -0
- package/ios/theoAds/THEOplayerRCTTHEOAdsEventAdapter.swift +4 -2
- package/lib/commonjs/api/cache/hooks/useCachingTaskList.js +1 -1
- package/lib/commonjs/api/cache/hooks/useCachingTaskList.js.map +1 -1
- package/lib/commonjs/api/cache/hooks/useCachingTaskProgress.js +1 -1
- package/lib/commonjs/api/cache/hooks/useCachingTaskProgress.js.map +1 -1
- package/lib/commonjs/api/cache/hooks/useCachingTaskStatus.js +1 -1
- package/lib/commonjs/api/cache/hooks/useCachingTaskStatus.js.map +1 -1
- package/lib/commonjs/api/event/PlayerEvent.js +16 -0
- package/lib/commonjs/api/event/PlayerEvent.js.map +1 -1
- package/lib/commonjs/api/player/PlayerEventMap.js +2 -0
- package/lib/commonjs/api/player/PlayerEventMap.js.map +1 -1
- package/lib/commonjs/api/track/Quality.js +37 -0
- package/lib/commonjs/api/track/Quality.js.map +1 -1
- package/lib/commonjs/api/track/TextTrackStyle.js.map +1 -1
- package/lib/commonjs/internal/THEOplayerView.js +14 -4
- package/lib/commonjs/internal/THEOplayerView.js.map +1 -1
- package/lib/commonjs/internal/THEOplayerView.web.js +6 -7
- package/lib/commonjs/internal/THEOplayerView.web.js.map +1 -1
- package/lib/commonjs/internal/adapter/DefaultNativePlayerState.js +2 -0
- package/lib/commonjs/internal/adapter/DefaultNativePlayerState.js.map +1 -1
- package/lib/commonjs/internal/adapter/THEOplayerAdapter.js +35 -9
- package/lib/commonjs/internal/adapter/THEOplayerAdapter.js.map +1 -1
- package/lib/commonjs/internal/adapter/THEOplayerWebAdapter.js +21 -1
- package/lib/commonjs/internal/adapter/THEOplayerWebAdapter.js.map +1 -1
- package/lib/commonjs/internal/adapter/WebEventForwarder.js +7 -0
- package/lib/commonjs/internal/adapter/WebEventForwarder.js.map +1 -1
- package/lib/commonjs/internal/adapter/event/PlayerEvents.js +21 -1
- package/lib/commonjs/internal/adapter/event/PlayerEvents.js.map +1 -1
- package/lib/commonjs/internal/adapter/event/native/NativeTheoAdsEvent.js +4 -3
- package/lib/commonjs/internal/adapter/event/native/NativeTheoAdsEvent.js.map +1 -1
- package/lib/commonjs/internal/adapter/theoads/NativeInterstitialAdapter.js +68 -0
- package/lib/commonjs/internal/adapter/theoads/NativeInterstitialAdapter.js.map +1 -0
- package/lib/commonjs/internal/adapter/theoads/THEOAdsNativeAdapter.js +11 -2
- package/lib/commonjs/internal/adapter/theoads/THEOAdsNativeAdapter.js.map +1 -1
- package/lib/commonjs/internal/adapter/theolive/TheoLiveNativeAdapter.js.map +1 -1
- package/lib/commonjs/internal/adapter/track/TextTrackStyleAdapter.js +10 -0
- package/lib/commonjs/internal/adapter/track/TextTrackStyleAdapter.js.map +1 -1
- package/lib/commonjs/internal/utils/TypeUtils.js +4 -1
- package/lib/commonjs/internal/utils/TypeUtils.js.map +1 -1
- package/lib/commonjs/manifest.json +1 -1
- package/lib/module/api/cache/hooks/useCachingTaskList.js +1 -1
- package/lib/module/api/cache/hooks/useCachingTaskList.js.map +1 -1
- package/lib/module/api/cache/hooks/useCachingTaskProgress.js +1 -1
- package/lib/module/api/cache/hooks/useCachingTaskProgress.js.map +1 -1
- package/lib/module/api/cache/hooks/useCachingTaskStatus.js +1 -1
- package/lib/module/api/cache/hooks/useCachingTaskStatus.js.map +1 -1
- package/lib/module/api/event/PlayerEvent.js +18 -0
- package/lib/module/api/event/PlayerEvent.js.map +1 -1
- package/lib/module/api/player/PlayerEventMap.js +2 -0
- package/lib/module/api/player/PlayerEventMap.js.map +1 -1
- package/lib/module/api/track/Quality.js +34 -0
- package/lib/module/api/track/Quality.js.map +1 -1
- package/lib/module/api/track/TextTrackStyle.js.map +1 -1
- package/lib/module/internal/THEOplayerView.js +15 -5
- package/lib/module/internal/THEOplayerView.js.map +1 -1
- package/lib/module/internal/THEOplayerView.web.js +6 -7
- package/lib/module/internal/THEOplayerView.web.js.map +1 -1
- package/lib/module/internal/adapter/DefaultNativePlayerState.js +2 -0
- package/lib/module/internal/adapter/DefaultNativePlayerState.js.map +1 -1
- package/lib/module/internal/adapter/THEOplayerAdapter.js +36 -10
- package/lib/module/internal/adapter/THEOplayerAdapter.js.map +1 -1
- package/lib/module/internal/adapter/THEOplayerWebAdapter.js +21 -1
- package/lib/module/internal/adapter/THEOplayerWebAdapter.js.map +1 -1
- package/lib/module/internal/adapter/WebEventForwarder.js +8 -1
- package/lib/module/internal/adapter/WebEventForwarder.js.map +1 -1
- package/lib/module/internal/adapter/event/PlayerEvents.js +18 -0
- package/lib/module/internal/adapter/event/PlayerEvents.js.map +1 -1
- package/lib/module/internal/adapter/event/native/NativeTheoAdsEvent.js +4 -3
- package/lib/module/internal/adapter/event/native/NativeTheoAdsEvent.js.map +1 -1
- package/lib/module/internal/adapter/theoads/NativeInterstitialAdapter.js +61 -0
- package/lib/module/internal/adapter/theoads/NativeInterstitialAdapter.js.map +1 -0
- package/lib/module/internal/adapter/theoads/THEOAdsNativeAdapter.js +11 -2
- package/lib/module/internal/adapter/theoads/THEOAdsNativeAdapter.js.map +1 -1
- package/lib/module/internal/adapter/theolive/TheoLiveNativeAdapter.js.map +1 -1
- package/lib/module/internal/adapter/track/TextTrackStyleAdapter.js +10 -0
- package/lib/module/internal/adapter/track/TextTrackStyleAdapter.js.map +1 -1
- package/lib/module/internal/utils/TypeUtils.js +3 -0
- package/lib/module/internal/utils/TypeUtils.js.map +1 -1
- package/lib/module/manifest.json +1 -1
- package/lib/typescript/api/event/PlayerEvent.d.ts +36 -0
- package/lib/typescript/api/event/PlayerEvent.d.ts.map +1 -1
- package/lib/typescript/api/player/PlayerEventMap.d.ts +17 -2
- package/lib/typescript/api/player/PlayerEventMap.d.ts.map +1 -1
- package/lib/typescript/api/player/THEOplayer.d.ts +15 -1
- package/lib/typescript/api/player/THEOplayer.d.ts.map +1 -1
- package/lib/typescript/api/theoads/interstitial/Interstitial.d.ts +6 -0
- package/lib/typescript/api/theoads/interstitial/Interstitial.d.ts.map +1 -1
- package/lib/typescript/api/theolive/TheoLiveAPI.d.ts +1 -1
- package/lib/typescript/api/theolive/TheoLiveConfiguration.d.ts +1 -1
- package/lib/typescript/api/track/Quality.d.ts +1 -0
- package/lib/typescript/api/track/Quality.d.ts.map +1 -1
- package/lib/typescript/api/track/TextTrackStyle.d.ts +7 -0
- package/lib/typescript/api/track/TextTrackStyle.d.ts.map +1 -1
- package/lib/typescript/internal/THEOplayerView.d.ts +2 -1
- package/lib/typescript/internal/THEOplayerView.d.ts.map +1 -1
- package/lib/typescript/internal/THEOplayerView.web.d.ts.map +1 -1
- package/lib/typescript/internal/adapter/DefaultNativePlayerState.d.ts +2 -0
- package/lib/typescript/internal/adapter/DefaultNativePlayerState.d.ts.map +1 -1
- package/lib/typescript/internal/adapter/NativePlayerState.d.ts +2 -0
- package/lib/typescript/internal/adapter/NativePlayerState.d.ts.map +1 -1
- package/lib/typescript/internal/adapter/THEOplayerAdapter.d.ts +7 -3
- package/lib/typescript/internal/adapter/THEOplayerAdapter.d.ts.map +1 -1
- package/lib/typescript/internal/adapter/THEOplayerWebAdapter.d.ts +6 -0
- package/lib/typescript/internal/adapter/THEOplayerWebAdapter.d.ts.map +1 -1
- package/lib/typescript/internal/adapter/WebEventForwarder.d.ts +1 -0
- package/lib/typescript/internal/adapter/WebEventForwarder.d.ts.map +1 -1
- package/lib/typescript/internal/adapter/event/PlayerEvents.d.ts +14 -1
- package/lib/typescript/internal/adapter/event/PlayerEvents.d.ts.map +1 -1
- package/lib/typescript/internal/adapter/event/native/NativePlayerEvent.d.ts +11 -1
- package/lib/typescript/internal/adapter/event/native/NativePlayerEvent.d.ts.map +1 -1
- package/lib/typescript/internal/adapter/event/native/NativeTheoAdsEvent.d.ts +1 -1
- package/lib/typescript/internal/adapter/event/native/NativeTheoAdsEvent.d.ts.map +1 -1
- package/lib/typescript/internal/adapter/theoads/NativeInterstitialAdapter.d.ts +31 -0
- package/lib/typescript/internal/adapter/theoads/NativeInterstitialAdapter.d.ts.map +1 -0
- package/lib/typescript/internal/adapter/theoads/THEOAdsNativeAdapter.d.ts +3 -1
- package/lib/typescript/internal/adapter/theoads/THEOAdsNativeAdapter.d.ts.map +1 -1
- package/lib/typescript/internal/adapter/theoads/THEOAdsWebAdapter.d.ts +1 -1
- package/lib/typescript/internal/adapter/theoads/THEOAdsWebAdapter.d.ts.map +1 -1
- package/lib/typescript/internal/adapter/theolive/TheoLiveNativeAdapter.d.ts +1 -1
- package/lib/typescript/internal/adapter/theolive/TheoLiveNativeAdapter.d.ts.map +1 -1
- package/lib/typescript/internal/adapter/track/TextTrackStyleAdapter.d.ts +3 -0
- package/lib/typescript/internal/adapter/track/TextTrackStyleAdapter.d.ts.map +1 -1
- package/lib/typescript/internal/utils/TypeUtils.d.ts +1 -0
- package/lib/typescript/internal/utils/TypeUtils.d.ts.map +1 -1
- package/package.json +2 -1
- package/react-native-theoplayer.podspec +7 -7
- package/src/api/cache/hooks/useCachingTaskList.ts +1 -1
- package/src/api/cache/hooks/useCachingTaskProgress.ts +1 -1
- package/src/api/cache/hooks/useCachingTaskStatus.ts +1 -1
- package/src/api/event/PlayerEvent.ts +40 -0
- package/src/api/player/PlayerEventMap.ts +19 -0
- package/src/api/player/THEOplayer.ts +18 -1
- package/src/api/theoads/interstitial/Interstitial.ts +7 -0
- package/src/api/theolive/TheoLiveAPI.ts +1 -1
- package/src/api/theolive/TheoLiveConfiguration.ts +1 -1
- package/src/api/track/Quality.ts +15 -0
- package/src/api/track/TextTrackStyle.ts +8 -0
- package/src/internal/THEOplayerView.tsx +21 -6
- package/src/internal/THEOplayerView.web.tsx +4 -5
- package/src/internal/adapter/DefaultNativePlayerState.ts +2 -0
- package/src/internal/adapter/NativePlayerState.ts +2 -0
- package/src/internal/adapter/THEOplayerAdapter.ts +53 -21
- package/src/internal/adapter/THEOplayerWebAdapter.ts +26 -2
- package/src/internal/adapter/WebEventForwarder.ts +10 -0
- package/src/internal/adapter/event/PlayerEvents.ts +23 -0
- package/src/internal/adapter/event/native/NativePlayerEvent.ts +13 -1
- package/src/internal/adapter/event/native/NativeTheoAdsEvent.ts +8 -3
- package/src/internal/adapter/theoads/NativeInterstitialAdapter.ts +93 -0
- package/src/internal/adapter/theoads/THEOAdsNativeAdapter.ts +14 -3
- package/src/internal/adapter/theoads/THEOAdsWebAdapter.ts +1 -1
- package/src/internal/adapter/theolive/TheoLiveNativeAdapter.ts +1 -1
- package/src/internal/adapter/track/TextTrackStyleAdapter.ts +12 -0
- package/src/internal/utils/TypeUtils.ts +6 -0
- package/src/manifest.json +1 -1
|
@@ -50,12 +50,33 @@ export interface TimeUpdateEvent extends Event<PlayerEventType.TIME_UPDATE> {
|
|
|
50
50
|
readonly currentProgramDateTime?: number;
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
+
/**
|
|
54
|
+
* Dispatched when the player dimensions are updated.
|
|
55
|
+
*
|
|
56
|
+
* @category Events
|
|
57
|
+
* @category Player
|
|
58
|
+
* @public
|
|
59
|
+
*/
|
|
60
|
+
export interface DimensionChangeEvent extends Event<PlayerEventType.DIMENSION_CHANGE> {
|
|
61
|
+
/**
|
|
62
|
+
* The player's current width.
|
|
63
|
+
*/
|
|
64
|
+
readonly width: number;
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* The player's current height.
|
|
68
|
+
*/
|
|
69
|
+
readonly height: number;
|
|
70
|
+
}
|
|
71
|
+
|
|
53
72
|
/**
|
|
54
73
|
* Dispatched when player is resized.
|
|
55
74
|
*
|
|
56
75
|
* @category Events
|
|
57
76
|
* @category Player
|
|
58
77
|
* @public
|
|
78
|
+
*
|
|
79
|
+
* @deprecated use {@link DimensionChangeEvent} instead. This event is set for removal in version 11.
|
|
59
80
|
*/
|
|
60
81
|
export interface ResizeEvent extends Event<PlayerEventType.RESIZE> {
|
|
61
82
|
/**
|
|
@@ -69,6 +90,25 @@ export interface ResizeEvent extends Event<PlayerEventType.RESIZE> {
|
|
|
69
90
|
readonly height: number;
|
|
70
91
|
}
|
|
71
92
|
|
|
93
|
+
/**
|
|
94
|
+
* Dispatched when video is resized.
|
|
95
|
+
*
|
|
96
|
+
* @category Events
|
|
97
|
+
* @category Player
|
|
98
|
+
* @public
|
|
99
|
+
*/
|
|
100
|
+
export interface VideoResizeEvent extends Event<PlayerEventType.VIDEO_RESIZE> {
|
|
101
|
+
/**
|
|
102
|
+
* The video's current width.
|
|
103
|
+
*/
|
|
104
|
+
readonly videoWidth: number;
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* The video's current height.
|
|
108
|
+
*/
|
|
109
|
+
readonly videoHeight: number;
|
|
110
|
+
}
|
|
111
|
+
|
|
72
112
|
/**
|
|
73
113
|
* Dispatched when the player's duration changes.
|
|
74
114
|
*
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Event } from '../event/Event';
|
|
2
2
|
import type {
|
|
3
|
+
DimensionChangeEvent,
|
|
3
4
|
DurationChangeEvent,
|
|
4
5
|
ErrorEvent,
|
|
5
6
|
LoadedMetadataEvent,
|
|
@@ -13,6 +14,7 @@ import type {
|
|
|
13
14
|
ResizeEvent,
|
|
14
15
|
SeekedEvent,
|
|
15
16
|
SeekingEvent,
|
|
17
|
+
VideoResizeEvent,
|
|
16
18
|
} from '../event/PlayerEvent';
|
|
17
19
|
import type { MediaTrackEvent, MediaTrackListEvent, TextTrackEvent, TextTrackListEvent } from '../event/TrackEvent';
|
|
18
20
|
import type { AdEvent } from '../event/AdEvent';
|
|
@@ -58,7 +60,12 @@ export enum PlayerEventType {
|
|
|
58
60
|
WAITING = 'waiting',
|
|
59
61
|
PRESENTATIONMODE_CHANGE = 'presentationmodechange',
|
|
60
62
|
DESTROY = 'destroy',
|
|
63
|
+
/**
|
|
64
|
+
* @deprecated Use {@link PlayerEventType.DIMENSION_CHANGE} instead. This event is set for removal in version 11.
|
|
65
|
+
*/
|
|
61
66
|
RESIZE = 'resize',
|
|
67
|
+
DIMENSION_CHANGE = 'dimensionchange',
|
|
68
|
+
VIDEO_RESIZE = 'videoresize',
|
|
62
69
|
}
|
|
63
70
|
|
|
64
71
|
/**
|
|
@@ -226,6 +233,18 @@ export interface PlayerEventMap {
|
|
|
226
233
|
|
|
227
234
|
/**
|
|
228
235
|
* Dispatched when the player size changes.
|
|
236
|
+
*
|
|
237
|
+
* @deprecated Use {@link dimensionchange} instead. This event is set for removal in version 11.
|
|
229
238
|
*/
|
|
230
239
|
[PlayerEventType.RESIZE]: ResizeEvent;
|
|
240
|
+
|
|
241
|
+
/**
|
|
242
|
+
* Dispatched when the player size changes.
|
|
243
|
+
*/
|
|
244
|
+
[PlayerEventType.DIMENSION_CHANGE]: DimensionChangeEvent;
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* Dispatched when the video size changes.
|
|
248
|
+
*/
|
|
249
|
+
[PlayerEventType.VIDEO_RESIZE]: VideoResizeEvent;
|
|
231
250
|
}
|
|
@@ -274,7 +274,24 @@ export interface THEOplayer extends EventDispatcher<PlayerEventMap> {
|
|
|
274
274
|
readonly height: number | undefined;
|
|
275
275
|
|
|
276
276
|
/**
|
|
277
|
-
* The
|
|
277
|
+
* The width of the active video rendition, in pixels.
|
|
278
|
+
*/
|
|
279
|
+
readonly videoWidth: number | undefined;
|
|
280
|
+
|
|
281
|
+
/**
|
|
282
|
+
* The height of the active video rendition, in pixels.
|
|
283
|
+
*/
|
|
284
|
+
readonly videoHeight: number | undefined;
|
|
285
|
+
|
|
286
|
+
/**
|
|
287
|
+
* The API for THEOlive.
|
|
288
|
+
*/
|
|
289
|
+
readonly theoLive: TheoLiveAPI;
|
|
290
|
+
|
|
291
|
+
/**
|
|
292
|
+
* The API for THEOlive.
|
|
293
|
+
*
|
|
294
|
+
* @deprecated use {@link THEOplayer.theoLive} instead.
|
|
278
295
|
*/
|
|
279
296
|
readonly theolive: TheoLiveAPI;
|
|
280
297
|
}
|
|
@@ -35,4 +35,11 @@ export interface Interstitial {
|
|
|
35
35
|
*
|
|
36
36
|
*/
|
|
37
37
|
duration: number | undefined;
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* The ad tag parameters that are used for this specific ad break.
|
|
41
|
+
* @remarks
|
|
42
|
+
* <br/> - The set values are combined and potentially override parameters set on the {@link TheoAdDescription.adTagParameters} or through {@link TheoAds.replaceAdTagParameters}.
|
|
43
|
+
*/
|
|
44
|
+
adTagParameters: Record<string, string>;
|
|
38
45
|
}
|
|
@@ -22,7 +22,7 @@ export interface HespLatencies {
|
|
|
22
22
|
playerLatency?: number;
|
|
23
23
|
|
|
24
24
|
/**
|
|
25
|
-
* The total latency introduced by the
|
|
25
|
+
* The total latency introduced by the THEOlive pipeline: from frame ingested till displayed on screen.
|
|
26
26
|
*/
|
|
27
27
|
theoliveLatency?: number
|
|
28
28
|
}
|
|
@@ -40,7 +40,7 @@ export interface TheoLiveConfiguration {
|
|
|
40
40
|
*
|
|
41
41
|
* @remarks
|
|
42
42
|
* <br/> - Available on iOS only.
|
|
43
|
-
* <br/> - When enabled,
|
|
43
|
+
* <br/> - When enabled, THEOlive channels will be streamed using the legacy pipeline.
|
|
44
44
|
*
|
|
45
45
|
* @defaultValue `false`
|
|
46
46
|
*/
|
package/src/api/track/Quality.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { isArray } from '../../internal/utils/TypeUtils';
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
* Represents a quality of a media track.
|
|
3
5
|
*
|
|
@@ -80,6 +82,19 @@ export interface VideoQuality extends Quality {
|
|
|
80
82
|
readonly firstFrame: number;
|
|
81
83
|
}
|
|
82
84
|
|
|
85
|
+
export function isVideoQuality(qualities: Quality | Quality[] | undefined): qualities is VideoQuality {
|
|
86
|
+
if (!qualities) {
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
let quality = qualities;
|
|
91
|
+
if (isArray(qualities) && qualities.length > 0) {
|
|
92
|
+
quality = qualities[0];
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
return (quality as VideoQuality).height !== undefined;
|
|
96
|
+
}
|
|
97
|
+
|
|
83
98
|
/**
|
|
84
99
|
* Represents a quality of an audio track.
|
|
85
100
|
*
|
|
@@ -28,6 +28,14 @@ export interface TextTrackStyle {
|
|
|
28
28
|
*/
|
|
29
29
|
fontSize: string | undefined;
|
|
30
30
|
|
|
31
|
+
/**
|
|
32
|
+
* The path to a font in the Android `app/src/main/assets/` folder.
|
|
33
|
+
*
|
|
34
|
+
* @remarks
|
|
35
|
+
* Only supported on Android.
|
|
36
|
+
*/
|
|
37
|
+
fontPath: string | undefined;
|
|
38
|
+
|
|
31
39
|
/**
|
|
32
40
|
* The background color for the text track.
|
|
33
41
|
*
|
|
@@ -24,6 +24,7 @@ import {
|
|
|
24
24
|
DefaultAirplayStateChangeEvent,
|
|
25
25
|
DefaultChromecastChangeEvent,
|
|
26
26
|
DefaultChromecastErrorEvent,
|
|
27
|
+
DefaultDimensionChangeEvent,
|
|
27
28
|
DefaultDurationChangeEvent,
|
|
28
29
|
DefaultErrorEvent,
|
|
29
30
|
DefaultLoadedMetadataEvent,
|
|
@@ -41,6 +42,7 @@ import {
|
|
|
41
42
|
DefaultResizeEvent,
|
|
42
43
|
DefaultSeekingEvent,
|
|
43
44
|
DefaultSeekedEvent,
|
|
45
|
+
DefaultVideoResizeEvent,
|
|
44
46
|
} from './adapter/event/PlayerEvents';
|
|
45
47
|
import type { NativeCastEvent } from './adapter/event/native/NativeCastEvent';
|
|
46
48
|
import type {
|
|
@@ -62,9 +64,10 @@ import {
|
|
|
62
64
|
NativeSegmentNotFoundEvent,
|
|
63
65
|
NativeTimeUpdateEvent,
|
|
64
66
|
NativeVolumeChangeEvent,
|
|
65
|
-
|
|
67
|
+
NativeDimensionChangeEvent,
|
|
66
68
|
NativeSeekingEvent,
|
|
67
69
|
NativeSeekedEvent,
|
|
70
|
+
NativeVideoResizeEvent,
|
|
68
71
|
} from './adapter/event/native/NativePlayerEvent';
|
|
69
72
|
import type { NativeAdEvent } from './adapter/event/native/NativeAdEvent';
|
|
70
73
|
import { fromNativeTheoLiveEvent, NativeTheoLiveEvent } from './adapter/event/native/NativeTheoLiveEvent';
|
|
@@ -110,7 +113,8 @@ interface THEOplayerRCTViewProps {
|
|
|
110
113
|
onNativeCastEvent: (event: NativeSyntheticEvent<NativeCastEvent>) => void;
|
|
111
114
|
onNativePresentationModeChange: (event: NativeSyntheticEvent<NativePresentationModeChangeEvent>) => void;
|
|
112
115
|
onNativeDeviceOrientationChanged: () => void;
|
|
113
|
-
|
|
116
|
+
onNativeDimensionChange: (event: NativeSyntheticEvent<NativeDimensionChangeEvent>) => void;
|
|
117
|
+
onNativeVideoResize: (event: NativeSyntheticEvent<NativeVideoResizeEvent>) => void;
|
|
114
118
|
}
|
|
115
119
|
|
|
116
120
|
interface THEOplayerRCTViewState {
|
|
@@ -151,6 +155,9 @@ export class THEOplayerView extends PureComponent<React.PropsWithChildren<THEOpl
|
|
|
151
155
|
}
|
|
152
156
|
|
|
153
157
|
componentWillUnmount() {
|
|
158
|
+
// Allow proper cleanup on the native player before destruction
|
|
159
|
+
this._facade.willUnmount();
|
|
160
|
+
|
|
154
161
|
// Notify the player will be destroyed.
|
|
155
162
|
const { onPlayerDestroy } = this.props;
|
|
156
163
|
if (onPlayerDestroy) {
|
|
@@ -353,7 +360,7 @@ export class THEOplayerView extends PureComponent<React.PropsWithChildren<THEOpl
|
|
|
353
360
|
};
|
|
354
361
|
|
|
355
362
|
private _onTHEOadsEvent = (event: NativeSyntheticEvent<NativeTheoAdsEvent>) => {
|
|
356
|
-
this._facade.dispatchEvent(fromNativeTheoAdsEvent(event));
|
|
363
|
+
this._facade.dispatchEvent(fromNativeTheoAdsEvent(this.nativeHandle, event));
|
|
357
364
|
};
|
|
358
365
|
|
|
359
366
|
private _onCastEvent = (event: NativeSyntheticEvent<NativeCastEvent>) => {
|
|
@@ -387,8 +394,15 @@ export class THEOplayerView extends PureComponent<React.PropsWithChildren<THEOpl
|
|
|
387
394
|
);
|
|
388
395
|
};
|
|
389
396
|
|
|
390
|
-
private
|
|
391
|
-
|
|
397
|
+
private _onDimensionChange = (event: NativeSyntheticEvent<NativeDimensionChangeEvent>) => {
|
|
398
|
+
const width = event.nativeEvent.width;
|
|
399
|
+
const height = event.nativeEvent.height;
|
|
400
|
+
this._facade.dispatchEvent(new DefaultResizeEvent(width, height));
|
|
401
|
+
this._facade.dispatchEvent(new DefaultDimensionChangeEvent(width, height));
|
|
402
|
+
};
|
|
403
|
+
|
|
404
|
+
private _onVideoResize = (event: NativeSyntheticEvent<NativeVideoResizeEvent>) => {
|
|
405
|
+
this._facade.dispatchEvent(new DefaultVideoResizeEvent(event.nativeEvent.videoWidth, event.nativeEvent.videoHeight));
|
|
392
406
|
};
|
|
393
407
|
|
|
394
408
|
private _updatePoster = () => {
|
|
@@ -452,7 +466,8 @@ export class THEOplayerView extends PureComponent<React.PropsWithChildren<THEOpl
|
|
|
452
466
|
onNativeCastEvent={this._onCastEvent}
|
|
453
467
|
onNativePresentationModeChange={this._onPresentationModeChange}
|
|
454
468
|
onNativeDeviceOrientationChanged={this._onDeviceOrientationChanged}
|
|
455
|
-
|
|
469
|
+
onNativeDimensionChange={this._onDimensionChange}
|
|
470
|
+
onNativeVideoResize={this._onVideoResize}
|
|
456
471
|
/>
|
|
457
472
|
{posterActive && <Poster uri={poster} style={posterStyle} />}
|
|
458
473
|
{children}
|
|
@@ -4,7 +4,7 @@ import { ChromelessPlayer } from 'theoplayer';
|
|
|
4
4
|
import { THEOplayerWebAdapter } from './adapter/THEOplayerWebAdapter';
|
|
5
5
|
|
|
6
6
|
export function THEOplayerView(props: React.PropsWithChildren<THEOplayerViewProps>) {
|
|
7
|
-
const { config, children } = props;
|
|
7
|
+
const { config, children, onPlayerReady, onPlayerDestroy } = props;
|
|
8
8
|
const player = useRef<ChromelessPlayer | null>(null);
|
|
9
9
|
const adapter = useRef<THEOplayerWebAdapter | null>(null);
|
|
10
10
|
const container = useRef<null | HTMLDivElement>(null);
|
|
@@ -38,25 +38,24 @@ export function THEOplayerView(props: React.PropsWithChildren<THEOplayerViewProp
|
|
|
38
38
|
window.nativePlayer = player;
|
|
39
39
|
|
|
40
40
|
// Notify the player is ready
|
|
41
|
-
|
|
41
|
+
onPlayerReady?.(adapter.current);
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
// Clean-up
|
|
45
45
|
return () => {
|
|
46
46
|
// Notify the player will be destroyed.
|
|
47
|
-
const { onPlayerDestroy } = props;
|
|
48
47
|
if (adapter?.current && onPlayerDestroy) {
|
|
49
48
|
onPlayerDestroy(adapter?.current);
|
|
50
49
|
}
|
|
51
50
|
adapter?.current?.destroy();
|
|
52
51
|
};
|
|
53
|
-
}, [container]);
|
|
52
|
+
}, [config, container, onPlayerReady, onPlayerDestroy]);
|
|
54
53
|
|
|
55
54
|
return (
|
|
56
55
|
// Note: `display: contents` causes an element's children to appear as if they were direct children of the element's parent,
|
|
57
56
|
// ignoring the element itself.
|
|
58
57
|
// It's necessary to make sure we do not interfere with the IMA container
|
|
59
|
-
<div id={'theoplayer-root-container'} style={{ display: 'contents' }}>
|
|
58
|
+
<div id={'theoplayer-root-container'} style={{ display: CSS.supports('display', 'contents') ? 'contents' : 'flex' }}>
|
|
60
59
|
{!CSS.supports('aspect-ratio', '16/9') ? (
|
|
61
60
|
// Handle aspect-ratio 16/9 with padding-top: 56.25% to support older versions.
|
|
62
61
|
// {@link https://www.w3schools.com/howto/howto_css_aspect_ratio.asp}
|
|
@@ -39,6 +39,8 @@ export class DefaultNativePlayerState extends DefaultTextTrackState implements N
|
|
|
39
39
|
selectedVideoTrack: number | undefined = undefined;
|
|
40
40
|
width: number | undefined = undefined;
|
|
41
41
|
height: number | undefined = undefined;
|
|
42
|
+
videoWidth: number | undefined = undefined;
|
|
43
|
+
videoHeight: number | undefined = undefined;
|
|
42
44
|
|
|
43
45
|
apply(state: Partial<NativePlayerState>): void {
|
|
44
46
|
Object.assign(this, state);
|
|
@@ -33,6 +33,8 @@ export interface MediaTrackState {
|
|
|
33
33
|
targetVideoQuality: number | number[] | undefined;
|
|
34
34
|
selectedVideoTrack: number | undefined;
|
|
35
35
|
selectedAudioTrack: number | undefined;
|
|
36
|
+
videoWidth: number | undefined;
|
|
37
|
+
videoHeight: number | undefined;
|
|
36
38
|
}
|
|
37
39
|
|
|
38
40
|
export interface TextTrackState {
|
|
@@ -1,46 +1,46 @@
|
|
|
1
1
|
import { DefaultEventDispatcher } from './event/DefaultEventDispatcher';
|
|
2
2
|
import {
|
|
3
3
|
ABRConfiguration,
|
|
4
|
+
addTrack,
|
|
4
5
|
AdsAPI,
|
|
6
|
+
AspectRatio,
|
|
7
|
+
BackgroundAudioConfiguration,
|
|
5
8
|
CastAPI,
|
|
9
|
+
DimensionChangeEvent,
|
|
6
10
|
DurationChangeEvent,
|
|
7
11
|
EventBroadcastAPI,
|
|
12
|
+
findMediaTrackByUid,
|
|
13
|
+
isVideoQuality,
|
|
8
14
|
LoadedMetadataEvent,
|
|
9
15
|
MediaTrack,
|
|
10
16
|
MediaTrackEvent,
|
|
17
|
+
MediaTrackEventType,
|
|
11
18
|
MediaTrackListEvent,
|
|
19
|
+
MediaTrackType,
|
|
12
20
|
NativeHandleType,
|
|
13
21
|
PiPConfiguration,
|
|
14
22
|
PlayerEventMap,
|
|
23
|
+
PlayerEventType,
|
|
24
|
+
PlayerVersion,
|
|
25
|
+
PreloadType,
|
|
26
|
+
PresentationMode,
|
|
15
27
|
PresentationModeChangeEvent,
|
|
16
28
|
ProgressEvent,
|
|
17
29
|
RateChangeEvent,
|
|
30
|
+
removeTrack,
|
|
18
31
|
RenderingTarget,
|
|
19
|
-
ResizeEvent,
|
|
20
32
|
SeekedEvent,
|
|
21
33
|
SeekingEvent,
|
|
22
34
|
SourceDescription,
|
|
23
35
|
TextTrack,
|
|
36
|
+
TextTrackStyle,
|
|
24
37
|
TheoAdsAPI,
|
|
25
38
|
TheoLiveAPI,
|
|
26
39
|
THEOplayer,
|
|
27
40
|
THEOplayerView,
|
|
28
41
|
TimeUpdateEvent,
|
|
29
|
-
} from 'react-native-theoplayer';
|
|
30
|
-
import {
|
|
31
|
-
addTrack,
|
|
32
|
-
AspectRatio,
|
|
33
|
-
BackgroundAudioConfiguration,
|
|
34
|
-
findMediaTrackByUid,
|
|
35
|
-
MediaTrackEventType,
|
|
36
|
-
MediaTrackType,
|
|
37
|
-
PlayerEventType,
|
|
38
|
-
PlayerVersion,
|
|
39
|
-
PreloadType,
|
|
40
|
-
PresentationMode,
|
|
41
|
-
removeTrack,
|
|
42
|
-
TextTrackStyle,
|
|
43
42
|
TrackListEventType,
|
|
43
|
+
VideoResizeEvent,
|
|
44
44
|
} from 'react-native-theoplayer';
|
|
45
45
|
import { THEOplayerNativeAdsAdapter } from './ads/THEOplayerNativeAdsAdapter';
|
|
46
46
|
import { THEOplayerNativeCastAdapter } from './cast/THEOplayerNativeCastAdapter';
|
|
@@ -90,7 +90,8 @@ export class THEOplayerAdapter extends DefaultEventDispatcher<PlayerEventMap> im
|
|
|
90
90
|
this.addEventListener(PlayerEventType.MEDIA_TRACK, this.onMediaTrack);
|
|
91
91
|
this.addEventListener(PlayerEventType.MEDIA_TRACK_LIST, this.onMediaTrackList);
|
|
92
92
|
this.addEventListener(PlayerEventType.PRESENTATIONMODE_CHANGE, this.onPresentationModeChange);
|
|
93
|
-
this.addEventListener(PlayerEventType.
|
|
93
|
+
this.addEventListener(PlayerEventType.DIMENSION_CHANGE, this.onDimensionChange);
|
|
94
|
+
this.addEventListener(PlayerEventType.VIDEO_RESIZE, this.onVideoResize);
|
|
94
95
|
}
|
|
95
96
|
|
|
96
97
|
private hasValidSource(): boolean {
|
|
@@ -117,11 +118,16 @@ export class THEOplayerAdapter extends DefaultEventDispatcher<PlayerEventMap> im
|
|
|
117
118
|
this._state.currentProgramDateTime = event.currentProgramDateTime;
|
|
118
119
|
};
|
|
119
120
|
|
|
120
|
-
private
|
|
121
|
+
private onDimensionChange = (event: DimensionChangeEvent) => {
|
|
121
122
|
this._state.width = event.width;
|
|
122
123
|
this._state.height = event.height;
|
|
123
124
|
};
|
|
124
125
|
|
|
126
|
+
private onVideoResize = (event: VideoResizeEvent) => {
|
|
127
|
+
this._state.videoWidth = event.videoWidth;
|
|
128
|
+
this._state.videoHeight = event.videoHeight;
|
|
129
|
+
};
|
|
130
|
+
|
|
125
131
|
private onLoadedMetadata = (event: LoadedMetadataEvent) => {
|
|
126
132
|
this._state.duration = event.duration;
|
|
127
133
|
this._state.audioTracks = event.audioTracks;
|
|
@@ -157,16 +163,24 @@ export class THEOplayerAdapter extends DefaultEventDispatcher<PlayerEventMap> im
|
|
|
157
163
|
};
|
|
158
164
|
|
|
159
165
|
private onMediaTrack = (event: MediaTrackEvent) => {
|
|
160
|
-
const { subType, trackType, trackUid } = event;
|
|
166
|
+
const { subType, trackType, trackUid, qualities } = event;
|
|
161
167
|
const tracks = trackType === MediaTrackType.VIDEO ? this._state.videoTracks : this._state.audioTracks;
|
|
162
168
|
const track = findMediaTrackByUid(tracks, trackUid);
|
|
163
169
|
switch (subType) {
|
|
164
170
|
case MediaTrackEventType.ACTIVE_QUALITY_CHANGED:
|
|
171
|
+
if (!track) {
|
|
172
|
+
break;
|
|
173
|
+
}
|
|
174
|
+
|
|
165
175
|
// Update local state
|
|
166
|
-
|
|
167
|
-
|
|
176
|
+
Object.assign(track, { ...track, activeQuality: qualities });
|
|
177
|
+
|
|
178
|
+
if (!isVideoQuality(qualities)) {
|
|
179
|
+
break;
|
|
168
180
|
}
|
|
169
|
-
|
|
181
|
+
|
|
182
|
+
this._state.videoWidth = qualities.width;
|
|
183
|
+
this._state.videoHeight = qualities.height;
|
|
170
184
|
}
|
|
171
185
|
};
|
|
172
186
|
|
|
@@ -218,6 +232,10 @@ export class THEOplayerAdapter extends DefaultEventDispatcher<PlayerEventMap> im
|
|
|
218
232
|
return this._theoAdsAdapter;
|
|
219
233
|
}
|
|
220
234
|
|
|
235
|
+
get theoLive(): TheoLiveAPI {
|
|
236
|
+
return this._theoliveAdapter;
|
|
237
|
+
}
|
|
238
|
+
|
|
221
239
|
get theolive(): TheoLiveAPI {
|
|
222
240
|
return this._theoliveAdapter;
|
|
223
241
|
}
|
|
@@ -524,4 +542,18 @@ export class THEOplayerAdapter extends DefaultEventDispatcher<PlayerEventMap> im
|
|
|
524
542
|
get height(): number | undefined {
|
|
525
543
|
return this._state.height;
|
|
526
544
|
}
|
|
545
|
+
|
|
546
|
+
get videoWidth(): number | undefined {
|
|
547
|
+
return this._state.videoWidth;
|
|
548
|
+
}
|
|
549
|
+
|
|
550
|
+
get videoHeight(): number | undefined {
|
|
551
|
+
return this._state.videoHeight;
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
willUnmount(): void {
|
|
555
|
+
if (Platform.OS === 'ios') {
|
|
556
|
+
NativePlayerModule.willUnmount(this._view.nativeHandle);
|
|
557
|
+
}
|
|
558
|
+
}
|
|
527
559
|
}
|
|
@@ -23,7 +23,7 @@ import {
|
|
|
23
23
|
} from 'react-native-theoplayer';
|
|
24
24
|
import { THEOplayerWebAdsAdapter } from './ads/THEOplayerWebAdsAdapter';
|
|
25
25
|
import { THEOplayerWebCastAdapter } from './cast/THEOplayerWebCastAdapter';
|
|
26
|
-
import type { MediaTrack as NativeMediaTrack, TextTrack as NativeTextTrack } from 'theoplayer';
|
|
26
|
+
import type { DimensionChangeEvent, MediaTrack as NativeMediaTrack, TextTrack as NativeTextTrack } from 'theoplayer';
|
|
27
27
|
import { ChromelessPlayer as NativeChromelessPlayer, SourceDescription as NativeSourceDescription, version as nativeVersion } from 'theoplayer';
|
|
28
28
|
import { findNativeQualitiesByUid, fromNativeMediaTrackList } from './web/TrackUtils';
|
|
29
29
|
import type { ABRConfiguration, SourceDescription } from 'src/api/barrel';
|
|
@@ -62,6 +62,8 @@ export class THEOplayerWebAdapter extends DefaultEventDispatcher<PlayerEventMap>
|
|
|
62
62
|
private _pipConfiguration: PiPConfiguration = defaultPipConfiguration;
|
|
63
63
|
private _externalEventRouter: EventBroadcastAPI | undefined = undefined;
|
|
64
64
|
private _cmcdConnector: CMCDConnector | undefined = undefined;
|
|
65
|
+
private _width: number | undefined = undefined;
|
|
66
|
+
private _height: number | undefined = undefined;
|
|
65
67
|
|
|
66
68
|
constructor(player: NativeChromelessPlayer, config?: PlayerConfiguration) {
|
|
67
69
|
super();
|
|
@@ -74,6 +76,7 @@ export class THEOplayerWebAdapter extends DefaultEventDispatcher<PlayerEventMap>
|
|
|
74
76
|
this._eventForwarder = new WebEventForwarder(this._player, this);
|
|
75
77
|
this._presentationModeManager = new WebPresentationModeManager(this._player, this);
|
|
76
78
|
document.addEventListener('visibilitychange', this.onVisibilityChange);
|
|
79
|
+
this._player.addEventListener('dimensionchange', this.onPlayerDimensionChange);
|
|
77
80
|
|
|
78
81
|
// Optionally create a media session connector
|
|
79
82
|
if (config?.mediaControl?.mediaSessionEnabled !== false) {
|
|
@@ -367,6 +370,10 @@ export class THEOplayerWebAdapter extends DefaultEventDispatcher<PlayerEventMap>
|
|
|
367
370
|
return this._castAdapter;
|
|
368
371
|
}
|
|
369
372
|
|
|
373
|
+
public get theoLive(): TheoLiveAPI {
|
|
374
|
+
return this._theoliveAdapter;
|
|
375
|
+
}
|
|
376
|
+
|
|
370
377
|
public get theolive(): TheoLiveAPI {
|
|
371
378
|
return this._theoliveAdapter;
|
|
372
379
|
}
|
|
@@ -387,6 +394,7 @@ export class THEOplayerWebAdapter extends DefaultEventDispatcher<PlayerEventMap>
|
|
|
387
394
|
this._mediaSession = undefined;
|
|
388
395
|
this._cmcdConnector?.destroy();
|
|
389
396
|
this._cmcdConnector = undefined;
|
|
397
|
+
this._player?.removeEventListener('dimensionchange', this.onPlayerDimensionChange);
|
|
390
398
|
this._player?.destroy();
|
|
391
399
|
this._player = undefined;
|
|
392
400
|
}
|
|
@@ -405,6 +413,14 @@ export class THEOplayerWebAdapter extends DefaultEventDispatcher<PlayerEventMap>
|
|
|
405
413
|
this._mediaSession?.updateMediaSession();
|
|
406
414
|
};
|
|
407
415
|
|
|
416
|
+
private readonly onPlayerDimensionChange = (event: DimensionChangeEvent) => {
|
|
417
|
+
if (!this._player) {
|
|
418
|
+
return;
|
|
419
|
+
}
|
|
420
|
+
this._width = event.width;
|
|
421
|
+
this._height = event.height;
|
|
422
|
+
};
|
|
423
|
+
|
|
408
424
|
get nativeHandle(): NativeHandleType {
|
|
409
425
|
return this._player;
|
|
410
426
|
}
|
|
@@ -414,10 +430,18 @@ export class THEOplayerWebAdapter extends DefaultEventDispatcher<PlayerEventMap>
|
|
|
414
430
|
}
|
|
415
431
|
|
|
416
432
|
get width(): number | undefined {
|
|
417
|
-
return this.
|
|
433
|
+
return this._width;
|
|
418
434
|
}
|
|
419
435
|
|
|
420
436
|
get height(): number | undefined {
|
|
437
|
+
return this._height;
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
get videoWidth(): number | undefined {
|
|
441
|
+
return this._player?.videoWidth;
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
get videoHeight(): number | undefined {
|
|
421
445
|
return this._player?.videoHeight;
|
|
422
446
|
}
|
|
423
447
|
}
|
|
@@ -43,6 +43,7 @@ import {
|
|
|
43
43
|
DefaultAirplayStateChangeEvent,
|
|
44
44
|
DefaultChromecastChangeEvent,
|
|
45
45
|
DefaultChromecastErrorEvent,
|
|
46
|
+
DefaultDimensionChangeEvent,
|
|
46
47
|
DefaultDurationChangeEvent,
|
|
47
48
|
DefaultErrorEvent,
|
|
48
49
|
DefaultLoadedMetadataEvent,
|
|
@@ -64,6 +65,7 @@ import {
|
|
|
64
65
|
DefaultTheoLiveEvent,
|
|
65
66
|
DefaultTheoLiveIntentToFallbackEvent,
|
|
66
67
|
DefaultTimeupdateEvent,
|
|
68
|
+
DefaultVideoResizeEvent,
|
|
67
69
|
DefaultVolumeChangeEvent,
|
|
68
70
|
} from './event/PlayerEvents';
|
|
69
71
|
import { fromNativeCue, fromNativeMediaTrack, fromNativeTextTrack } from './web/TrackUtils';
|
|
@@ -100,6 +102,7 @@ export class WebEventForwarder {
|
|
|
100
102
|
this._player.addEventListener('segmentnotfound', this.onSegmentNotFound);
|
|
101
103
|
this._player.addEventListener('volumechange', this.onVolumeChangeEvent);
|
|
102
104
|
this._player.addEventListener('dimensionchange', this.onDimensionChange);
|
|
105
|
+
this._player.addEventListener('resize', this.onVideoResize);
|
|
103
106
|
|
|
104
107
|
this._player.textTracks.addEventListener('addtrack', this.onAddTextTrack);
|
|
105
108
|
this._player.textTracks.addEventListener('removetrack', this.onRemoveTextTrack);
|
|
@@ -147,6 +150,8 @@ export class WebEventForwarder {
|
|
|
147
150
|
this._player.removeEventListener('ratechange', this.onPlaybackRateChange);
|
|
148
151
|
this._player.removeEventListener('segmentnotfound', this.onSegmentNotFound);
|
|
149
152
|
this._player.removeEventListener('volumechange', this.onVolumeChangeEvent);
|
|
153
|
+
this._player.removeEventListener('dimensionchange', this.onDimensionChange);
|
|
154
|
+
this._player.removeEventListener('resize', this.onVideoResize);
|
|
150
155
|
|
|
151
156
|
this._player.textTracks.removeEventListener('addtrack', this.onAddTextTrack);
|
|
152
157
|
this._player.textTracks.removeEventListener('removetrack', this.onRemoveTextTrack);
|
|
@@ -266,6 +271,11 @@ export class WebEventForwarder {
|
|
|
266
271
|
|
|
267
272
|
private readonly onDimensionChange = (event: NativeDimensionChangeEvent) => {
|
|
268
273
|
this._facade.dispatchEvent(new DefaultResizeEvent(event.width, event.height));
|
|
274
|
+
this._facade.dispatchEvent(new DefaultDimensionChangeEvent(event.width, event.height));
|
|
275
|
+
};
|
|
276
|
+
|
|
277
|
+
private readonly onVideoResize = (_event: NativeEvent<'resize'>) => {
|
|
278
|
+
this._facade.dispatchEvent(new DefaultVideoResizeEvent(this._player.videoWidth, this._player.videoHeight));
|
|
269
279
|
};
|
|
270
280
|
|
|
271
281
|
private readonly onAddTextTrack = (event: AddTrackEvent) => {
|
|
@@ -50,6 +50,8 @@ import {
|
|
|
50
50
|
TheoLiveEndpoint,
|
|
51
51
|
TheoLiveEndpointLoadedEvent,
|
|
52
52
|
TheoLiveIntentToFallbackEvent,
|
|
53
|
+
DimensionChangeEvent,
|
|
54
|
+
VideoResizeEvent,
|
|
53
55
|
} from 'react-native-theoplayer';
|
|
54
56
|
|
|
55
57
|
export class DefaultLoadedMetadataEvent extends BaseEvent<PlayerEventType.LOADED_METADATA> implements LoadedMetadataEvent {
|
|
@@ -91,6 +93,9 @@ export class DefaultVolumeChangeEvent extends BaseEvent<PlayerEventType.VOLUME_C
|
|
|
91
93
|
}
|
|
92
94
|
}
|
|
93
95
|
|
|
96
|
+
/**
|
|
97
|
+
* @deprecated Use {@link DefaultDimensionChangeEvent} instead. This event is set for removal in version 11.
|
|
98
|
+
*/
|
|
94
99
|
export class DefaultResizeEvent extends BaseEvent<PlayerEventType.RESIZE> implements ResizeEvent {
|
|
95
100
|
constructor(
|
|
96
101
|
public width: number,
|
|
@@ -100,6 +105,24 @@ export class DefaultResizeEvent extends BaseEvent<PlayerEventType.RESIZE> implem
|
|
|
100
105
|
}
|
|
101
106
|
}
|
|
102
107
|
|
|
108
|
+
export class DefaultDimensionChangeEvent extends BaseEvent<PlayerEventType.DIMENSION_CHANGE> implements DimensionChangeEvent {
|
|
109
|
+
constructor(
|
|
110
|
+
public width: number,
|
|
111
|
+
public height: number,
|
|
112
|
+
) {
|
|
113
|
+
super(PlayerEventType.DIMENSION_CHANGE);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
export class DefaultVideoResizeEvent extends BaseEvent<PlayerEventType.VIDEO_RESIZE> implements VideoResizeEvent {
|
|
118
|
+
constructor(
|
|
119
|
+
public videoWidth: number,
|
|
120
|
+
public videoHeight: number,
|
|
121
|
+
) {
|
|
122
|
+
super(PlayerEventType.VIDEO_RESIZE);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
103
126
|
export class DefaultErrorEvent extends BaseEvent<PlayerEventType.ERROR> implements ErrorEvent {
|
|
104
127
|
constructor(public error: PlayerError) {
|
|
105
128
|
super(PlayerEventType.ERROR);
|