react-native-theoplayer 7.9.0 → 8.0.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 +14 -0
- package/README.md +9 -1
- package/android/build.gradle +2 -2
- package/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/8.0.0/ads-wrapper-8.0.0.aar +0 -0
- package/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/{7.6.1/ads-wrapper-7.6.1.pom → 8.0.0/ads-wrapper-8.0.0.pom} +2 -2
- package/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/maven-metadata-local.xml +4 -4
- package/android/src/main/java/com/theoplayer/PlayerConfigAdapter.kt +0 -26
- package/android/src/main/java/com/theoplayer/PlayerEventEmitter.kt +1 -3
- package/android/src/main/java/com/theoplayer/ReactTHEOplayerView.kt +0 -1
- package/android/src/main/java/com/theoplayer/ads/AdAdapter.kt +13 -6
- package/android/src/main/java/com/theoplayer/ads/AdEventAdapter.kt +23 -24
- package/android/src/main/java/com/theoplayer/ads/AdsModule.kt +1 -5
- package/android/src/main/java/com/theoplayer/broadcast/EventBroadcastModule.kt +1 -5
- package/android/src/main/java/com/theoplayer/cache/CacheModule.kt +8 -8
- package/android/src/main/java/com/theoplayer/drm/ContentProtectionModule.kt +2 -1
- package/android/src/main/java/com/theoplayer/player/PlayerModule.kt +1 -5
- package/android/src/main/java/com/theoplayer/source/GoogleDaiSourceAdapter.kt +1 -0
- package/android/src/main/java/com/theoplayer/source/SSAIAdapterRegistry.kt +1 -1
- package/android/src/main/java/com/theoplayer/track/QualityListAdapter.kt +3 -20
- package/android/src/main/java/com/theoplayer/track/TextTrackStyleAdapter.kt +12 -12
- package/android/src/main/java/com/theoplayer/util/BridgeUtils.kt +1 -1
- package/app.plugin.js +32 -35
- package/ios/THEOplayerRCTTypeUtils.swift +2 -8
- package/ios/THEOplayerRCTView.swift +0 -2
- package/ios/ads/THEOplayerRCTAdAdapter.swift +19 -18
- package/ios/ads/THEOplayerRCTAdsNative.swift +11 -11
- package/ios/ads/THEOplayerRCTView+AdsConfig.swift +0 -30
- package/ios/style.css +0 -1
- package/lib/commonjs/api/source/ads/Ads.js +6 -2
- package/lib/commonjs/api/source/ads/Ads.js.map +1 -1
- package/lib/commonjs/internal/THEOplayerView.js +1 -1
- package/lib/commonjs/internal/THEOplayerView.js.map +1 -1
- package/lib/commonjs/internal/adapter/DefaultNativePlayerState.js +1 -1
- package/lib/commonjs/internal/adapter/DefaultNativePlayerState.js.map +1 -1
- package/lib/commonjs/internal/adapter/DefaultTextTrackState.js.map +1 -1
- package/lib/commonjs/internal/adapter/broadcast/EventBroadcastAdapter.js.map +1 -1
- package/lib/commonjs/internal/adapter/broadcast/EventBroadcastAdapter.web.js.map +1 -1
- package/lib/commonjs/internal/adapter/broadcast/web/DefaultWebEventDispatcher.js.map +1 -1
- package/lib/commonjs/internal/adapter/cast/THEOplayerNativeCastAdapter.js.map +1 -1
- package/lib/commonjs/internal/adapter/event/BaseEvent.js.map +1 -1
- package/lib/commonjs/internal/adapter/event/PlayerEvents.js.map +1 -1
- package/lib/commonjs/internal/adapter/track/TextTrackStyleAdapter.js +1 -1
- package/lib/commonjs/internal/adapter/track/TextTrackStyleAdapter.js.map +1 -1
- package/lib/commonjs/internal/cache/MediaCache.js.map +1 -1
- package/lib/commonjs/internal/cache/NativeCachingTaskParametersAdapter.js.map +1 -1
- package/lib/commonjs/internal/drm/ContentProtectionRegistry.js.map +1 -1
- package/lib/commonjs/internal/poster/Poster.js +1 -1
- package/lib/commonjs/internal/poster/Poster.js.map +1 -1
- package/lib/commonjs/internal/utils/Dimensions.js.map +1 -1
- package/lib/module/api/source/ads/Ads.js +6 -2
- package/lib/module/api/source/ads/Ads.js.map +1 -1
- package/lib/module/internal/THEOplayerView.js.map +1 -1
- package/lib/module/internal/adapter/DefaultNativePlayerState.js +1 -1
- package/lib/module/internal/adapter/DefaultNativePlayerState.js.map +1 -1
- package/lib/module/internal/adapter/DefaultTextTrackState.js.map +1 -1
- package/lib/module/internal/adapter/broadcast/EventBroadcastAdapter.js.map +1 -1
- package/lib/module/internal/adapter/broadcast/EventBroadcastAdapter.web.js +2 -2
- package/lib/module/internal/adapter/broadcast/EventBroadcastAdapter.web.js.map +1 -1
- package/lib/module/internal/adapter/broadcast/web/DefaultWebEventDispatcher.js.map +1 -1
- package/lib/module/internal/adapter/cast/THEOplayerNativeCastAdapter.js.map +1 -1
- package/lib/module/internal/adapter/event/BaseEvent.js.map +1 -1
- package/lib/module/internal/adapter/event/PlayerEvents.js.map +1 -1
- package/lib/module/internal/cache/MediaCache.js.map +1 -1
- package/lib/module/internal/cache/NativeCachingTaskAdapter.js +1 -1
- package/lib/module/internal/cache/NativeCachingTaskParametersAdapter.js.map +1 -1
- package/lib/module/internal/drm/ContentProtectionRegistry.js.map +1 -1
- package/lib/module/internal/utils/Dimensions.js.map +1 -1
- package/lib/typescript/api/source/ads/Ads.d.ts +7 -3
- package/lib/typescript/api/source/ads/Ads.d.ts.map +1 -1
- package/lib/typescript/internal/adapter/DefaultNativePlayerState.d.ts.map +1 -1
- package/lib/typescript/internal/adapter/DefaultTextTrackState.d.ts.map +1 -1
- package/lib/typescript/internal/adapter/NativePlayerState.d.ts.map +1 -1
- package/lib/typescript/internal/adapter/broadcast/EventBroadcastAdapter.web.d.ts +5 -5
- package/lib/typescript/internal/adapter/broadcast/EventBroadcastAdapter.web.d.ts.map +1 -1
- package/lib/typescript/internal/adapter/broadcast/web/DefaultWebEventDispatcher.d.ts +1 -1
- package/lib/typescript/internal/adapter/broadcast/web/DefaultWebEventDispatcher.d.ts.map +1 -1
- package/lib/typescript/internal/adapter/cast/THEOplayerNativeCastAdapter.d.ts.map +1 -1
- package/lib/typescript/internal/adapter/event/BaseEvent.d.ts.map +1 -1
- package/lib/typescript/internal/adapter/event/PlayerEvents.d.ts.map +1 -1
- package/lib/typescript/internal/cache/NativeCachingTaskAdapter.d.ts +1 -1
- package/lib/typescript/internal/cache/NativeCachingTaskParametersAdapter.d.ts +1 -1
- package/lib/typescript/internal/cache/NativeCachingTaskParametersAdapter.d.ts.map +1 -1
- package/lib/typescript/internal/utils/Dimensions.d.ts.map +1 -1
- package/package.json +18 -13
- package/react-native-theoplayer.json +4 -8
- package/react-native-theoplayer.podspec +7 -8
- package/src/api/source/ads/Ads.ts +7 -3
- package/src/internal/THEOplayerView.tsx +2 -2
- package/src/internal/adapter/DefaultNativePlayerState.ts +1 -1
- package/src/internal/adapter/DefaultTextTrackState.ts +2 -2
- package/src/internal/adapter/NativePlayerState.ts +1 -2
- package/src/internal/adapter/broadcast/EventBroadcastAdapter.web.ts +12 -12
- package/src/internal/adapter/broadcast/web/DefaultWebEventDispatcher.ts +47 -47
- package/src/internal/adapter/cast/THEOplayerNativeCastAdapter.ts +4 -1
- package/src/internal/adapter/event/BaseEvent.ts +4 -1
- package/src/internal/adapter/event/PlayerEvents.ts +39 -9
- package/src/internal/adapter/web/FullscreenAPI.ts +4 -4
- package/src/internal/cache/NativeCachingTaskAdapter.ts +1 -1
- package/src/internal/cache/NativeCachingTaskParametersAdapter.ts +7 -9
- package/src/internal/utils/Dimensions.ts +5 -3
- package/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/7.6.1/ads-wrapper-7.6.1.aar +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { CachingTaskParameters } from 'react-native-theoplayer';
|
|
2
|
-
import type { CachingPreferredTrackSelection } from
|
|
2
|
+
import type { CachingPreferredTrackSelection } from '../../api/cache/CachingPreferredTrackSelection';
|
|
3
3
|
export interface NativeCachingTaskParameters {
|
|
4
4
|
readonly amount: number | string;
|
|
5
5
|
readonly expirationDate: number | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NativeCachingTaskParametersAdapter.d.ts","sourceRoot":"","sources":["../../../../src/internal/cache/NativeCachingTaskParametersAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"NativeCachingTaskParametersAdapter.d.ts","sourceRoot":"","sources":["../../../../src/internal/cache/NativeCachingTaskParametersAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,gDAAgD,CAAC;AAErG,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACjC,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,uBAAuB,EAAE,8BAA8B,GAAG,SAAS,CAAC;IAC7E,QAAQ,CAAC,oBAAoB,EAAE,OAAO,GAAG,SAAS,CAAC;CACpD;AAED,wBAAgB,+BAA+B,CAAC,UAAU,EAAE,2BAA2B,GAAG,qBAAqB,CAQ9G;AAED,wBAAgB,6BAA6B,CAAC,UAAU,EAAE,qBAAqB,GAAG,2BAA2B,CAQ5G"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dimensions.d.ts","sourceRoot":"","sources":["../../../../src/internal/utils/Dimensions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6CAA6C,CAAC;AAG9E;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,UAAU,
|
|
1
|
+
{"version":3,"file":"Dimensions.d.ts","sourceRoot":"","sources":["../../../../src/internal/utils/Dimensions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6CAA6C,CAAC;AAG9E;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,UAAU,CAmB9C"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-theoplayer",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "8.0.0",
|
|
4
4
|
"description": "A THEOplayer video component for react-native.",
|
|
5
5
|
"main": "lib/commonjs/index",
|
|
6
6
|
"module": "lib/module/index",
|
|
@@ -25,7 +25,10 @@
|
|
|
25
25
|
],
|
|
26
26
|
"scripts": {
|
|
27
27
|
"typescript": "tsc --noEmit",
|
|
28
|
+
"prettier": "prettier --check .",
|
|
29
|
+
"prettier:fix": "prettier --write .",
|
|
28
30
|
"lint": "eslint \"**/*.{ts,tsx}\"",
|
|
31
|
+
"lint:fix": "npm run lint -- --fix",
|
|
29
32
|
"prepare": "bob build && husky install",
|
|
30
33
|
"pods": "cd example && pod-install --quiet",
|
|
31
34
|
"docs": "typedoc --treatWarningsAsErrors"
|
|
@@ -47,26 +50,28 @@
|
|
|
47
50
|
"registry": "https://registry.npmjs.org/"
|
|
48
51
|
},
|
|
49
52
|
"devDependencies": {
|
|
50
|
-
"@
|
|
51
|
-
"@
|
|
52
|
-
"@types/react
|
|
53
|
-
"eslint": "^8.
|
|
54
|
-
"
|
|
53
|
+
"@eslint/js": "^9.9.1",
|
|
54
|
+
"@react-native/eslint-config": "^0.74.87",
|
|
55
|
+
"@types/react": "^18.3.5",
|
|
56
|
+
"eslint": "^8.57.0",
|
|
57
|
+
"eslint-config-prettier": "^9.1.0",
|
|
58
|
+
"husky": "^9.1.5",
|
|
55
59
|
"pod-install": "^0.1.39",
|
|
56
|
-
"prettier": "^3.
|
|
60
|
+
"prettier": "^3.3.3",
|
|
57
61
|
"react": "^18.2.0",
|
|
58
|
-
"react-native": "^0.74.
|
|
62
|
+
"react-native": "^0.74.5",
|
|
59
63
|
"react-native-builder-bob": "^0.23.2",
|
|
60
|
-
"theoplayer": "^
|
|
61
|
-
"typedoc": "^0.25.
|
|
64
|
+
"theoplayer": "^8.0.0",
|
|
65
|
+
"typedoc": "^0.25.13",
|
|
62
66
|
"typedoc-plugin-external-resolver": "^1.0.3",
|
|
63
|
-
"typedoc-plugin-mdn-links": "^3.
|
|
64
|
-
"typescript": "5.
|
|
67
|
+
"typedoc-plugin-mdn-links": "^3.2.11",
|
|
68
|
+
"typescript": "5.1.6",
|
|
69
|
+
"typescript-eslint": "^8.4.0"
|
|
65
70
|
},
|
|
66
71
|
"peerDependencies": {
|
|
67
72
|
"react": "*",
|
|
68
73
|
"react-native": "*",
|
|
69
|
-
"theoplayer": "^6
|
|
74
|
+
"theoplayer": "^6 || ^7 || ^8"
|
|
70
75
|
},
|
|
71
76
|
"peerDependenciesMeta": {
|
|
72
77
|
"theoplayer": {
|
|
@@ -32,23 +32,22 @@ Pod::Spec.new do |s|
|
|
|
32
32
|
s.dependency "React-Core"
|
|
33
33
|
|
|
34
34
|
# THEOplayer core Dependency
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
35
|
+
puts "Adding THEOplayerSDK-core"
|
|
36
|
+
s.dependency "THEOplayerSDK-core", "~> 8.0"
|
|
37
|
+
|
|
38
|
+
if theofeatures.include?("GOOGLE_IMA")
|
|
38
39
|
puts "Adding THEOplayer-Integration-GoogleIMA"
|
|
39
|
-
s.dependency "THEOplayer-Integration-GoogleIMA
|
|
40
|
-
s.dependency "THEOplayer-Integration-GoogleIMA/Dependencies", "~> 7.12"
|
|
40
|
+
s.dependency "THEOplayer-Integration-GoogleIMA", "~> 8.0"
|
|
41
41
|
end
|
|
42
42
|
|
|
43
43
|
if theofeatures.include?("CHROMECAST")
|
|
44
44
|
puts "Adding THEOplayer-Integration-GoogleCast"
|
|
45
|
-
s.ios.dependency "THEOplayer-Integration-GoogleCast
|
|
46
|
-
s.ios.dependency "google-cast-sdk-dynamic-xcframework", "~> 4.8"
|
|
45
|
+
s.ios.dependency "THEOplayer-Integration-GoogleCast", "~> 8.0"
|
|
47
46
|
end
|
|
48
47
|
|
|
49
48
|
if theofeatures.include?("SIDELOADED_TEXTTRACKS")
|
|
50
49
|
puts "Adding THEOplayer-Connector-SideloadedSubtitle"
|
|
51
|
-
s.dependency "THEOplayer-Connector-SideloadedSubtitle", "~>
|
|
50
|
+
s.dependency "THEOplayer-Connector-SideloadedSubtitle", "~> 8.0"
|
|
52
51
|
end
|
|
53
52
|
|
|
54
53
|
end
|
|
@@ -39,7 +39,7 @@ export interface AdDescription {
|
|
|
39
39
|
/**
|
|
40
40
|
* The integration of the ad break.
|
|
41
41
|
*
|
|
42
|
-
* @defaultValue `'
|
|
42
|
+
* @defaultValue `'csai'`
|
|
43
43
|
*/
|
|
44
44
|
integration?: AdIntegrationKind;
|
|
45
45
|
|
|
@@ -88,8 +88,10 @@ export interface AdDescription {
|
|
|
88
88
|
|
|
89
89
|
/**
|
|
90
90
|
* The integration of an ad break, represented by a value from the following list:
|
|
91
|
-
* <br/> - `'
|
|
92
|
-
* <br/> - `'
|
|
91
|
+
* <br/> - `'csai'`: Default CSAI ad playback.
|
|
92
|
+
* <br/> - `'theo'`: Old naming for `'csai'` - Default ad playback. (Deprecated)
|
|
93
|
+
* <br/> - `'google-ima'`: {@link https://developers.google.com/interactive-media-ads/docs/sdks/html5|Google IMA}.
|
|
94
|
+
* <br/> - `'google-dai'`: {@link https://developers.google.com/ad-manager/dynamic-ad-insertion/sdk/html5 | Google DAI}.
|
|
93
95
|
* <br/> - `'spotx'`: {@link https://developer.spotxchange.com/|SpotX} pre-integrated ad playback.
|
|
94
96
|
* <br/> - `'freewheel'`: {@link https://vi.freewheel.tv/|FreeWheel} pre-integrated ad playback.
|
|
95
97
|
* <br/> - `'theoads'`: [Experimental] - API under development, do not use without consulting THEO Technologies.
|
|
@@ -102,7 +104,9 @@ export interface AdDescription {
|
|
|
102
104
|
export enum AdIntegrationKind {
|
|
103
105
|
freewheel = 'freewheel',
|
|
104
106
|
google_ima = 'google-ima',
|
|
107
|
+
google_dai = 'google-dai',
|
|
105
108
|
spotx = 'spotx',
|
|
109
|
+
csai = 'csai',
|
|
106
110
|
theo = 'theo',
|
|
107
111
|
theoads = 'theoads',
|
|
108
112
|
}
|
|
@@ -161,9 +161,9 @@ export class THEOplayerView extends PureComponent<React.PropsWithChildren<THEOpl
|
|
|
161
161
|
}
|
|
162
162
|
|
|
163
163
|
private reset() {
|
|
164
|
-
this.setState(
|
|
164
|
+
this.setState((prevState) => ({
|
|
165
165
|
...prevState,
|
|
166
|
-
error: undefined
|
|
166
|
+
error: undefined,
|
|
167
167
|
}));
|
|
168
168
|
}
|
|
169
169
|
|
|
@@ -25,7 +25,7 @@ export class DefaultNativePlayerState extends DefaultTextTrackState implements N
|
|
|
25
25
|
seeking = false;
|
|
26
26
|
volume = 1;
|
|
27
27
|
currentTime = 0;
|
|
28
|
-
duration =
|
|
28
|
+
duration = NaN;
|
|
29
29
|
playbackRate = 1;
|
|
30
30
|
preload: PreloadType = 'none';
|
|
31
31
|
aspectRatio: AspectRatio = AspectRatio.FIT;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
2
|
addTextTrackCue,
|
|
3
3
|
addTrack,
|
|
4
|
-
findTextTrackByUid,
|
|
4
|
+
findTextTrackByUid,
|
|
5
|
+
type LoadedMetadataEvent,
|
|
5
6
|
PlayerEventType,
|
|
6
7
|
removeTextTrackCue,
|
|
7
8
|
removeTrack,
|
|
@@ -16,7 +17,6 @@ import {
|
|
|
16
17
|
import { TextTrackState } from './NativePlayerState';
|
|
17
18
|
|
|
18
19
|
export class DefaultTextTrackState implements TextTrackState {
|
|
19
|
-
|
|
20
20
|
private _textTracks: TextTrack[] = [];
|
|
21
21
|
private _selectedTextTrack: number | undefined;
|
|
22
22
|
|
|
@@ -40,5 +40,4 @@ export interface TextTrackState {
|
|
|
40
40
|
selectedTextTrack: number | undefined;
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
-
export interface NativePlayerState extends PlayerConfigState, PlaybackState, TextTrackState, MediaTrackState {
|
|
44
|
-
}
|
|
43
|
+
export interface NativePlayerState extends PlayerConfigState, PlaybackState, TextTrackState, MediaTrackState {}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
import type { EventBroadcastAPI } from
|
|
2
|
-
import type { THEOplayer } from
|
|
3
|
-
import type { THEOplayerWebAdapter } from
|
|
4
|
-
import type { StringKeyOf } from
|
|
5
|
-
import type { PlayerEventMap } from
|
|
1
|
+
import type { EventBroadcastAPI } from 'react-native-theoplayer';
|
|
2
|
+
import type { THEOplayer } from 'react-native-theoplayer';
|
|
3
|
+
import type { THEOplayerWebAdapter } from '../THEOplayerWebAdapter';
|
|
4
|
+
import type { StringKeyOf } from '../../../api/event/EventDispatcher';
|
|
5
|
+
import type { PlayerEventMap } from 'react-native-theoplayer';
|
|
6
6
|
import type { Event as WebEvent, EventMap } from 'theoplayer';
|
|
7
|
-
import { AdEvent, PlayerEventType } from
|
|
8
|
-
import { DefaultWebEventDispatcher } from
|
|
7
|
+
import { AdEvent, PlayerEventType } from 'react-native-theoplayer';
|
|
8
|
+
import { DefaultWebEventDispatcher } from './web/DefaultWebEventDispatcher';
|
|
9
9
|
|
|
10
10
|
export class EventBroadcastAdapter extends DefaultWebEventDispatcher<EventMap<string>> implements EventBroadcastAPI {
|
|
11
|
-
|
|
12
11
|
constructor(private _player: THEOplayer) {
|
|
13
12
|
super();
|
|
14
13
|
}
|
|
@@ -27,10 +26,11 @@ export class EventBroadcastAdapter extends DefaultWebEventDispatcher<EventMap<st
|
|
|
27
26
|
|
|
28
27
|
function toNativeEvent<K extends StringKeyOf<PlayerEventMap>>(event: PlayerEventMap[K]): WebEvent | undefined {
|
|
29
28
|
switch (event.type) {
|
|
30
|
-
case PlayerEventType.AD_EVENT:
|
|
29
|
+
case PlayerEventType.AD_EVENT:
|
|
30
|
+
return toNativeAdEvent(event);
|
|
31
31
|
default: {
|
|
32
|
-
console.warn(`EventBroadcastAdapter: native event of type ${event?.type}} not supported`)
|
|
33
|
-
return undefined
|
|
32
|
+
console.warn(`EventBroadcastAdapter: native event of type ${event?.type}} not supported`);
|
|
33
|
+
return undefined;
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
36
|
}
|
|
@@ -39,6 +39,6 @@ function toNativeAdEvent(event: AdEvent): WebEvent | undefined {
|
|
|
39
39
|
return {
|
|
40
40
|
type: event.subType,
|
|
41
41
|
ad: event.ad,
|
|
42
|
-
date: event.date
|
|
42
|
+
date: event.date,
|
|
43
43
|
} as WebEvent;
|
|
44
44
|
}
|
|
@@ -1,66 +1,66 @@
|
|
|
1
|
-
import type { EventDispatcher, EventMap, StringKeyOf, EventListener } from
|
|
1
|
+
import type { EventDispatcher, EventMap, StringKeyOf, EventListener } from 'theoplayer';
|
|
2
2
|
|
|
3
3
|
export function arrayRemoveElement<T>(array: T[], element: T): boolean {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
4
|
+
const index = array.indexOf(element);
|
|
5
|
+
if (index === -1) {
|
|
6
|
+
return false;
|
|
7
|
+
}
|
|
8
|
+
arrayRemoveAt(array, index);
|
|
9
|
+
return true;
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
export function arrayRemoveAt<T>(array: T[], index: number): void {
|
|
13
|
-
|
|
13
|
+
array.splice(index, 1);
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
export class DefaultWebEventDispatcher<TMap extends EventMap<StringKeyOf<TMap>>> implements EventDispatcher<TMap> {
|
|
17
|
-
|
|
17
|
+
readonly _eventListeners: Map<StringKeyOf<TMap>, EventListener<TMap[StringKeyOf<TMap>]>[]> = new Map();
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
}
|
|
19
|
+
addEventListener<K extends StringKeyOf<TMap>>(types: K | K[], listener: EventListener<TMap[K]>): void {
|
|
20
|
+
if (typeof types === 'string') {
|
|
21
|
+
this.addSingleEventListener_(types, listener);
|
|
22
|
+
} else {
|
|
23
|
+
types.forEach((type) => {
|
|
24
|
+
this.addSingleEventListener_(type, listener);
|
|
25
|
+
});
|
|
27
26
|
}
|
|
27
|
+
}
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
}
|
|
29
|
+
private addSingleEventListener_<K extends StringKeyOf<TMap>>(type: K, listener: EventListener<TMap[K]>): void {
|
|
30
|
+
if (!this._eventListeners.has(type)) {
|
|
31
|
+
// @ts-ignore
|
|
32
|
+
this._eventListeners.set(type, [listener]);
|
|
33
|
+
} else {
|
|
34
|
+
// @ts-ignore
|
|
35
|
+
this._eventListeners.get(type)?.push(listener);
|
|
37
36
|
}
|
|
37
|
+
}
|
|
38
38
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
39
|
+
clearEventListeners(): void {
|
|
40
|
+
this._eventListeners.clear();
|
|
41
|
+
}
|
|
42
42
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
43
|
+
dispatchEvent = <K extends StringKeyOf<TMap>>(event: TMap[K]): void => {
|
|
44
|
+
const listeners = (this._eventListeners.get(event.type as K) ?? []).slice();
|
|
45
|
+
for (const listener of listeners) {
|
|
46
|
+
listener.call(this, event);
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
49
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
}
|
|
50
|
+
removeEventListener<K extends StringKeyOf<TMap>>(types: K | K[], listener: EventListener<TMap[K]>): void {
|
|
51
|
+
if (typeof types === 'string') {
|
|
52
|
+
this.removeSingleEventListener(types, listener);
|
|
53
|
+
} else {
|
|
54
|
+
types.forEach((type) => {
|
|
55
|
+
this.removeSingleEventListener(type, listener);
|
|
56
|
+
});
|
|
58
57
|
}
|
|
58
|
+
}
|
|
59
59
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
}
|
|
60
|
+
removeSingleEventListener<K extends StringKeyOf<TMap>>(type: K, listener: EventListener<TMap[K]>): void {
|
|
61
|
+
const listeners = this._eventListeners.get(type);
|
|
62
|
+
if (listeners) {
|
|
63
|
+
arrayRemoveElement(listeners, listener);
|
|
65
64
|
}
|
|
65
|
+
}
|
|
66
66
|
}
|
|
@@ -8,7 +8,10 @@ export class THEOplayerNativeCastAdapter implements CastAPI {
|
|
|
8
8
|
private readonly _chromecast: THEOplayerNativeChromecast;
|
|
9
9
|
private readonly _airplay: THEOplayerNativeAirplay | undefined;
|
|
10
10
|
|
|
11
|
-
constructor(
|
|
11
|
+
constructor(
|
|
12
|
+
private readonly _player: THEOplayer,
|
|
13
|
+
private readonly _view: THEOplayerView,
|
|
14
|
+
) {
|
|
12
15
|
this._chromecast = new THEOplayerNativeChromecast(this._player, this._view);
|
|
13
16
|
if (Platform.OS !== 'android') {
|
|
14
17
|
this._airplay = new THEOplayerNativeAirplay(this._player);
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import type { Event } from 'react-native-theoplayer';
|
|
2
2
|
|
|
3
3
|
export class BaseEvent<TType extends string = string> implements Event<TType> {
|
|
4
|
-
constructor(
|
|
4
|
+
constructor(
|
|
5
|
+
readonly type: TType,
|
|
6
|
+
readonly date: Date = new Date(),
|
|
7
|
+
) {}
|
|
5
8
|
}
|
|
@@ -71,13 +71,19 @@ export class DefaultPresentationModeChangeEvent extends BaseEvent<PlayerEventTyp
|
|
|
71
71
|
}
|
|
72
72
|
|
|
73
73
|
export class DefaultVolumeChangeEvent extends BaseEvent<PlayerEventType.VOLUME_CHANGE> implements VolumeChangeEvent {
|
|
74
|
-
constructor(
|
|
74
|
+
constructor(
|
|
75
|
+
public volume: number,
|
|
76
|
+
public muted: boolean,
|
|
77
|
+
) {
|
|
75
78
|
super(PlayerEventType.VOLUME_CHANGE);
|
|
76
79
|
}
|
|
77
80
|
}
|
|
78
81
|
|
|
79
82
|
export class DefaultResizeEvent extends BaseEvent<PlayerEventType.RESIZE> implements ResizeEvent {
|
|
80
|
-
constructor(
|
|
83
|
+
constructor(
|
|
84
|
+
public width: number,
|
|
85
|
+
public height: number,
|
|
86
|
+
) {
|
|
81
87
|
super(PlayerEventType.RESIZE);
|
|
82
88
|
}
|
|
83
89
|
}
|
|
@@ -89,13 +95,19 @@ export class DefaultErrorEvent extends BaseEvent<PlayerEventType.ERROR> implemen
|
|
|
89
95
|
}
|
|
90
96
|
|
|
91
97
|
export class DefaultProgressEvent extends BaseEvent<PlayerEventType.PROGRESS> implements ProgressEvent {
|
|
92
|
-
constructor(
|
|
98
|
+
constructor(
|
|
99
|
+
public seekable: TimeRange[],
|
|
100
|
+
public buffered: TimeRange[],
|
|
101
|
+
) {
|
|
93
102
|
super(PlayerEventType.PROGRESS);
|
|
94
103
|
}
|
|
95
104
|
}
|
|
96
105
|
|
|
97
106
|
export class DefaultTimeupdateEvent extends BaseEvent<PlayerEventType.TIME_UPDATE> implements TimeUpdateEvent {
|
|
98
|
-
constructor(
|
|
107
|
+
constructor(
|
|
108
|
+
public currentTime: number,
|
|
109
|
+
public currentProgramDateTime?: number,
|
|
110
|
+
) {
|
|
99
111
|
super(PlayerEventType.TIME_UPDATE);
|
|
100
112
|
}
|
|
101
113
|
}
|
|
@@ -113,25 +125,40 @@ export class DefaultRateChangeEvent extends BaseEvent<PlayerEventType.RATE_CHANG
|
|
|
113
125
|
}
|
|
114
126
|
|
|
115
127
|
export class DefaultSegmentNotFoundEvent extends BaseEvent<PlayerEventType.SEGMENT_NOT_FOUND> implements SegmentNotFoundEvent {
|
|
116
|
-
constructor(
|
|
128
|
+
constructor(
|
|
129
|
+
public readonly segmentStartTime: number,
|
|
130
|
+
public error: string,
|
|
131
|
+
public retryCount: number,
|
|
132
|
+
) {
|
|
117
133
|
super(PlayerEventType.SEGMENT_NOT_FOUND);
|
|
118
134
|
}
|
|
119
135
|
}
|
|
120
136
|
|
|
121
137
|
export class DefaultTextTrackListEvent extends BaseEvent<PlayerEventType.TEXT_TRACK_LIST> implements TextTrackListEvent {
|
|
122
|
-
constructor(
|
|
138
|
+
constructor(
|
|
139
|
+
public subType: TrackListEventType,
|
|
140
|
+
public track: TextTrack,
|
|
141
|
+
) {
|
|
123
142
|
super(PlayerEventType.TEXT_TRACK_LIST);
|
|
124
143
|
}
|
|
125
144
|
}
|
|
126
145
|
|
|
127
146
|
export class DefaultTextTrackEvent extends BaseEvent<PlayerEventType.TEXT_TRACK> implements TextTrackEvent {
|
|
128
|
-
constructor(
|
|
147
|
+
constructor(
|
|
148
|
+
public subType: TextTrackEventType,
|
|
149
|
+
public trackUid: number,
|
|
150
|
+
public cue: TextTrackCue,
|
|
151
|
+
) {
|
|
129
152
|
super(PlayerEventType.TEXT_TRACK);
|
|
130
153
|
}
|
|
131
154
|
}
|
|
132
155
|
|
|
133
156
|
export class DefaultMediaTrackListEvent extends BaseEvent<PlayerEventType.MEDIA_TRACK_LIST> implements MediaTrackListEvent {
|
|
134
|
-
constructor(
|
|
157
|
+
constructor(
|
|
158
|
+
public subType: TrackListEventType,
|
|
159
|
+
public trackType: MediaTrackType,
|
|
160
|
+
public track: MediaTrack,
|
|
161
|
+
) {
|
|
135
162
|
super(PlayerEventType.MEDIA_TRACK_LIST);
|
|
136
163
|
}
|
|
137
164
|
}
|
|
@@ -148,7 +175,10 @@ export class DefaultMediaTrackEvent extends BaseEvent<PlayerEventType.MEDIA_TRAC
|
|
|
148
175
|
}
|
|
149
176
|
|
|
150
177
|
export class DefaultAdEvent extends BaseEvent<PlayerEventType.AD_EVENT> implements AdEvent {
|
|
151
|
-
constructor(
|
|
178
|
+
constructor(
|
|
179
|
+
public subType: AdEventType,
|
|
180
|
+
public ad: Ad | AdBreak,
|
|
181
|
+
) {
|
|
152
182
|
super(PlayerEventType.AD_EVENT);
|
|
153
183
|
}
|
|
154
184
|
}
|
|
@@ -24,7 +24,7 @@ export const fullscreenAPI: FullscreenAPIMap | undefined = (() => {
|
|
|
24
24
|
'webkitFullscreenElement',
|
|
25
25
|
'webkitFullscreenEnabled',
|
|
26
26
|
'webkitfullscreenchange',
|
|
27
|
-
'webkitfullscreenerror'
|
|
27
|
+
'webkitfullscreenerror',
|
|
28
28
|
],
|
|
29
29
|
// Old WebKit (Safari 5.1)
|
|
30
30
|
[
|
|
@@ -33,12 +33,12 @@ export const fullscreenAPI: FullscreenAPIMap | undefined = (() => {
|
|
|
33
33
|
'webkitCurrentFullScreenElement',
|
|
34
34
|
'webkitCancelFullScreen',
|
|
35
35
|
'webkitfullscreenchange',
|
|
36
|
-
'webkitfullscreenerror'
|
|
36
|
+
'webkitfullscreenerror',
|
|
37
37
|
],
|
|
38
38
|
// Mozilla
|
|
39
39
|
['mozRequestFullScreen', 'mozCancelFullScreen', 'mozFullScreenElement', 'mozFullScreenEnabled', 'mozfullscreenchange', 'mozfullscreenerror'],
|
|
40
40
|
// Microsoft
|
|
41
|
-
['msRequestFullscreen', 'msExitFullscreen', 'msFullscreenElement', 'msFullscreenEnabled', 'MSFullscreenChange', 'MSFullscreenError']
|
|
41
|
+
['msRequestFullscreen', 'msExitFullscreen', 'msFullscreenElement', 'msFullscreenEnabled', 'MSFullscreenChange', 'MSFullscreenError'],
|
|
42
42
|
];
|
|
43
43
|
|
|
44
44
|
for (const browserMap of apiMap) {
|
|
@@ -50,7 +50,7 @@ export const fullscreenAPI: FullscreenAPIMap | undefined = (() => {
|
|
|
50
50
|
fullscreenElement_: browserMap[2],
|
|
51
51
|
fullscreenEnabled_: browserMap[3],
|
|
52
52
|
fullscreenchange_: browserMap[4],
|
|
53
|
-
fullscreenerror_: browserMap[5]
|
|
53
|
+
fullscreenerror_: browserMap[5],
|
|
54
54
|
} as FullscreenAPIMap;
|
|
55
55
|
}
|
|
56
56
|
}
|
|
@@ -10,7 +10,7 @@ import type {
|
|
|
10
10
|
import type { CacheTaskStatus } from 'react-native-theoplayer';
|
|
11
11
|
import { NativeModules } from 'react-native';
|
|
12
12
|
import type { DRMConfiguration } from 'react-native-theoplayer';
|
|
13
|
-
import { fromNativeCachingTaskParameters, NativeCachingTaskParameters } from
|
|
13
|
+
import { fromNativeCachingTaskParameters, NativeCachingTaskParameters } from './NativeCachingTaskParametersAdapter';
|
|
14
14
|
|
|
15
15
|
const NativeCacheModule = NativeModules.THEORCTCacheModule;
|
|
16
16
|
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
3
|
-
} from 'react-native-theoplayer';
|
|
4
|
-
import type { CachingPreferredTrackSelection } from "../../api/cache/CachingPreferredTrackSelection";
|
|
1
|
+
import type { CachingTaskParameters } from 'react-native-theoplayer';
|
|
2
|
+
import type { CachingPreferredTrackSelection } from '../../api/cache/CachingPreferredTrackSelection';
|
|
5
3
|
|
|
6
4
|
export interface NativeCachingTaskParameters {
|
|
7
5
|
readonly amount: number | string;
|
|
@@ -14,11 +12,11 @@ export interface NativeCachingTaskParameters {
|
|
|
14
12
|
export function fromNativeCachingTaskParameters(parameters: NativeCachingTaskParameters): CachingTaskParameters {
|
|
15
13
|
return {
|
|
16
14
|
amount: parameters.amount,
|
|
17
|
-
expirationDate: parameters?.expirationDate? new Date(parameters?.expirationDate) : undefined,
|
|
15
|
+
expirationDate: parameters?.expirationDate ? new Date(parameters?.expirationDate) : undefined,
|
|
18
16
|
bandwidth: parameters.bandwidth,
|
|
19
17
|
preferredTrackSelection: parameters.preferredTrackSelection,
|
|
20
|
-
allowsCellularAccess: parameters.allowsCellularAccess
|
|
21
|
-
}
|
|
18
|
+
allowsCellularAccess: parameters.allowsCellularAccess,
|
|
19
|
+
};
|
|
22
20
|
}
|
|
23
21
|
|
|
24
22
|
export function toNativeCachingTaskParameters(parameters: CachingTaskParameters): NativeCachingTaskParameters {
|
|
@@ -27,6 +25,6 @@ export function toNativeCachingTaskParameters(parameters: CachingTaskParameters)
|
|
|
27
25
|
expirationDate: parameters?.expirationDate?.getTime(),
|
|
28
26
|
bandwidth: parameters.bandwidth,
|
|
29
27
|
preferredTrackSelection: parameters.preferredTrackSelection,
|
|
30
|
-
allowsCellularAccess: parameters.allowsCellularAccess
|
|
31
|
-
}
|
|
28
|
+
allowsCellularAccess: parameters.allowsCellularAccess,
|
|
29
|
+
};
|
|
32
30
|
}
|
|
@@ -9,12 +9,14 @@ export function getFullscreenSize(): ScaledSize {
|
|
|
9
9
|
|
|
10
10
|
// Adjust for statusBar height on Android, depending on the device's current orientation.
|
|
11
11
|
if (Platform.OS === 'android' && Platform.Version >= 29) {
|
|
12
|
-
const statusBarHeight =
|
|
13
|
-
if (screenSize.width < screenSize.height) {
|
|
12
|
+
const statusBarHeight = StatusBar.currentHeight || 0;
|
|
13
|
+
if (screenSize.width < screenSize.height) {
|
|
14
|
+
// portrait
|
|
14
15
|
if (screenSize.height !== Dimensions.get('window').height + statusBarHeight) {
|
|
15
16
|
screenSize.height = screenSize.height - statusBarHeight;
|
|
16
17
|
}
|
|
17
|
-
} else {
|
|
18
|
+
} else {
|
|
19
|
+
// landscape
|
|
18
20
|
if (screenSize.width !== Dimensions.get('window').width) {
|
|
19
21
|
screenSize.width = screenSize.width - statusBarHeight;
|
|
20
22
|
}
|