react-native-theoplayer 9.10.0 → 10.1.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 (236) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/README.md +2 -1
  3. package/android/build.gradle +11 -12
  4. package/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/10.0.0/ads-wrapper-10.0.0.aar +0 -0
  5. package/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/{9.0.0/ads-wrapper-9.0.0.pom → 10.0.0/ads-wrapper-10.0.0.pom} +3 -3
  6. package/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/maven-metadata-local.xml +4 -4
  7. package/android/src/main/AndroidManifest.xml +1 -1
  8. package/android/src/main/java/com/theoplayer/PlayerEventEmitter.kt +39 -10
  9. package/android/src/main/java/com/theoplayer/ReactTHEOplayerPackage.kt +32 -14
  10. package/android/src/main/java/com/theoplayer/ads/AdsModule.kt +18 -6
  11. package/android/src/main/java/com/theoplayer/broadcast/EventBroadcastModule.kt +15 -5
  12. package/android/src/main/java/com/theoplayer/cache/CacheAdapter.kt +0 -12
  13. package/android/src/main/java/com/theoplayer/cache/CacheModule.kt +20 -7
  14. package/android/src/main/java/com/theoplayer/cast/CastEventAdapter.kt +11 -7
  15. package/android/src/main/java/com/theoplayer/cast/CastModule.kt +17 -3
  16. package/android/src/main/java/com/theoplayer/drm/ContentProtectionAdapter.kt +1 -1
  17. package/android/src/main/java/com/theoplayer/drm/ContentProtectionModule.kt +28 -11
  18. package/android/src/main/java/com/theoplayer/media/ConditionalMediaButtonReceiver.kt +38 -0
  19. package/android/src/main/java/com/theoplayer/player/PlayerModule.kt +17 -4
  20. package/android/src/main/java/com/theoplayer/presentation/PresentationManager.kt +12 -3
  21. package/android/src/main/java/com/theoplayer/source/SourceAdapter.kt +16 -37
  22. package/android/src/main/java/com/theoplayer/theoads/THEOadsAdapter.kt +83 -0
  23. package/android/src/main/java/com/theoplayer/theoads/THEOadsEventAdapter.kt +55 -0
  24. package/android/src/main/java/com/theoplayer/theoads/THEOadsModule.kt +63 -0
  25. package/android/src/main/java/com/theoplayer/theolive/THEOliveEventAdapter.kt +21 -8
  26. package/android/src/main/java/com/theoplayer/theolive/THEOliveModule.kt +16 -3
  27. package/android/src/main/java/com/theoplayer/track/TextTrackStyleAdapter.kt +8 -1
  28. package/android/src/main/java/com/theoplayer/util/PayloadBuilder.kt +8 -0
  29. package/ios/THEOplayerRCTBridge.m +21 -1
  30. package/ios/THEOplayerRCTDebug.swift +4 -1
  31. package/ios/THEOplayerRCTMainEventHandler.swift +24 -21
  32. package/ios/THEOplayerRCTPlayerAPI.swift +3 -3
  33. package/ios/THEOplayerRCTSourceDescriptionBuilder.swift +2 -1
  34. package/ios/THEOplayerRCTView.swift +22 -4
  35. package/ios/backgroundAudio/THEOplayerRCTNowPlayingManager.swift +96 -50
  36. package/ios/backgroundAudio/THEOplayerRCTRemoteCommandsManager.swift +0 -1
  37. package/ios/casting/THEOplayerRCTCastEventHandler.swift +1 -1
  38. package/ios/presentationMode/THEOplayerRCTPresentationModeManager.swift +24 -6
  39. package/ios/theoAds/THEOplayerRCTTHEOAdsAPI.swift +101 -0
  40. package/ios/theoAds/THEOplayerRCTTHEOAdsEventAdapter.swift +118 -0
  41. package/ios/theoAds/THEOplayerRCTTHEOAdsEventHandler.swift +174 -0
  42. package/ios/theolive/THEOplayerRCTSourceDescriptionBuilder+Theolive.swift +0 -1
  43. package/ios/theolive/THEOplayerRCTTHEOliveEventHandler.swift +1 -1
  44. package/ios/theolive/THEOplayerRCTView+THEOlive.swift +1 -5
  45. package/ios/theolive/THEOplayerRCTView+THEOliveConfig.swift +0 -2
  46. package/lib/commonjs/api/barrel.js +45 -56
  47. package/lib/commonjs/api/barrel.js.map +1 -1
  48. package/lib/commonjs/api/cache/CachingTaskParameters.js +0 -19
  49. package/lib/commonjs/api/cache/CachingTaskParameters.js.map +1 -1
  50. package/lib/commonjs/api/event/PlayerEvent.js +16 -0
  51. package/lib/commonjs/api/event/PlayerEvent.js.map +1 -1
  52. package/lib/commonjs/api/event/TheoAdsEvent.js +7 -0
  53. package/lib/commonjs/api/event/TheoAdsEvent.js.map +1 -1
  54. package/lib/commonjs/api/player/PlayerEventMap.js +2 -0
  55. package/lib/commonjs/api/player/PlayerEventMap.js.map +1 -1
  56. package/lib/commonjs/api/source/SourceDescription.js +1 -13
  57. package/lib/commonjs/api/source/SourceDescription.js.map +1 -1
  58. package/lib/commonjs/api/source/ads/{THEOplayerAdDescription.js → CsaiAdDescription.js} +1 -1
  59. package/lib/commonjs/api/source/ads/CsaiAdDescription.js.map +1 -0
  60. package/lib/commonjs/api/source/ads/barrel.js +4 -4
  61. package/lib/commonjs/api/source/ads/barrel.js.map +1 -1
  62. package/lib/commonjs/api/track/Quality.js +37 -0
  63. package/lib/commonjs/api/track/Quality.js.map +1 -1
  64. package/lib/commonjs/api/track/TextTrackStyle.js.map +1 -1
  65. package/lib/commonjs/index.js +0 -8
  66. package/lib/commonjs/index.js.map +1 -1
  67. package/lib/commonjs/internal/THEOplayerView.js +15 -3
  68. package/lib/commonjs/internal/THEOplayerView.js.map +1 -1
  69. package/lib/commonjs/internal/THEOplayerView.web.js +1 -1
  70. package/lib/commonjs/internal/THEOplayerView.web.js.map +1 -1
  71. package/lib/commonjs/internal/adapter/DefaultNativePlayerState.js +2 -0
  72. package/lib/commonjs/internal/adapter/DefaultNativePlayerState.js.map +1 -1
  73. package/lib/commonjs/internal/adapter/THEOplayerAdapter.js +27 -9
  74. package/lib/commonjs/internal/adapter/THEOplayerAdapter.js.map +1 -1
  75. package/lib/commonjs/internal/adapter/THEOplayerWebAdapter.js +18 -1
  76. package/lib/commonjs/internal/adapter/THEOplayerWebAdapter.js.map +1 -1
  77. package/lib/commonjs/internal/adapter/WebEventForwarder.js +15 -1
  78. package/lib/commonjs/internal/adapter/WebEventForwarder.js.map +1 -1
  79. package/lib/commonjs/internal/adapter/event/PlayerEvents.js +30 -1
  80. package/lib/commonjs/internal/adapter/event/PlayerEvents.js.map +1 -1
  81. package/lib/commonjs/internal/adapter/event/native/NativeTheoAdsEvent.js +20 -0
  82. package/lib/commonjs/internal/adapter/event/native/NativeTheoAdsEvent.js.map +1 -0
  83. package/lib/commonjs/internal/adapter/theoads/THEOAdsNativeAdapter.js +6 -12
  84. package/lib/commonjs/internal/adapter/theoads/THEOAdsNativeAdapter.js.map +1 -1
  85. package/lib/commonjs/internal/adapter/track/TextTrackStyleAdapter.js +10 -0
  86. package/lib/commonjs/internal/adapter/track/TextTrackStyleAdapter.js.map +1 -1
  87. package/lib/commonjs/internal/utils/TypeUtils.js +4 -1
  88. package/lib/commonjs/internal/utils/TypeUtils.js.map +1 -1
  89. package/lib/commonjs/manifest.json +1 -1
  90. package/lib/module/api/barrel.js +0 -1
  91. package/lib/module/api/barrel.js.map +1 -1
  92. package/lib/module/api/cache/CachingTaskParameters.js +1 -19
  93. package/lib/module/api/cache/CachingTaskParameters.js.map +1 -1
  94. package/lib/module/api/event/PlayerEvent.js +18 -0
  95. package/lib/module/api/event/PlayerEvent.js.map +1 -1
  96. package/lib/module/api/event/TheoAdsEvent.js +8 -0
  97. package/lib/module/api/event/TheoAdsEvent.js.map +1 -1
  98. package/lib/module/api/player/PlayerEventMap.js +2 -0
  99. package/lib/module/api/player/PlayerEventMap.js.map +1 -1
  100. package/lib/module/api/source/SourceDescription.js +0 -13
  101. package/lib/module/api/source/SourceDescription.js.map +1 -1
  102. package/lib/module/api/source/ads/CsaiAdDescription.js +4 -0
  103. package/lib/module/api/source/ads/CsaiAdDescription.js.map +1 -0
  104. package/lib/module/api/source/ads/barrel.js +1 -1
  105. package/lib/module/api/source/ads/barrel.js.map +1 -1
  106. package/lib/module/api/track/Quality.js +34 -0
  107. package/lib/module/api/track/Quality.js.map +1 -1
  108. package/lib/module/api/track/TextTrackStyle.js.map +1 -1
  109. package/lib/module/index.js +0 -1
  110. package/lib/module/index.js.map +1 -1
  111. package/lib/module/internal/THEOplayerView.js +16 -4
  112. package/lib/module/internal/THEOplayerView.js.map +1 -1
  113. package/lib/module/internal/THEOplayerView.web.js +1 -1
  114. package/lib/module/internal/THEOplayerView.web.js.map +1 -1
  115. package/lib/module/internal/adapter/DefaultNativePlayerState.js +2 -0
  116. package/lib/module/internal/adapter/DefaultNativePlayerState.js.map +1 -1
  117. package/lib/module/internal/adapter/THEOplayerAdapter.js +28 -10
  118. package/lib/module/internal/adapter/THEOplayerAdapter.js.map +1 -1
  119. package/lib/module/internal/adapter/THEOplayerWebAdapter.js +18 -1
  120. package/lib/module/internal/adapter/THEOplayerWebAdapter.js.map +1 -1
  121. package/lib/module/internal/adapter/WebEventForwarder.js +16 -2
  122. package/lib/module/internal/adapter/WebEventForwarder.js.map +1 -1
  123. package/lib/module/internal/adapter/event/PlayerEvents.js +26 -0
  124. package/lib/module/internal/adapter/event/PlayerEvents.js.map +1 -1
  125. package/lib/module/internal/adapter/event/native/NativeTheoAdsEvent.js +16 -0
  126. package/lib/module/internal/adapter/event/native/NativeTheoAdsEvent.js.map +1 -0
  127. package/lib/module/internal/adapter/theoads/THEOAdsNativeAdapter.js +6 -12
  128. package/lib/module/internal/adapter/theoads/THEOAdsNativeAdapter.js.map +1 -1
  129. package/lib/module/internal/adapter/track/TextTrackStyleAdapter.js +10 -0
  130. package/lib/module/internal/adapter/track/TextTrackStyleAdapter.js.map +1 -1
  131. package/lib/module/internal/utils/TypeUtils.js +3 -0
  132. package/lib/module/internal/utils/TypeUtils.js.map +1 -1
  133. package/lib/module/manifest.json +1 -1
  134. package/lib/typescript/api/barrel.d.ts +0 -1
  135. package/lib/typescript/api/barrel.d.ts.map +1 -1
  136. package/lib/typescript/api/cache/CachingTaskParameters.d.ts +0 -34
  137. package/lib/typescript/api/cache/CachingTaskParameters.d.ts.map +1 -1
  138. package/lib/typescript/api/event/PlayerEvent.d.ts +36 -0
  139. package/lib/typescript/api/event/PlayerEvent.d.ts.map +1 -1
  140. package/lib/typescript/api/event/TheoAdsEvent.d.ts +13 -0
  141. package/lib/typescript/api/event/TheoAdsEvent.d.ts.map +1 -1
  142. package/lib/typescript/api/player/PlayerEventMap.d.ts +17 -2
  143. package/lib/typescript/api/player/PlayerEventMap.d.ts.map +1 -1
  144. package/lib/typescript/api/player/THEOplayer.d.ts +8 -0
  145. package/lib/typescript/api/player/THEOplayer.d.ts.map +1 -1
  146. package/lib/typescript/api/source/SourceDescription.d.ts +0 -20
  147. package/lib/typescript/api/source/SourceDescription.d.ts.map +1 -1
  148. package/lib/typescript/api/source/ads/{THEOplayerAdDescription.d.ts → CsaiAdDescription.d.ts} +2 -2
  149. package/lib/typescript/api/source/ads/CsaiAdDescription.d.ts.map +1 -0
  150. package/lib/typescript/api/source/ads/barrel.d.ts +1 -1
  151. package/lib/typescript/api/source/ads/barrel.d.ts.map +1 -1
  152. package/lib/typescript/api/track/Quality.d.ts +1 -0
  153. package/lib/typescript/api/track/Quality.d.ts.map +1 -1
  154. package/lib/typescript/api/track/TextTrackStyle.d.ts +7 -0
  155. package/lib/typescript/api/track/TextTrackStyle.d.ts.map +1 -1
  156. package/lib/typescript/index.d.ts +0 -1
  157. package/lib/typescript/index.d.ts.map +1 -1
  158. package/lib/typescript/internal/THEOplayerView.d.ts +3 -1
  159. package/lib/typescript/internal/THEOplayerView.d.ts.map +1 -1
  160. package/lib/typescript/internal/adapter/DefaultNativePlayerState.d.ts +2 -0
  161. package/lib/typescript/internal/adapter/DefaultNativePlayerState.d.ts.map +1 -1
  162. package/lib/typescript/internal/adapter/NativePlayerState.d.ts +2 -0
  163. package/lib/typescript/internal/adapter/NativePlayerState.d.ts.map +1 -1
  164. package/lib/typescript/internal/adapter/THEOplayerAdapter.d.ts +5 -3
  165. package/lib/typescript/internal/adapter/THEOplayerAdapter.d.ts.map +1 -1
  166. package/lib/typescript/internal/adapter/THEOplayerWebAdapter.d.ts +5 -0
  167. package/lib/typescript/internal/adapter/THEOplayerWebAdapter.d.ts.map +1 -1
  168. package/lib/typescript/internal/adapter/WebEventForwarder.d.ts +1 -0
  169. package/lib/typescript/internal/adapter/WebEventForwarder.d.ts.map +1 -1
  170. package/lib/typescript/internal/adapter/event/PlayerEvents.d.ts +20 -1
  171. package/lib/typescript/internal/adapter/event/PlayerEvents.d.ts.map +1 -1
  172. package/lib/typescript/internal/adapter/event/native/NativePlayerEvent.d.ts +11 -1
  173. package/lib/typescript/internal/adapter/event/native/NativePlayerEvent.d.ts.map +1 -1
  174. package/lib/typescript/internal/adapter/event/native/NativeTheoAdsEvent.d.ts +18 -0
  175. package/lib/typescript/internal/adapter/event/native/NativeTheoAdsEvent.d.ts.map +1 -0
  176. package/lib/typescript/internal/adapter/theoads/THEOAdsNativeAdapter.d.ts +1 -1
  177. package/lib/typescript/internal/adapter/theoads/THEOAdsNativeAdapter.d.ts.map +1 -1
  178. package/lib/typescript/internal/adapter/track/TextTrackStyleAdapter.d.ts +3 -0
  179. package/lib/typescript/internal/adapter/track/TextTrackStyleAdapter.d.ts.map +1 -1
  180. package/lib/typescript/internal/utils/TypeUtils.d.ts +1 -0
  181. package/lib/typescript/internal/utils/TypeUtils.d.ts.map +1 -1
  182. package/package.json +6 -6
  183. package/react-native-theoplayer.podspec +7 -7
  184. package/src/api/barrel.ts +0 -1
  185. package/src/api/cache/CachingTaskParameters.ts +0 -37
  186. package/src/api/event/PlayerEvent.ts +40 -0
  187. package/src/api/event/TheoAdsEvent.ts +14 -0
  188. package/src/api/player/PlayerEventMap.ts +19 -0
  189. package/src/api/player/THEOplayer.ts +10 -0
  190. package/src/api/source/SourceDescription.ts +0 -22
  191. package/src/api/source/ads/{THEOplayerAdDescription.ts → CsaiAdDescription.ts} +1 -1
  192. package/src/api/source/ads/barrel.ts +1 -1
  193. package/src/api/track/Quality.ts +15 -0
  194. package/src/api/track/TextTrackStyle.ts +8 -0
  195. package/src/index.tsx +0 -1
  196. package/src/internal/THEOplayerView.tsx +24 -5
  197. package/src/internal/THEOplayerView.web.tsx +1 -1
  198. package/src/internal/adapter/DefaultNativePlayerState.ts +2 -0
  199. package/src/internal/adapter/NativePlayerState.ts +2 -0
  200. package/src/internal/adapter/THEOplayerAdapter.ts +43 -21
  201. package/src/internal/adapter/THEOplayerWebAdapter.ts +22 -2
  202. package/src/internal/adapter/WebEventForwarder.ts +17 -1
  203. package/src/internal/adapter/event/PlayerEvents.ts +34 -0
  204. package/src/internal/adapter/event/native/NativePlayerEvent.ts +13 -1
  205. package/src/internal/adapter/event/native/NativeTheoAdsEvent.ts +30 -0
  206. package/src/internal/adapter/theoads/THEOAdsNativeAdapter.ts +7 -12
  207. package/src/internal/adapter/track/TextTrackStyleAdapter.ts +12 -0
  208. package/src/internal/utils/TypeUtils.ts +6 -0
  209. package/src/manifest.json +1 -1
  210. package/android/local/com/theoplayer/theoplayer-sdk-android/ads-wrapper/9.0.0/ads-wrapper-9.0.0.aar +0 -0
  211. package/android/src/main/java/com/theoplayer/playback/PlaybackSettingsModule.kt +0 -28
  212. package/lib/commonjs/api/playback/PlaybackSettingsAPI.js +0 -2
  213. package/lib/commonjs/api/playback/PlaybackSettingsAPI.js.map +0 -1
  214. package/lib/commonjs/api/playback/barrel.js +0 -17
  215. package/lib/commonjs/api/playback/barrel.js.map +0 -1
  216. package/lib/commonjs/api/source/ads/THEOplayerAdDescription.js.map +0 -1
  217. package/lib/commonjs/internal/playback/PlaybackSettings.js +0 -28
  218. package/lib/commonjs/internal/playback/PlaybackSettings.js.map +0 -1
  219. package/lib/module/api/playback/PlaybackSettingsAPI.js +0 -2
  220. package/lib/module/api/playback/PlaybackSettingsAPI.js.map +0 -1
  221. package/lib/module/api/playback/barrel.js +0 -4
  222. package/lib/module/api/playback/barrel.js.map +0 -1
  223. package/lib/module/api/source/ads/THEOplayerAdDescription.js +0 -4
  224. package/lib/module/api/source/ads/THEOplayerAdDescription.js.map +0 -1
  225. package/lib/module/internal/playback/PlaybackSettings.js +0 -23
  226. package/lib/module/internal/playback/PlaybackSettings.js.map +0 -1
  227. package/lib/typescript/api/playback/PlaybackSettingsAPI.d.ts +0 -35
  228. package/lib/typescript/api/playback/PlaybackSettingsAPI.d.ts.map +0 -1
  229. package/lib/typescript/api/playback/barrel.d.ts +0 -2
  230. package/lib/typescript/api/playback/barrel.d.ts.map +0 -1
  231. package/lib/typescript/api/source/ads/THEOplayerAdDescription.d.ts.map +0 -1
  232. package/lib/typescript/internal/playback/PlaybackSettings.d.ts +0 -7
  233. package/lib/typescript/internal/playback/PlaybackSettings.d.ts.map +0 -1
  234. package/src/api/playback/PlaybackSettingsAPI.ts +0 -36
  235. package/src/api/playback/barrel.ts +0 -1
  236. package/src/internal/playback/PlaybackSettings.ts +0 -25
package/src/api/barrel.ts CHANGED
@@ -19,7 +19,6 @@ export * from './track/barrel';
19
19
  export * from './ui/barrel';
20
20
  export * from './utils/barrel';
21
21
  export * from './THEOplayerView';
22
- export * from './playback/barrel';
23
22
  export * from './player/barrel';
24
23
  export * from './presentation/barrel';
25
24
  export * from './version/barrel';
@@ -1,33 +1,5 @@
1
1
  import type { CachingPreferredTrackSelection } from "./CachingPreferredTrackSelection";
2
2
 
3
- /**
4
- * The types of cache storage supported by THEOplayer.
5
- *
6
- * @platform android
7
- * @category Caching
8
- * @public
9
- */
10
- export enum StorageType {
11
- /**
12
- * Write to the legacy cache.
13
- *
14
- * @remarks
15
- * <br/> - This was the default for all caching tasks created in THEOplayer version 8.x and earlier.
16
- * <br/> - Sources cached with this storage type can be played in both the default playback pipeline and the Media3 playback pipeline.
17
- * <br/> - This cache storage will be removed in THEOplayer version 10.
18
- */
19
- LEGACY = 'legacy',
20
-
21
- /**
22
- * Write to the Media3 cache.
23
- *
24
- * @remarks
25
- * <br/> - This is the default starting with THEOplayer version 9.0.
26
- * <br/> - Sources cached with this storage type can only be played in the [Media3 playback pipeline][PlaybackPipeline.MEDIA3].
27
- */
28
- MEDIA3 = 'media3'
29
- }
30
-
31
3
  /**
32
4
  * Describes the configuration of a caching task.
33
5
  *
@@ -91,13 +63,4 @@ export interface CachingTaskParameters {
91
63
  * <br/> - If the download is scheduled/started on WIFI-only mode, and suddenly we would like allow Cellular Network download too, the `CachingTask` has to be removed and scheduled again with the new `CachingParamaters`.
92
64
  */
93
65
  readonly allowsCellularAccess?: boolean;
94
-
95
- /**
96
- * The storage type to use for caching.
97
- *
98
- * @defaultValue [StorageType.MEDIA3]
99
- *
100
- * @platform android
101
- */
102
- readonly storageType?: StorageType;
103
66
  }
@@ -50,12 +50,33 @@ export interface TimeUpdateEvent extends Event<PlayerEventType.TIME_UPDATE> {
50
50
  readonly currentProgramDateTime?: number;
51
51
  }
52
52
 
53
+ /**
54
+ * Dispatched when the player dimensions are updated.
55
+ *
56
+ * @category Events
57
+ * @category Player
58
+ * @public
59
+ */
60
+ export interface DimensionChangeEvent extends Event<PlayerEventType.DIMENSION_CHANGE> {
61
+ /**
62
+ * The player's current width.
63
+ */
64
+ readonly width: number;
65
+
66
+ /**
67
+ * The player's current height.
68
+ */
69
+ readonly height: number;
70
+ }
71
+
53
72
  /**
54
73
  * Dispatched when player is resized.
55
74
  *
56
75
  * @category Events
57
76
  * @category Player
58
77
  * @public
78
+ *
79
+ * @deprecated use {@link DimensionChangeEvent} instead. This event is set for removal in version 11.
59
80
  */
60
81
  export interface ResizeEvent extends Event<PlayerEventType.RESIZE> {
61
82
  /**
@@ -69,6 +90,25 @@ export interface ResizeEvent extends Event<PlayerEventType.RESIZE> {
69
90
  readonly height: number;
70
91
  }
71
92
 
93
+ /**
94
+ * Dispatched when video is resized.
95
+ *
96
+ * @category Events
97
+ * @category Player
98
+ * @public
99
+ */
100
+ export interface VideoResizeEvent extends Event<PlayerEventType.VIDEO_RESIZE> {
101
+ /**
102
+ * The video's current width.
103
+ */
104
+ readonly videoWidth: number;
105
+
106
+ /**
107
+ * The video's current height.
108
+ */
109
+ readonly videoHeight: number;
110
+ }
111
+
72
112
  /**
73
113
  * Dispatched when the player's duration changes.
74
114
  *
@@ -20,6 +20,20 @@ export interface TheoAdsEvent extends Event<PlayerEventType.THEOADS_EVENT> {
20
20
  interstitial: Interstitial;
21
21
  }
22
22
 
23
+ /**
24
+ * Fired when an interstitial has errored.
25
+ *
26
+ * @category Events
27
+ * @category THEOads
28
+ * @public
29
+ */
30
+ export interface TheoAdsErrorEvent extends TheoAdsEvent {
31
+ /**
32
+ * Type of THEOads event.
33
+ */
34
+ message: string | undefined;
35
+ }
36
+
23
37
  /**
24
38
  * The THEOads event types dispatched by the {@link AdsAPI | Ads API}.
25
39
  *
@@ -1,5 +1,6 @@
1
1
  import type { Event } from '../event/Event';
2
2
  import type {
3
+ DimensionChangeEvent,
3
4
  DurationChangeEvent,
4
5
  ErrorEvent,
5
6
  LoadedMetadataEvent,
@@ -13,6 +14,7 @@ import type {
13
14
  ResizeEvent,
14
15
  SeekedEvent,
15
16
  SeekingEvent,
17
+ VideoResizeEvent,
16
18
  } from '../event/PlayerEvent';
17
19
  import type { MediaTrackEvent, MediaTrackListEvent, TextTrackEvent, TextTrackListEvent } from '../event/TrackEvent';
18
20
  import type { AdEvent } from '../event/AdEvent';
@@ -58,7 +60,12 @@ export enum PlayerEventType {
58
60
  WAITING = 'waiting',
59
61
  PRESENTATIONMODE_CHANGE = 'presentationmodechange',
60
62
  DESTROY = 'destroy',
63
+ /**
64
+ * @deprecated Use {@link PlayerEventType.DIMENSION_CHANGE} instead. This event is set for removal in version 11.
65
+ */
61
66
  RESIZE = 'resize',
67
+ DIMENSION_CHANGE = 'dimensionchange',
68
+ VIDEO_RESIZE = 'videoresize',
62
69
  }
63
70
 
64
71
  /**
@@ -226,6 +233,18 @@ export interface PlayerEventMap {
226
233
 
227
234
  /**
228
235
  * Dispatched when the player size changes.
236
+ *
237
+ * @deprecated Use {@link dimensionchange} instead. This event is set for removal in version 11.
229
238
  */
230
239
  [PlayerEventType.RESIZE]: ResizeEvent;
240
+
241
+ /**
242
+ * Dispatched when the player size changes.
243
+ */
244
+ [PlayerEventType.DIMENSION_CHANGE]: DimensionChangeEvent;
245
+
246
+ /**
247
+ * Dispatched when the video size changes.
248
+ */
249
+ [PlayerEventType.VIDEO_RESIZE]: VideoResizeEvent;
231
250
  }
@@ -273,6 +273,16 @@ export interface THEOplayer extends EventDispatcher<PlayerEventMap> {
273
273
  */
274
274
  readonly height: number | undefined;
275
275
 
276
+ /**
277
+ * The width of the active video rendition, in pixels.
278
+ */
279
+ readonly videoWidth: number | undefined;
280
+
281
+ /**
282
+ * The height of the active video rendition, in pixels.
283
+ */
284
+ readonly videoHeight: number | undefined;
285
+
276
286
  /**
277
287
  * The API for theolive.
278
288
  */
@@ -61,18 +61,6 @@ export enum SourceIntegrationId {
61
61
  THEO_LIVE = 'theolive'
62
62
  }
63
63
 
64
- /**
65
- * The playback pipeline to use to play a stream.
66
- *
67
- * @category Source
68
- * @platform android
69
- * @public
70
- */
71
- export enum PlaybackPipeline {
72
- LEGACY = 'legacy',
73
- MEDIA3 = 'media3'
74
- }
75
-
76
64
  /**
77
65
  * Describes the configuration of a player's source.
78
66
  *
@@ -364,16 +352,6 @@ export interface BaseSource {
364
352
  * <br/> - Ignored for non-HLS streams.
365
353
  */
366
354
  hls?: HlsPlaybackConfiguration;
367
-
368
- /**
369
- * The playback pipeline to use for this stream.
370
- *
371
- * @defaultValue [PlaybackPipeline.MEDIA3]
372
- * @since React Native THEOplayer SDK v9.0.0.
373
- * @since Native THEOplayer SDK v9.0.0.
374
- * @platform android
375
- */
376
- playbackPipeline?: PlaybackPipeline;
377
355
  }
378
356
 
379
357
  /**
@@ -6,7 +6,7 @@ import type { AdDescription, AdSource } from "./Ads";
6
6
  * @category Ads
7
7
  * @public
8
8
  */
9
- export interface THEOplayerAdDescription extends AdDescription {
9
+ export interface CsaiAdDescription extends AdDescription {
10
10
  /**
11
11
  * The source of the ad
12
12
  *
@@ -1,5 +1,5 @@
1
1
  export * from './Ads';
2
2
  export * from './IMAAdDescription';
3
- export * from './THEOplayerAdDescription';
3
+ export * from './CsaiAdDescription';
4
4
  export * from './TheoAdDescription';
5
5
  export * from './ssai/barrel';
@@ -1,3 +1,5 @@
1
+ import { isArray } from '../../internal/utils/TypeUtils';
2
+
1
3
  /**
2
4
  * Represents a quality of a media track.
3
5
  *
@@ -80,6 +82,19 @@ export interface VideoQuality extends Quality {
80
82
  readonly firstFrame: number;
81
83
  }
82
84
 
85
+ export function isVideoQuality(qualities: Quality | Quality[] | undefined): qualities is VideoQuality {
86
+ if (!qualities) {
87
+ return false;
88
+ }
89
+
90
+ let quality = qualities;
91
+ if (isArray(qualities) && qualities.length > 0) {
92
+ quality = qualities[0];
93
+ }
94
+
95
+ return (quality as VideoQuality).height !== undefined;
96
+ }
97
+
83
98
  /**
84
99
  * Represents a quality of an audio track.
85
100
  *
@@ -28,6 +28,14 @@ export interface TextTrackStyle {
28
28
  */
29
29
  fontSize: string | undefined;
30
30
 
31
+ /**
32
+ * The path to a font in the Android `app/src/main/assets/` folder.
33
+ *
34
+ * @remarks
35
+ * Only supported on Android.
36
+ */
37
+ fontPath: string | undefined;
38
+
31
39
  /**
32
40
  * The background color for the text track.
33
41
  *
package/src/index.tsx CHANGED
@@ -2,5 +2,4 @@ export * from './api/barrel';
2
2
  export { THEOplayerView } from './internal/THEOplayerView';
3
3
  export { ContentProtectionRegistry } from './internal/drm/ContentProtectionRegistry';
4
4
  export { MediaCache } from './internal/cache/MediaCache';
5
- export { PlaybackSettings } from './internal/playback/PlaybackSettings';
6
5
  export { sdkVersions } from './internal/version/Version';
@@ -24,6 +24,7 @@ import {
24
24
  DefaultAirplayStateChangeEvent,
25
25
  DefaultChromecastChangeEvent,
26
26
  DefaultChromecastErrorEvent,
27
+ DefaultDimensionChangeEvent,
27
28
  DefaultDurationChangeEvent,
28
29
  DefaultErrorEvent,
29
30
  DefaultLoadedMetadataEvent,
@@ -41,6 +42,7 @@ import {
41
42
  DefaultResizeEvent,
42
43
  DefaultSeekingEvent,
43
44
  DefaultSeekedEvent,
45
+ DefaultVideoResizeEvent,
44
46
  } from './adapter/event/PlayerEvents';
45
47
  import type { NativeCastEvent } from './adapter/event/native/NativeCastEvent';
46
48
  import type {
@@ -62,12 +64,14 @@ import {
62
64
  NativeSegmentNotFoundEvent,
63
65
  NativeTimeUpdateEvent,
64
66
  NativeVolumeChangeEvent,
65
- NativeResizeEvent,
67
+ NativeDimensionChangeEvent,
66
68
  NativeSeekingEvent,
67
69
  NativeSeekedEvent,
70
+ NativeVideoResizeEvent,
68
71
  } from './adapter/event/native/NativePlayerEvent';
69
72
  import type { NativeAdEvent } from './adapter/event/native/NativeAdEvent';
70
73
  import { fromNativeTheoLiveEvent, NativeTheoLiveEvent } from './adapter/event/native/NativeTheoLiveEvent';
74
+ import { fromNativeTheoAdsEvent, NativeTheoAdsEvent } from './adapter/event/native/NativeTheoAdsEvent';
71
75
  import { THEOplayerAdapter } from './adapter/THEOplayerAdapter';
72
76
  import { getFullscreenSize } from './utils/Dimensions';
73
77
  import { Poster } from './poster/Poster';
@@ -105,10 +109,12 @@ interface THEOplayerRCTViewProps {
105
109
  onNativeMediaTrackEvent: (event: NativeSyntheticEvent<NativeMediaTrackEvent>) => void;
106
110
  onNativeAdEvent: (event: NativeSyntheticEvent<NativeAdEvent>) => void;
107
111
  onNativeTHEOliveEvent: (event: NativeSyntheticEvent<NativeTheoLiveEvent>) => void;
112
+ onNativeTHEOadsEvent: (event: NativeSyntheticEvent<NativeTheoAdsEvent>) => void;
108
113
  onNativeCastEvent: (event: NativeSyntheticEvent<NativeCastEvent>) => void;
109
114
  onNativePresentationModeChange: (event: NativeSyntheticEvent<NativePresentationModeChangeEvent>) => void;
110
115
  onNativeDeviceOrientationChanged: () => void;
111
- onNativeResize: (event: NativeSyntheticEvent<NativeResizeEvent>) => void;
116
+ onNativeDimensionChange: (event: NativeSyntheticEvent<NativeDimensionChangeEvent>) => void;
117
+ onNativeVideoResize: (event: NativeSyntheticEvent<NativeVideoResizeEvent>) => void;
112
118
  }
113
119
 
114
120
  interface THEOplayerRCTViewState {
@@ -350,6 +356,10 @@ export class THEOplayerView extends PureComponent<React.PropsWithChildren<THEOpl
350
356
  this._facade.dispatchEvent(fromNativeTheoLiveEvent(event));
351
357
  };
352
358
 
359
+ private _onTHEOadsEvent = (event: NativeSyntheticEvent<NativeTheoAdsEvent>) => {
360
+ this._facade.dispatchEvent(fromNativeTheoAdsEvent(event));
361
+ };
362
+
353
363
  private _onCastEvent = (event: NativeSyntheticEvent<NativeCastEvent>) => {
354
364
  switch (event.nativeEvent.type) {
355
365
  case CastEventType.CHROMECAST_STATE_CHANGE:
@@ -381,8 +391,15 @@ export class THEOplayerView extends PureComponent<React.PropsWithChildren<THEOpl
381
391
  );
382
392
  };
383
393
 
384
- private _onResize = (event: NativeSyntheticEvent<NativeResizeEvent>) => {
385
- this._facade.dispatchEvent(new DefaultResizeEvent(event.nativeEvent.width, event.nativeEvent.height));
394
+ private _onDimensionChange = (event: NativeSyntheticEvent<NativeDimensionChangeEvent>) => {
395
+ const width = event.nativeEvent.width;
396
+ const height = event.nativeEvent.height;
397
+ this._facade.dispatchEvent(new DefaultResizeEvent(width, height));
398
+ this._facade.dispatchEvent(new DefaultDimensionChangeEvent(width, height));
399
+ };
400
+
401
+ private _onVideoResize = (event: NativeSyntheticEvent<NativeVideoResizeEvent>) => {
402
+ this._facade.dispatchEvent(new DefaultVideoResizeEvent(event.nativeEvent.videoWidth, event.nativeEvent.videoHeight));
386
403
  };
387
404
 
388
405
  private _updatePoster = () => {
@@ -442,10 +459,12 @@ export class THEOplayerView extends PureComponent<React.PropsWithChildren<THEOpl
442
459
  onNativeMediaTrackEvent={this._onMediaTrackEvent}
443
460
  onNativeAdEvent={this._onAdEvent}
444
461
  onNativeTHEOliveEvent={this._onTHEOliveEvent}
462
+ onNativeTHEOadsEvent={this._onTHEOadsEvent}
445
463
  onNativeCastEvent={this._onCastEvent}
446
464
  onNativePresentationModeChange={this._onPresentationModeChange}
447
465
  onNativeDeviceOrientationChanged={this._onDeviceOrientationChanged}
448
- onNativeResize={this._onResize}
466
+ onNativeDimensionChange={this._onDimensionChange}
467
+ onNativeVideoResize={this._onVideoResize}
449
468
  />
450
469
  {posterActive && <Poster uri={poster} style={posterStyle} />}
451
470
  {children}
@@ -56,7 +56,7 @@ export function THEOplayerView(props: React.PropsWithChildren<THEOplayerViewProp
56
56
  // Note: `display: contents` causes an element's children to appear as if they were direct children of the element's parent,
57
57
  // ignoring the element itself.
58
58
  // It's necessary to make sure we do not interfere with the IMA container
59
- <div id={'theoplayer-root-container'} style={{ display: 'contents' }}>
59
+ <div id={'theoplayer-root-container'} style={{ display: CSS.supports('display', 'contents') ? 'contents' : 'flex' }}>
60
60
  {!CSS.supports('aspect-ratio', '16/9') ? (
61
61
  // Handle aspect-ratio 16/9 with padding-top: 56.25% to support older versions.
62
62
  // {@link https://www.w3schools.com/howto/howto_css_aspect_ratio.asp}
@@ -39,6 +39,8 @@ export class DefaultNativePlayerState extends DefaultTextTrackState implements N
39
39
  selectedVideoTrack: number | undefined = undefined;
40
40
  width: number | undefined = undefined;
41
41
  height: number | undefined = undefined;
42
+ videoWidth: number | undefined = undefined;
43
+ videoHeight: number | undefined = undefined;
42
44
 
43
45
  apply(state: Partial<NativePlayerState>): void {
44
46
  Object.assign(this, state);
@@ -33,6 +33,8 @@ export interface MediaTrackState {
33
33
  targetVideoQuality: number | number[] | undefined;
34
34
  selectedVideoTrack: number | undefined;
35
35
  selectedAudioTrack: number | undefined;
36
+ videoWidth: number | undefined;
37
+ videoHeight: number | undefined;
36
38
  }
37
39
 
38
40
  export interface TextTrackState {
@@ -1,46 +1,46 @@
1
1
  import { DefaultEventDispatcher } from './event/DefaultEventDispatcher';
2
2
  import {
3
3
  ABRConfiguration,
4
+ addTrack,
4
5
  AdsAPI,
6
+ AspectRatio,
7
+ BackgroundAudioConfiguration,
5
8
  CastAPI,
9
+ DimensionChangeEvent,
6
10
  DurationChangeEvent,
7
11
  EventBroadcastAPI,
12
+ findMediaTrackByUid,
13
+ isVideoQuality,
8
14
  LoadedMetadataEvent,
9
15
  MediaTrack,
10
16
  MediaTrackEvent,
17
+ MediaTrackEventType,
11
18
  MediaTrackListEvent,
19
+ MediaTrackType,
12
20
  NativeHandleType,
13
21
  PiPConfiguration,
14
22
  PlayerEventMap,
23
+ PlayerEventType,
24
+ PlayerVersion,
25
+ PreloadType,
26
+ PresentationMode,
15
27
  PresentationModeChangeEvent,
16
28
  ProgressEvent,
17
29
  RateChangeEvent,
30
+ removeTrack,
18
31
  RenderingTarget,
19
- ResizeEvent,
20
32
  SeekedEvent,
21
33
  SeekingEvent,
22
34
  SourceDescription,
23
35
  TextTrack,
36
+ TextTrackStyle,
24
37
  TheoAdsAPI,
25
38
  TheoLiveAPI,
26
39
  THEOplayer,
27
40
  THEOplayerView,
28
41
  TimeUpdateEvent,
29
- } from 'react-native-theoplayer';
30
- import {
31
- addTrack,
32
- AspectRatio,
33
- BackgroundAudioConfiguration,
34
- findMediaTrackByUid,
35
- MediaTrackEventType,
36
- MediaTrackType,
37
- PlayerEventType,
38
- PlayerVersion,
39
- PreloadType,
40
- PresentationMode,
41
- removeTrack,
42
- TextTrackStyle,
43
42
  TrackListEventType,
43
+ VideoResizeEvent,
44
44
  } from 'react-native-theoplayer';
45
45
  import { THEOplayerNativeAdsAdapter } from './ads/THEOplayerNativeAdsAdapter';
46
46
  import { THEOplayerNativeCastAdapter } from './cast/THEOplayerNativeCastAdapter';
@@ -90,7 +90,8 @@ export class THEOplayerAdapter extends DefaultEventDispatcher<PlayerEventMap> im
90
90
  this.addEventListener(PlayerEventType.MEDIA_TRACK, this.onMediaTrack);
91
91
  this.addEventListener(PlayerEventType.MEDIA_TRACK_LIST, this.onMediaTrackList);
92
92
  this.addEventListener(PlayerEventType.PRESENTATIONMODE_CHANGE, this.onPresentationModeChange);
93
- this.addEventListener(PlayerEventType.RESIZE, this.onResize);
93
+ this.addEventListener(PlayerEventType.DIMENSION_CHANGE, this.onDimensionChange);
94
+ this.addEventListener(PlayerEventType.VIDEO_RESIZE, this.onVideoResize);
94
95
  }
95
96
 
96
97
  private hasValidSource(): boolean {
@@ -117,11 +118,16 @@ export class THEOplayerAdapter extends DefaultEventDispatcher<PlayerEventMap> im
117
118
  this._state.currentProgramDateTime = event.currentProgramDateTime;
118
119
  };
119
120
 
120
- private onResize = (event: ResizeEvent) => {
121
+ private onDimensionChange = (event: DimensionChangeEvent) => {
121
122
  this._state.width = event.width;
122
123
  this._state.height = event.height;
123
124
  };
124
125
 
126
+ private onVideoResize = (event: VideoResizeEvent) => {
127
+ this._state.videoWidth = event.videoWidth;
128
+ this._state.videoHeight = event.videoHeight;
129
+ };
130
+
125
131
  private onLoadedMetadata = (event: LoadedMetadataEvent) => {
126
132
  this._state.duration = event.duration;
127
133
  this._state.audioTracks = event.audioTracks;
@@ -157,16 +163,24 @@ export class THEOplayerAdapter extends DefaultEventDispatcher<PlayerEventMap> im
157
163
  };
158
164
 
159
165
  private onMediaTrack = (event: MediaTrackEvent) => {
160
- const { subType, trackType, trackUid } = event;
166
+ const { subType, trackType, trackUid, qualities } = event;
161
167
  const tracks = trackType === MediaTrackType.VIDEO ? this._state.videoTracks : this._state.audioTracks;
162
168
  const track = findMediaTrackByUid(tracks, trackUid);
163
169
  switch (subType) {
164
170
  case MediaTrackEventType.ACTIVE_QUALITY_CHANGED:
171
+ if (!track) {
172
+ break;
173
+ }
174
+
165
175
  // Update local state
166
- if (track) {
167
- Object.assign(track, { ...track, activeQuality: event.qualities });
176
+ Object.assign(track, { ...track, activeQuality: qualities });
177
+
178
+ if (!isVideoQuality(qualities)) {
179
+ break;
168
180
  }
169
- break;
181
+
182
+ this._state.videoWidth = qualities.width;
183
+ this._state.videoHeight = qualities.height;
170
184
  }
171
185
  };
172
186
 
@@ -524,4 +538,12 @@ export class THEOplayerAdapter extends DefaultEventDispatcher<PlayerEventMap> im
524
538
  get height(): number | undefined {
525
539
  return this._state.height;
526
540
  }
541
+
542
+ get videoWidth(): number | undefined {
543
+ return this._state.videoWidth;
544
+ }
545
+
546
+ get videoHeight(): number | undefined {
547
+ return this._state.videoHeight;
548
+ }
527
549
  }
@@ -23,7 +23,7 @@ import {
23
23
  } from 'react-native-theoplayer';
24
24
  import { THEOplayerWebAdsAdapter } from './ads/THEOplayerWebAdsAdapter';
25
25
  import { THEOplayerWebCastAdapter } from './cast/THEOplayerWebCastAdapter';
26
- import type { MediaTrack as NativeMediaTrack, TextTrack as NativeTextTrack } from 'theoplayer';
26
+ import type { DimensionChangeEvent, MediaTrack as NativeMediaTrack, TextTrack as NativeTextTrack } from 'theoplayer';
27
27
  import { ChromelessPlayer as NativeChromelessPlayer, SourceDescription as NativeSourceDescription, version as nativeVersion } from 'theoplayer';
28
28
  import { findNativeQualitiesByUid, fromNativeMediaTrackList } from './web/TrackUtils';
29
29
  import type { ABRConfiguration, SourceDescription } from 'src/api/barrel';
@@ -62,6 +62,8 @@ export class THEOplayerWebAdapter extends DefaultEventDispatcher<PlayerEventMap>
62
62
  private _pipConfiguration: PiPConfiguration = defaultPipConfiguration;
63
63
  private _externalEventRouter: EventBroadcastAPI | undefined = undefined;
64
64
  private _cmcdConnector: CMCDConnector | undefined = undefined;
65
+ private _width: number | undefined = undefined;
66
+ private _height: number | undefined = undefined;
65
67
 
66
68
  constructor(player: NativeChromelessPlayer, config?: PlayerConfiguration) {
67
69
  super();
@@ -74,6 +76,7 @@ export class THEOplayerWebAdapter extends DefaultEventDispatcher<PlayerEventMap>
74
76
  this._eventForwarder = new WebEventForwarder(this._player, this);
75
77
  this._presentationModeManager = new WebPresentationModeManager(this._player, this);
76
78
  document.addEventListener('visibilitychange', this.onVisibilityChange);
79
+ this._player.addEventListener('dimensionchange', this.onPlayerDimensionChange);
77
80
 
78
81
  // Optionally create a media session connector
79
82
  if (config?.mediaControl?.mediaSessionEnabled !== false) {
@@ -387,6 +390,7 @@ export class THEOplayerWebAdapter extends DefaultEventDispatcher<PlayerEventMap>
387
390
  this._mediaSession = undefined;
388
391
  this._cmcdConnector?.destroy();
389
392
  this._cmcdConnector = undefined;
393
+ this._player?.removeEventListener('dimensionchange', this.onPlayerDimensionChange);
390
394
  this._player?.destroy();
391
395
  this._player = undefined;
392
396
  }
@@ -405,6 +409,14 @@ export class THEOplayerWebAdapter extends DefaultEventDispatcher<PlayerEventMap>
405
409
  this._mediaSession?.updateMediaSession();
406
410
  };
407
411
 
412
+ private readonly onPlayerDimensionChange = (event: DimensionChangeEvent) => {
413
+ if (!this._player) {
414
+ return;
415
+ }
416
+ this._width = event.width;
417
+ this._height = event.height;
418
+ };
419
+
408
420
  get nativeHandle(): NativeHandleType {
409
421
  return this._player;
410
422
  }
@@ -414,10 +426,18 @@ export class THEOplayerWebAdapter extends DefaultEventDispatcher<PlayerEventMap>
414
426
  }
415
427
 
416
428
  get width(): number | undefined {
417
- return this._player?.videoWidth;
429
+ return this._width;
418
430
  }
419
431
 
420
432
  get height(): number | undefined {
433
+ return this._height;
434
+ }
435
+
436
+ get videoWidth(): number | undefined {
437
+ return this._player?.videoWidth;
438
+ }
439
+
440
+ get videoHeight(): number | undefined {
421
441
  return this._player?.videoHeight;
422
442
  }
423
443
  }