react-native-theoplayer 3.7.1 → 3.8.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 +13 -1
- package/android/build.gradle +1 -1
- package/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/6.10.0/ads-wrapper-6.10.0.aar +0 -0
- package/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/{4.8.0/ads-wrapper-4.8.0.pom → 6.10.0/ads-wrapper-6.10.0.pom} +1 -1
- 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 +4 -0
- package/android/src/main/java/com/theoplayer/ads/AdEventAdapter.kt +9 -4
- package/android/src/main/java/com/theoplayer/ads/AdsModule.kt +1 -1
- package/android/src/main/java/com/theoplayer/broadcast/EventBroadcastModule.kt +1 -1
- package/android/src/main/java/com/theoplayer/cache/CacheModule.kt +1 -1
- package/android/src/main/java/com/theoplayer/cast/CastModule.kt +1 -1
- package/android/src/main/java/com/theoplayer/drm/ContentProtectionModule.kt +1 -1
- package/android/src/main/java/com/theoplayer/player/PlayerModule.kt +1 -1
- package/ios/THEOplayerRCTBridge.m +6 -6
- package/ios/THEOplayerRCTPlayerAPI.swift +25 -25
- package/ios/ads/THEOplayerRCTAdsAPI.swift +17 -17
- package/ios/cache/THEOplayerRCTCacheAPI.swift +29 -29
- package/ios/casting/THEOplayerRCTCastAPI.swift +9 -9
- package/ios/contentprotection/THEOplayerRCTContentProtectionAPI.swift +22 -22
- package/ios/eventBroadcasting/THEOplayerRCTEventBroadcastAPI.swift +5 -5
- package/lib/commonjs/api/config/PlayerConfiguration.js.map +1 -1
- package/lib/commonjs/internal/adapter/THEOplayerAdapter.js +18 -17
- package/lib/commonjs/internal/adapter/THEOplayerAdapter.js.map +1 -1
- package/lib/commonjs/internal/adapter/abr/AbrAdapter.js +2 -1
- package/lib/commonjs/internal/adapter/abr/AbrAdapter.js.map +1 -1
- package/lib/commonjs/internal/adapter/ads/THEOplayerNativeAdsAdapter.js +7 -6
- package/lib/commonjs/internal/adapter/ads/THEOplayerNativeAdsAdapter.js.map +1 -1
- package/lib/commonjs/internal/adapter/ads/THEOplayerNativeGoogleDAI.js +5 -4
- package/lib/commonjs/internal/adapter/ads/THEOplayerNativeGoogleDAI.js.map +1 -1
- package/lib/commonjs/internal/adapter/broadcast/EventBroadcastAdapter.js +2 -1
- package/lib/commonjs/internal/adapter/broadcast/EventBroadcastAdapter.js.map +1 -1
- package/lib/commonjs/internal/adapter/cast/THEOplayerNativeAirplay.js +5 -4
- package/lib/commonjs/internal/adapter/cast/THEOplayerNativeAirplay.js.map +1 -1
- package/lib/commonjs/internal/adapter/cast/THEOplayerNativeChromecast.js +7 -6
- package/lib/commonjs/internal/adapter/cast/THEOplayerNativeChromecast.js.map +1 -1
- package/lib/commonjs/internal/adapter/track/TextTrackStyleAdapter.js +11 -10
- package/lib/commonjs/internal/adapter/track/TextTrackStyleAdapter.js.map +1 -1
- package/lib/commonjs/internal/cache/MediaCache.js +4 -3
- package/lib/commonjs/internal/cache/MediaCache.js.map +1 -1
- package/lib/commonjs/internal/cache/NativeCachingTaskAdapter.js +5 -4
- package/lib/commonjs/internal/cache/NativeCachingTaskAdapter.js.map +1 -1
- package/lib/commonjs/internal/drm/ContentProtectionRegistry.js +23 -22
- package/lib/commonjs/internal/drm/ContentProtectionRegistry.js.map +1 -1
- package/lib/module/api/config/PlayerConfiguration.js.map +1 -1
- package/lib/module/internal/adapter/THEOplayerAdapter.js +18 -17
- package/lib/module/internal/adapter/THEOplayerAdapter.js.map +1 -1
- package/lib/module/internal/adapter/abr/AbrAdapter.js +2 -1
- package/lib/module/internal/adapter/abr/AbrAdapter.js.map +1 -1
- package/lib/module/internal/adapter/ads/THEOplayerNativeAdsAdapter.js +7 -6
- package/lib/module/internal/adapter/ads/THEOplayerNativeAdsAdapter.js.map +1 -1
- package/lib/module/internal/adapter/ads/THEOplayerNativeGoogleDAI.js +5 -4
- package/lib/module/internal/adapter/ads/THEOplayerNativeGoogleDAI.js.map +1 -1
- package/lib/module/internal/adapter/broadcast/EventBroadcastAdapter.js +2 -1
- package/lib/module/internal/adapter/broadcast/EventBroadcastAdapter.js.map +1 -1
- package/lib/module/internal/adapter/cast/THEOplayerNativeAirplay.js +5 -4
- package/lib/module/internal/adapter/cast/THEOplayerNativeAirplay.js.map +1 -1
- package/lib/module/internal/adapter/cast/THEOplayerNativeChromecast.js +7 -6
- package/lib/module/internal/adapter/cast/THEOplayerNativeChromecast.js.map +1 -1
- package/lib/module/internal/adapter/track/TextTrackStyleAdapter.js +11 -10
- package/lib/module/internal/adapter/track/TextTrackStyleAdapter.js.map +1 -1
- package/lib/module/internal/cache/MediaCache.js +4 -3
- package/lib/module/internal/cache/MediaCache.js.map +1 -1
- package/lib/module/internal/cache/NativeCachingTaskAdapter.js +5 -4
- package/lib/module/internal/cache/NativeCachingTaskAdapter.js.map +1 -1
- package/lib/module/internal/drm/ContentProtectionRegistry.js +23 -22
- package/lib/module/internal/drm/ContentProtectionRegistry.js.map +1 -1
- package/lib/typescript/api/config/PlayerConfiguration.d.ts +10 -0
- package/package.json +1 -1
- package/react-native-theoplayer.podspec +11 -6
- package/src/api/config/PlayerConfiguration.ts +11 -0
- package/src/internal/adapter/THEOplayerAdapter.ts +19 -17
- package/src/internal/adapter/abr/AbrAdapter.ts +3 -1
- package/src/internal/adapter/ads/THEOplayerNativeAdsAdapter.ts +8 -6
- package/src/internal/adapter/ads/THEOplayerNativeGoogleDAI.ts +6 -4
- package/src/internal/adapter/broadcast/EventBroadcastAdapter.ts +3 -1
- package/src/internal/adapter/cast/THEOplayerNativeAirplay.ts +6 -4
- package/src/internal/adapter/cast/THEOplayerNativeChromecast.ts +8 -6
- package/src/internal/adapter/track/TextTrackStyleAdapter.ts +11 -10
- package/src/internal/cache/MediaCache.ts +5 -3
- package/src/internal/cache/NativeCachingTaskAdapter.ts +6 -4
- package/src/internal/drm/ContentProtectionRegistry.ts +24 -22
- package/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/4.8.0/ads-wrapper-4.8.0.aar +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -5,11 +5,23 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.1.0/)
|
|
6
6
|
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [3.8.0] - 24-02-23
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
|
|
12
|
+
- Renamed native modules to avoid name collisions with external packages.
|
|
13
|
+
|
|
14
|
+
### Added
|
|
15
|
+
|
|
16
|
+
- Added `adbreakbegin` and `adbreakend` events for Google IMA on Android.
|
|
17
|
+
- Added `liveOffset` property to `PlayerConfiguration`, allowing to set a custom offset from the live point.
|
|
18
|
+
- Added a second, alternative config filename to the iOS podspec setup to prevent a react-native-theoplayer module resolving clash.
|
|
19
|
+
|
|
8
20
|
## [3.7.1] - 24-02-09
|
|
9
21
|
|
|
10
22
|
### Fixed
|
|
11
23
|
|
|
12
|
-
- Fixed a dependency issue on iOS when using chromecast or
|
|
24
|
+
- Fixed a dependency issue on iOS when using chromecast or Google IMA features.
|
|
13
25
|
|
|
14
26
|
## [3.7.0] - 24-02-09
|
|
15
27
|
|
package/android/build.gradle
CHANGED
|
@@ -117,7 +117,7 @@ dependencies {
|
|
|
117
117
|
println("Using THEOplayer (${versionString(theoplayer_sdk_version)})")
|
|
118
118
|
implementation "com.theoplayer.theoplayer-sdk-android:core:${theoplayer_sdk_version}"
|
|
119
119
|
|
|
120
|
-
implementation "com.theoplayer.theoplayer-sdk-android:ads-wrapper:
|
|
120
|
+
implementation "com.theoplayer.theoplayer-sdk-android:ads-wrapper:6.10.0"
|
|
121
121
|
|
|
122
122
|
if (enabledMediaSession) {
|
|
123
123
|
println("Enable THEOplayer MediaSession extension (${versionString(theoplayer_mediasession_version)})")
|
|
Binary file
|
package/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/maven-metadata-local.xml
CHANGED
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
<groupId>com.theoplayer.theoplayer-sdk-android</groupId>
|
|
4
4
|
<artifactId>ads-wrapper</artifactId>
|
|
5
5
|
<versioning>
|
|
6
|
-
<latest>
|
|
7
|
-
<release>
|
|
6
|
+
<latest>6.10.0</latest>
|
|
7
|
+
<release>6.10.0</release>
|
|
8
8
|
<versions>
|
|
9
|
-
<version>
|
|
9
|
+
<version>6.10.0</version>
|
|
10
10
|
</versions>
|
|
11
|
-
<lastUpdated>
|
|
11
|
+
<lastUpdated>20240221111544</lastUpdated>
|
|
12
12
|
</versioning>
|
|
13
13
|
</metadata>
|
|
@@ -17,6 +17,7 @@ private const val PROP_LICENSE = "license"
|
|
|
17
17
|
private const val PROP_LICENSE_URL = "licenseUrl"
|
|
18
18
|
private const val PROP_PRELOAD = "preload"
|
|
19
19
|
private const val PROP_LANGUAGE = "language"
|
|
20
|
+
private const val PROP_LIVE_OFFSET = "liveOffset"
|
|
20
21
|
private const val PROP_UI_ENABLED = "uiEnabled"
|
|
21
22
|
private const val PROP_CAST_STRATEGY = "strategy"
|
|
22
23
|
private const val PROP_RETRY_CONFIG = "retryConfiguration"
|
|
@@ -48,6 +49,9 @@ class PlayerConfigAdapter(private val configProps: ReadableMap?) {
|
|
|
48
49
|
if (hasKey(PROP_RETRY_CONFIG)) {
|
|
49
50
|
networkConfiguration(networkConfig())
|
|
50
51
|
}
|
|
52
|
+
if (hasKey(PROP_LIVE_OFFSET)) {
|
|
53
|
+
liveOffset(getDouble(PROP_LIVE_OFFSET))
|
|
54
|
+
}
|
|
51
55
|
if (hasKey(PROP_UI_CONFIGURATION)) {
|
|
52
56
|
ui(uiConfig())
|
|
53
57
|
}
|
|
@@ -4,6 +4,7 @@ import com.facebook.react.bridge.Arguments
|
|
|
4
4
|
import com.facebook.react.bridge.ReadableMap
|
|
5
5
|
import com.theoplayer.android.api.ads.wrapper.AdsApiWrapper
|
|
6
6
|
import com.facebook.react.bridge.WritableMap
|
|
7
|
+
import com.google.ads.interactivemedia.v3.api.AdError
|
|
7
8
|
import com.theoplayer.android.api.ads.Ad
|
|
8
9
|
import com.theoplayer.android.api.ads.AdBreak
|
|
9
10
|
import com.theoplayer.android.api.ads.GoogleImaAd
|
|
@@ -30,7 +31,9 @@ private val ALL_AD_EVENTS = arrayOf(
|
|
|
30
31
|
GoogleImaAdEventType.SKIPPED,
|
|
31
32
|
GoogleImaAdEventType.AD_ERROR,
|
|
32
33
|
GoogleImaAdEventType.AD_BUFFERING,
|
|
33
|
-
GoogleImaAdEventType.AD_BREAK_FETCH_ERROR
|
|
34
|
+
GoogleImaAdEventType.AD_BREAK_FETCH_ERROR,
|
|
35
|
+
GoogleImaAdEventType.CONTENT_PAUSE_REQUESTED,
|
|
36
|
+
GoogleImaAdEventType.CONTENT_RESUME_REQUESTED
|
|
34
37
|
)
|
|
35
38
|
|
|
36
39
|
class AdEventAdapter(private val adsApi: AdsApiWrapper, eventEmitter: AdEventEmitter) {
|
|
@@ -42,7 +45,7 @@ class AdEventAdapter(private val adsApi: AdsApiWrapper, eventEmitter: AdEventEmi
|
|
|
42
45
|
|
|
43
46
|
init {
|
|
44
47
|
eventListener = object : AdEventListener {
|
|
45
|
-
override fun <E : AdEvent<*>?> onAdEvent(type: EventType<E>?, ad: Ad?) {
|
|
48
|
+
override fun <E : AdEvent<*>?> onAdEvent(type: EventType<E>?, ad: Ad?, adData: Map<String, String>?, adError: AdError?) {
|
|
46
49
|
val payload = Arguments.createMap()
|
|
47
50
|
if (type != null) {
|
|
48
51
|
payload.putString(EVENT_PROP_TYPE, mapAdType(type))
|
|
@@ -53,7 +56,7 @@ class AdEventAdapter(private val adsApi: AdsApiWrapper, eventEmitter: AdEventEmi
|
|
|
53
56
|
eventEmitter.emit(payload)
|
|
54
57
|
}
|
|
55
58
|
|
|
56
|
-
override fun <E : AdEvent<*>?> onAdBreakEvent(type: EventType<E>?, adBreak: AdBreak?) {
|
|
59
|
+
override fun <E : AdEvent<*>?> onAdBreakEvent(type: EventType<E>?, adBreak: AdBreak?, adData: Map<String, String>?, adError: AdError?) {
|
|
57
60
|
val payload = Arguments.createMap()
|
|
58
61
|
if (type != null) {
|
|
59
62
|
payload.putString(EVENT_PROP_TYPE, mapAdType(type))
|
|
@@ -106,7 +109,7 @@ class AdEventAdapter(private val adsApi: AdsApiWrapper, eventEmitter: AdEventEmi
|
|
|
106
109
|
"aderror" -> GoogleImaAdEventType.AD_ERROR
|
|
107
110
|
"adbuffering" -> GoogleImaAdEventType.AD_BUFFERING
|
|
108
111
|
"adbreakbegin" -> GoogleImaAdEventType.AD_BREAK_STARTED
|
|
109
|
-
"adbreakend" -> GoogleImaAdEventType.
|
|
112
|
+
"adbreakend" -> GoogleImaAdEventType.AD_BREAK_ENDED
|
|
110
113
|
else -> null /*unknown*/
|
|
111
114
|
}
|
|
112
115
|
}
|
|
@@ -122,6 +125,8 @@ class AdEventAdapter(private val adsApi: AdsApiWrapper, eventEmitter: AdEventEmi
|
|
|
122
125
|
GoogleImaAdEventType.SKIPPED -> "adskip"
|
|
123
126
|
GoogleImaAdEventType.AD_ERROR -> "aderror"
|
|
124
127
|
GoogleImaAdEventType.AD_BUFFERING -> "adbuffering"
|
|
128
|
+
GoogleImaAdEventType.CONTENT_PAUSE_REQUESTED -> "adbreakbegin"
|
|
129
|
+
GoogleImaAdEventType.CONTENT_RESUME_REQUESTED -> "adbreakend"
|
|
125
130
|
GoogleImaAdEventType.AD_BREAK_STARTED -> "adbreakbegin"
|
|
126
131
|
GoogleImaAdEventType.AD_BREAK_ENDED -> "adbreakend"
|
|
127
132
|
GoogleImaAdEventType.AD_BREAK_FETCH_ERROR -> "aderror"
|
|
@@ -9,7 +9,7 @@ import com.theoplayer.util.ViewResolver
|
|
|
9
9
|
import com.theoplayer.ReactTHEOplayerView
|
|
10
10
|
import com.theoplayer.android.api.error.THEOplayerException
|
|
11
11
|
|
|
12
|
-
private const val TAG = "
|
|
12
|
+
private const val TAG = "THEORCTAdsModule"
|
|
13
13
|
|
|
14
14
|
class AdsModule(context: ReactApplicationContext) : ReactContextBaseJavaModule(context) {
|
|
15
15
|
private val sourceHelper = SourceAdapter()
|
|
@@ -9,7 +9,7 @@ import com.facebook.react.module.annotations.ReactModule
|
|
|
9
9
|
import com.theoplayer.ReactTHEOplayerView
|
|
10
10
|
import com.theoplayer.util.ViewResolver
|
|
11
11
|
|
|
12
|
-
private const val TAG = "
|
|
12
|
+
private const val TAG = "THEORCTEventBroadcastModule"
|
|
13
13
|
|
|
14
14
|
@ReactModule(name = TAG)
|
|
15
15
|
class EventBroadcastModule(context: ReactApplicationContext) : ReactContextBaseJavaModule(context) {
|
|
@@ -30,7 +30,7 @@ import com.theoplayer.source.SourceAdapter
|
|
|
30
30
|
import org.json.JSONException
|
|
31
31
|
import org.json.JSONObject
|
|
32
32
|
|
|
33
|
-
private const val TAG = "
|
|
33
|
+
private const val TAG = "THEORCTCacheModule"
|
|
34
34
|
|
|
35
35
|
private const val PROP_STATUS = "status"
|
|
36
36
|
private const val PROP_ID = "id"
|
|
@@ -14,7 +14,7 @@ class CastModule(context: ReactApplicationContext) : ReactContextBaseJavaModule(
|
|
|
14
14
|
private val viewResolver: ViewResolver = ViewResolver(context)
|
|
15
15
|
|
|
16
16
|
override fun getName(): String {
|
|
17
|
-
return "
|
|
17
|
+
return "THEORCTCastModule"
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
@ReactMethod
|
|
@@ -19,7 +19,7 @@ data class BridgeRequest(
|
|
|
19
19
|
val onTimeout: Runnable
|
|
20
20
|
)
|
|
21
21
|
|
|
22
|
-
private const val TAG = "
|
|
22
|
+
private const val TAG = "THEORCTContentProtectionModule"
|
|
23
23
|
|
|
24
24
|
private const val EVENT_CERTIFICATE_REQUEST = "onCertificateRequest"
|
|
25
25
|
private const val EVENT_CERTIFICATE_REQUEST_PROCESSED_AS_REQUEST = "onCertificateRequestProcessedAsRequest"
|
|
@@ -14,7 +14,7 @@ import com.theoplayer.presentation.PipConfigAdapter
|
|
|
14
14
|
import com.theoplayer.track.TextTrackStyleAdapter
|
|
15
15
|
import com.theoplayer.util.ViewResolver
|
|
16
16
|
|
|
17
|
-
private const val TAG = "
|
|
17
|
+
private const val TAG = "THEORCTPlayerModule"
|
|
18
18
|
|
|
19
19
|
@Suppress("unused")
|
|
20
20
|
class PlayerModule(context: ReactApplicationContext) : ReactContextBaseJavaModule(context) {
|
|
@@ -57,7 +57,7 @@ RCT_EXTERN_METHOD(destroy:(nonnull NSNumber *)node);
|
|
|
57
57
|
// ----------------------------------------------------------------------------
|
|
58
58
|
// Player Module
|
|
59
59
|
// ----------------------------------------------------------------------------
|
|
60
|
-
@interface RCT_EXTERN_REMAP_MODULE(
|
|
60
|
+
@interface RCT_EXTERN_REMAP_MODULE(THEORCTPlayerModule, THEOplayerRCTPlayerAPI, NSObject)
|
|
61
61
|
|
|
62
62
|
RCT_EXTERN_METHOD(setPaused:(nonnull NSNumber *)node
|
|
63
63
|
paused:(BOOL)paused)
|
|
@@ -116,7 +116,7 @@ RCT_EXTERN_METHOD(setTextTrackStyle:(nonnull NSNumber *)node
|
|
|
116
116
|
// Ads Module
|
|
117
117
|
// ----------------------------------------------------------------------------
|
|
118
118
|
|
|
119
|
-
@interface RCT_EXTERN_REMAP_MODULE(
|
|
119
|
+
@interface RCT_EXTERN_REMAP_MODULE(THEORCTAdsModule, THEOplayerRCTAdsAPI, NSObject)
|
|
120
120
|
|
|
121
121
|
RCT_EXTERN_METHOD(skip:(nonnull NSNumber *)node)
|
|
122
122
|
|
|
@@ -161,7 +161,7 @@ RCT_EXTERN_METHOD(daiStreamTimeForContentTime:(nonnull NSNumber *)node
|
|
|
161
161
|
// ----------------------------------------------------------------------------
|
|
162
162
|
// ContentProtection Module
|
|
163
163
|
// ----------------------------------------------------------------------------
|
|
164
|
-
@interface RCT_EXTERN_REMAP_MODULE(
|
|
164
|
+
@interface RCT_EXTERN_REMAP_MODULE(THEORCTContentProtectionModule, THEOplayerRCTContentProtectionAPI, RCTEventEmitter)
|
|
165
165
|
|
|
166
166
|
RCT_EXTERN_METHOD(onBuildProcessed:(NSDictionary)result)
|
|
167
167
|
RCT_EXTERN_METHOD(onCertificateRequestProcessedAsRequest:(NSDictionary)result)
|
|
@@ -180,7 +180,7 @@ RCT_EXTERN_METHOD(registerContentProtectionIntegration:(nonnull NSString *)integ
|
|
|
180
180
|
// Cast Module
|
|
181
181
|
// ----------------------------------------------------------------------------
|
|
182
182
|
|
|
183
|
-
@interface RCT_EXTERN_REMAP_MODULE(
|
|
183
|
+
@interface RCT_EXTERN_REMAP_MODULE(THEORCTCastModule, THEOplayerRCTCastAPI, NSObject)
|
|
184
184
|
|
|
185
185
|
RCT_EXTERN_METHOD(casting:(nonnull NSNumber *)node
|
|
186
186
|
resolver:(RCTPromiseResolveBlock)resolve
|
|
@@ -221,7 +221,7 @@ RCT_EXTERN_METHOD(airplayStop:(nonnull NSNumber *)node)
|
|
|
221
221
|
// ----------------------------------------------------------------------------
|
|
222
222
|
// Cache Module
|
|
223
223
|
// ----------------------------------------------------------------------------
|
|
224
|
-
@interface RCT_EXTERN_REMAP_MODULE(
|
|
224
|
+
@interface RCT_EXTERN_REMAP_MODULE(THEORCTCacheModule, THEOplayerRCTCacheAPI, RCTEventEmitter)
|
|
225
225
|
|
|
226
226
|
RCT_EXTERN_METHOD(getInitialState:(RCTPromiseResolveBlock)resolve
|
|
227
227
|
rejecter:(RCTPromiseRejectBlock)reject)
|
|
@@ -243,7 +243,7 @@ RCT_EXTERN_METHOD(renewLicense:(nonnull NSString *)id
|
|
|
243
243
|
// ----------------------------------------------------------------------------
|
|
244
244
|
// Broadcast Module
|
|
245
245
|
// ----------------------------------------------------------------------------
|
|
246
|
-
@interface RCT_EXTERN_REMAP_MODULE(
|
|
246
|
+
@interface RCT_EXTERN_REMAP_MODULE(THEORCTEventBroadcastModule, THEOplayerRCTEventBroadcastAPI, NSObject)
|
|
247
247
|
|
|
248
248
|
RCT_EXTERN_METHOD(broadcastEvent:(nonnull NSNumber *)node
|
|
249
249
|
event:(NSDictionary)event)
|
|
@@ -28,15 +28,15 @@ let TTS_PROP_COLOR_A = "a"
|
|
|
28
28
|
@objc(THEOplayerRCTPlayerAPI)
|
|
29
29
|
class THEOplayerRCTPlayerAPI: NSObject, RCTBridgeModule {
|
|
30
30
|
@objc var bridge: RCTBridge!
|
|
31
|
-
|
|
31
|
+
|
|
32
32
|
static func moduleName() -> String! {
|
|
33
|
-
return "
|
|
33
|
+
return "THEORCTPlayerModule"
|
|
34
34
|
}
|
|
35
|
-
|
|
35
|
+
|
|
36
36
|
static func requiresMainQueueSetup() -> Bool {
|
|
37
37
|
return false
|
|
38
38
|
}
|
|
39
|
-
|
|
39
|
+
|
|
40
40
|
@objc(setPaused:paused:)
|
|
41
41
|
func setPaused(_ node: NSNumber, paused: Bool) -> Void {
|
|
42
42
|
DispatchQueue.main.async {
|
|
@@ -52,7 +52,7 @@ class THEOplayerRCTPlayerAPI: NSObject, RCTBridgeModule {
|
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
|
-
|
|
55
|
+
|
|
56
56
|
@objc(setSource:src:)
|
|
57
57
|
func setSource(_ node: NSNumber, src: NSDictionary) -> Void {
|
|
58
58
|
DispatchQueue.main.async {
|
|
@@ -71,7 +71,7 @@ class THEOplayerRCTPlayerAPI: NSObject, RCTBridgeModule {
|
|
|
71
71
|
}
|
|
72
72
|
}
|
|
73
73
|
}
|
|
74
|
-
|
|
74
|
+
|
|
75
75
|
private func setNewSourceDescription(player: THEOplayer, srcDescription: SourceDescription) {
|
|
76
76
|
if DEBUG_PLAYER_API { PrintUtils.printLog(logText: "[NATIVE] Setting new source on TheoPlayer") }
|
|
77
77
|
#if canImport(THEOplayerConnectorSideloadedSubtitle)
|
|
@@ -80,12 +80,12 @@ class THEOplayerRCTPlayerAPI: NSObject, RCTBridgeModule {
|
|
|
80
80
|
player.source = srcDescription
|
|
81
81
|
#endif
|
|
82
82
|
}
|
|
83
|
-
|
|
83
|
+
|
|
84
84
|
@objc(setABRConfig:abrConfig:)
|
|
85
85
|
func setABRConfig(_ node: NSNumber, setABRConfig: NSDictionary) -> Void {
|
|
86
86
|
if DEBUG_PLAYER_API { print(ERROR_MESSAGE_PLAYER_ABR_UNSUPPORTED_FEATURE) }
|
|
87
87
|
}
|
|
88
|
-
|
|
88
|
+
|
|
89
89
|
@objc(setCurrentTime:time:)
|
|
90
90
|
func setCurrentTime(_ node: NSNumber, time: NSNumber) -> Void {
|
|
91
91
|
DispatchQueue.main.async {
|
|
@@ -97,7 +97,7 @@ class THEOplayerRCTPlayerAPI: NSObject, RCTBridgeModule {
|
|
|
97
97
|
}
|
|
98
98
|
}
|
|
99
99
|
}
|
|
100
|
-
|
|
100
|
+
|
|
101
101
|
@objc(setMuted:muted:)
|
|
102
102
|
func setMuted(_ node: NSNumber, muted: Bool) -> Void {
|
|
103
103
|
DispatchQueue.main.async {
|
|
@@ -110,12 +110,12 @@ class THEOplayerRCTPlayerAPI: NSObject, RCTBridgeModule {
|
|
|
110
110
|
}
|
|
111
111
|
}
|
|
112
112
|
}
|
|
113
|
-
|
|
113
|
+
|
|
114
114
|
@objc(setVolume:volume:)
|
|
115
115
|
func setVolume(_ node: NSNumber, volume: NSNumber) -> Void {
|
|
116
116
|
if DEBUG_PLAYER_API { PrintUtils.printLog(logText: "[NATIVE] Setting volume: TheoPlayer does not handle volume changes for iOS. This is handled by the device.") }
|
|
117
117
|
}
|
|
118
|
-
|
|
118
|
+
|
|
119
119
|
@objc(setPlaybackRate:playbackRate:)
|
|
120
120
|
func setPlaybackRate(_ node: NSNumber, playbackRate: NSNumber) -> Void {
|
|
121
121
|
DispatchQueue.main.async {
|
|
@@ -129,7 +129,7 @@ class THEOplayerRCTPlayerAPI: NSObject, RCTBridgeModule {
|
|
|
129
129
|
}
|
|
130
130
|
}
|
|
131
131
|
}
|
|
132
|
-
|
|
132
|
+
|
|
133
133
|
@objc(setPresentationMode:presentationMode:)
|
|
134
134
|
func setPresentationMode(_ node: NSNumber, presentationMode: String) -> Void {
|
|
135
135
|
DispatchQueue.main.async {
|
|
@@ -139,7 +139,7 @@ class THEOplayerRCTPlayerAPI: NSObject, RCTBridgeModule {
|
|
|
139
139
|
}
|
|
140
140
|
}
|
|
141
141
|
}
|
|
142
|
-
|
|
142
|
+
|
|
143
143
|
@objc(setAspectRatio:ratio:)
|
|
144
144
|
func setAspectRatio(_ node: NSNumber, ratio: String) -> Void {
|
|
145
145
|
DispatchQueue.main.async {
|
|
@@ -153,7 +153,7 @@ class THEOplayerRCTPlayerAPI: NSObject, RCTBridgeModule {
|
|
|
153
153
|
}
|
|
154
154
|
}
|
|
155
155
|
}
|
|
156
|
-
|
|
156
|
+
|
|
157
157
|
@objc(setPipConfig:pipConfig:)
|
|
158
158
|
func setPipConfig(_ node: NSNumber, pipConfig: NSDictionary) -> Void {
|
|
159
159
|
DispatchQueue.main.async {
|
|
@@ -163,13 +163,13 @@ class THEOplayerRCTPlayerAPI: NSObject, RCTBridgeModule {
|
|
|
163
163
|
}
|
|
164
164
|
}
|
|
165
165
|
}
|
|
166
|
-
|
|
166
|
+
|
|
167
167
|
private func parsePipConfig(configDict: NSDictionary) -> PipConfig {
|
|
168
168
|
var pipConfig = PipConfig()
|
|
169
169
|
pipConfig.canStartPictureInPictureAutomaticallyFromInline = configDict["startsAutomatically"] as? Bool ?? false
|
|
170
170
|
return pipConfig
|
|
171
171
|
}
|
|
172
|
-
|
|
172
|
+
|
|
173
173
|
@objc(setBackgroundAudioConfig:backgroundAudioConfig:)
|
|
174
174
|
func setBackgroundAudioConfig(_ node: NSNumber, backgroundAudioConfig: NSDictionary) -> Void {
|
|
175
175
|
DispatchQueue.main.async {
|
|
@@ -179,13 +179,13 @@ class THEOplayerRCTPlayerAPI: NSObject, RCTBridgeModule {
|
|
|
179
179
|
}
|
|
180
180
|
}
|
|
181
181
|
}
|
|
182
|
-
|
|
182
|
+
|
|
183
183
|
private func parseBackgroundAudioConfig(configDict: NSDictionary) -> BackgroundAudioConfig {
|
|
184
184
|
var backgroundAudio = BackgroundAudioConfig()
|
|
185
185
|
backgroundAudio.enabled = configDict["enabled"] as? Bool ?? false
|
|
186
186
|
return backgroundAudio
|
|
187
187
|
}
|
|
188
|
-
|
|
188
|
+
|
|
189
189
|
@objc(setSelectedTextTrack:uid:)
|
|
190
190
|
func setSelectedTextTrack(_ node: NSNumber, uid: NSNumber) -> Void {
|
|
191
191
|
DispatchQueue.main.async {
|
|
@@ -203,12 +203,12 @@ class THEOplayerRCTPlayerAPI: NSObject, RCTBridgeModule {
|
|
|
203
203
|
textTrack.mode = TextTrackMode.showing
|
|
204
204
|
} else if textTrack.mode == TextTrackMode.showing {
|
|
205
205
|
textTrack.mode = TextTrackMode.disabled
|
|
206
|
-
}
|
|
206
|
+
}
|
|
207
207
|
}
|
|
208
208
|
}
|
|
209
209
|
}
|
|
210
210
|
}
|
|
211
|
-
|
|
211
|
+
|
|
212
212
|
@objc(setSelectedAudioTrack:uid:)
|
|
213
213
|
func setSelectedAudioTrack(_ node: NSNumber, uid: NSNumber) -> Void {
|
|
214
214
|
DispatchQueue.main.async {
|
|
@@ -227,7 +227,7 @@ class THEOplayerRCTPlayerAPI: NSObject, RCTBridgeModule {
|
|
|
227
227
|
}
|
|
228
228
|
}
|
|
229
229
|
}
|
|
230
|
-
|
|
230
|
+
|
|
231
231
|
@objc(setSelectedVideoTrack:uid:)
|
|
232
232
|
func setSelectedVideoTrack(_ node: NSNumber, uid: NSNumber) -> Void {
|
|
233
233
|
DispatchQueue.main.async {
|
|
@@ -246,13 +246,13 @@ class THEOplayerRCTPlayerAPI: NSObject, RCTBridgeModule {
|
|
|
246
246
|
}
|
|
247
247
|
}
|
|
248
248
|
}
|
|
249
|
-
|
|
249
|
+
|
|
250
250
|
@objc(setTargetVideoQuality:uid:)
|
|
251
251
|
func setTargetVideoQuality(_ node: NSNumber, uid: [NSNumber]) -> Void {
|
|
252
252
|
if DEBUG_PLAYER_API { print(ERROR_MESSAGE_PLAYER_QUALITY_UNSUPPORTED_FEATURE) }
|
|
253
253
|
return
|
|
254
254
|
}
|
|
255
|
-
|
|
255
|
+
|
|
256
256
|
@objc(setPreload:type:)
|
|
257
257
|
func setPreload(_ node: NSNumber, type: String) -> Void {
|
|
258
258
|
DispatchQueue.main.async {
|
|
@@ -266,7 +266,7 @@ class THEOplayerRCTPlayerAPI: NSObject, RCTBridgeModule {
|
|
|
266
266
|
}
|
|
267
267
|
}
|
|
268
268
|
}
|
|
269
|
-
|
|
269
|
+
|
|
270
270
|
@objc(setTextTrackStyle:textTrackStyle:)
|
|
271
271
|
func setTextTrackStyle(_ node: NSNumber, textTrackStyle: NSDictionary) -> Void {
|
|
272
272
|
DispatchQueue.main.async {
|
|
@@ -306,5 +306,5 @@ class THEOplayerRCTPlayerAPI: NSObject, RCTBridgeModule {
|
|
|
306
306
|
}
|
|
307
307
|
}
|
|
308
308
|
}
|
|
309
|
-
|
|
309
|
+
|
|
310
310
|
}
|
|
@@ -25,11 +25,11 @@ let ERROR_MESSAGE_ADS_GET_SCHEDULED_ADBREAKS_UNDEFINED = "Undefined adbreaks arr
|
|
|
25
25
|
@objc(THEOplayerRCTAdsAPI)
|
|
26
26
|
class THEOplayerRCTAdsAPI: NSObject, RCTBridgeModule {
|
|
27
27
|
@objc var bridge: RCTBridge!
|
|
28
|
-
|
|
28
|
+
|
|
29
29
|
static func moduleName() -> String! {
|
|
30
|
-
return "
|
|
30
|
+
return "THEORCTAdsModule"
|
|
31
31
|
}
|
|
32
|
-
|
|
32
|
+
|
|
33
33
|
static func requiresMainQueueSetup() -> Bool {
|
|
34
34
|
return false
|
|
35
35
|
}
|
|
@@ -37,7 +37,7 @@ class THEOplayerRCTAdsAPI: NSObject, RCTBridgeModule {
|
|
|
37
37
|
#if (GOOGLE_IMA || GOOGLE_DAI) || canImport(THEOplayerGoogleIMAIntegration)
|
|
38
38
|
@objc(skip:)
|
|
39
39
|
func skip(_ node: NSNumber) -> Void {
|
|
40
|
-
|
|
40
|
+
|
|
41
41
|
DispatchQueue.main.async {
|
|
42
42
|
let theView = self.bridge.uiManager.view(forReactTag: node) as! THEOplayerRCTView
|
|
43
43
|
if let ads = theView.ads() {
|
|
@@ -47,7 +47,7 @@ class THEOplayerRCTAdsAPI: NSObject, RCTBridgeModule {
|
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
|
-
|
|
50
|
+
|
|
51
51
|
@objc(playing:resolver:rejecter:)
|
|
52
52
|
func playing(_ node: NSNumber, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
|
|
53
53
|
DispatchQueue.main.async {
|
|
@@ -60,7 +60,7 @@ class THEOplayerRCTAdsAPI: NSObject, RCTBridgeModule {
|
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
62
|
}
|
|
63
|
-
|
|
63
|
+
|
|
64
64
|
@objc(currentAdBreak:resolver:rejecter:)
|
|
65
65
|
func currentAdBreak(_ node: NSNumber, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
|
|
66
66
|
DispatchQueue.main.async {
|
|
@@ -74,7 +74,7 @@ class THEOplayerRCTAdsAPI: NSObject, RCTBridgeModule {
|
|
|
74
74
|
}
|
|
75
75
|
}
|
|
76
76
|
}
|
|
77
|
-
|
|
77
|
+
|
|
78
78
|
@objc(currentAds:resolver:rejecter:)
|
|
79
79
|
func currentAds(_ node: NSNumber, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
|
|
80
80
|
DispatchQueue.main.async {
|
|
@@ -92,7 +92,7 @@ class THEOplayerRCTAdsAPI: NSObject, RCTBridgeModule {
|
|
|
92
92
|
}
|
|
93
93
|
}
|
|
94
94
|
}
|
|
95
|
-
|
|
95
|
+
|
|
96
96
|
@objc(scheduledAdBreaks:resolver:rejecter:)
|
|
97
97
|
func scheduledAdBreaks(_ node: NSNumber, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
|
|
98
98
|
DispatchQueue.main.async {
|
|
@@ -110,7 +110,7 @@ class THEOplayerRCTAdsAPI: NSObject, RCTBridgeModule {
|
|
|
110
110
|
}
|
|
111
111
|
}
|
|
112
112
|
}
|
|
113
|
-
|
|
113
|
+
|
|
114
114
|
@objc(schedule:ad:)
|
|
115
115
|
func schedule(_ node: NSNumber, adDict: NSDictionary) -> Void {
|
|
116
116
|
DispatchQueue.main.async {
|
|
@@ -124,46 +124,46 @@ class THEOplayerRCTAdsAPI: NSObject, RCTBridgeModule {
|
|
|
124
124
|
}
|
|
125
125
|
}
|
|
126
126
|
}
|
|
127
|
-
|
|
127
|
+
|
|
128
128
|
#else
|
|
129
|
-
|
|
129
|
+
|
|
130
130
|
@objc(skip:)
|
|
131
131
|
func skip(_ node: NSNumber) -> Void {
|
|
132
132
|
if DEBUG_ADS_API { print(ERROR_MESSAGE_ADS_UNSUPPORTED_FEATURE) }
|
|
133
133
|
return
|
|
134
134
|
}
|
|
135
|
-
|
|
135
|
+
|
|
136
136
|
@objc(playing:resolver:rejecter:)
|
|
137
137
|
func playing(_ node: NSNumber, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
|
|
138
138
|
if DEBUG_ADS_API { print(ERROR_MESSAGE_ADS_UNSUPPORTED_FEATURE) }
|
|
139
139
|
resolve(false)
|
|
140
140
|
}
|
|
141
|
-
|
|
141
|
+
|
|
142
142
|
@objc(currentAdBreak:resolver:rejecter:)
|
|
143
143
|
func currentAdBreak(_ node: NSNumber, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
|
|
144
144
|
if DEBUG_ADS_API { print(ERROR_MESSAGE_ADS_UNSUPPORTED_FEATURE) }
|
|
145
145
|
resolve([:])
|
|
146
146
|
}
|
|
147
|
-
|
|
147
|
+
|
|
148
148
|
@objc(currentAds:resolver:rejecter:)
|
|
149
149
|
func currentAds(_ node: NSNumber, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
|
|
150
150
|
if DEBUG_ADS_API { print(ERROR_MESSAGE_ADS_UNSUPPORTED_FEATURE) }
|
|
151
151
|
resolve([])
|
|
152
152
|
}
|
|
153
|
-
|
|
153
|
+
|
|
154
154
|
@objc(scheduledAdBreaks:resolver:rejecter:)
|
|
155
155
|
func scheduledAdBreaks(_ node: NSNumber, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) -> Void {
|
|
156
156
|
if DEBUG_ADS_API { print(ERROR_MESSAGE_ADS_UNSUPPORTED_FEATURE) }
|
|
157
157
|
resolve([])
|
|
158
158
|
// TODO: handle request for scheduled adbreaks. Awaiting iOS SDK implementation
|
|
159
159
|
}
|
|
160
|
-
|
|
160
|
+
|
|
161
161
|
@objc(schedule:ad:)
|
|
162
162
|
func schedule(_ node: NSNumber, adDict: NSDictionary) -> Void {
|
|
163
163
|
if DEBUG_ADS_API { print(ERROR_MESSAGE_ADS_UNSUPPORTED_FEATURE) }
|
|
164
164
|
return
|
|
165
165
|
}
|
|
166
|
-
|
|
166
|
+
|
|
167
167
|
#endif
|
|
168
168
|
|
|
169
169
|
}
|