diff --git a/CHANGELOG.md b/CHANGELOG.md index 41e62901e..0c418c7c1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,14 +7,26 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## [Unreleased] +### Added + +- Added support for player SDK v11. More info on the [migration documentation](./doc/migrating-to-react-native-theoplayer-11.md) page. +- Enabled core library desugaring for Android to support version 3.39.0 of the Google IMA SDK. + ### Changed - Upgraded example app to React-Native v0.84.1. +- Changed the minimum supported iOS/tvOS version to 15.0, dropping support for iOS/tvOS 13 and 14. ### Fixed - Fixed an issue on Web where Google IMA could fail to initialize when used with `react-reverse-portal` due to the player container not being attached to the document yet. +### Removed + +- Removed deprecated `ResizeEvent` in favor of `DimensionChangeEvent`. +- Removed deprecated `player.theolive` property in favor of `player.theoLive`. +- Removed deprecated `source.integration` property in favor of `source.type`. + ## [10.13.0] - 26-03-27 ### Fixed diff --git a/android/build.gradle b/android/build.gradle index a61022ee2..0ae88fa38 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -9,7 +9,7 @@ buildscript { } dependencies { - classpath "com.android.tools.build:gradle:${safeExtGet('gradlePluginVersion', '8.12.3')}" + classpath "com.android.tools.build:gradle:${safeExtGet('gradlePluginVersion', '8.13.0')}" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${safeExtGet('kotlinVersion', '2.2.10')}" } } @@ -98,6 +98,7 @@ android { compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 + coreLibraryDesugaringEnabled true } packagingOptions { exclude 'META-INF/kotlin-stdlib.kotlin_module' @@ -122,15 +123,16 @@ repositories { mavenLocal() } -// The minimum supported THEOplayer version is 10.12.0 -def theoVersion = safeExtGet('THEOplayer_sdk', '[10.12.0, 11.0.0)') -def theoMediaSessionVersion = safeExtGet('THEOplayer_mediasession', '[8.0.0, 11.0.0)') -def theoAdsWrapperVersion = "10.12.0" +// The minimum supported THEOplayer version is 11.0.0 +def theoVersion = safeExtGet('THEOplayer_sdk', '[11.0.0, 12.0.0)') +def theoMediaSessionVersion = safeExtGet('THEOplayer_mediasession', '[11.0.0, 12.0.0)') +def theoAdsWrapperVersion = "11.0.0" def coroutinesVersion = safeExtGet('coroutinesVersion', '1.10.2') def appcompatVersion = safeExtGet('appcompatVersion', '1.7.1') -def corektxVersion = safeExtGet('corektxVersion', '1.16.0') -def gsonVersion = safeExtGet('gsonVersion', '2.13.1') +def corektxVersion = safeExtGet('corektxVersion', '1.17.0') +def gsonVersion = safeExtGet('gsonVersion', '2.13.2') def activityktxVersion = safeExtGet('activityktxVersion', '1.10.1') +def coreLibraryDesugaringVersion = safeExtGet('coreLibraryDesugaringVersion', '2.1.5') dependencies { def addOptiViewIntegration = { enabled, notation, additional = null -> @@ -156,6 +158,7 @@ dependencies { implementation("androidx.core:core-ktx:$corektxVersion") implementation("androidx.activity:activity-ktx:$activityktxVersion") implementation("com.google.code.gson:gson:$gsonVersion") + coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:$coreLibraryDesugaringVersion") println("Using THEOplayer (${versionString(theoVersion)})") implementation("com.theoplayer.theoplayer-sdk-android:core:$theoVersion") diff --git a/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/10.12.0/ads-wrapper-10.12.0.aar b/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/10.12.0/ads-wrapper-10.12.0.aar deleted file mode 100644 index d0cac704a..000000000 Binary files a/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/10.12.0/ads-wrapper-10.12.0.aar and /dev/null differ diff --git a/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/11.0.0/ads-wrapper-11.0.0.aar b/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/11.0.0/ads-wrapper-11.0.0.aar new file mode 100644 index 000000000..bc90fbbb6 Binary files /dev/null and b/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/11.0.0/ads-wrapper-11.0.0.aar differ diff --git a/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/10.12.0/ads-wrapper-10.12.0.pom b/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/11.0.0/ads-wrapper-11.0.0.pom similarity index 85% rename from android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/10.12.0/ads-wrapper-10.12.0.pom rename to android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/11.0.0/ads-wrapper-11.0.0.pom index 4c3287dd5..feffcb8b9 100644 --- a/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/10.12.0/ads-wrapper-10.12.0.pom +++ b/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/11.0.0/ads-wrapper-11.0.0.pom @@ -1,17 +1,17 @@ - 10.12.0 + 11.0.0 com.theoplayer.theoplayer-sdk-android ads-wrapper - 10.12.0 + 11.0.0 aar com.theoplayer.theoplayer-sdk-android integration-ads-ima - [10.0.0,11.0.0) + [11.0.0,12.0.0) runtime diff --git a/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/maven-metadata-local.xml b/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/maven-metadata-local.xml index 63c6398ae..bd9d59cca 100644 --- a/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/maven-metadata-local.xml +++ b/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/maven-metadata-local.xml @@ -3,11 +3,11 @@ com.theoplayer.theoplayer-sdk-android ads-wrapper - 10.12.0 - 10.12.0 + 11.0.0 + 11.0.0 - 10.12.0 + 11.0.0 - 20260318164412 + 20260410095400 diff --git a/android/src/main/java/com/theoplayer/PlayerConfigAdapter.kt b/android/src/main/java/com/theoplayer/PlayerConfigAdapter.kt index 11391afdd..95c1bd9dc 100644 --- a/android/src/main/java/com/theoplayer/PlayerConfigAdapter.kt +++ b/android/src/main/java/com/theoplayer/PlayerConfigAdapter.kt @@ -133,24 +133,24 @@ class PlayerConfigAdapter(private val configProps: ReadableMap?) { getMap(PROP_FEATURE_FLAGS)?.toHashMap()?.forEach { (key, value) -> convertedMap[key] = value as String } - featureFlags = convertedMap + setFeatureFlags(convertedMap) } // The maximum number of VAST redirects. if (hasKey(PROP_MAX_REDIRECTS)) { maxRedirects = getInt(PROP_MAX_REDIRECTS) } // The partner provided player type. - playerType = "THEOplayer" + setPlayerType("THEOplayer") // The partner provided player version. - playerVersion = THEOplayerGlobal.getVersion() + setPlayerVersion(THEOplayerGlobal.getVersion()) // The Publisher Provided Identification (PPID) sent with ads request. if (hasKey(PROP_PPID)) { - ppid = getString(PROP_PPID) ?: "" + setPpid(getString(PROP_PPID) ?: "") } // The session ID to identify a single user session. This should be a UUID. It // is used exclusively for frequency capping across the user session. if (hasKey(PROP_SESSION_ID)) { - sessionId = getString(PROP_PPID) ?: "" + setSessionId(getString(PROP_PPID) ?: "") } // Toggles debug mode which will output detailed log information to the console. if (hasKey(PROP_ENABLE_DEBUG_MODE)) { @@ -177,11 +177,11 @@ class PlayerConfigAdapter(private val configProps: ReadableMap?) { enablePreloading = preloadTypeString !== "none" } if (hasKey(PROP_ALLOWED_MIMETYPES)) { - mimeTypes = ArrayList().apply { + setMimeTypes(ArrayList().apply { getArray(PROP_ALLOWED_MIMETYPES)?.toArrayList()?.forEach { add(it as String) } - } + }) } } // bitrate and timeout are configured under the ima config diff --git a/android/src/main/java/com/theoplayer/ads/AdAdapter.kt b/android/src/main/java/com/theoplayer/ads/AdAdapter.kt index 4052a0055..e003c864c 100644 --- a/android/src/main/java/com/theoplayer/ads/AdAdapter.kt +++ b/android/src/main/java/com/theoplayer/ads/AdAdapter.kt @@ -100,7 +100,7 @@ object AdAdapter { adPayload.putDouble(PROP_AD_HEIGHT, ad.imaAd.vastMediaHeight.toDouble()) adPayload.putString(PROP_AD_CONTENT_TYPE, ad.imaAd.contentType) adPayload.putString(PROP_AD_DESCRIPTION, ad.imaAd.description) - } catch (ignore: Exception) { + } catch (_: Exception) { // googleImaAd.getImaAd() is not known yet } val universalAdIdsPayload = Arguments.createArray() @@ -142,7 +142,7 @@ object AdAdapter { return adbreakPayload } adbreakPayload.putString(PROP_ADBREAK_INTEGRATION, adbreak.integration.type) - adbreakPayload.putString(PROP_ADBREAK_ID, adbreak.idAsString) + adbreakPayload.putString(PROP_ADBREAK_ID, adbreak.id) adbreakPayload.putInt(PROP_ADBREAK_MAXDURATION,adbreak.maxDuration) adbreakPayload.putInt(PROP_ADBREAK_TIMEOFFSET, adbreak.timeOffset) adbreakPayload.putDouble(PROP_ADBREAK_MAXREMAININGDURATION, adbreak.maxRemainingDuration) @@ -288,10 +288,15 @@ object AdAdapter { return adBreak.getString(PROP_AD_CUSTOM_INTEGRATION) } + @Deprecated("Deprecated in favor of getIdAsString()") override fun getIdAsString(): String? { return if (adBreak.hasKey(PROP_ADBREAK_ID)) adBreak.getString(PROP_ADBREAK_ID) else null } + override fun getId(): String? { + return if (adBreak.hasKey(PROP_ADBREAK_ID)) adBreak.getString(PROP_ADBREAK_ID) else null + } + override fun getCustomData(): Any? { // Not supported yet return null @@ -415,16 +420,6 @@ object AdAdapter { return ad?.getString(PROP_AD_TRAFFICKING_PARAMETERS) ?: "" } - @Deprecated("Deprecated in Java") - override fun getUniversalAdIdRegistry(): String { - return "" - } - - @Deprecated("Deprecated in Java") - override fun getUniversalAdIdValue(): String { - return ad?.getString(PROP_UNIVERSAL_AD_ID_VALUE) ?: "" - } - override fun getCompanionAds(): List { return emptyList() } diff --git a/android/src/main/java/com/theoplayer/cast/CastModule.kt b/android/src/main/java/com/theoplayer/cast/CastModule.kt index 81d0fe676..21f7491aa 100644 --- a/android/src/main/java/com/theoplayer/cast/CastModule.kt +++ b/android/src/main/java/com/theoplayer/cast/CastModule.kt @@ -59,7 +59,6 @@ class CastModule(context: ReactApplicationContext) : ReactContextBaseJavaModule( PlayerCastState.AVAILABLE -> "available" PlayerCastState.CONNECTED -> "connected" PlayerCastState.CONNECTING -> "connecting" - PlayerCastState.UNAVAILABLE -> "unavailable" else -> "unavailable" } } diff --git a/android/src/main/java/com/theoplayer/track/TrackListAdapter.kt b/android/src/main/java/com/theoplayer/track/TrackListAdapter.kt index 2003722f1..1db1144db 100644 --- a/android/src/main/java/com/theoplayer/track/TrackListAdapter.kt +++ b/android/src/main/java/com/theoplayer/track/TrackListAdapter.kt @@ -43,9 +43,6 @@ private const val PROP_ENDDATE = "endDate" private const val PROP_DURATION = "duration" private const val PROP_PLANNED_DURATION = "plannedDuration" private const val PROP_END_ON_NEXT = "endOnNext" -private const val PROP_SCTE35CMD = "scte35Cmd" -private const val PROP_SCTE35OUT = "scte35Out" -private const val PROP_SCTE35IN = "scte35In" private const val PROP_CUSTOM_ATTRIBUTES = "customAttributes" object TrackListAdapter { @@ -167,13 +164,12 @@ object TrackListAdapter { audioTrackPayload.putString(PROP_LABEL, audioTrack.label) audioTrackPayload.putString(PROP_LANGUAGE, audioTrack.language) audioTrackPayload.putBoolean(PROP_ENABLED, audioTrack.isEnabled) - val qualityList = audioTrack.qualities val qualities = Arguments.createArray() try { - qualityList?.forEach { quality -> + audioTrack.qualities.forEach { quality -> qualities.pushMap(fromAudioQuality(quality)) } - } catch (ignore: NullPointerException) { + } catch (_: NullPointerException) { } audioTrackPayload.putArray(PROP_QUALITIES, qualities) val activeQuality = audioTrack.activeQuality @@ -214,18 +210,15 @@ object TrackListAdapter { videoTrackPayload.putBoolean(PROP_ENABLED, videoTrack.isEnabled) val qualities = Arguments.createArray() try { - val qualityList = videoTrack.qualities - if (qualityList != null) { - // Sort qualities according to (height, bandwidth) - val sortedQualityList = QualityListAdapter(qualityList) - sortedQualityList.sort { o: VideoQuality, t1: VideoQuality -> - if (o.height == t1.height) t1.bandwidth.compareTo(o.bandwidth) else t1.height.compareTo(o.height) - } - for (quality in sortedQualityList) { - qualities.pushMap(fromVideoQuality(quality as VideoQuality)) - } + // Sort qualities according to (height, bandwidth) + val sortedQualityList = QualityListAdapter(videoTrack.qualities) + sortedQualityList.sort { o: VideoQuality, t1: VideoQuality -> + if (o.height == t1.height) t1.bandwidth.compareTo(o.bandwidth) else t1.height.compareTo(o.height) + } + for (quality in sortedQualityList) { + qualities.pushMap(fromVideoQuality(quality as VideoQuality)) } - } catch (ignore: java.lang.NullPointerException) { + } catch (_: java.lang.NullPointerException) { } videoTrackPayload.putArray(PROP_QUALITIES, qualities) val activeQuality = videoTrack.activeQuality diff --git a/doc/migrating-to-react-native-theoplayer-11.md b/doc/migrating-to-react-native-theoplayer-11.md new file mode 100644 index 000000000..7b343802e --- /dev/null +++ b/doc/migrating-to-react-native-theoplayer-11.md @@ -0,0 +1,41 @@ +# Migrating to THEOplayer React Native SDK 11.x + +This article will guide you through updating to THEOplayer React Native SDK version 11 (from version 10), +and the changes needed in your code. + +## Update React Native THEOplayer + +Run the following command to install THEOplayer React Native SDK version 11: + +```bash +npm install react-native-theoplayer@11 +``` + +## Breaking API changes + +- Removed deprecated `ResizeEvent` in favor of `DimensionChangeEvent`. +- Removed deprecated `player.theolive` property in favor of `player.theoLive`. +- Removed deprecated `source.integration` property in favor of `source.type`. + +## Breaking Changes on Web + +The breaking changes for the native Web SDK are listed in the v11 [changelog](https://optiview.dolby.com/docs/theoplayer/changelog/#-breaking-changes), +none of which impact the React Native SDK on Web. + +## Breaking Changes on iOS + +The breaking changes for the native Web SDK are listed in the v11 [changelog](https://optiview.dolby.com/docs/theoplayer/changelog/#-breaking-changes-2). + +The following updates in particular impact the React Native SDK on iOS. + +- The minimum supported iOS/tvOS version is now 15.0, dropping support for iOS/tvOS 13 and 14. + +## Breaking Changes on Android + +The breaking changes for the native Android SDK are listed in the v11 [changelog](https://optiview.dolby.com/docs/theoplayer/changelog/#-breaking-changes-1). + +The following updates in particular impact the React Native SDK on Android. + +- The Google IMA SDK integration now requires [core library desugaring](https://developer.android.com/studio/write/java8-support#library-desugaring) to be enabled. +See [our updated guide for Google IMA](https://optiview.dolby.com/docs/theoplayer/how-to-guides/ads/google-ima/#android-sdk) for instructions, or the +React Native THEOplayer [example app](https://github.com/THEOplayer/react-native-theoplayer/tree/develop/example) for a sample implementation. diff --git a/e2e/android/app/build.gradle b/e2e/android/app/build.gradle index 87b748d4d..74c1afb8b 100644 --- a/e2e/android/app/build.gradle +++ b/e2e/android/app/build.gradle @@ -94,6 +94,9 @@ android { keyPassword 'android' } } + compileOptions { + coreLibraryDesugaringEnabled true + } buildTypes { debug { signingConfig signingConfigs.debug @@ -119,6 +122,8 @@ dependencies { // The version of react-native is set by the React Native Gradle Plugin implementation("com.facebook.react:react-android") + coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.5") + if (hermesEnabled.toBoolean()) { implementation("com.facebook.react:hermes-android") } else { diff --git a/e2e/android/app/src/main/java/com/reactnativetheoplayer/MainApplication.kt b/e2e/android/app/src/main/java/com/reactnativetheoplayer/MainApplication.kt index 1939bf063..f96443c13 100644 --- a/e2e/android/app/src/main/java/com/reactnativetheoplayer/MainApplication.kt +++ b/e2e/android/app/src/main/java/com/reactnativetheoplayer/MainApplication.kt @@ -5,34 +5,20 @@ import com.facebook.react.PackageList import com.facebook.react.ReactApplication import com.facebook.react.ReactHost import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative -import com.facebook.react.ReactNativeHost -import com.facebook.react.ReactPackage -import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load import com.facebook.react.defaults.DefaultReactHost.getDefaultReactHost -import com.facebook.react.defaults.DefaultReactNativeHost -import com.facebook.react.soloader.OpenSourceMergedSoMapping -import com.facebook.soloader.SoLoader import com.theoplayer.ReactTHEOplayerPackage class MainApplication : Application(), ReactApplication { - override val reactNativeHost: ReactNativeHost = - object : DefaultReactNativeHost(this) { - override fun getPackages(): List = + override val reactHost: ReactHost by lazy { + getDefaultReactHost( + context = applicationContext, + packageList = PackageList(this).packages.apply { // Packages that cannot be autolinked yet can be added manually here, for example: add(ReactTHEOplayerPackage()) - } - - override fun getJSMainModuleName(): String = "index" - - override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG - - override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED - override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED - } - - override val reactHost: ReactHost - get() = getDefaultReactHost(this.applicationContext, reactNativeHost) + }, + ) + } override fun onCreate() { super.onCreate() diff --git a/e2e/android/build.gradle b/e2e/android/build.gradle index a25721b53..0181c74f9 100644 --- a/e2e/android/build.gradle +++ b/e2e/android/build.gradle @@ -12,8 +12,8 @@ buildscript { ndkVersion = "29.0.14033849" castFrameworkVersion = "22.0.0" kotlinVersion = "2.2.10" - agpVersion = "8.12.3" - rnrepoVersion = "0.2.1" + agpVersion = "8.13.0" + rnrepoVersion = "0.2.2" } repositories { google() diff --git a/e2e/android/gradle.properties b/e2e/android/gradle.properties index 124071bbb..ad66e4ae9 100644 --- a/e2e/android/gradle.properties +++ b/e2e/android/gradle.properties @@ -41,12 +41,12 @@ newArchEnabled=true hermesEnabled=true # Version of the THEOplayer SDK, if not specified, the latest available version within bounds is set. -#THEOplayer_sdk=[10.10.0, 11.0.0) +#THEOplayer_sdk=[11.0.0, 12.0.0) # Override Android sdk versions -#THEOplayer_compileSdkVersion = 34 +#THEOplayer_compileSdkVersion = 36 #THEOplayer_minSdkVersion = 21 -#THEOplayer_targetSdkVersion = 34 +#THEOplayer_targetSdkVersion = 36 # Toggle player event logging using tag 'VideoPlayer' (default: false) #THEOplayer_logPlayerEvents = true diff --git a/e2e/package-lock.json b/e2e/package-lock.json index 30a377b0e..dd0adc2ba 100644 --- a/e2e/package-lock.json +++ b/e2e/package-lock.json @@ -8,7 +8,7 @@ "name": "react-native-theoplayer-e2e", "version": "0.0.1", "dependencies": { - "@theoplayer/react-native-ui": "^0.22.0", + "@theoplayer/react-native-ui": "^0.23.0", "react": "19.2.3", "react-dom": "19.2.3", "react-native": "npm:react-native-tvos@^0.84.1-0", @@ -56,7 +56,7 @@ "version": "10.13.0", "license": "BSD-3-Clause-Clear", "dependencies": { - "@theoplayer/cmcd-connector-web": "^1.4.0", + "@theoplayer/cmcd-connector-web": "^1.5.0", "buffer": "^6.0.3" }, "devDependencies": { @@ -74,7 +74,7 @@ "react": "^19.2.3", "react-native": "^0.84.1", "react-native-builder-bob": "^0.39.1", - "theoplayer": "^10.11.0", + "theoplayer": "^11.0.0", "typedoc": "^0.25.13", "typedoc-plugin-external-resolver": "^1.0.3", "typedoc-plugin-mdn-links": "^3.3.4", @@ -82,12 +82,12 @@ "typescript-eslint": "^8.30.1" }, "engines": { - "node": ">=16" + "node": ">=20" }, "peerDependencies": { "react": "*", "react-native": "*", - "theoplayer": "^9.12.0 || ^10" + "theoplayer": "^9.12.0 || ^10 || ^11" }, "peerDependenciesMeta": { "theoplayer": { @@ -3336,9 +3336,9 @@ } }, "node_modules/@theoplayer/react-native-ui": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/@theoplayer/react-native-ui/-/react-native-ui-0.22.0.tgz", - "integrity": "sha512-7nk/VBKIcOdN7f/WgewejSItzNIZ2qdej43qvhp2UREXWWcpppmR0oltYPL9P16oOaMoOMK8vAXMIxengomxJg==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@theoplayer/react-native-ui/-/react-native-ui-0.23.0.tgz", + "integrity": "sha512-NzRdsx2Z/466E3ZDTgQFqBrkRQ0v/1TtJv7Pv67NJMmotc0yXLOYwDy2pyL/QDyYUzmTrUX9A26VP10wsXSHig==", "license": "SEE LICENSE AT https://www.theoplayer.com/terms", "dependencies": { "@miblanchard/react-native-slider": "^2.6.0", @@ -3350,7 +3350,7 @@ "react-native": "*", "react-native-google-cast": "*", "react-native-svg": "^13.8.0 || ^14 || ^15", - "react-native-theoplayer": "^7 || ^8 || ^9 || ^10" + "react-native-theoplayer": "^7 || ^8 || ^9 || ^10 || ^11" } }, "node_modules/@types/babel__core": { diff --git a/e2e/package.json b/e2e/package.json index c351f8a68..e9e755871 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -14,7 +14,7 @@ "update-dependencies": "npx ncu '/@theoplayer\\/.*/' -u" }, "dependencies": { - "@theoplayer/react-native-ui": "^0.22.0", + "@theoplayer/react-native-ui": "^0.23.0", "react": "19.2.3", "react-dom": "19.2.3", "react-native": "npm:react-native-tvos@^0.84.1-0", diff --git a/e2e/react-native-theoplayer.json b/e2e/react-native-theoplayer.json index a91ca8d26..0ec39ba29 100644 --- a/e2e/react-native-theoplayer.json +++ b/e2e/react-native-theoplayer.json @@ -1,5 +1,5 @@ { "ios": { - "features": ["GOOGLE_IMA", "CHROMECAST", "SIDELOADED_TEXTTRACKS", "THEO_ADS", "MILLICAST"] + "features": ["GOOGLE_IMA", "CHROMECAST", "THEO_ADS", "MILLICAST"] } } diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle index cb057edd6..c453f1918 100644 --- a/example/android/app/build.gradle +++ b/example/android/app/build.gradle @@ -94,6 +94,9 @@ android { keyPassword 'android' } } + compileOptions { + coreLibraryDesugaringEnabled true + } buildTypes { debug { signingConfig signingConfigs.debug @@ -120,6 +123,7 @@ dependencies { implementation("com.facebook.react:react-android") implementation("androidx.activity:activity-ktx:1.9.3") + coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.5") if (hermesEnabled.toBoolean()) { implementation("com.facebook.react:hermes-android") diff --git a/example/android/app/src/main/java/com/reactnativetheoplayer/MainApplication.kt b/example/android/app/src/main/java/com/reactnativetheoplayer/MainApplication.kt index 1939bf063..f96443c13 100644 --- a/example/android/app/src/main/java/com/reactnativetheoplayer/MainApplication.kt +++ b/example/android/app/src/main/java/com/reactnativetheoplayer/MainApplication.kt @@ -5,34 +5,20 @@ import com.facebook.react.PackageList import com.facebook.react.ReactApplication import com.facebook.react.ReactHost import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative -import com.facebook.react.ReactNativeHost -import com.facebook.react.ReactPackage -import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load import com.facebook.react.defaults.DefaultReactHost.getDefaultReactHost -import com.facebook.react.defaults.DefaultReactNativeHost -import com.facebook.react.soloader.OpenSourceMergedSoMapping -import com.facebook.soloader.SoLoader import com.theoplayer.ReactTHEOplayerPackage class MainApplication : Application(), ReactApplication { - override val reactNativeHost: ReactNativeHost = - object : DefaultReactNativeHost(this) { - override fun getPackages(): List = + override val reactHost: ReactHost by lazy { + getDefaultReactHost( + context = applicationContext, + packageList = PackageList(this).packages.apply { // Packages that cannot be autolinked yet can be added manually here, for example: add(ReactTHEOplayerPackage()) - } - - override fun getJSMainModuleName(): String = "index" - - override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG - - override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED - override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED - } - - override val reactHost: ReactHost - get() = getDefaultReactHost(this.applicationContext, reactNativeHost) + }, + ) + } override fun onCreate() { super.onCreate() diff --git a/example/android/build.gradle b/example/android/build.gradle index a25721b53..0181c74f9 100644 --- a/example/android/build.gradle +++ b/example/android/build.gradle @@ -12,8 +12,8 @@ buildscript { ndkVersion = "29.0.14033849" castFrameworkVersion = "22.0.0" kotlinVersion = "2.2.10" - agpVersion = "8.12.3" - rnrepoVersion = "0.2.1" + agpVersion = "8.13.0" + rnrepoVersion = "0.2.2" } repositories { google() diff --git a/example/android/gradle.properties b/example/android/gradle.properties index 3e7bacabb..9e25e3493 100644 --- a/example/android/gradle.properties +++ b/example/android/gradle.properties @@ -46,7 +46,7 @@ hermesEnabled=true edgeToEdgeEnabled=false # Version of the THEOplayer SDK, if not specified, the latest available version within bounds is set. -#THEOplayer_sdk=[10.12.0, 11.0.0) +#THEOplayer_sdk=[11.0.0, 12.0.0) # Override Android sdk versions #THEOplayer_compileSdkVersion = 36 diff --git a/example/babel.config.js b/example/babel.config.js index 740e17231..b86719fc5 100644 --- a/example/babel.config.js +++ b/example/babel.config.js @@ -1,6 +1,4 @@ module.exports = { presets: ['module:@react-native/babel-preset'], - plugins: [ - 'babel-plugin-react-compiler', - ], + plugins: ['babel-plugin-react-compiler'], }; diff --git a/example/package-lock.json b/example/package-lock.json index d5f4cc602..f351f6626 100644 --- a/example/package-lock.json +++ b/example/package-lock.json @@ -8,8 +8,8 @@ "name": "react-native-theoplayer-example", "version": "0.0.1", "dependencies": { - "@theoplayer/react-native-drm": "^1.10.0", - "@theoplayer/react-native-ui": "^0.22.0", + "@theoplayer/react-native-drm": "^1.12.0", + "@theoplayer/react-native-ui": "^0.23.0", "react": "19.2.3", "react-dom": "19.2.3", "react-native": "npm:react-native-tvos@^0.84.1-0", @@ -40,7 +40,7 @@ "eslint": "^8.57.1", "html-webpack-plugin": "^5.6.3", "react-native-svg-web": "^1.0.9", - "theoplayer": "^10", + "theoplayer": "^11", "typescript": "5.8.3", "webpack": "^5.105.0", "webpack-cli": "^6.0.1", @@ -54,7 +54,7 @@ "version": "10.13.0", "license": "BSD-3-Clause-Clear", "dependencies": { - "@theoplayer/cmcd-connector-web": "^1.4.0", + "@theoplayer/cmcd-connector-web": "^1.5.0", "buffer": "^6.0.3" }, "devDependencies": { @@ -72,7 +72,7 @@ "react": "^19.2.3", "react-native": "^0.84.1", "react-native-builder-bob": "^0.39.1", - "theoplayer": "^10.11.0", + "theoplayer": "^11.0.0", "typedoc": "^0.25.13", "typedoc-plugin-external-resolver": "^1.0.3", "typedoc-plugin-mdn-links": "^3.3.4", @@ -80,12 +80,12 @@ "typescript-eslint": "^8.30.1" }, "engines": { - "node": ">=16" + "node": ">=20" }, "peerDependencies": { "react": "*", "react-native": "*", - "theoplayer": "^9.12.0 || ^10" + "theoplayer": "^9.12.0 || ^10 || ^11" }, "peerDependenciesMeta": { "theoplayer": { @@ -3334,20 +3334,20 @@ } }, "node_modules/@theoplayer/react-native-drm": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@theoplayer/react-native-drm/-/react-native-drm-1.10.0.tgz", - "integrity": "sha512-s7QQMlpxVE8nmCTwzNaHbdIsEmoqUvdixoblW0oNwxks9ocyubOmHwxoc+TRalo2Q6dq/BzacHKCXp2F1KhFrg==", - "license": "SEE LICENSE AT https://www.theoplayer.com/terms", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/@theoplayer/react-native-drm/-/react-native-drm-1.12.0.tgz", + "integrity": "sha512-n3+FBLEyBP43mDG3hk0iy6AcQhWoE3NoVWZsTL1LiHHcr4jJvTQLjQO3r3FHv4I5E337nojks1gVFVdYx7dbSg==", + "license": "BSD-3-Clause-Clear", "peerDependencies": { "react": "*", - "react-native-theoplayer": "^7 || ^8 || ^9 || ^10", - "theoplayer": "^7 || ^8 || ^9 || ^10" + "react-native-theoplayer": "^7 || ^8 || ^9 || ^10 || ^11", + "theoplayer": "^7 || ^8 || ^9 || ^10 || ^11" } }, "node_modules/@theoplayer/react-native-ui": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/@theoplayer/react-native-ui/-/react-native-ui-0.22.0.tgz", - "integrity": "sha512-7nk/VBKIcOdN7f/WgewejSItzNIZ2qdej43qvhp2UREXWWcpppmR0oltYPL9P16oOaMoOMK8vAXMIxengomxJg==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@theoplayer/react-native-ui/-/react-native-ui-0.23.0.tgz", + "integrity": "sha512-NzRdsx2Z/466E3ZDTgQFqBrkRQ0v/1TtJv7Pv67NJMmotc0yXLOYwDy2pyL/QDyYUzmTrUX9A26VP10wsXSHig==", "license": "SEE LICENSE AT https://www.theoplayer.com/terms", "dependencies": { "@miblanchard/react-native-slider": "^2.6.0", @@ -3359,7 +3359,7 @@ "react-native": "*", "react-native-google-cast": "*", "react-native-svg": "^13.8.0 || ^14 || ^15", - "react-native-theoplayer": "^7 || ^8 || ^9 || ^10" + "react-native-theoplayer": "^7 || ^8 || ^9 || ^10 || ^11" } }, "node_modules/@types/babel__core": { @@ -13036,9 +13036,9 @@ "license": "MIT" }, "node_modules/theoplayer": { - "version": "10.6.1", - "resolved": "https://registry.npmjs.org/theoplayer/-/theoplayer-10.6.1.tgz", - "integrity": "sha512-mz3LpcChF0/pUWJwzJtMwKWyuqmv85Ao8eAFVmYFI0K+krjC+yAm28suFa7E6BITZfNTtwlDTY+ZPRDcxd6+ng==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/theoplayer/-/theoplayer-11.0.0.tgz", + "integrity": "sha512-pxjpNtd++m87H5ndEPlNbKpHhXCNbFDgnXB0g6RfTv/v7zSpSLwiB0F0vIJe5asaqEJ6pKH7kvpTgnaEN2TElw==", "license": "SEE LICENSE AT https://www.theoplayer.com/terms" }, "node_modules/thingies": { @@ -13317,7 +13317,7 @@ "version": "5.8.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", - "devOptional": true, + "dev": true, "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", diff --git a/example/package.json b/example/package.json index ba0fd7ddb..60f9eb982 100644 --- a/example/package.json +++ b/example/package.json @@ -15,8 +15,8 @@ "pod-update": "cd ios && RCT_NEW_ARCH_ENABLED=1 bundle exec pod update" }, "dependencies": { - "@theoplayer/react-native-drm": "^1.10.0", - "@theoplayer/react-native-ui": "^0.22.0", + "@theoplayer/react-native-drm": "^1.12.0", + "@theoplayer/react-native-ui": "^0.23.0", "react": "19.2.3", "react-dom": "19.2.3", "react-native": "npm:react-native-tvos@^0.84.1-0", @@ -47,7 +47,7 @@ "eslint": "^8.57.1", "html-webpack-plugin": "^5.6.3", "react-native-svg-web": "^1.0.9", - "theoplayer": "^10", + "theoplayer": "^11", "typescript": "5.8.3", "webpack": "^5.105.0", "webpack-cli": "^6.0.1", diff --git a/example/web/public/index.html b/example/web/public/index.html index 4a6d88a29..310786e4b 100644 --- a/example/web/public/index.html +++ b/example/web/public/index.html @@ -14,6 +14,9 @@ + + +
diff --git a/ios/ads/THEOplayerRCTAdAdapter.swift b/ios/ads/THEOplayerRCTAdAdapter.swift index 51dd07f90..31bfbac45 100644 --- a/ios/ads/THEOplayerRCTAdAdapter.swift +++ b/ios/ads/THEOplayerRCTAdAdapter.swift @@ -62,8 +62,8 @@ class THEOplayerRCTAdAdapter { if let skipOffset = ad.skipOffset { adData[PROP_AD_SKIP_OFFSET] = (skipOffset == -1) ? skipOffset : skipOffset } - if processAdBreak { - adData[PROP_AD_BREAK] = THEOplayerRCTAdAdapter.fromAdBreak(adBreak: ad.adBreak) + if processAdBreak, let adBreak = ad.adBreak { + adData[PROP_AD_BREAK] = THEOplayerRCTAdAdapter.fromAdBreak(adBreak: adBreak) } #if os(iOS) diff --git a/ios/ads/THEOplayerRCTAdsNative.swift b/ios/ads/THEOplayerRCTAdsNative.swift index a27abbde9..151f2ec16 100644 --- a/ios/ads/THEOplayerRCTAdsNative.swift +++ b/ios/ads/THEOplayerRCTAdsNative.swift @@ -5,7 +5,7 @@ import THEOplayerSDK class NativeAd: THEOplayerSDK.Ad { /** A reference to the `AdBreak` of which the ad is a part of.*/ - var adBreak: AdBreak + var adBreak: AdBreak? /** An array of `CompanionAd`s associated to the ad, if available within the same Creatives element.*/ var companions: [THEOplayerSDK.CompanionAd] = [] /** Either 'linear' or 'nonlinear', depending on the concrete implementer.*/ diff --git a/package-lock.json b/package-lock.json index 8c411dce4..65bdba51a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "10.13.0", "license": "BSD-3-Clause-Clear", "dependencies": { - "@theoplayer/cmcd-connector-web": "^1.4.0", + "@theoplayer/cmcd-connector-web": "^1.5.0", "buffer": "^6.0.3" }, "devDependencies": { @@ -27,7 +27,7 @@ "react": "^19.2.3", "react-native": "^0.84.1", "react-native-builder-bob": "^0.39.1", - "theoplayer": "^10.11.0", + "theoplayer": "^11.0.0", "typedoc": "^0.25.13", "typedoc-plugin-external-resolver": "^1.0.3", "typedoc-plugin-mdn-links": "^3.3.4", @@ -35,12 +35,12 @@ "typescript-eslint": "^8.30.1" }, "engines": { - "node": ">=16" + "node": ">=20" }, "peerDependencies": { "react": "*", "react-native": "*", - "theoplayer": "^9.12.0 || ^10" + "theoplayer": "^9.12.0 || ^10 || ^11" }, "peerDependenciesMeta": { "theoplayer": { @@ -3137,12 +3137,12 @@ } }, "node_modules/@theoplayer/cmcd-connector-web": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@theoplayer/cmcd-connector-web/-/cmcd-connector-web-1.4.0.tgz", - "integrity": "sha512-fOl94/HKnJLiBwhy4KPLOtxcNksUHfCyXQTvTM0kVBdd+Y6DwgreGpk6RXeHpxzkVXgH0Sx1DjNutwfIqLk/yA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@theoplayer/cmcd-connector-web/-/cmcd-connector-web-1.5.0.tgz", + "integrity": "sha512-eWElrE36ubYqaxcsc4iA8L1YwRB0m48rXl3OWjiQIZINdMUSyEB87999xEG9Y21WKVDCjG7yegnJzFBKnzttmQ==", "license": "MIT", "peerDependencies": { - "theoplayer": "^5 || ^6 || ^7 || ^8 || ^9 || ^10" + "theoplayer": "^5 || ^6 || ^7 || ^8 || ^9 || ^10 || ^11" } }, "node_modules/@types/babel__core": { @@ -10936,9 +10936,9 @@ "dev": true }, "node_modules/theoplayer": { - "version": "10.13.0", - "resolved": "https://registry.npmjs.org/theoplayer/-/theoplayer-10.13.0.tgz", - "integrity": "sha512-RrHWZWFG9xEcNPwQV46mRJM1YouvS4A/ZB/0o2OM2GuFvZH65DUhsr3fml7YIXKa6iLUawvsuwHxMoM2MztNZQ==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/theoplayer/-/theoplayer-11.0.0.tgz", + "integrity": "sha512-pxjpNtd++m87H5ndEPlNbKpHhXCNbFDgnXB0g6RfTv/v7zSpSLwiB0F0vIJe5asaqEJ6pKH7kvpTgnaEN2TElw==", "license": "SEE LICENSE AT https://www.theoplayer.com/terms" }, "node_modules/throat": { diff --git a/package.json b/package.json index c08597723..7505ef920 100644 --- a/package.json +++ b/package.json @@ -70,7 +70,7 @@ "react": "^19.2.3", "react-native": "^0.84.1", "react-native-builder-bob": "^0.39.1", - "theoplayer": "^10.11.0", + "theoplayer": "^11.0.0", "typedoc": "^0.25.13", "typedoc-plugin-external-resolver": "^1.0.3", "typedoc-plugin-mdn-links": "^3.3.4", @@ -80,7 +80,7 @@ "peerDependencies": { "react": "*", "react-native": "*", - "theoplayer": "^9.12.0 || ^10" + "theoplayer": "^9.12.0 || ^10 || ^11" }, "peerDependenciesMeta": { "theoplayer": { @@ -88,7 +88,7 @@ } }, "engines": { - "node": ">=16" + "node": ">=20" }, "eslintIgnore": [ "node_modules/", @@ -109,7 +109,7 @@ ] }, "dependencies": { - "@theoplayer/cmcd-connector-web": "^1.4.0", + "@theoplayer/cmcd-connector-web": "^1.5.0", "buffer": "^6.0.3" } } diff --git a/react-native-theoplayer.podspec b/react-native-theoplayer.podspec index fe642bd34..75885c65d 100644 --- a/react-native-theoplayer.podspec +++ b/react-native-theoplayer.podspec @@ -32,7 +32,7 @@ Pod::Spec.new do |s| s.license = package["license"] s.authors = package["author"] - s.platforms = { :ios => "13.4", :tvos => "13.4" } + s.platforms = { :ios => "15.0", :tvos => "15.0" } s.source = { :git => "https://www.theoplayer.com/.git", :tag => "#{s.version}" } s.source_files = 'ios/*.{h,m,swift}', 'ios/ads/*.swift', 'ios/casting/*.swift', 'ios/contentprotection/*.swift', 'ios/pip/*.swift', 'ios/backgroundAudio/*.swift', 'ios/cache/*.swift', 'ios/sideloadedMetadata/*.swift', 'ios/eventBroadcasting/*.swift' , 'ios/ui/*.swift', 'ios/presentationMode/*.swift', 'ios/viewController/*.swift', 'ios/THEOlive/*.swift', 'ios/THEOads/*.swift', 'ios/millicast/*.swift' @@ -43,37 +43,37 @@ Pod::Spec.new do |s| # THEOplayer Dependency puts "Adding THEOplayerSDK-core" - s.dependency "THEOplayerSDK-core", "~> 10.10" + s.dependency "THEOplayerSDK-core", "~> 11.0" # THEOlive Dependency puts "Adding THEOplayer-Integration-THEOlive" - s.dependency "THEOplayer-Integration-THEOlive", "~> 10.12" + s.dependency "THEOplayer-Integration-THEOlive", "~> 11.0" # Feature based integration dependencies if theofeatures.include?("GOOGLE_IMA") puts "Adding THEOplayer-Integration-GoogleIMA" - s.dependency "THEOplayer-Integration-GoogleIMA", "~> 10.12" + s.dependency "THEOplayer-Integration-GoogleIMA", "~> 11.0" end if theofeatures.include?("CHROMECAST") puts "Adding THEOplayer-Integration-GoogleCast" - s.ios.dependency "THEOplayer-Integration-GoogleCast", "~> 10.12" + s.ios.dependency "THEOplayer-Integration-GoogleCast", "~> 11.0" end if theofeatures.include?("THEO_ADS") puts "Adding THEOplayer-Integration-THEOads" - s.dependency "THEOplayer-Integration-THEOads", "~> 10.12" + s.dependency "THEOplayer-Integration-THEOads", "~> 11.0" end if theofeatures.include?("MILLICAST") puts "Adding THEOplayer-Integration-Millicast" - s.dependency "THEOplayer-Integration-Millicast", "~> 10.12" + s.dependency "THEOplayer-Integration-Millicast", "~> 11.0" end # Feature based connector dependencies if theofeatures.include?("SIDELOADED_TEXTTRACKS") puts "Adding THEOplayer-Connector-SideloadedSubtitle" - s.dependency "THEOplayer-Connector-SideloadedSubtitle", "~> 10.12" + s.dependency "THEOplayer-Connector-SideloadedSubtitle", "~> 11.0" end end diff --git a/src/api/event/PlayerEvent.ts b/src/api/event/PlayerEvent.ts index 314a6a1c9..5e2d93e73 100644 --- a/src/api/event/PlayerEvent.ts +++ b/src/api/event/PlayerEvent.ts @@ -69,27 +69,6 @@ export interface DimensionChangeEvent extends Event { - /** - * The player's current width. - */ - readonly width: number; - - /** - * The player's current height. - */ - readonly height: number; -} - /** * Dispatched when video is resized. * diff --git a/src/api/player/PlayerEventMap.ts b/src/api/player/PlayerEventMap.ts index 0a39dbeeb..65b31125d 100644 --- a/src/api/player/PlayerEventMap.ts +++ b/src/api/player/PlayerEventMap.ts @@ -12,7 +12,6 @@ import type { TimeUpdateEvent, PresentationModeChangeEvent, VolumeChangeEvent, - ResizeEvent, SeekedEvent, SeekingEvent, VideoResizeEvent, @@ -62,10 +61,6 @@ export enum PlayerEventType { WAITING = 'waiting', PRESENTATIONMODE_CHANGE = 'presentationmodechange', DESTROY = 'destroy', - /** - * @deprecated Use {@link PlayerEventType.DIMENSION_CHANGE} instead. This event is set for removal in version 11. - */ - RESIZE = 'resize', DIMENSION_CHANGE = 'dimensionchange', VIDEO_RESIZE = 'videoresize', } @@ -238,13 +233,6 @@ export interface PlayerEventMap { */ [PlayerEventType.DESTROY]: Event; - /** - * Dispatched when the player size changes. - * - * @deprecated Use {@link dimensionchange} instead. This event is set for removal in version 11. - */ - [PlayerEventType.RESIZE]: ResizeEvent; - /** * Dispatched when the player size changes. */ diff --git a/src/api/player/THEOplayer.ts b/src/api/player/THEOplayer.ts index a66289724..616899908 100644 --- a/src/api/player/THEOplayer.ts +++ b/src/api/player/THEOplayer.ts @@ -287,11 +287,4 @@ export interface THEOplayer extends EventDispatcher { * The API for THEOlive. */ readonly theoLive: TheoLiveAPI; - - /** - * The API for THEOlive. - * - * @deprecated use {@link THEOplayer.theoLive} instead. - */ - readonly theolive: TheoLiveAPI; } diff --git a/src/api/source/SourceDescription.ts b/src/api/source/SourceDescription.ts index 0f6e77697..e303c545a 100644 --- a/src/api/source/SourceDescription.ts +++ b/src/api/source/SourceDescription.ts @@ -50,18 +50,6 @@ export type Sources = Source | Source[]; */ export type CrossOriginSetting = '' | 'anonymous' | 'use-credentials'; -/** - * The integration identifier of a source specific to a pre-integration, represented by a value from the following list: - *
- `'theolive'`: The source contains the THEOlive initialization url. - * - * @category Source - * @public - * @deprecated use {@link TypedSource.type} instead. - */ -export enum SourceIntegrationId { - THEO_LIVE = 'theolive' -} - /** * Describes the configuration of a player's source. * @@ -284,16 +272,6 @@ export interface TextTrackDescription { * @public */ export interface BaseSource { - /** - * The integration ID of the source. - * - * @remarks - *
- This can be used to signal that a source is specific to an integration. - * - * @deprecated use {@link TypedSource.type} instead. - */ - integration?: SourceIntegrationId; - /** * The cross-origin setting of the source. * diff --git a/src/api/theolive/TheoLiveSource.ts b/src/api/theolive/TheoLiveSource.ts index 87f77442c..479dc0a4b 100644 --- a/src/api/theolive/TheoLiveSource.ts +++ b/src/api/theolive/TheoLiveSource.ts @@ -1,4 +1,4 @@ -import { SourceIntegrationId, TypedSource } from 'react-native-theoplayer'; +import { TypedSource } from 'react-native-theoplayer'; import { WebrtcOptions } from './WebrtcOptions'; /** @@ -9,9 +9,9 @@ import { WebrtcOptions } from './WebrtcOptions'; */ export interface TheoLiveSource extends TypedSource { /** - * @deprecated use {@link TypedSource.type} instead. + * The source URL of the media resource. */ - integration: SourceIntegrationId.THEO_LIVE; + src: string; /** * The content type. diff --git a/src/internal/THEOplayerView.tsx b/src/internal/THEOplayerView.tsx index 7ec47b997..b9a428d0c 100644 --- a/src/internal/THEOplayerView.tsx +++ b/src/internal/THEOplayerView.tsx @@ -39,7 +39,6 @@ import { DefaultTextTrackListEvent, DefaultVolumeChangeEvent, DefaultTimeupdateEvent, - DefaultResizeEvent, DefaultSeekingEvent, DefaultSeekedEvent, DefaultVideoResizeEvent, @@ -420,7 +419,6 @@ export class THEOplayerView extends PureComponent) => { const width = event.nativeEvent.width; const height = event.nativeEvent.height; - this._facade?.dispatchEvent(new DefaultResizeEvent(width, height)); this._facade?.dispatchEvent(new DefaultDimensionChangeEvent(width, height)); }; diff --git a/src/internal/adapter/THEOplayerAdapter.ts b/src/internal/adapter/THEOplayerAdapter.ts index c746ad7bd..f31feb3a4 100644 --- a/src/internal/adapter/THEOplayerAdapter.ts +++ b/src/internal/adapter/THEOplayerAdapter.ts @@ -243,10 +243,6 @@ export class THEOplayerAdapter extends DefaultEventDispatcher im return this._theoliveAdapter; } - get theolive(): TheoLiveAPI { - return this._theoliveAdapter; - } - set autoplay(autoplay: boolean) { this._state.autoplay = autoplay; NativePlayerModule.setAutoplay(this._view.nativeHandle, autoplay); diff --git a/src/internal/adapter/THEOplayerWebAdapter.ts b/src/internal/adapter/THEOplayerWebAdapter.ts index eee810e4f..1f4a1642e 100644 --- a/src/internal/adapter/THEOplayerWebAdapter.ts +++ b/src/internal/adapter/THEOplayerWebAdapter.ts @@ -374,10 +374,6 @@ export class THEOplayerWebAdapter extends DefaultEventDispatcher return this._theoliveAdapter; } - public get theolive(): TheoLiveAPI { - return this._theoliveAdapter; - } - public get version(): PlayerVersion { return { version: nativeVersion, diff --git a/src/internal/adapter/WebEventForwarder.ts b/src/internal/adapter/WebEventForwarder.ts index dbc9459c1..b6d3c63ac 100644 --- a/src/internal/adapter/WebEventForwarder.ts +++ b/src/internal/adapter/WebEventForwarder.ts @@ -62,7 +62,6 @@ import { DefaultProgressEvent, DefaultRateChangeEvent, DefaultReadyStateChangeEvent, - DefaultResizeEvent, DefaultSeekedEvent, DefaultSeekingEvent, DefaultSegmentNotFoundEvent, @@ -289,7 +288,6 @@ export class WebEventForwarder { }; private readonly onDimensionChange = (event: NativeDimensionChangeEvent) => { - this._facade.dispatchEvent(new DefaultResizeEvent(event.width, event.height)); this._facade.dispatchEvent(new DefaultDimensionChangeEvent(event.width, event.height)); }; diff --git a/src/internal/adapter/event/PlayerEvents.ts b/src/internal/adapter/event/PlayerEvents.ts index 0f3414f5e..abf5852f6 100644 --- a/src/internal/adapter/event/PlayerEvents.ts +++ b/src/internal/adapter/event/PlayerEvents.ts @@ -30,7 +30,6 @@ import { Quality, RateChangeEvent, ReadyStateChangeEvent, - ResizeEvent, SeekedEvent, SeekingEvent, SegmentNotFoundEvent, @@ -103,18 +102,6 @@ export class DefaultVolumeChangeEvent extends BaseEvent implements ResizeEvent { - constructor( - public width: number, - public height: number, - ) { - super(PlayerEventType.RESIZE); - } -} - export class DefaultDimensionChangeEvent extends BaseEvent implements DimensionChangeEvent { constructor( public width: number, diff --git a/src/internal/adapter/track/TextTrackStyleAdapter.ts b/src/internal/adapter/track/TextTrackStyleAdapter.ts index be106189f..7509a1162 100644 --- a/src/internal/adapter/track/TextTrackStyleAdapter.ts +++ b/src/internal/adapter/track/TextTrackStyleAdapter.ts @@ -77,14 +77,14 @@ export class TextTrackStyleAdapter implements TextTrackStyle { } get fontPath(): string | undefined { - return this._fontPath + return this._fontPath; } set fontPath(path: string) { - this._fontPath = path + this._fontPath = path; NativePlayerModule.setTextTrackStyle(this._view.nativeHandle, { - fontPath: path - }) + fontPath: path, + }); } get fontSize(): string | undefined {