react-native-theoplayer 7.3.0 → 7.5.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.
Files changed (134) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +12 -12
  3. package/android/build.gradle +5 -4
  4. package/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/7.6.0/ads-wrapper-7.6.0.aar +0 -0
  5. package/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/{7.0.0/ads-wrapper-7.0.0.pom → 7.6.0/ads-wrapper-7.6.0.pom} +2 -2
  6. package/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/maven-metadata-local.xml +4 -4
  7. package/android/src/main/java/com/theoplayer/ads/AdAdapter.kt +9 -0
  8. package/android/src/main/java/com/theoplayer/source/GoogleDaiSourceAdapter.kt +34 -0
  9. package/android/src/main/java/com/theoplayer/source/SSAIAdapterRegistry.kt +51 -0
  10. package/android/src/main/java/com/theoplayer/source/SourceAdapter.kt +23 -58
  11. package/ios/THEOplayerRCTPlayerAPI.swift +28 -3
  12. package/ios/THEOplayerRCTView.swift +7 -0
  13. package/ios/backgroundAudio/THEOplayerRCTRemoteCommandsManager.swift +12 -4
  14. package/ios/backgroundAudio/THEOplayerRCTView+MediaControlConfig.swift +23 -0
  15. package/lib/commonjs/api/abr/ABRConfiguration.js.map +1 -1
  16. package/lib/commonjs/api/barrel.js +22 -11
  17. package/lib/commonjs/api/barrel.js.map +1 -1
  18. package/lib/commonjs/api/resolution/Resolution.js +2 -0
  19. package/lib/commonjs/api/resolution/Resolution.js.map +1 -0
  20. package/lib/commonjs/api/resolution/barrel.js +17 -0
  21. package/lib/commonjs/api/resolution/barrel.js.map +1 -0
  22. package/lib/commonjs/api/source/ads/barrel.js +0 -22
  23. package/lib/commonjs/api/source/ads/barrel.js.map +1 -1
  24. package/lib/commonjs/api/source/ads/ssai/barrel.js +0 -22
  25. package/lib/commonjs/api/source/ads/ssai/barrel.js.map +1 -1
  26. package/lib/commonjs/internal/THEOplayerView.js +30 -4
  27. package/lib/commonjs/internal/THEOplayerView.js.map +1 -1
  28. package/lib/commonjs/internal/adapter/THEOplayerAdapter.js +3 -3
  29. package/lib/commonjs/internal/adapter/THEOplayerAdapter.js.map +1 -1
  30. package/lib/commonjs/internal/adapter/abr/AbrAdapter.js +17 -1
  31. package/lib/commonjs/internal/adapter/abr/AbrAdapter.js.map +1 -1
  32. package/lib/commonjs/internal/adapter/cast/THEOplayerNativeCastAdapter.js +3 -3
  33. package/lib/commonjs/internal/adapter/cast/THEOplayerNativeCastAdapter.js.map +1 -1
  34. package/lib/commonjs/internal/poster/Poster.js +31 -0
  35. package/lib/commonjs/internal/poster/Poster.js.map +1 -0
  36. package/lib/module/api/abr/ABRConfiguration.js.map +1 -1
  37. package/lib/module/api/barrel.js +1 -0
  38. package/lib/module/api/barrel.js.map +1 -1
  39. package/lib/module/api/resolution/Resolution.js +2 -0
  40. package/lib/module/api/resolution/Resolution.js.map +1 -0
  41. package/lib/module/api/resolution/barrel.js +2 -0
  42. package/lib/module/api/resolution/barrel.js.map +1 -0
  43. package/lib/module/api/source/ads/barrel.js +0 -2
  44. package/lib/module/api/source/ads/barrel.js.map +1 -1
  45. package/lib/module/api/source/ads/ssai/barrel.js +0 -2
  46. package/lib/module/api/source/ads/ssai/barrel.js.map +1 -1
  47. package/lib/module/internal/THEOplayerView.js +30 -4
  48. package/lib/module/internal/THEOplayerView.js.map +1 -1
  49. package/lib/module/internal/adapter/THEOplayerAdapter.js +3 -3
  50. package/lib/module/internal/adapter/THEOplayerAdapter.js.map +1 -1
  51. package/lib/module/internal/adapter/abr/AbrAdapter.js +17 -1
  52. package/lib/module/internal/adapter/abr/AbrAdapter.js.map +1 -1
  53. package/lib/module/internal/adapter/cast/THEOplayerNativeCastAdapter.js +3 -3
  54. package/lib/module/internal/adapter/cast/THEOplayerNativeCastAdapter.js.map +1 -1
  55. package/lib/module/internal/poster/Poster.js +23 -0
  56. package/lib/module/internal/poster/Poster.js.map +1 -0
  57. package/lib/typescript/api/abr/ABRConfiguration.d.ts +23 -0
  58. package/lib/typescript/api/abr/ABRConfiguration.d.ts.map +1 -1
  59. package/lib/typescript/api/barrel.d.ts +1 -0
  60. package/lib/typescript/api/barrel.d.ts.map +1 -1
  61. package/lib/typescript/api/media/MediaControlConfiguration.d.ts +2 -8
  62. package/lib/typescript/api/media/MediaControlConfiguration.d.ts.map +1 -1
  63. package/lib/typescript/api/player/THEOplayer.d.ts +1 -4
  64. package/lib/typescript/api/player/THEOplayer.d.ts.map +1 -1
  65. package/lib/typescript/api/resolution/Resolution.d.ts +5 -0
  66. package/lib/typescript/api/resolution/Resolution.d.ts.map +1 -0
  67. package/lib/typescript/api/resolution/barrel.d.ts +2 -0
  68. package/lib/typescript/api/resolution/barrel.d.ts.map +1 -0
  69. package/lib/typescript/api/source/SourceDescription.d.ts +0 -1
  70. package/lib/typescript/api/source/SourceDescription.d.ts.map +1 -1
  71. package/lib/typescript/api/source/ads/barrel.d.ts +0 -2
  72. package/lib/typescript/api/source/ads/barrel.d.ts.map +1 -1
  73. package/lib/typescript/api/source/ads/ssai/GoogleDAIConfiguration.d.ts +0 -9
  74. package/lib/typescript/api/source/ads/ssai/GoogleDAIConfiguration.d.ts.map +1 -1
  75. package/lib/typescript/api/source/ads/ssai/ServerSideAdInsertionConfiguration.d.ts +3 -10
  76. package/lib/typescript/api/source/ads/ssai/ServerSideAdInsertionConfiguration.d.ts.map +1 -1
  77. package/lib/typescript/api/source/ads/ssai/barrel.d.ts +0 -2
  78. package/lib/typescript/api/source/ads/ssai/barrel.d.ts.map +1 -1
  79. package/lib/typescript/internal/THEOplayerView.d.ts +5 -0
  80. package/lib/typescript/internal/THEOplayerView.d.ts.map +1 -1
  81. package/lib/typescript/internal/adapter/THEOplayerAdapter.d.ts +1 -1
  82. package/lib/typescript/internal/adapter/THEOplayerAdapter.d.ts.map +1 -1
  83. package/lib/typescript/internal/adapter/abr/AbrAdapter.d.ts +7 -1
  84. package/lib/typescript/internal/adapter/abr/AbrAdapter.d.ts.map +1 -1
  85. package/lib/typescript/internal/adapter/cast/THEOplayerNativeCastAdapter.d.ts +1 -1
  86. package/lib/typescript/internal/adapter/cast/THEOplayerNativeCastAdapter.d.ts.map +1 -1
  87. package/lib/typescript/internal/poster/Poster.d.ts +5 -0
  88. package/lib/typescript/internal/poster/Poster.d.ts.map +1 -0
  89. package/package.json +1 -1
  90. package/src/api/abr/ABRConfiguration.ts +26 -0
  91. package/src/api/barrel.ts +1 -0
  92. package/src/api/media/MediaControlConfiguration.ts +2 -8
  93. package/src/api/player/THEOplayer.ts +1 -4
  94. package/src/api/resolution/Resolution.ts +5 -0
  95. package/src/api/resolution/barrel.ts +1 -0
  96. package/src/api/source/SourceDescription.ts +0 -1
  97. package/src/api/source/ads/barrel.ts +0 -2
  98. package/src/api/source/ads/ssai/GoogleDAIConfiguration.ts +0 -9
  99. package/src/api/source/ads/ssai/ServerSideAdInsertionConfiguration.ts +3 -10
  100. package/src/api/source/ads/ssai/barrel.ts +0 -2
  101. package/src/internal/THEOplayerView.tsx +25 -3
  102. package/src/internal/adapter/THEOplayerAdapter.ts +3 -3
  103. package/src/internal/adapter/abr/AbrAdapter.ts +23 -1
  104. package/src/internal/adapter/cast/THEOplayerNativeCastAdapter.ts +3 -3
  105. package/src/internal/poster/Poster.tsx +14 -0
  106. package/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/7.0.0/ads-wrapper-7.0.0.aar +0 -0
  107. package/lib/commonjs/api/source/ads/FreeWheelAdDescription.js +0 -6
  108. package/lib/commonjs/api/source/ads/FreeWheelAdDescription.js.map +0 -1
  109. package/lib/commonjs/api/source/ads/SpotXAdDescription.js +0 -6
  110. package/lib/commonjs/api/source/ads/SpotXAdDescription.js.map +0 -1
  111. package/lib/commonjs/api/source/ads/ssai/ImagineServerSideAdInsertionConfiguration.js +0 -6
  112. package/lib/commonjs/api/source/ads/ssai/ImagineServerSideAdInsertionConfiguration.js.map +0 -1
  113. package/lib/commonjs/api/source/ads/ssai/YospaceServerSideAdInsertionConfiguration.js +0 -6
  114. package/lib/commonjs/api/source/ads/ssai/YospaceServerSideAdInsertionConfiguration.js.map +0 -1
  115. package/lib/module/api/source/ads/FreeWheelAdDescription.js +0 -2
  116. package/lib/module/api/source/ads/FreeWheelAdDescription.js.map +0 -1
  117. package/lib/module/api/source/ads/SpotXAdDescription.js +0 -2
  118. package/lib/module/api/source/ads/SpotXAdDescription.js.map +0 -1
  119. package/lib/module/api/source/ads/ssai/ImagineServerSideAdInsertionConfiguration.js +0 -2
  120. package/lib/module/api/source/ads/ssai/ImagineServerSideAdInsertionConfiguration.js.map +0 -1
  121. package/lib/module/api/source/ads/ssai/YospaceServerSideAdInsertionConfiguration.js +0 -2
  122. package/lib/module/api/source/ads/ssai/YospaceServerSideAdInsertionConfiguration.js.map +0 -1
  123. package/lib/typescript/api/source/ads/FreeWheelAdDescription.d.ts +0 -86
  124. package/lib/typescript/api/source/ads/FreeWheelAdDescription.d.ts.map +0 -1
  125. package/lib/typescript/api/source/ads/SpotXAdDescription.d.ts +0 -116
  126. package/lib/typescript/api/source/ads/SpotXAdDescription.d.ts.map +0 -1
  127. package/lib/typescript/api/source/ads/ssai/ImagineServerSideAdInsertionConfiguration.d.ts +0 -28
  128. package/lib/typescript/api/source/ads/ssai/ImagineServerSideAdInsertionConfiguration.d.ts.map +0 -1
  129. package/lib/typescript/api/source/ads/ssai/YospaceServerSideAdInsertionConfiguration.d.ts +0 -47
  130. package/lib/typescript/api/source/ads/ssai/YospaceServerSideAdInsertionConfiguration.d.ts.map +0 -1
  131. package/src/api/source/ads/FreeWheelAdDescription.ts +0 -97
  132. package/src/api/source/ads/SpotXAdDescription.ts +0 -126
  133. package/src/api/source/ads/ssai/ImagineServerSideAdInsertionConfiguration.ts +0 -30
  134. package/src/api/source/ads/ssai/YospaceServerSideAdInsertionConfiguration.ts +0 -51
package/CHANGELOG.md CHANGED
@@ -5,6 +5,21 @@ 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
+ ## [7.5.0] - 24-06-18
9
+
10
+ ### Fixed
11
+
12
+ - Fixed an issue where the Cast API wouldn't be initialized yet when in the `onPlayerReady` callback.
13
+ - Added support for THEOplayer Android v7.6.0.
14
+
15
+ ## [7.4.0] - 24-06-11
16
+
17
+ ### Added
18
+
19
+ - Added support for `SourceDescription.poster` for Android & iOS.
20
+ - Made the intervals for the forward and backward skip buttons on the iOS lockScreen configurable.
21
+ - Added preferredPeakBitRate and preferredMaximumResolution to ABRConfiguration for iOS
22
+
8
23
  ## [7.3.0] - 24-06-03
9
24
 
10
25
  ### Changed
package/README.md CHANGED
@@ -131,18 +131,18 @@ please reach out to us for support.
131
131
  The `react-native-theoplayer` package can be combined with any number of connectors to provide extra
132
132
  functionality. Currently, the following connectors are available:
133
133
 
134
- | Package name | Purpose | Registry |
135
- | ------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
136
- | [`@theoplayer/react-native-analytics-adobe`](https://github.com/THEOplayer/react-native-theoplayer-analytics) | Adobe analytics connector | [![npm](https://img.shields.io/npm/v/@theoplayer/react-native-analytics-adobe)](https://www.npmjs.com/package/@theoplayer/react-native-analytics-adobe) |
137
- | [`@theoplayer/react-native-analytics-agama`](https://github.com/THEOplayer/react-native-theoplayer-analytics) | Agama analytics connector | [![npm](https://img.shields.io/npm/v/@theoplayer/react-native-analytics-agama)](https://www.npmjs.com/package/@theoplayer/react-native-analytics-agama) |
138
- | [`@theoplayer/react-native-analytics-comscore`](https://github.com/THEOplayer/react-native-theoplayer-analytics) | Comscore analytics connector | [![npm](https://img.shields.io/npm/v/@theoplayer/react-native-analytics-comscore)](https://www.npmjs.com/package/@theoplayer/react-native-analytics-comscore) |
139
- | [`@theoplayer/react-native-analytics-conviva`](https://github.com/THEOplayer/react-native-theoplayer-analytics) | Conviva analytics connector | [![npm](https://img.shields.io/npm/v/@theoplayer/react-native-analytics-conviva)](https://www.npmjs.com/package/@theoplayer/react-native-analytics-conviva) |
140
- | [`@theoplayer/react-native-analytics-mux`](https://github.com/THEOplayer/react-native-theoplayer-analytics) | Mux analytics connector | [![npm](https://img.shields.io/npm/v/@theoplayer/react-native-analytics-mux)](https://www.npmjs.com/package/@theoplayer/react-native-analytics-mux) |
141
- | [`@theoplayer/react-native-analytics-nielsen`](https://github.com/THEOplayer/react-native-theoplayer-analytics) | Nielsen analytics connector | [![npm](https://img.shields.io/npm/v/@theoplayer/react-native-analytics-nielsen)](https://www.npmjs.com/package/@theoplayer/react-native-analytics-nielsen) |
142
- | [`@theoplayer/react-native-analytics-youbora`](https://github.com/THEOplayer/react-native-theoplayer-analytics) | Youbora analytics connector | [![npm](https://img.shields.io/npm/v/@theoplayer/react-native-analytics-youbora)](https://www.npmjs.com/package/@theoplayer/react-native-analytics-youbora) |
143
- | [`@theoplayer/react-native-drm`](https://github.com/THEOplayer/react-native-theoplayer-drm) | Content protection (DRM) connectors | [![npm](https://img.shields.io/npm/v/@theoplayer/react-native-drm)](https://www.npmjs.com/package/@theoplayer/react-native-drm) |
144
- | [`@theoplayer/react-native-ui`](https://github.com/THEOplayer/react-native-theoplayer-ui) | React Native user interface | [![npm](https://img.shields.io/npm/v/@theoplayer/react-native-ui)](https://www.npmjs.com/package/@theoplayer/react-native-ui) |
145
- | [`@theoplayer/react-native-connector-template`](https://github.com/THEOplayer/react-native-theoplayer-connector-template) | A template for<br/>`react-native-theoplayer` connectors. | [![npm](https://img.shields.io/npm/v/@theoplayer/react-native-connector-template)](https://www.npmjs.com/package/@theoplayer/react-native-connector-template) |
134
+ | Connector | npm package | Source |
135
+ |----------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------|
136
+ | Adobe analytics, implementing the Media Collections API | [![%40theoplayer/react-native-analytics-adobe](https://img.shields.io/npm/v/%40theoplayer%2Freact-native-analytics-adobe?label=%40theoplayer/react-native-analytics-adobe)](https://www.npmjs.com/package/%40theoplayer%2Freact-native-analytics-adobe) | [`Adobe`](https://github.com/THEOplayer/react-native-connectors/tree/main/adobe) |
137
+ | Agama analytics | [![%40theoplayer/react-native-analytics-agama](https://img.shields.io/npm/v/%40theoplayer%2Freact-native-analytics-agama?label=%40theoplayer/react-native-analytics-agama)](https://www.npmjs.com/package/%40theoplayer%2Freact-native-analytics-agama) | [`Agama`](https://github.com/THEOplayer/react-native-connectors/tree/main/agama) |
138
+ | Comscore analytics | [![%40theoplayer/react-native-analytics-comscore](https://img.shields.io/npm/v/%40theoplayer%2Freact-native-analytics-comscore?label=%40theoplayer/react-native-analytics-comscore)](https://www.npmjs.com/package/%40theoplayer%2Freact-native-analytics-comscore) | [`Comscore`](https://github.com/THEOplayer/react-native-connectors/tree/main/comscore) |
139
+ | Conviva analytics | [![%40theoplayer/react-native-analytics-conviva](https://img.shields.io/npm/v/%40theoplayer%2Freact-native-analytics-conviva?label=%40theoplayer/react-native-analytics-conviva)](https://www.npmjs.com/package/%40theoplayer%2Freact-native-analytics-conviva) | [`Conviva`](https://github.com/THEOplayer/react-native-connectors/tree/main/conviva) |
140
+ | Mux analytics | [![%40theoplayer/react-native-analytics-mux](https://img.shields.io/npm/v/%40theoplayer%2Freact-native-analytics-mux?label=%40theoplayer/react-native-analytics-mux)](https://www.npmjs.com/package/%40theoplayer%2Freact-native-analytics-mux) | [`Mux`](https://github.com/THEOplayer/react-native-connectors/tree/main/mux) |
141
+ | Nielsen analytics | [![%40theoplayer/react-native-analytics-nielsen](https://img.shields.io/npm/v/%40theoplayer%2Freact-native-analytics-nielsen?label=%40theoplayer/react-native-analytics-nielsen)](https://www.npmjs.com/package/%40theoplayer%2Freact-native-analytics-nielsen) | [`Nielsen`](https://github.com/THEOplayer/react-native-connectors/tree/main/nielsen) |
142
+ | Youbora analytics | [![%40theoplayer/react-native-analytics-youbora](https://img.shields.io/npm/v/%40theoplayer%2Freact-native-analytics-youbora?label=%40theoplayer/react-native-analytics-youbora)](https://www.npmjs.com/package/%40theoplayer%2Freact-native-analytics-youbora) | [`Youbora`](https://github.com/THEOplayer/react-native-connectors/tree/main/youbora) |
143
+ | Content protection (DRM) | [![%40theoplayer/react-native-drm](https://img.shields.io/npm/v/%40theoplayer%2Freact-native-drm?label=%40theoplayer/react-native-drm)](https://www.npmjs.com/package/%40theoplayer%2Freact-native-drm) | [`DRM`](https://github.com/THEOplayer/react-native-theoplayer-drm) |
144
+ | React Native Open UI | [![%40theoplayer/react-native-ui](https://img.shields.io/npm/v/%40theoplayer%2Freact-native-ui?label=%40theoplayer/react-native-ui)](https://www.npmjs.com/package/%40theoplayer%2Freact-native-ui) | [`Open UI`](https://github.com/THEOplayer/react-native-theoplayer-ui) |
145
+ | A template for<br/>`react-native-theoplayer` connectors. | [![%40theoplayer/react-native-connector-template](https://img.shields.io/npm/v/%40theoplayer%2Freact-native-connector-template?label=%40theoplayer/react-native-connector-template)](https://www.npmjs.com/package/%40theoplayer%2Freact-native-connector-template) | [`Connector template`](https://github.com/THEOplayer/react-native-theoplayer-connector-template) |
146
146
 
147
147
  ## Creating your first app
148
148
 
@@ -112,13 +112,14 @@ dependencies {
112
112
  implementation "androidx.appcompat:appcompat:${safeExtGet('appcompatVersion', '1.6.1')}"
113
113
  implementation "androidx.core:core-ktx:${safeExtGet('corektxVersion', '1.10.1')}"
114
114
 
115
- // The minimum supported THEOplayer version is 7.0.0
116
- def theoplayer_sdk_version = safeExtGet('THEOplayer_sdk', '[7.0.0, 8.0.0)')
115
+ // The minimum supported THEOplayer version is 7.6.0
116
+ def theoplayer_sdk_version = safeExtGet('THEOplayer_sdk', '[7.6.0, 8.0.0)')
117
+ def theoplayer_mediasession_version = safeExtGet('THEOplayer_mediasession', '[7.5.0, 8.0.0)')
117
118
 
118
119
  println("Using THEOplayer (${versionString(theoplayer_sdk_version)})")
119
120
  implementation "com.theoplayer.theoplayer-sdk-android:core:${theoplayer_sdk_version}"
120
- implementation "com.theoplayer.theoplayer-sdk-android:ads-wrapper:7.0.0"
121
- implementation "com.theoplayer.android-connector:mediasession:${theoplayer_sdk_version}"
121
+ implementation "com.theoplayer.theoplayer-sdk-android:ads-wrapper:7.6.0"
122
+ implementation "com.theoplayer.android-connector:mediasession:${theoplayer_mediasession_version}"
122
123
 
123
124
  if (enabledGoogleIMA) {
124
125
  println('Enable THEOplayer IMA extension.')
@@ -1,9 +1,9 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
2
  <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
3
3
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
4
- <modelVersion>7.0.0</modelVersion>
4
+ <modelVersion>7.6.0</modelVersion>
5
5
  <groupId>com.theoplayer.theoplayer-sdk-android</groupId>
6
6
  <artifactId>ads-wrapper</artifactId>
7
- <version>7.0.0</version>
7
+ <version>7.6.0</version>
8
8
  <packaging>aar</packaging>
9
9
  </project>
@@ -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.0.0</latest>
7
- <release>7.0.0</release>
6
+ <latest>7.6.0</latest>
7
+ <release>7.6.0</release>
8
8
  <versions>
9
- <version>7.0.0</version>
9
+ <version>7.6.0</version>
10
10
  </versions>
11
- <lastUpdated>20240425153844</lastUpdated>
11
+ <lastUpdated>20240618230000</lastUpdated>
12
12
  </versioning>
13
13
  </metadata>
@@ -16,6 +16,7 @@ import java.lang.Exception
16
16
 
17
17
  private const val PROP_AD_SYSTEM = "adSystem"
18
18
  private const val PROP_AD_INTEGRATION = "integration"
19
+ private const val PROP_AD_CUSTOM_INTEGRATION = "customIntegration"
19
20
  private const val PROP_AD_TYPE = "type"
20
21
  private const val PROP_AD_ID = "id"
21
22
  private const val PROP_AD_BREAK = "adBreak"
@@ -208,6 +209,10 @@ object AdAdapter {
208
209
  return AdIntegrationKind.from(ad.getString(PROP_AD_INTEGRATION))
209
210
  }
210
211
 
212
+ override fun getCustomIntegration(): String? {
213
+ return ad.getString(PROP_AD_CUSTOM_INTEGRATION)
214
+ }
215
+
211
216
  override fun getImaAd(): com.google.ads.interactivemedia.v3.api.Ad {
212
217
  return parseImaAd(ad)
213
218
  }
@@ -279,6 +284,10 @@ object AdAdapter {
279
284
  override fun getIntegration(): AdIntegrationKind {
280
285
  return AdIntegrationKind.from(adBreak.getString(PROP_ADBREAK_INTEGRATION))
281
286
  }
287
+
288
+ override fun getCustomIntegration(): String? {
289
+ return adBreak.getString(PROP_AD_CUSTOM_INTEGRATION)
290
+ }
282
291
  }
283
292
  }
284
293
 
@@ -0,0 +1,34 @@
1
+ package com.theoplayer.source
2
+
3
+ import com.google.gson.Gson
4
+ import com.theoplayer.BuildConfig
5
+ import com.theoplayer.android.api.error.ErrorCode
6
+ import com.theoplayer.android.api.error.THEOplayerException
7
+ import com.theoplayer.android.api.source.GoogleDaiTypedSource
8
+ import com.theoplayer.android.api.source.TypedSource
9
+ import com.theoplayer.android.api.source.ssai.dai.GoogleDaiLiveConfiguration
10
+ import com.theoplayer.android.api.source.ssai.dai.GoogleDaiVodConfiguration
11
+ import org.json.JSONObject
12
+
13
+ private const val PROP_AVAILABILITY_TYPE = "availabilityType"
14
+ private const val AVAILABILITY_TYPE_VOD = "vod"
15
+ private const val ERROR_DAI_NOT_ENABLED = "Google DAI support not enabled."
16
+
17
+ @Throws(THEOplayerException::class)
18
+ fun googleDaiBuilderFromJson(builder: TypedSource.Builder, json: JSONObject): TypedSource.Builder {
19
+ // Check whether the integration was enabled
20
+ if (!BuildConfig.EXTENSION_GOOGLE_DAI) {
21
+ throw THEOplayerException(ErrorCode.AD_ERROR, ERROR_DAI_NOT_ENABLED)
22
+ }
23
+ // We need to create a new builder as the player SDK checks for:
24
+ // typedSource is GoogleDaiTypedSource
25
+ return if (json.optString(PROP_AVAILABILITY_TYPE) == AVAILABILITY_TYPE_VOD) {
26
+ GoogleDaiTypedSource.Builder(
27
+ Gson().fromJson(json.toString(), GoogleDaiVodConfiguration::class.java)
28
+ )
29
+ } else {
30
+ GoogleDaiTypedSource.Builder(
31
+ Gson().fromJson(json.toString(), GoogleDaiLiveConfiguration::class.java)
32
+ )
33
+ }
34
+ }
@@ -0,0 +1,51 @@
1
+ package com.theoplayer.source
2
+
3
+ import android.text.TextUtils
4
+ import com.theoplayer.android.api.error.ErrorCode
5
+ import com.theoplayer.android.api.error.THEOplayerException
6
+ import com.theoplayer.android.api.source.SourceType
7
+ import com.theoplayer.android.api.source.TypedSource
8
+ import org.json.JSONObject
9
+
10
+ typealias CustomSSAIAdapter = (json: JSONObject, currentBuilder: TypedSource.Builder) -> TypedSource.Builder
11
+
12
+ private const val ERROR_UNSUPPORTED_SSAI_INTEGRATION = "Unsupported SSAI integration"
13
+ private const val ERROR_MISSING_SSAI_INTEGRATION = "Missing SSAI integration"
14
+ private const val PROP_INTEGRATION = "integration"
15
+
16
+ object SSAIAdapterRegistry {
17
+ private val _adapters: MutableMap<String, CustomSSAIAdapter> = HashMap()
18
+
19
+ fun register(integration: String, adapter: CustomSSAIAdapter) {
20
+ _adapters[integration] = adapter
21
+ }
22
+
23
+ fun hasIntegration(integration: String): Boolean {
24
+ return _adapters[integration] != null
25
+ }
26
+
27
+ fun typedSourceBuilderFromJson(json: JSONObject, currentBuilder: TypedSource.Builder, sourceType: SourceType?): TypedSource.Builder {
28
+ // Check for valid SsaiIntegration
29
+ val ssaiIntegrationStr = json.optString(PROP_INTEGRATION)
30
+
31
+ // Check for valid `integration` property, which is mandatory.
32
+ if (TextUtils.isEmpty(ssaiIntegrationStr)) {
33
+ throw THEOplayerException(ErrorCode.AD_ERROR, ERROR_MISSING_SSAI_INTEGRATION)
34
+ }
35
+
36
+ // Check for known SsaiIntegration
37
+ if (!hasIntegration(ssaiIntegrationStr)) {
38
+ throw THEOplayerException(
39
+ ErrorCode.AD_ERROR,
40
+ "$ERROR_UNSUPPORTED_SSAI_INTEGRATION: $ssaiIntegrationStr"
41
+ )
42
+ }
43
+
44
+ // Prefer DASH if SSAI type not specified
45
+ if (sourceType == null) {
46
+ currentBuilder.type(SourceType.DASH)
47
+ }
48
+
49
+ return _adapters[ssaiIntegrationStr]?.invoke(json, currentBuilder) ?: currentBuilder
50
+ }
51
+ }
@@ -2,11 +2,9 @@ package com.theoplayer.source
2
2
 
3
3
  import android.text.TextUtils
4
4
  import android.util.Log
5
- import com.facebook.react.bridge.Arguments
6
5
  import com.google.gson.Gson
7
6
  import com.theoplayer.android.api.error.THEOplayerException
8
7
  import com.facebook.react.bridge.ReadableMap
9
- import com.facebook.react.bridge.WritableArray
10
8
  import com.facebook.react.bridge.WritableMap
11
9
  import com.theoplayer.android.api.source.SourceDescription
12
10
  import com.theoplayer.android.api.source.TypedSource
@@ -14,10 +12,6 @@ import com.theoplayer.android.api.source.metadata.MetadataDescription
14
12
  import com.theoplayer.android.api.source.addescription.AdDescription
15
13
  import com.theoplayer.android.api.source.TextTrackDescription
16
14
  import com.theoplayer.android.api.source.SourceType
17
- import com.theoplayer.android.api.source.ssai.SsaiIntegration
18
- import com.theoplayer.android.api.source.GoogleDaiTypedSource
19
- import com.theoplayer.android.api.source.ssai.dai.GoogleDaiVodConfiguration
20
- import com.theoplayer.android.api.source.ssai.dai.GoogleDaiLiveConfiguration
21
15
  import com.theoplayer.android.api.source.hls.HlsPlaybackConfiguration
22
16
  import com.theoplayer.android.api.event.ads.AdIntegrationKind
23
17
  import com.theoplayer.android.api.source.addescription.GoogleImaAdDescription
@@ -55,19 +49,26 @@ private const val PROP_INTEGRATION = "integration"
55
49
  private const val PROP_TEXT_TRACKS = "textTracks"
56
50
  private const val PROP_POSTER = "poster"
57
51
  private const val PROP_ADS = "ads"
58
- private const val PROP_AVAILABILITY_TYPE = "availabilityType"
59
52
  private const val PROP_DASH = "dash"
60
53
  private const val PROP_DASH_IGNORE_AVAILABILITYWINDOW = "ignoreAvailabilityWindow"
61
- private const val ERROR_DAI_NOT_ENABLED = "Google DAI support not enabled."
62
- private const val ERROR_UNSUPPORTED_SSAI_INTEGRATION = "Unsupported SSAI integration"
63
- private const val ERROR_MISSING_SSAI_INTEGRATION = "Missing SSAI integration"
64
54
  private const val ERROR_IMA_NOT_ENABLED = "Google IMA support not enabled."
65
55
  private const val ERROR_UNSUPPORTED_CSAI_INTEGRATION = "Unsupported CSAI integration"
66
56
  private const val ERROR_MISSING_CSAI_INTEGRATION = "Missing CSAI integration"
67
57
 
58
+ private const val PROP_SSAI_INTEGRATION_GOOGLE_DAI = "google-dai"
59
+
68
60
  class SourceAdapter {
69
61
  private val gson = Gson()
70
62
 
63
+ companion object {
64
+ init {
65
+ // Register default SSAI adapter for Google DAI.
66
+ SSAIAdapterRegistry.register(PROP_SSAI_INTEGRATION_GOOGLE_DAI) { json, currentBuilder ->
67
+ googleDaiBuilderFromJson(currentBuilder, json)
68
+ }
69
+ }
70
+ }
71
+
71
72
  @Throws(THEOplayerException::class)
72
73
  fun parseSourceFromJS(source: ReadableMap?): SourceDescription? {
73
74
  if (source == null) {
@@ -83,17 +84,11 @@ class SourceAdapter {
83
84
  val jsonSources = jsonSourceObject.optJSONArray(PROP_SOURCES)
84
85
  if (jsonSources != null) {
85
86
  for (i in 0 until jsonSources.length()) {
86
- val typedSource = parseTypedSource(jsonSources[i] as JSONObject)
87
- if (typedSource != null) {
88
- typedSources.add(typedSource)
89
- }
87
+ typedSources.add(parseTypedSource(jsonSources[i] as JSONObject))
90
88
  }
91
89
  } else {
92
90
  val jsonSource = jsonSourceObject.optJSONObject(PROP_SOURCES) ?: return null
93
- val typedSource = parseTypedSource(jsonSource)
94
- if (typedSource != null) {
95
- typedSources.add(typedSource)
96
- }
91
+ typedSources.add(parseTypedSource(jsonSource))
97
92
  }
98
93
 
99
94
  // poster
@@ -142,48 +137,13 @@ class SourceAdapter {
142
137
  }
143
138
 
144
139
  @Throws(THEOplayerException::class)
145
- private fun parseTypedSource(jsonTypedSource: JSONObject): TypedSource? {
140
+ private fun parseTypedSource(jsonTypedSource: JSONObject): TypedSource {
146
141
  try {
147
142
  var tsBuilder = TypedSource.Builder(jsonTypedSource.optString(PROP_SRC))
148
143
  val sourceType = parseSourceType(jsonTypedSource)
149
144
  if (jsonTypedSource.has(PROP_SSAI)) {
150
145
  val ssaiJson = jsonTypedSource.getJSONObject(PROP_SSAI)
151
-
152
- // Check for valid SsaiIntegration
153
- val ssaiIntegrationStr = ssaiJson.optString(PROP_INTEGRATION)
154
- if (!TextUtils.isEmpty(ssaiIntegrationStr)) {
155
- val ssaiIntegration = SsaiIntegration.from(ssaiIntegrationStr)
156
- ?: throw THEOplayerException(
157
- ErrorCode.AD_ERROR,
158
- "$ERROR_UNSUPPORTED_SSAI_INTEGRATION: $ssaiIntegrationStr"
159
- )
160
- when (ssaiIntegration) {
161
- SsaiIntegration.GOOGLE_DAI -> {
162
- if (!BuildConfig.EXTENSION_GOOGLE_DAI) {
163
- throw THEOplayerException(ErrorCode.AD_ERROR, ERROR_DAI_NOT_ENABLED)
164
- }
165
- tsBuilder = if (ssaiJson.optString(PROP_AVAILABILITY_TYPE) == "vod") {
166
- GoogleDaiTypedSource.Builder(
167
- gson.fromJson(ssaiJson.toString(), GoogleDaiVodConfiguration::class.java)
168
- )
169
- } else {
170
- GoogleDaiTypedSource.Builder(
171
- gson.fromJson(ssaiJson.toString(), GoogleDaiLiveConfiguration::class.java)
172
- )
173
- }
174
- // Prefer DASH if not SSAI type specified
175
- if (sourceType == null) {
176
- tsBuilder.type(SourceType.DASH)
177
- }
178
- }
179
- else -> throw THEOplayerException(
180
- ErrorCode.AD_ERROR,
181
- "$ERROR_UNSUPPORTED_SSAI_INTEGRATION: $ssaiIntegrationStr"
182
- )
183
- }
184
- } else {
185
- throw THEOplayerException(ErrorCode.AD_ERROR, ERROR_MISSING_SSAI_INTEGRATION)
186
- }
146
+ tsBuilder = SSAIAdapterRegistry.typedSourceBuilderFromJson(ssaiJson, tsBuilder, sourceType)
187
147
  }
188
148
  if (sourceType != null) {
189
149
  tsBuilder.type(sourceType)
@@ -216,10 +176,13 @@ class SourceAdapter {
216
176
  }
217
177
  }
218
178
  return tsBuilder.build()
219
- } catch (e: JSONException) {
220
- e.printStackTrace()
179
+ } catch (e: THEOplayerException) {
180
+ // Rethrow THEOplayerException
181
+ throw e
182
+ } catch (e: Exception) {
183
+ // Wrap exception
184
+ throw THEOplayerException(ErrorCode.SOURCE_INVALID, "Invalid source: ${e.message}")
221
185
  }
222
- return null
223
186
  }
224
187
 
225
188
  @Throws(THEOplayerException::class)
@@ -281,12 +244,14 @@ class SourceAdapter {
281
244
  AdIntegrationKind.GOOGLE_IMA -> parseImaAdFromJS(
282
245
  jsonAdDescription
283
246
  )
247
+
284
248
  AdIntegrationKind.DEFAULT -> {
285
249
  throw THEOplayerException(
286
250
  ErrorCode.AD_ERROR,
287
251
  "$ERROR_UNSUPPORTED_CSAI_INTEGRATION: $integrationKindStr"
288
252
  )
289
253
  }
254
+
290
255
  else -> {
291
256
  throw THEOplayerException(
292
257
  ErrorCode.AD_ERROR,
@@ -10,7 +10,6 @@ import THEOplayerSDK
10
10
  import THEOplayerConnectorSideloadedSubtitle
11
11
  #endif
12
12
 
13
- let ERROR_MESSAGE_PLAYER_ABR_UNSUPPORTED_FEATURE: String = "Setting an ABRconfig is not supported on iOS/tvOS."
14
13
  let ERROR_MESSAGE_PLAYER_QUALITY_UNSUPPORTED_FEATURE: String = "Setting a target video quality is not supported on iOS/tvOS."
15
14
 
16
15
  let TTS_PROP_BACKGROUND_COLOR = "backgroundColor"
@@ -92,8 +91,34 @@ class THEOplayerRCTPlayerAPI: NSObject, RCTBridgeModule {
92
91
  }
93
92
 
94
93
  @objc(setABRConfig:abrConfig:)
95
- func setABRConfig(_ node: NSNumber, setABRConfig: NSDictionary) -> Void {
96
- if DEBUG_PLAYER_API { print(ERROR_MESSAGE_PLAYER_ABR_UNSUPPORTED_FEATURE) }
94
+ func setABRConfig(_ node: NSNumber, abrConfig: NSDictionary) -> Void {
95
+ DispatchQueue.main.async {
96
+ if let theView = self.bridge.uiManager.view(forReactTag: node) as? THEOplayerRCTView,
97
+ let player = theView.player {
98
+ if DEBUG_PLAYER_API { PrintUtils.printLog(logText: "[NATIVE] Setting abrConfig on TheoPlayer") }
99
+ if let configuredTargetBuffer = abrConfig["targetBuffer"] as? Double {
100
+ player.abr.targetBuffer = configuredTargetBuffer
101
+ } else if let configuredTargetBuffer = abrConfig["targetBuffer"] as? Int {
102
+ player.abr.targetBuffer = Double(configuredTargetBuffer)
103
+ }
104
+ if let configuredPreferredPeakBitRate = abrConfig["preferredPeakBitRate"] as? Double {
105
+ player.abr.preferredPeakBitRate = configuredPreferredPeakBitRate
106
+ } else if let configuredPreferredPeakBitRate = abrConfig["preferredPeakBitRate"] as? Int {
107
+ player.abr.preferredPeakBitRate = Double(configuredPreferredPeakBitRate)
108
+ }
109
+ if let configuredPreferredMaximumResolution = abrConfig["preferredMaximumResolution"] as? [String:Double] {
110
+ if let width = configuredPreferredMaximumResolution["width"],
111
+ let height = configuredPreferredMaximumResolution["height"] {
112
+ player.abr.preferredMaximumResolution = CGSize(width: width, height: height)
113
+ }
114
+ } else if let configuredPreferredMaximumResolution = abrConfig["preferredMaximumResolution"] as? [String:Int] {
115
+ if let width = configuredPreferredMaximumResolution["width"],
116
+ let height = configuredPreferredMaximumResolution["height"] {
117
+ player.abr.preferredMaximumResolution = CGSize(width: Double(width), height: Double(height))
118
+ }
119
+ }
120
+ }
121
+ }
97
122
  }
98
123
 
99
124
  @objc(setCurrentTime:time:)
@@ -18,10 +18,16 @@ public class THEOplayerRCTView: UIView {
18
18
  var nowPlayingManager: THEOplayerRCTNowPlayingManager
19
19
  var remoteCommandsManager: THEOplayerRCTRemoteCommandsManager
20
20
  var pipControlsManager: THEOplayerRCTPipControlsManager
21
+
21
22
  var adsConfig = AdsConfig()
22
23
  var castConfig = CastConfig()
23
24
  var uiConfig = UIConfig()
24
25
 
26
+ var mediaControlConfig = MediaControlConfig() {
27
+ didSet {
28
+ self.remoteCommandsManager.setMediaControlConfig(mediaControlConfig)
29
+ }
30
+ }
25
31
  var pipConfig = PipConfig() {
26
32
  didSet {
27
33
  self.pipControlsManager.setPipConfig(pipConfig)
@@ -161,6 +167,7 @@ public class THEOplayerRCTView: UIView {
161
167
  self.parseAdsConfig(configDict: configDict)
162
168
  self.parseCastConfig(configDict: configDict)
163
169
  self.parseUIConfig(configDict: configDict)
170
+ self.parseMediaControlConfig(configDict: configDict)
164
171
  if DEBUG_VIEW { PrintUtils.printLog(logText: "[NATIVE] config prop updated.") }
165
172
 
166
173
  // Given the bridged config, create the initial THEOplayer instance
@@ -4,14 +4,13 @@ import Foundation
4
4
  import THEOplayerSDK
5
5
  import MediaPlayer
6
6
 
7
- let DEFAULT_SKIP_INTERVAL: UInt = 15
8
-
9
7
  class THEOplayerRCTRemoteCommandsManager: NSObject {
10
8
  // MARK: Members
11
9
  private weak var player: THEOplayer?
12
10
  private var isLive: Bool = false
13
11
  private var inAd: Bool = false
14
12
  private var backgroundaudioConfig = BackgroundAudioConfig()
13
+ private var mediaControlConfig = MediaControlConfig()
15
14
 
16
15
  // MARK: player Listeners
17
16
  private var durationChangeListener: EventListener?
@@ -39,6 +38,11 @@ class THEOplayerRCTRemoteCommandsManager: NSObject {
39
38
  self.updateRemoteCommands()
40
39
  }
41
40
 
41
+ func setMediaControlConfig(_ newMediaControlConfig: MediaControlConfig) {
42
+ self.mediaControlConfig = newMediaControlConfig
43
+ self.updateRemoteCommands()
44
+ }
45
+
42
46
  private func initRemoteCommands() {
43
47
  self.isLive = false
44
48
  self.inAd = false
@@ -61,10 +65,10 @@ class THEOplayerRCTRemoteCommandsManager: NSObject {
61
65
  // SCRUBBER
62
66
  commandCenter.changePlaybackPositionCommand.addTarget(self, action: #selector(onScrubCommand(_:)))
63
67
  // ADD SEEK FORWARD
64
- commandCenter.skipForwardCommand.preferredIntervals = [NSNumber(value: DEFAULT_SKIP_INTERVAL)]
68
+ commandCenter.skipForwardCommand.preferredIntervals = [NSNumber(value: self.mediaControlConfig.skipForwardInterval)]
65
69
  commandCenter.skipForwardCommand.addTarget(self, action: #selector(onSkipForwardCommand(_:)))
66
70
  // ADD SEEK BACKWARD
67
- commandCenter.skipBackwardCommand.preferredIntervals = [NSNumber(value: DEFAULT_SKIP_INTERVAL)]
71
+ commandCenter.skipBackwardCommand.preferredIntervals = [NSNumber(value: self.mediaControlConfig.skipBackwardInterval)]
68
72
  commandCenter.skipBackwardCommand.addTarget(self, action: #selector(onSkipBackwardCommand(_:)))
69
73
 
70
74
  if DEBUG_REMOTECOMMANDS { PrintUtils.printLog(logText: "[NATIVE] Remote commands initialised.") }
@@ -82,6 +86,10 @@ class THEOplayerRCTRemoteCommandsManager: NSObject {
82
86
  commandCenter.skipForwardCommand.isEnabled = !self.isLive && !self.inAd && self.backgroundaudioConfig.enabled
83
87
  commandCenter.skipBackwardCommand.isEnabled = !self.isLive && !self.inAd && self.backgroundaudioConfig.enabled
84
88
 
89
+ // set configured skip forward/backward intervals
90
+ commandCenter.skipForwardCommand.preferredIntervals = [NSNumber(value: self.mediaControlConfig.skipForwardInterval)]
91
+ commandCenter.skipBackwardCommand.preferredIntervals = [NSNumber(value: self.mediaControlConfig.skipBackwardInterval)]
92
+
85
93
  if DEBUG_REMOTECOMMANDS { PrintUtils.printLog(logText: "[NATIVE] Remote commands updated for \(self.isLive ? "LIVE" : "VOD") (\(self.inAd ? "AD IS PLAYING" : "NO AD PLAYING"), \(self.backgroundaudioConfig.enabled ? "BGAUDIO ENABLED" : "BGAUDIO DISABLED") ).") }
86
94
  }
87
95
 
@@ -0,0 +1,23 @@
1
+ // THEOplayerRCTView+UIConfig.swift
2
+
3
+ import Foundation
4
+ import THEOplayerSDK
5
+
6
+ struct MediaControlConfig {
7
+ var skipForwardInterval: Int = 15
8
+ var skipBackwardInterval: Int = 15
9
+ }
10
+
11
+ extension THEOplayerRCTView {
12
+
13
+ func parseMediaControlConfig(configDict: NSDictionary) {
14
+ if let mediaControlConfig = configDict["mediaControl"] as? NSDictionary {
15
+ if let skipForwardInterval = mediaControlConfig["skipForwardInterval"] as? Int {
16
+ self.mediaControlConfig.skipForwardInterval = skipForwardInterval
17
+ }
18
+ if let skipBackwardInterval = mediaControlConfig["skipBackwardInterval"] as? Int {
19
+ self.mediaControlConfig.skipBackwardInterval = skipBackwardInterval
20
+ }
21
+ }
22
+ }
23
+ }
@@ -1 +1 @@
1
- {"version":3,"names":["ABRStrategyType","exports"],"sourceRoot":"../../../../src","sources":["api/abr/ABRConfiguration.ts"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA,IAQYA,eAAe,GAAAC,OAAA,CAAAD,eAAA,0BAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAA,OAAfA,eAAe;AAAA;AAM3B;AACA;AACA;AACA;AACA;AAUA;AACA;AACA;AACA;AACA;AAeA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA","ignoreList":[]}
1
+ {"version":3,"names":["ABRStrategyType","exports"],"sourceRoot":"../../../../src","sources":["api/abr/ABRConfiguration.ts"],"mappings":";;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA,IAQYA,eAAe,GAAAC,OAAA,CAAAD,eAAA,0BAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAA,OAAfA,eAAe;AAAA;AAM3B;AACA;AACA;AACA;AACA;AAUA;AACA;AACA;AACA;AACA;AAeA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA","ignoreList":[]}
@@ -157,7 +157,7 @@ Object.keys(_barrel14).forEach(function (key) {
157
157
  }
158
158
  });
159
159
  });
160
- var _barrel15 = require("./track/barrel");
160
+ var _barrel15 = require("./resolution/barrel");
161
161
  Object.keys(_barrel15).forEach(function (key) {
162
162
  if (key === "default" || key === "__esModule") return;
163
163
  if (key in exports && exports[key] === _barrel15[key]) return;
@@ -168,7 +168,7 @@ Object.keys(_barrel15).forEach(function (key) {
168
168
  }
169
169
  });
170
170
  });
171
- var _barrel16 = require("./ui/barrel");
171
+ var _barrel16 = require("./track/barrel");
172
172
  Object.keys(_barrel16).forEach(function (key) {
173
173
  if (key === "default" || key === "__esModule") return;
174
174
  if (key in exports && exports[key] === _barrel16[key]) return;
@@ -179,7 +179,7 @@ Object.keys(_barrel16).forEach(function (key) {
179
179
  }
180
180
  });
181
181
  });
182
- var _barrel17 = require("./utils/barrel");
182
+ var _barrel17 = require("./ui/barrel");
183
183
  Object.keys(_barrel17).forEach(function (key) {
184
184
  if (key === "default" || key === "__esModule") return;
185
185
  if (key in exports && exports[key] === _barrel17[key]) return;
@@ -190,6 +190,17 @@ Object.keys(_barrel17).forEach(function (key) {
190
190
  }
191
191
  });
192
192
  });
193
+ var _barrel18 = require("./utils/barrel");
194
+ Object.keys(_barrel18).forEach(function (key) {
195
+ if (key === "default" || key === "__esModule") return;
196
+ if (key in exports && exports[key] === _barrel18[key]) return;
197
+ Object.defineProperty(exports, key, {
198
+ enumerable: true,
199
+ get: function () {
200
+ return _barrel18[key];
201
+ }
202
+ });
203
+ });
193
204
  var _THEOplayerView = require("./THEOplayerView");
194
205
  Object.keys(_THEOplayerView).forEach(function (key) {
195
206
  if (key === "default" || key === "__esModule") return;
@@ -201,25 +212,25 @@ Object.keys(_THEOplayerView).forEach(function (key) {
201
212
  }
202
213
  });
203
214
  });
204
- var _barrel18 = require("./player/barrel");
205
- Object.keys(_barrel18).forEach(function (key) {
215
+ var _barrel19 = require("./player/barrel");
216
+ Object.keys(_barrel19).forEach(function (key) {
206
217
  if (key === "default" || key === "__esModule") return;
207
- if (key in exports && exports[key] === _barrel18[key]) return;
218
+ if (key in exports && exports[key] === _barrel19[key]) return;
208
219
  Object.defineProperty(exports, key, {
209
220
  enumerable: true,
210
221
  get: function () {
211
- return _barrel18[key];
222
+ return _barrel19[key];
212
223
  }
213
224
  });
214
225
  });
215
- var _barrel19 = require("./presentation/barrel");
216
- Object.keys(_barrel19).forEach(function (key) {
226
+ var _barrel20 = require("./presentation/barrel");
227
+ Object.keys(_barrel20).forEach(function (key) {
217
228
  if (key === "default" || key === "__esModule") return;
218
- if (key in exports && exports[key] === _barrel19[key]) return;
229
+ if (key in exports && exports[key] === _barrel20[key]) return;
219
230
  Object.defineProperty(exports, key, {
220
231
  enumerable: true,
221
232
  get: function () {
222
- return _barrel19[key];
233
+ return _barrel20[key];
223
234
  }
224
235
  });
225
236
  });