spactureai-mobile-player 1.0.30

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 (492) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +474 -0
  3. package/UnifiedPlayer.podspec +51 -0
  4. package/android/CMakeLists.txt +29 -0
  5. package/android/build.gradle +249 -0
  6. package/android/fix-prefab.gradle +51 -0
  7. package/android/gradle.properties +15 -0
  8. package/android/src/main/AndroidManifest.xml +10 -0
  9. package/android/src/main/AndroidManifestNew.xml +9 -0
  10. package/android/src/main/cpp/cpp-adapter.cpp +9 -0
  11. package/android/src/main/java/com/unifiedplayer/core/AudioFocusManager.kt +233 -0
  12. package/android/src/main/java/com/unifiedplayer/core/VideoError.kt +105 -0
  13. package/android/src/main/java/com/unifiedplayer/core/VideoManager.kt +292 -0
  14. package/android/src/main/java/com/unifiedplayer/core/extensions/ResizeMode+AspectRatioFrameLayout.kt +20 -0
  15. package/android/src/main/java/com/unifiedplayer/core/extensions/SubtitleType+toString.kt +14 -0
  16. package/android/src/main/java/com/unifiedplayer/core/extensions/VideoPlaybackService+ServiceManagment.kt +59 -0
  17. package/android/src/main/java/com/unifiedplayer/core/fragments/FullscreenVideoFragment.kt +346 -0
  18. package/android/src/main/java/com/unifiedplayer/core/fragments/PictureInPictureHelperFragment.kt +85 -0
  19. package/android/src/main/java/com/unifiedplayer/core/player/DRMManagerSpec.kt +23 -0
  20. package/android/src/main/java/com/unifiedplayer/core/player/DataSourceFactoryUtils.kt +93 -0
  21. package/android/src/main/java/com/unifiedplayer/core/player/MediaItemUtils.kt +141 -0
  22. package/android/src/main/java/com/unifiedplayer/core/player/MediaSourceUtils.kt +134 -0
  23. package/android/src/main/java/com/unifiedplayer/core/player/OnAudioFocusChangedListener.kt +25 -0
  24. package/android/src/main/java/com/unifiedplayer/core/plugins/PluginsRegistry.kt +223 -0
  25. package/android/src/main/java/com/unifiedplayer/core/plugins/ReactNativeVideoPlugin.kt +173 -0
  26. package/android/src/main/java/com/unifiedplayer/core/recivers/AudioBecomingNoisyReceiver.kt +38 -0
  27. package/android/src/main/java/com/unifiedplayer/core/services/playback/CustomMediaNotificationProvider.kt +151 -0
  28. package/android/src/main/java/com/unifiedplayer/core/services/playback/VideoPlaybackCallback.kt +96 -0
  29. package/android/src/main/java/com/unifiedplayer/core/services/playback/VideoPlaybackService.kt +219 -0
  30. package/android/src/main/java/com/unifiedplayer/core/services/playback/VideoPlaybackServiceConnection.kt +59 -0
  31. package/android/src/main/java/com/unifiedplayer/core/utils/PictureInPictureUtils.kt +153 -0
  32. package/android/src/main/java/com/unifiedplayer/core/utils/SmallVideoPlayerOptimizer.kt +157 -0
  33. package/android/src/main/java/com/unifiedplayer/core/utils/SourceLoader.kt +48 -0
  34. package/android/src/main/java/com/unifiedplayer/core/utils/TextTrackUtils.kt +175 -0
  35. package/android/src/main/java/com/unifiedplayer/core/utils/Threading.kt +75 -0
  36. package/android/src/main/java/com/unifiedplayer/core/utils/VideoFileHelper.kt +51 -0
  37. package/android/src/main/java/com/unifiedplayer/core/utils/VideoInformationUtils.kt +67 -0
  38. package/android/src/main/java/com/unifiedplayer/core/utils/VideoOrientationUtils.kt +30 -0
  39. package/android/src/main/java/com/unifiedplayer/hybrids/videoplayer/HybridVideoPlayer.kt +732 -0
  40. package/android/src/main/java/com/unifiedplayer/hybrids/videoplayer/HybridVideoPlayerFactory.kt +16 -0
  41. package/android/src/main/java/com/unifiedplayer/hybrids/videoplayereventemitter/HybridVideoPlayerEventEmitter.kt +180 -0
  42. package/android/src/main/java/com/unifiedplayer/hybrids/videoplayersource/HybridVideoPlayerSource.kt +67 -0
  43. package/android/src/main/java/com/unifiedplayer/hybrids/videoplayersource/HybridVideoPlayerSourceFactory.kt +58 -0
  44. package/android/src/main/java/com/unifiedplayer/hybrids/videoviewviewmanager/HybridVideoViewViewManager.kt +187 -0
  45. package/android/src/main/java/com/unifiedplayer/hybrids/videoviewviewmanager/HybridVideoViewViewManagerFactory.kt +13 -0
  46. package/android/src/main/java/com/unifiedplayer/react/VideoPackage.kt +25 -0
  47. package/android/src/main/java/com/unifiedplayer/react/VideoViewViewManager.kt +78 -0
  48. package/android/src/main/java/com/unifiedplayer/view/VideoView.kt +565 -0
  49. package/android/src/main/res/layout/custom_player_control_view.xml +82 -0
  50. package/android/src/main/res/layout/player_view_surface.xml +13 -0
  51. package/android/src/main/res/layout/player_view_texture.xml +13 -0
  52. package/android/src/paper/java/com/facebook/react/viewmanagers/RNCVideoViewManagerDelegate.java +32 -0
  53. package/android/src/paper/java/com/facebook/react/viewmanagers/RNCVideoViewManagerInterface.java +16 -0
  54. package/android/src/stubs/dash/androidx/media3/exoplayer/dash/DashMediaSource.kt +35 -0
  55. package/android/src/stubs/dash/androidx/media3/exoplayer/dash/DashUtil.kt +11 -0
  56. package/android/src/stubs/dash/androidx/media3/exoplayer/dash/manifest/AdaptationSet.kt +9 -0
  57. package/android/src/stubs/dash/androidx/media3/exoplayer/dash/manifest/DashManifest.kt +10 -0
  58. package/android/src/stubs/dash/androidx/media3/exoplayer/dash/manifest/Period.kt +7 -0
  59. package/android/src/stubs/dash/androidx/media3/exoplayer/dash/manifest/Representation.kt +8 -0
  60. package/android/src/stubs/hls/androidx/media3/exoplayer/hls/HlsMediaSource.kt +33 -0
  61. package/ios/RNCVideoViewManager.mm +39 -0
  62. package/ios/Video-Bridging-Header.h +2 -0
  63. package/ios/core/HLSAuthProxy.swift +428 -0
  64. package/ios/core/VideoError.swift +164 -0
  65. package/ios/core/VideoManager.swift +219 -0
  66. package/ios/hybrids/VideoPlayer/HybridVideoPlayer.swift +697 -0
  67. package/ios/hybrids/VideoPlayer/HybridVideoPlayerFactory.swift +15 -0
  68. package/ios/hybrids/VideoPlayer/VLCPlaybackDelegates.swift +58 -0
  69. package/ios/hybrids/VideoPlayerEmitter/HybridVideoPlayerEventEmitter.swift +203 -0
  70. package/ios/hybrids/VideoPlayerSource/HybridVideoPlayerSource.swift +55 -0
  71. package/ios/hybrids/VideoPlayerSource/HybridVideoPlayerSourceFactory.swift +29 -0
  72. package/ios/hybrids/VideoViewViewManager/HybridVideoViewViewManager.swift +266 -0
  73. package/ios/hybrids/VideoViewViewManager/HybridVideoViewViewManagerFactory.swift +14 -0
  74. package/ios/view/VideoComponentView.swift +196 -0
  75. package/ios/view/VideoComponentViewObserver.swift +48 -0
  76. package/lib/module/core/VideoPlayer.js +287 -0
  77. package/lib/module/core/VideoPlayer.js.map +1 -0
  78. package/lib/module/core/VideoPlayerEvents.js +84 -0
  79. package/lib/module/core/VideoPlayerEvents.js.map +1 -0
  80. package/lib/module/core/hooks/useEvent.js +19 -0
  81. package/lib/module/core/hooks/useEvent.js.map +1 -0
  82. package/lib/module/core/hooks/useManagedInstance.js +75 -0
  83. package/lib/module/core/hooks/useManagedInstance.js.map +1 -0
  84. package/lib/module/core/hooks/useVideoPlayer.js +57 -0
  85. package/lib/module/core/hooks/useVideoPlayer.js.map +1 -0
  86. package/lib/module/core/types/BufferConfig.js +2 -0
  87. package/lib/module/core/types/BufferConfig.js.map +1 -0
  88. package/lib/module/core/types/DrmParams.js +2 -0
  89. package/lib/module/core/types/DrmParams.js.map +1 -0
  90. package/lib/module/core/types/Events.js +10 -0
  91. package/lib/module/core/types/Events.js.map +1 -0
  92. package/lib/module/core/types/IgnoreSilentSwitchMode.js +2 -0
  93. package/lib/module/core/types/IgnoreSilentSwitchMode.js.map +1 -0
  94. package/lib/module/core/types/MixAudioMode.js +2 -0
  95. package/lib/module/core/types/MixAudioMode.js.map +1 -0
  96. package/lib/module/core/types/ResizeMode.js +2 -0
  97. package/lib/module/core/types/ResizeMode.js.map +1 -0
  98. package/lib/module/core/types/TextTrack.js +2 -0
  99. package/lib/module/core/types/TextTrack.js.map +1 -0
  100. package/lib/module/core/types/Utils.js +2 -0
  101. package/lib/module/core/types/Utils.js.map +1 -0
  102. package/lib/module/core/types/VideoConfig.js +4 -0
  103. package/lib/module/core/types/VideoConfig.js.map +1 -0
  104. package/lib/module/core/types/VideoError.js +100 -0
  105. package/lib/module/core/types/VideoError.js.map +1 -0
  106. package/lib/module/core/types/VideoInformation.js +4 -0
  107. package/lib/module/core/types/VideoInformation.js.map +1 -0
  108. package/lib/module/core/types/VideoOrientation.js +2 -0
  109. package/lib/module/core/types/VideoOrientation.js.map +1 -0
  110. package/lib/module/core/types/VideoPlayerBase.js +4 -0
  111. package/lib/module/core/types/VideoPlayerBase.js.map +1 -0
  112. package/lib/module/core/types/VideoPlayerSourceBase.js +4 -0
  113. package/lib/module/core/types/VideoPlayerSourceBase.js.map +1 -0
  114. package/lib/module/core/types/VideoPlayerStatus.js +2 -0
  115. package/lib/module/core/types/VideoPlayerStatus.js.map +1 -0
  116. package/lib/module/core/utils/playerFactory.js +25 -0
  117. package/lib/module/core/utils/playerFactory.js.map +1 -0
  118. package/lib/module/core/utils/sourceFactory.js +138 -0
  119. package/lib/module/core/utils/sourceFactory.js.map +1 -0
  120. package/lib/module/core/video-view/NativeVideoView.tsx +18 -0
  121. package/lib/module/core/video-view/VideoView.js +261 -0
  122. package/lib/module/core/video-view/VideoView.js.map +1 -0
  123. package/lib/module/expo-plugins/@types.js +2 -0
  124. package/lib/module/expo-plugins/@types.js.map +1 -0
  125. package/lib/module/expo-plugins/getPackageInfo.js +23 -0
  126. package/lib/module/expo-plugins/getPackageInfo.js.map +1 -0
  127. package/lib/module/expo-plugins/withAndroidExtensions.js +35 -0
  128. package/lib/module/expo-plugins/withAndroidExtensions.js.map +1 -0
  129. package/lib/module/expo-plugins/withAndroidNotificationControls.js +29 -0
  130. package/lib/module/expo-plugins/withAndroidNotificationControls.js.map +1 -0
  131. package/lib/module/expo-plugins/withAndroidPictureInPicture.js +18 -0
  132. package/lib/module/expo-plugins/withAndroidPictureInPicture.js.map +1 -0
  133. package/lib/module/expo-plugins/withBackgroundAudio.js +22 -0
  134. package/lib/module/expo-plugins/withBackgroundAudio.js.map +1 -0
  135. package/lib/module/expo-plugins/withReactNativeVideo.js +27 -0
  136. package/lib/module/expo-plugins/withReactNativeVideo.js.map +1 -0
  137. package/lib/module/expo-plugins/writeToPodfile.js +53 -0
  138. package/lib/module/expo-plugins/writeToPodfile.js.map +1 -0
  139. package/lib/module/index.js +8 -0
  140. package/lib/module/index.js.map +1 -0
  141. package/lib/module/package.json +1 -0
  142. package/lib/module/spec/fabric/VideoViewNativeComponent.ts +17 -0
  143. package/lib/module/spec/nitro/VideoPlayer.nitro.js +4 -0
  144. package/lib/module/spec/nitro/VideoPlayer.nitro.js.map +1 -0
  145. package/lib/module/spec/nitro/VideoPlayerEventEmitter.nitro.js +4 -0
  146. package/lib/module/spec/nitro/VideoPlayerEventEmitter.nitro.js.map +1 -0
  147. package/lib/module/spec/nitro/VideoPlayerSource.nitro.js +4 -0
  148. package/lib/module/spec/nitro/VideoPlayerSource.nitro.js.map +1 -0
  149. package/lib/module/spec/nitro/VideoViewViewManager.nitro.js +4 -0
  150. package/lib/module/spec/nitro/VideoViewViewManager.nitro.js.map +1 -0
  151. package/lib/typescript/drm-plugin/src/PluginManager.nitro.d.ts +10 -0
  152. package/lib/typescript/drm-plugin/src/PluginManager.nitro.d.ts.map +1 -0
  153. package/lib/typescript/drm-plugin/src/index.d.ts +4 -0
  154. package/lib/typescript/drm-plugin/src/index.d.ts.map +1 -0
  155. package/lib/typescript/package.json +1 -0
  156. package/lib/typescript/src/core/VideoPlayer.d.ts +88 -0
  157. package/lib/typescript/src/core/VideoPlayer.d.ts.map +1 -0
  158. package/lib/typescript/src/core/VideoPlayerEvents.d.ts +22 -0
  159. package/lib/typescript/src/core/VideoPlayerEvents.d.ts.map +1 -0
  160. package/lib/typescript/src/core/hooks/useEvent.d.ts +11 -0
  161. package/lib/typescript/src/core/hooks/useEvent.d.ts.map +1 -0
  162. package/lib/typescript/src/core/hooks/useManagedInstance.d.ts +19 -0
  163. package/lib/typescript/src/core/hooks/useManagedInstance.d.ts.map +1 -0
  164. package/lib/typescript/src/core/hooks/useVideoPlayer.d.ts +16 -0
  165. package/lib/typescript/src/core/hooks/useVideoPlayer.d.ts.map +1 -0
  166. package/lib/typescript/src/core/types/BufferConfig.d.ts +97 -0
  167. package/lib/typescript/src/core/types/BufferConfig.d.ts.map +1 -0
  168. package/lib/typescript/src/core/types/DrmParams.d.ts +64 -0
  169. package/lib/typescript/src/core/types/DrmParams.d.ts.map +1 -0
  170. package/lib/typescript/src/core/types/Events.d.ts +224 -0
  171. package/lib/typescript/src/core/types/Events.d.ts.map +1 -0
  172. package/lib/typescript/src/core/types/IgnoreSilentSwitchMode.d.ts +2 -0
  173. package/lib/typescript/src/core/types/IgnoreSilentSwitchMode.d.ts.map +1 -0
  174. package/lib/typescript/src/core/types/MixAudioMode.d.ts +2 -0
  175. package/lib/typescript/src/core/types/MixAudioMode.d.ts.map +1 -0
  176. package/lib/typescript/src/core/types/ResizeMode.d.ts +10 -0
  177. package/lib/typescript/src/core/types/ResizeMode.d.ts.map +1 -0
  178. package/lib/typescript/src/core/types/TextTrack.d.ts +20 -0
  179. package/lib/typescript/src/core/types/TextTrack.d.ts.map +1 -0
  180. package/lib/typescript/src/core/types/Utils.d.ts +2 -0
  181. package/lib/typescript/src/core/types/Utils.d.ts.map +1 -0
  182. package/lib/typescript/src/core/types/VideoConfig.d.ts +138 -0
  183. package/lib/typescript/src/core/types/VideoConfig.d.ts.map +1 -0
  184. package/lib/typescript/src/core/types/VideoError.d.ts +31 -0
  185. package/lib/typescript/src/core/types/VideoError.d.ts.map +1 -0
  186. package/lib/typescript/src/core/types/VideoInformation.d.ts +38 -0
  187. package/lib/typescript/src/core/types/VideoInformation.d.ts.map +1 -0
  188. package/lib/typescript/src/core/types/VideoOrientation.d.ts +2 -0
  189. package/lib/typescript/src/core/types/VideoOrientation.d.ts.map +1 -0
  190. package/lib/typescript/src/core/types/VideoPlayerBase.d.ts +155 -0
  191. package/lib/typescript/src/core/types/VideoPlayerBase.d.ts.map +1 -0
  192. package/lib/typescript/src/core/types/VideoPlayerSourceBase.d.ts +17 -0
  193. package/lib/typescript/src/core/types/VideoPlayerSourceBase.d.ts.map +1 -0
  194. package/lib/typescript/src/core/types/VideoPlayerStatus.d.ts +9 -0
  195. package/lib/typescript/src/core/types/VideoPlayerStatus.d.ts.map +1 -0
  196. package/lib/typescript/src/core/utils/playerFactory.d.ts +12 -0
  197. package/lib/typescript/src/core/utils/playerFactory.d.ts.map +1 -0
  198. package/lib/typescript/src/core/utils/sourceFactory.d.ts +29 -0
  199. package/lib/typescript/src/core/utils/sourceFactory.d.ts.map +1 -0
  200. package/lib/typescript/src/core/video-view/NativeVideoView.d.ts +2 -0
  201. package/lib/typescript/src/core/video-view/NativeVideoView.d.ts.map +1 -0
  202. package/lib/typescript/src/core/video-view/VideoView.d.ts +104 -0
  203. package/lib/typescript/src/core/video-view/VideoView.d.ts.map +1 -0
  204. package/lib/typescript/src/index.d.ts +13 -0
  205. package/lib/typescript/src/index.d.ts.map +1 -0
  206. package/lib/typescript/src/spec/fabric/VideoViewNativeComponent.d.ts +13 -0
  207. package/lib/typescript/src/spec/fabric/VideoViewNativeComponent.d.ts.map +1 -0
  208. package/lib/typescript/src/spec/nitro/VideoPlayer.nitro.d.ts +55 -0
  209. package/lib/typescript/src/spec/nitro/VideoPlayer.nitro.d.ts.map +1 -0
  210. package/lib/typescript/src/spec/nitro/VideoPlayerEventEmitter.nitro.d.ts +150 -0
  211. package/lib/typescript/src/spec/nitro/VideoPlayerEventEmitter.nitro.d.ts.map +1 -0
  212. package/lib/typescript/src/spec/nitro/VideoPlayerSource.nitro.d.ts +21 -0
  213. package/lib/typescript/src/spec/nitro/VideoPlayerSource.nitro.d.ts.map +1 -0
  214. package/lib/typescript/src/spec/nitro/VideoViewViewManager.nitro.d.ts +75 -0
  215. package/lib/typescript/src/spec/nitro/VideoViewViewManager.nitro.d.ts.map +1 -0
  216. package/nitro.json +47 -0
  217. package/nitrogen/generated/android/UnifiedPlayer+autolinking.cmake +95 -0
  218. package/nitrogen/generated/android/UnifiedPlayer+autolinking.gradle +27 -0
  219. package/nitrogen/generated/android/UnifiedPlayerOnLoad.cpp +122 -0
  220. package/nitrogen/generated/android/UnifiedPlayerOnLoad.hpp +34 -0
  221. package/nitrogen/generated/android/c++/JBandwidthData.hpp +65 -0
  222. package/nitrogen/generated/android/c++/JBufferConfig.hpp +101 -0
  223. package/nitrogen/generated/android/c++/JCustomVideoMetadata.hpp +74 -0
  224. package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_std__string_____OnGetLicensePayload.hpp +126 -0
  225. package/nitrogen/generated/android/c++/JFunc_void.hpp +75 -0
  226. package/nitrogen/generated/android/c++/JFunc_void_BandwidthData.hpp +78 -0
  227. package/nitrogen/generated/android/c++/JFunc_void_TimedMetadata.hpp +81 -0
  228. package/nitrogen/generated/android/c++/JFunc_void_VideoPlayerStatus.hpp +77 -0
  229. package/nitrogen/generated/android/c++/JFunc_void_bool.hpp +75 -0
  230. package/nitrogen/generated/android/c++/JFunc_void_double.hpp +75 -0
  231. package/nitrogen/generated/android/c++/JFunc_void_onLoadData.hpp +79 -0
  232. package/nitrogen/generated/android/c++/JFunc_void_onLoadStartData.hpp +82 -0
  233. package/nitrogen/generated/android/c++/JFunc_void_onPlaybackStateChangeData.hpp +77 -0
  234. package/nitrogen/generated/android/c++/JFunc_void_onProgressData.hpp +77 -0
  235. package/nitrogen/generated/android/c++/JFunc_void_onVolumeChangeData.hpp +77 -0
  236. package/nitrogen/generated/android/c++/JFunc_void_std__optional_std__variant_nitro__NullType__TextTrack__.hpp +83 -0
  237. package/nitrogen/generated/android/c++/JFunc_void_std__vector_std__string_.hpp +95 -0
  238. package/nitrogen/generated/android/c++/JHybridVideoPlayerEventEmitterSpec.cpp +224 -0
  239. package/nitrogen/generated/android/c++/JHybridVideoPlayerEventEmitterSpec.hpp +82 -0
  240. package/nitrogen/generated/android/c++/JHybridVideoPlayerFactorySpec.cpp +60 -0
  241. package/nitrogen/generated/android/c++/JHybridVideoPlayerFactorySpec.hpp +63 -0
  242. package/nitrogen/generated/android/c++/JHybridVideoPlayerSourceFactorySpec.cpp +106 -0
  243. package/nitrogen/generated/android/c++/JHybridVideoPlayerSourceFactorySpec.hpp +64 -0
  244. package/nitrogen/generated/android/c++/JHybridVideoPlayerSourceSpec.cpp +124 -0
  245. package/nitrogen/generated/android/c++/JHybridVideoPlayerSourceSpec.hpp +64 -0
  246. package/nitrogen/generated/android/c++/JHybridVideoPlayerSpec.cpp +300 -0
  247. package/nitrogen/generated/android/c++/JHybridVideoPlayerSpec.hpp +98 -0
  248. package/nitrogen/generated/android/c++/JHybridVideoViewViewManagerFactorySpec.cpp +56 -0
  249. package/nitrogen/generated/android/c++/JHybridVideoViewViewManagerFactorySpec.hpp +63 -0
  250. package/nitrogen/generated/android/c++/JHybridVideoViewViewManagerSpec.cpp +185 -0
  251. package/nitrogen/generated/android/c++/JHybridVideoViewViewManagerSpec.hpp +87 -0
  252. package/nitrogen/generated/android/c++/JIgnoreSilentSwitchMode.hpp +61 -0
  253. package/nitrogen/generated/android/c++/JListenerSubscription.hpp +67 -0
  254. package/nitrogen/generated/android/c++/JLivePlaybackParams.hpp +73 -0
  255. package/nitrogen/generated/android/c++/JMixAudioMode.hpp +64 -0
  256. package/nitrogen/generated/android/c++/JNativeDrmParams.hpp +111 -0
  257. package/nitrogen/generated/android/c++/JNativeExternalSubtitle.hpp +71 -0
  258. package/nitrogen/generated/android/c++/JNativeVideoConfig.hpp +136 -0
  259. package/nitrogen/generated/android/c++/JOnGetLicensePayload.hpp +69 -0
  260. package/nitrogen/generated/android/c++/JResizeMode.hpp +64 -0
  261. package/nitrogen/generated/android/c++/JResolution.hpp +61 -0
  262. package/nitrogen/generated/android/c++/JSourceType.hpp +58 -0
  263. package/nitrogen/generated/android/c++/JSubtitleType.hpp +67 -0
  264. package/nitrogen/generated/android/c++/JSurfaceType.hpp +58 -0
  265. package/nitrogen/generated/android/c++/JTextTrack.hpp +70 -0
  266. package/nitrogen/generated/android/c++/JTimedMetadata.hpp +78 -0
  267. package/nitrogen/generated/android/c++/JTimedMetadataObject.hpp +61 -0
  268. package/nitrogen/generated/android/c++/JVariant_NullType_HybridVideoPlayerSourceSpec.cpp +26 -0
  269. package/nitrogen/generated/android/c++/JVariant_NullType_HybridVideoPlayerSourceSpec.hpp +72 -0
  270. package/nitrogen/generated/android/c++/JVariant_NullType_TextTrack.cpp +26 -0
  271. package/nitrogen/generated/android/c++/JVariant_NullType_TextTrack.hpp +73 -0
  272. package/nitrogen/generated/android/c++/JVideoInformation.hpp +86 -0
  273. package/nitrogen/generated/android/c++/JVideoOrientation.hpp +73 -0
  274. package/nitrogen/generated/android/c++/JVideoPlayerStatus.hpp +64 -0
  275. package/nitrogen/generated/android/c++/JonLoadData.hpp +74 -0
  276. package/nitrogen/generated/android/c++/JonLoadStartData.hpp +65 -0
  277. package/nitrogen/generated/android/c++/JonPlaybackStateChangeData.hpp +61 -0
  278. package/nitrogen/generated/android/c++/JonProgressData.hpp +65 -0
  279. package/nitrogen/generated/android/c++/JonVolumeChangeData.hpp +61 -0
  280. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/BandwidthData.kt +61 -0
  281. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/BufferConfig.kt +101 -0
  282. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/CustomVideoMetadata.kt +71 -0
  283. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__string_____OnGetLicensePayload.kt +80 -0
  284. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/Func_void.kt +80 -0
  285. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/Func_void_BandwidthData.kt +80 -0
  286. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/Func_void_TimedMetadata.kt +80 -0
  287. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/Func_void_VideoPlayerStatus.kt +80 -0
  288. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/Func_void_bool.kt +80 -0
  289. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/Func_void_double.kt +80 -0
  290. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/Func_void_onLoadData.kt +80 -0
  291. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/Func_void_onLoadStartData.kt +80 -0
  292. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/Func_void_onPlaybackStateChangeData.kt +80 -0
  293. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/Func_void_onProgressData.kt +80 -0
  294. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/Func_void_onVolumeChangeData.kt +80 -0
  295. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/Func_void_std__optional_std__variant_nitro__NullType__TextTrack__.kt +80 -0
  296. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/Func_void_std__vector_std__string_.kt +80 -0
  297. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/HybridVideoPlayerEventEmitterSpec.kt +226 -0
  298. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/HybridVideoPlayerFactorySpec.kt +54 -0
  299. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/HybridVideoPlayerSourceFactorySpec.kt +58 -0
  300. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/HybridVideoPlayerSourceSpec.kt +61 -0
  301. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/HybridVideoPlayerSpec.kt +178 -0
  302. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/HybridVideoViewViewManagerFactorySpec.kt +54 -0
  303. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/HybridVideoViewViewManagerSpec.kt +168 -0
  304. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/IgnoreSilentSwitchMode.kt +24 -0
  305. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/ListenerSubscription.kt +55 -0
  306. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/LivePlaybackParams.kt +71 -0
  307. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/MixAudioMode.kt +25 -0
  308. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/NativeDrmParams.kt +85 -0
  309. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/NativeExternalSubtitle.kt +66 -0
  310. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/NativeVideoConfig.kt +81 -0
  311. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/OnGetLicensePayload.kt +66 -0
  312. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/ResizeMode.kt +25 -0
  313. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/Resolution.kt +56 -0
  314. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/SourceType.kt +23 -0
  315. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/SubtitleType.kt +26 -0
  316. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/SurfaceType.kt +23 -0
  317. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/TextTrack.kt +66 -0
  318. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/TimedMetadata.kt +51 -0
  319. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/TimedMetadataObject.kt +56 -0
  320. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/UnifiedPlayerOnLoad.kt +35 -0
  321. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/Variant_NullType_HybridVideoPlayerSourceSpec.kt +62 -0
  322. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/Variant_NullType_TextTrack.kt +62 -0
  323. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/VideoInformation.kt +86 -0
  324. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/VideoOrientation.kt +28 -0
  325. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/VideoPlayerStatus.kt +25 -0
  326. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/onLoadData.kt +71 -0
  327. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/onLoadStartData.kt +56 -0
  328. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/onPlaybackStateChangeData.kt +56 -0
  329. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/onProgressData.kt +61 -0
  330. package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/onVolumeChangeData.kt +56 -0
  331. package/nitrogen/generated/ios/UnifiedPlayer+autolinking.rb +62 -0
  332. package/nitrogen/generated/ios/UnifiedPlayer-Swift-Cxx-Bridge.cpp +280 -0
  333. package/nitrogen/generated/ios/UnifiedPlayer-Swift-Cxx-Bridge.hpp +1106 -0
  334. package/nitrogen/generated/ios/UnifiedPlayer-Swift-Cxx-Umbrella.hpp +162 -0
  335. package/nitrogen/generated/ios/UnifiedPlayerAutolinking.mm +49 -0
  336. package/nitrogen/generated/ios/UnifiedPlayerAutolinking.swift +50 -0
  337. package/nitrogen/generated/ios/c++/HybridVideoPlayerEventEmitterSpecSwift.cpp +11 -0
  338. package/nitrogen/generated/ios/c++/HybridVideoPlayerEventEmitterSpecSwift.hpp +279 -0
  339. package/nitrogen/generated/ios/c++/HybridVideoPlayerFactorySpecSwift.cpp +11 -0
  340. package/nitrogen/generated/ios/c++/HybridVideoPlayerFactorySpecSwift.hpp +87 -0
  341. package/nitrogen/generated/ios/c++/HybridVideoPlayerSourceFactorySpecSwift.cpp +11 -0
  342. package/nitrogen/generated/ios/c++/HybridVideoPlayerSourceFactorySpecSwift.hpp +125 -0
  343. package/nitrogen/generated/ios/c++/HybridVideoPlayerSourceSpecSwift.cpp +11 -0
  344. package/nitrogen/generated/ios/c++/HybridVideoPlayerSourceSpecSwift.hpp +125 -0
  345. package/nitrogen/generated/ios/c++/HybridVideoPlayerSpecSwift.cpp +11 -0
  346. package/nitrogen/generated/ios/c++/HybridVideoPlayerSpecSwift.hpp +256 -0
  347. package/nitrogen/generated/ios/c++/HybridVideoViewViewManagerFactorySpecSwift.cpp +11 -0
  348. package/nitrogen/generated/ios/c++/HybridVideoViewViewManagerFactorySpecSwift.hpp +84 -0
  349. package/nitrogen/generated/ios/c++/HybridVideoViewViewManagerSpecSwift.cpp +11 -0
  350. package/nitrogen/generated/ios/c++/HybridVideoViewViewManagerSpecSwift.hpp +217 -0
  351. package/nitrogen/generated/ios/swift/BandwidthData.swift +65 -0
  352. package/nitrogen/generated/ios/swift/BufferConfig.swift +201 -0
  353. package/nitrogen/generated/ios/swift/CustomVideoMetadata.swift +114 -0
  354. package/nitrogen/generated/ios/swift/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__string_____OnGetLicensePayload.swift +61 -0
  355. package/nitrogen/generated/ios/swift/Func_void.swift +46 -0
  356. package/nitrogen/generated/ios/swift/Func_void_BandwidthData.swift +46 -0
  357. package/nitrogen/generated/ios/swift/Func_void_TimedMetadata.swift +46 -0
  358. package/nitrogen/generated/ios/swift/Func_void_VideoInformation.swift +46 -0
  359. package/nitrogen/generated/ios/swift/Func_void_VideoPlayerStatus.swift +46 -0
  360. package/nitrogen/generated/ios/swift/Func_void_bool.swift +46 -0
  361. package/nitrogen/generated/ios/swift/Func_void_double.swift +46 -0
  362. package/nitrogen/generated/ios/swift/Func_void_onLoadData.swift +46 -0
  363. package/nitrogen/generated/ios/swift/Func_void_onLoadStartData.swift +46 -0
  364. package/nitrogen/generated/ios/swift/Func_void_onPlaybackStateChangeData.swift +46 -0
  365. package/nitrogen/generated/ios/swift/Func_void_onProgressData.swift +46 -0
  366. package/nitrogen/generated/ios/swift/Func_void_onVolumeChangeData.swift +46 -0
  367. package/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift +46 -0
  368. package/nitrogen/generated/ios/swift/Func_void_std__optional_std__variant_nitro__NullType__TextTrack__.swift +65 -0
  369. package/nitrogen/generated/ios/swift/Func_void_std__shared_ptr_Promise_std__string__.swift +66 -0
  370. package/nitrogen/generated/ios/swift/Func_void_std__string.swift +46 -0
  371. package/nitrogen/generated/ios/swift/Func_void_std__vector_std__string_.swift +46 -0
  372. package/nitrogen/generated/ios/swift/HybridVideoPlayerEventEmitterSpec.swift +74 -0
  373. package/nitrogen/generated/ios/swift/HybridVideoPlayerEventEmitterSpec_cxx.swift +479 -0
  374. package/nitrogen/generated/ios/swift/HybridVideoPlayerFactorySpec.swift +55 -0
  375. package/nitrogen/generated/ios/swift/HybridVideoPlayerFactorySpec_cxx.swift +145 -0
  376. package/nitrogen/generated/ios/swift/HybridVideoPlayerSourceFactorySpec.swift +56 -0
  377. package/nitrogen/generated/ios/swift/HybridVideoPlayerSourceFactorySpec_cxx.swift +156 -0
  378. package/nitrogen/generated/ios/swift/HybridVideoPlayerSourceSpec.swift +56 -0
  379. package/nitrogen/generated/ios/swift/HybridVideoPlayerSourceSpec_cxx.swift +157 -0
  380. package/nitrogen/generated/ios/swift/HybridVideoPlayerSpec.swift +80 -0
  381. package/nitrogen/generated/ios/swift/HybridVideoPlayerSpec_cxx.swift +490 -0
  382. package/nitrogen/generated/ios/swift/HybridVideoViewViewManagerFactorySpec.swift +55 -0
  383. package/nitrogen/generated/ios/swift/HybridVideoViewViewManagerFactorySpec_cxx.swift +141 -0
  384. package/nitrogen/generated/ios/swift/HybridVideoViewViewManagerSpec.swift +72 -0
  385. package/nitrogen/generated/ios/swift/HybridVideoViewViewManagerSpec_cxx.swift +390 -0
  386. package/nitrogen/generated/ios/swift/IgnoreSilentSwitchMode.swift +44 -0
  387. package/nitrogen/generated/ios/swift/ListenerSubscription.swift +37 -0
  388. package/nitrogen/generated/ios/swift/LivePlaybackParams.swift +114 -0
  389. package/nitrogen/generated/ios/swift/MixAudioMode.swift +48 -0
  390. package/nitrogen/generated/ios/swift/NativeDrmParams.swift +193 -0
  391. package/nitrogen/generated/ios/swift/NativeExternalSubtitle.swift +44 -0
  392. package/nitrogen/generated/ios/swift/NativeVideoConfig.swift +136 -0
  393. package/nitrogen/generated/ios/swift/OnGetLicensePayload.swift +44 -0
  394. package/nitrogen/generated/ios/swift/ResizeMode.swift +48 -0
  395. package/nitrogen/generated/ios/swift/Resolution.swift +34 -0
  396. package/nitrogen/generated/ios/swift/SourceType.swift +40 -0
  397. package/nitrogen/generated/ios/swift/SubtitleType.swift +52 -0
  398. package/nitrogen/generated/ios/swift/SurfaceType.swift +40 -0
  399. package/nitrogen/generated/ios/swift/TextTrack.swift +57 -0
  400. package/nitrogen/generated/ios/swift/TimedMetadata.swift +35 -0
  401. package/nitrogen/generated/ios/swift/TimedMetadataObject.swift +34 -0
  402. package/nitrogen/generated/ios/swift/Variant_NullType_TextTrack.swift +30 -0
  403. package/nitrogen/generated/ios/swift/Variant_NullType__any_HybridVideoPlayerSourceSpec_.swift +30 -0
  404. package/nitrogen/generated/ios/swift/VideoInformation.swift +64 -0
  405. package/nitrogen/generated/ios/swift/VideoOrientation.swift +60 -0
  406. package/nitrogen/generated/ios/swift/VideoPlayerStatus.swift +48 -0
  407. package/nitrogen/generated/ios/swift/onLoadData.swift +49 -0
  408. package/nitrogen/generated/ios/swift/onLoadStartData.swift +41 -0
  409. package/nitrogen/generated/ios/swift/onPlaybackStateChangeData.swift +34 -0
  410. package/nitrogen/generated/ios/swift/onProgressData.swift +39 -0
  411. package/nitrogen/generated/ios/swift/onVolumeChangeData.swift +34 -0
  412. package/nitrogen/generated/shared/c++/BandwidthData.hpp +91 -0
  413. package/nitrogen/generated/shared/c++/BufferConfig.hpp +128 -0
  414. package/nitrogen/generated/shared/c++/CustomVideoMetadata.hpp +100 -0
  415. package/nitrogen/generated/shared/c++/HybridVideoPlayerEventEmitterSpec.cpp +40 -0
  416. package/nitrogen/generated/shared/c++/HybridVideoPlayerEventEmitterSpec.hpp +115 -0
  417. package/nitrogen/generated/shared/c++/HybridVideoPlayerFactorySpec.cpp +21 -0
  418. package/nitrogen/generated/shared/c++/HybridVideoPlayerFactorySpec.hpp +67 -0
  419. package/nitrogen/generated/shared/c++/HybridVideoPlayerSourceFactorySpec.cpp +22 -0
  420. package/nitrogen/generated/shared/c++/HybridVideoPlayerSourceFactorySpec.hpp +69 -0
  421. package/nitrogen/generated/shared/c++/HybridVideoPlayerSourceSpec.cpp +23 -0
  422. package/nitrogen/generated/shared/c++/HybridVideoPlayerSourceSpec.hpp +69 -0
  423. package/nitrogen/generated/shared/c++/HybridVideoPlayerSpec.cpp +57 -0
  424. package/nitrogen/generated/shared/c++/HybridVideoPlayerSpec.hpp +120 -0
  425. package/nitrogen/generated/shared/c++/HybridVideoViewViewManagerFactorySpec.cpp +21 -0
  426. package/nitrogen/generated/shared/c++/HybridVideoViewViewManagerFactorySpec.hpp +64 -0
  427. package/nitrogen/generated/shared/c++/HybridVideoViewViewManagerSpec.cpp +46 -0
  428. package/nitrogen/generated/shared/c++/HybridVideoViewViewManagerSpec.hpp +99 -0
  429. package/nitrogen/generated/shared/c++/IgnoreSilentSwitchMode.hpp +80 -0
  430. package/nitrogen/generated/shared/c++/ListenerSubscription.hpp +83 -0
  431. package/nitrogen/generated/shared/c++/LivePlaybackParams.hpp +99 -0
  432. package/nitrogen/generated/shared/c++/MixAudioMode.hpp +84 -0
  433. package/nitrogen/generated/shared/c++/NativeDrmParams.hpp +113 -0
  434. package/nitrogen/generated/shared/c++/NativeExternalSubtitle.hpp +97 -0
  435. package/nitrogen/generated/shared/c++/NativeVideoConfig.hpp +121 -0
  436. package/nitrogen/generated/shared/c++/OnGetLicensePayload.hpp +95 -0
  437. package/nitrogen/generated/shared/c++/ResizeMode.hpp +84 -0
  438. package/nitrogen/generated/shared/c++/Resolution.hpp +87 -0
  439. package/nitrogen/generated/shared/c++/SourceType.hpp +76 -0
  440. package/nitrogen/generated/shared/c++/SubtitleType.hpp +88 -0
  441. package/nitrogen/generated/shared/c++/SurfaceType.hpp +76 -0
  442. package/nitrogen/generated/shared/c++/TextTrack.hpp +96 -0
  443. package/nitrogen/generated/shared/c++/TimedMetadata.hpp +85 -0
  444. package/nitrogen/generated/shared/c++/TimedMetadataObject.hpp +87 -0
  445. package/nitrogen/generated/shared/c++/VideoInformation.hpp +112 -0
  446. package/nitrogen/generated/shared/c++/VideoOrientation.hpp +96 -0
  447. package/nitrogen/generated/shared/c++/VideoPlayerStatus.hpp +84 -0
  448. package/nitrogen/generated/shared/c++/onLoadData.hpp +100 -0
  449. package/nitrogen/generated/shared/c++/onLoadStartData.hpp +92 -0
  450. package/nitrogen/generated/shared/c++/onPlaybackStateChangeData.hpp +87 -0
  451. package/nitrogen/generated/shared/c++/onProgressData.hpp +91 -0
  452. package/nitrogen/generated/shared/c++/onVolumeChangeData.hpp +87 -0
  453. package/package.json +180 -0
  454. package/react-native.config.js +10 -0
  455. package/src/core/VideoPlayer.ts +357 -0
  456. package/src/core/VideoPlayerEvents.ts +146 -0
  457. package/src/core/hooks/useEvent.ts +24 -0
  458. package/src/core/hooks/useManagedInstance.ts +96 -0
  459. package/src/core/hooks/useVideoPlayer.ts +73 -0
  460. package/src/core/types/BufferConfig.ts +103 -0
  461. package/src/core/types/DrmParams.ts +65 -0
  462. package/src/core/types/Events.ts +283 -0
  463. package/src/core/types/IgnoreSilentSwitchMode.ts +1 -0
  464. package/src/core/types/MixAudioMode.ts +1 -0
  465. package/src/core/types/ResizeMode.ts +9 -0
  466. package/src/core/types/TextTrack.ts +22 -0
  467. package/src/core/types/Utils.ts +1 -0
  468. package/src/core/types/VideoConfig.ts +150 -0
  469. package/src/core/types/VideoError.ts +174 -0
  470. package/src/core/types/VideoInformation.ts +45 -0
  471. package/src/core/types/VideoOrientation.ts +8 -0
  472. package/src/core/types/VideoPlayerBase.ts +181 -0
  473. package/src/core/types/VideoPlayerSourceBase.ts +19 -0
  474. package/src/core/types/VideoPlayerStatus.ts +8 -0
  475. package/src/core/utils/playerFactory.ts +33 -0
  476. package/src/core/utils/sourceFactory.ts +171 -0
  477. package/src/core/video-view/NativeVideoView.tsx +18 -0
  478. package/src/core/video-view/VideoView.tsx +492 -0
  479. package/src/expo-plugins/@types.ts +37 -0
  480. package/src/expo-plugins/getPackageInfo.ts +23 -0
  481. package/src/expo-plugins/withAndroidExtensions.ts +46 -0
  482. package/src/expo-plugins/withAndroidNotificationControls.ts +43 -0
  483. package/src/expo-plugins/withAndroidPictureInPicture.ts +31 -0
  484. package/src/expo-plugins/withBackgroundAudio.ts +26 -0
  485. package/src/expo-plugins/withReactNativeVideo.ts +32 -0
  486. package/src/expo-plugins/writeToPodfile.ts +74 -0
  487. package/src/index.tsx +29 -0
  488. package/src/spec/fabric/VideoViewNativeComponent.ts +17 -0
  489. package/src/spec/nitro/VideoPlayer.nitro.ts +62 -0
  490. package/src/spec/nitro/VideoPlayerEventEmitter.nitro.ts +207 -0
  491. package/src/spec/nitro/VideoPlayerSource.nitro.ts +18 -0
  492. package/src/spec/nitro/VideoViewViewManager.nitro.ts +92 -0
@@ -0,0 +1,249 @@
1
+ buildscript {
2
+ // Buildscript is evaluated before everything else so we can't use getExtOrDefault
3
+ def kotlin_version = rootProject.ext.has("kotlinVersion") ? rootProject.ext.get("kotlinVersion") : project.properties["UnifiedPlayer_kotlinVersion"]
4
+ def minKotlin_version = project.properties["UnifiedPlayer_minKotlinVersion"]
5
+
6
+ def androidx_version = rootProject.ext.has('androidxActivityVersion') ? rootProject.ext.get('androidxActivityVersion') : project.properties['UnifiedPlayer_androidxActivityVersion']
7
+ def minAndroidx_version = project.properties["UnifiedPlayer_androidxActivityVersion"]
8
+
9
+ def isVersionAtLeast = { version, minVersion ->
10
+ def (major, minor, patch) = version.tokenize('.')
11
+ def (minMajor, minMinor, minPatch) = minVersion.tokenize('.')
12
+
13
+ // major version is greater
14
+ if (major.toInteger() > minMajor.toInteger()) return true
15
+
16
+ // major version is equal, minor version is greater
17
+ if (major.toInteger() == minMajor.toInteger() && minor.toInteger() > minMinor.toInteger()) return true
18
+
19
+ // major version is equal, minor version is equal, patch version is greater
20
+ if (major.toInteger() == minMajor.toInteger() && minor.toInteger() == minMinor.toInteger() && patch.toInteger() >= minPatch.toInteger()) return true
21
+
22
+ return false
23
+ }
24
+
25
+ repositories {
26
+ google()
27
+ mavenCentral()
28
+ }
29
+
30
+ dependencies {
31
+ classpath "com.android.tools.build:gradle:7.2.1"
32
+ // noinspection DifferentKotlinGradleVersion
33
+ classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
34
+ }
35
+
36
+ ext {
37
+ if (!isVersionAtLeast(kotlin_version, minKotlin_version)) {
38
+ throw new GradleException("Kotlin version must be at least $minKotlin_version (current: $kotlin_version)")
39
+ }
40
+
41
+ if (!isVersionAtLeast(androidx_version, minAndroidx_version)) {
42
+ throw new GradleException("AndroidX version must be at least $minAndroidx_version (current: $androidx_version)")
43
+ }
44
+ }
45
+ }
46
+
47
+ def reactNativeArchitectures() {
48
+ def value = rootProject.getProperties().get("reactNativeArchitectures")
49
+ return value ? value.split(",") : ["armeabi-v7a", "x86", "x86_64", "arm64-v8a"]
50
+ }
51
+
52
+ def isNewArchitectureEnabled() {
53
+ return rootProject.hasProperty("newArchEnabled") && rootProject.getProperty("newArchEnabled") == "true"
54
+ }
55
+
56
+ apply plugin: "com.android.library"
57
+ apply plugin: "kotlin-android"
58
+ apply from: '../nitrogen/generated/android/UnifiedPlayer+autolinking.gradle'
59
+ apply from: './fix-prefab.gradle'
60
+
61
+ if (isNewArchitectureEnabled()) {
62
+ apply plugin: "com.facebook.react"
63
+ }
64
+
65
+ def getExtOrDefault(name) {
66
+ return rootProject.ext.has(name) ? rootProject.ext.get(name) : project.properties["UnifiedPlayer_" + name]
67
+ }
68
+
69
+ def getExtOrIntegerDefault(name) {
70
+ return rootProject.ext.has(name) ? rootProject.ext.get(name) : (project.properties["UnifiedPlayer_" + name]).toInteger()
71
+ }
72
+
73
+ def supportsNamespace() {
74
+ def parsed = com.android.Version.ANDROID_GRADLE_PLUGIN_VERSION.tokenize('.')
75
+ def major = parsed[0].toInteger()
76
+ def minor = parsed[1].toInteger()
77
+
78
+ // Namespace support was added in 7.3.0
79
+ return (major == 7 && minor >= 3) || major >= 8
80
+ }
81
+
82
+ def ExoplayerDependenciesList = [
83
+ "useExoplayerDash",
84
+ "useExoplayerHls",
85
+ ]
86
+
87
+ def ExoplayerDependencies = ExoplayerDependenciesList.collectEntries { property ->
88
+ [(property): getExtOrDefault(property)?.toBoolean() ?: false]
89
+ }
90
+
91
+ // Print Configuration
92
+ println "[UnifiedPlayer] Exoplayer Dependencies Configuration:"
93
+ ExoplayerDependenciesList.each { propertyName ->
94
+ def propertyValue = ExoplayerDependencies[propertyName]
95
+ println "$propertyName: $propertyValue"
96
+ }
97
+
98
+ android {
99
+ if (supportsNamespace()) {
100
+ namespace "com.unifiedplayer"
101
+
102
+ sourceSets {
103
+ main {
104
+ manifest.srcFile "src/main/AndroidManifestNew.xml"
105
+ }
106
+ }
107
+ }
108
+
109
+ ndkVersion getExtOrDefault("ndkVersion")
110
+ compileSdkVersion getExtOrIntegerDefault("compileSdkVersion")
111
+
112
+ defaultConfig {
113
+ minSdkVersion getExtOrIntegerDefault("minSdkVersion")
114
+ targetSdkVersion getExtOrIntegerDefault("targetSdkVersion")
115
+
116
+ buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString()
117
+ buildConfigField "boolean", "USE_EXOPLAYER_DASH", ExoplayerDependencies.useExoplayerDash.toString()
118
+ buildConfigField "boolean", "USE_EXOPLAYER_HLS", ExoplayerDependencies.useExoplayerHls.toString()
119
+
120
+ externalNativeBuild {
121
+ cmake {
122
+ cppFlags "-O2 -frtti -fexceptions -Wall -fstack-protector-all"
123
+ arguments "-DANDROID_STL=c++_shared", "-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON"
124
+ abiFilters (*reactNativeArchitectures())
125
+ }
126
+ }
127
+ }
128
+
129
+ externalNativeBuild {
130
+ cmake {
131
+ path "CMakeLists.txt"
132
+ }
133
+ }
134
+
135
+ packagingOptions {
136
+ excludes = [
137
+ "META-INF",
138
+ "META-INF/**",
139
+ "**/libc++_shared.so",
140
+ "**/libfbjni.so",
141
+ "**/libjsi.so",
142
+ "**/libfolly_json.so",
143
+ "**/libfolly_runtime.so",
144
+ "**/libglog.so",
145
+ "**/libhermes.so",
146
+ "**/libhermes-executor-debug.so",
147
+ "**/libhermes_executor.so",
148
+ "**/libreactnativejni.so",
149
+ "**/libturbomodulejsijni.so",
150
+ "**/libreact_nativemodule_core.so",
151
+ "**/libjscexecutor.so",
152
+ "**/libreactnative.so"
153
+ ]
154
+ }
155
+
156
+ buildFeatures {
157
+ buildConfig true
158
+ prefab true
159
+ }
160
+
161
+ buildTypes {
162
+ release {
163
+ minifyEnabled false
164
+ }
165
+ }
166
+
167
+ lintOptions {
168
+ disable "GradleCompatible"
169
+ }
170
+
171
+ compileOptions {
172
+ sourceCompatibility JavaVersion.VERSION_1_8
173
+ targetCompatibility JavaVersion.VERSION_1_8
174
+ }
175
+
176
+ sourceSets {
177
+ main {
178
+ if (!isNewArchitectureEnabled()) {
179
+ java.srcDirs += ["src/paper/java"]
180
+ }
181
+
182
+ if (!ExoplayerDependencies.useExoplayerDash) {
183
+ java.srcDirs += ["src/stubs/dash"]
184
+ }
185
+
186
+ if (!ExoplayerDependencies.useExoplayerHls) {
187
+ java.srcDirs += ["src/stubs/hls"]
188
+ }
189
+ }
190
+ }
191
+ }
192
+
193
+ repositories {
194
+ mavenCentral()
195
+ google()
196
+ }
197
+
198
+ def kotlin_version = getExtOrDefault("kotlinVersion")
199
+ def media3_version = getExtOrDefault("media3Version")
200
+ def androidxCore_version = getExtOrDefault("androidxCoreVersion")
201
+ def androidxActivity_version = getExtOrDefault("androidxActivityVersion")
202
+
203
+ dependencies {
204
+ // For < 0.71, this will be from the local maven repo
205
+ // For > 0.71, this will be replaced by `com.facebook.react:react-android:$version` by react gradle plugin
206
+ //noinspection GradleDynamicVersion
207
+ implementation "com.facebook.react:react-native:+"
208
+ implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
209
+
210
+ // Add a dependency on NitroModules
211
+ implementation project(":react-native-nitro-modules")
212
+
213
+ implementation "androidx.core:core-ktx:$androidxCore_version"
214
+ implementation "androidx.activity:activity-ktx:$androidxActivity_version"
215
+
216
+ // For media playback using ExoPlayer
217
+ implementation "androidx.media3:media3-exoplayer:$media3_version"
218
+
219
+ // Common functionality used across multiple media libraries
220
+ implementation "androidx.media3:media3-common:$media3_version"
221
+
222
+ // For building media playback UIs
223
+ implementation "androidx.media3:media3-ui:$media3_version"
224
+
225
+ // Common functionality for loading data
226
+ implementation "androidx.media3:media3-datasource:$media3_version"
227
+
228
+ // For loading data using the OkHttp network stack
229
+ implementation "androidx.media3:media3-datasource-okhttp:$media3_version"
230
+
231
+ // For Media Session
232
+ implementation "androidx.media3:media3-session:$media3_version"
233
+
234
+ if (ExoplayerDependencies.useExoplayerDash) {
235
+ implementation "androidx.media3:media3-exoplayer-dash:$media3_version"
236
+ }
237
+
238
+ if (ExoplayerDependencies.useExoplayerHls) {
239
+ implementation "androidx.media3:media3-exoplayer-hls:$media3_version"
240
+ }
241
+ }
242
+
243
+ if (isNewArchitectureEnabled()) {
244
+ react {
245
+ jsRootDir = file("../src/spec/fabric")
246
+ libraryName = "RNCVideoView"
247
+ codegenJavaPackageName = "com.facebook.react.viewmanagers"
248
+ }
249
+ }
@@ -0,0 +1,51 @@
1
+ tasks.configureEach { task ->
2
+ // Make sure that we generate our prefab publication file only after having built the native library
3
+ // so that not a header publication file, but a full configuration publication will be generated, which
4
+ // will include the .so file
5
+
6
+ def prefabConfigurePattern = ~/^prefab(.+)ConfigurePackage$/
7
+ def matcher = task.name =~ prefabConfigurePattern
8
+ if (matcher.matches()) {
9
+ def variantName = matcher[0][1]
10
+ task.outputs.upToDateWhen { false }
11
+ task.dependsOn("externalNativeBuild${variantName}")
12
+ }
13
+ }
14
+
15
+ afterEvaluate {
16
+ def abis = reactNativeArchitectures()
17
+ rootProject.allprojects.each { proj ->
18
+ if (proj === rootProject) return
19
+
20
+ def dependsOnThisLib = proj.configurations.findAll { it.canBeResolved }.any { config ->
21
+ config.dependencies.any { dep ->
22
+ dep.group == project.group && dep.name == project.name
23
+ }
24
+ }
25
+ if (!dependsOnThisLib && proj != project) return
26
+
27
+ if (!proj.plugins.hasPlugin('com.android.application') && !proj.plugins.hasPlugin('com.android.library')) {
28
+ return
29
+ }
30
+
31
+ def variants = proj.android.hasProperty('applicationVariants') ? proj.android.applicationVariants : proj.android.libraryVariants
32
+ // Touch the prefab_config.json files to ensure that in ExternalNativeJsonGenerator.kt we will re-trigger the prefab CLI to
33
+ // generate a libnameConfig.cmake file that will contain our native library (.so).
34
+ // See this condition: https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:build-system/gradle-core/src/main/java/com/android/build/gradle/tasks/ExternalNativeJsonGenerator.kt;l=207-219?q=createPrefabBuildSystemGlue
35
+ variants.all { variant ->
36
+ def variantName = variant.name
37
+ abis.each { abi ->
38
+ def searchDir = new File(proj.projectDir, ".cxx/${variantName}")
39
+ if (!searchDir.exists()) return
40
+ def matches = []
41
+ searchDir.eachDir { randomDir ->
42
+ def prefabFile = new File(randomDir, "${abi}/prefab_config.json")
43
+ if (prefabFile.exists()) matches << prefabFile
44
+ }
45
+ matches.each { prefabConfig ->
46
+ prefabConfig.setLastModified(System.currentTimeMillis())
47
+ }
48
+ }
49
+ }
50
+ }
51
+ }
@@ -0,0 +1,15 @@
1
+ UnifiedPlayer_kotlinVersion=1.9.24
2
+ UnifiedPlayer_minKotlinVersion=1.8.0
3
+ UnifiedPlayer_minSdkVersion=24
4
+ UnifiedPlayer_targetSdkVersion=35
5
+ UnifiedPlayer_compileSdkVersion=35
6
+ UnifiedPlayer_ndkVersion=27.1.12297006
7
+
8
+ UnifiedPlayer_useExoplayerDash=true
9
+ UnifiedPlayer_useExoplayerHls=true
10
+
11
+ UnifiedPlayer_media3Version=1.4.1
12
+ UnifiedPlayer_androidxCoreVersion=1.13.1
13
+ UnifiedPlayer_androidxActivityVersion=1.9.3
14
+
15
+ android.useAndroidX=true
@@ -0,0 +1,10 @@
1
+ <manifest xmlns:android="http://schemas.android.com/apk/res/android"
2
+ package="com.unifiedplayer">
3
+ <uses-permission android:name="android.permission.INTERNET" />
4
+ <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
5
+ <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="32" />
6
+ <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" />
7
+ <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
8
+ <application android:hardwareAccelerated="true">
9
+ </application>
10
+ </manifest>
@@ -0,0 +1,9 @@
1
+ <manifest xmlns:android="http://schemas.android.com/apk/res/android">
2
+ <uses-permission android:name="android.permission.INTERNET" />
3
+ <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
4
+ <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="32" />
5
+ <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" />
6
+ <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
7
+ <application android:hardwareAccelerated="true">
8
+ </application>
9
+ </manifest>
@@ -0,0 +1,9 @@
1
+ #include <fbjni/fbjni.h>
2
+ #include <jni.h>
3
+ #include "UnifiedPlayerOnLoad.hpp"
4
+
5
+ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void*) {
6
+ return facebook::jni::initialize(vm, []() {
7
+ margelo::nitro::unifiedplayer::registerAllNatives();
8
+ });
9
+ }
@@ -0,0 +1,233 @@
1
+ package com.unifiedplayer.core
2
+
3
+ import android.content.Context
4
+ import android.media.AudioAttributes
5
+ import android.media.AudioManager
6
+ import android.media.AudioFocusRequest
7
+ import android.os.Build
8
+ import androidx.annotation.OptIn
9
+ import androidx.annotation.RequiresApi
10
+ import androidx.media3.common.util.UnstableApi
11
+ import com.margelo.nitro.NitroModules
12
+ import com.margelo.nitro.unifiedplayer.HybridVideoPlayer
13
+ import com.margelo.nitro.unifiedplayer.MixAudioMode
14
+ import kotlin.getValue
15
+ import com.unifiedplayer.core.utils.Threading
16
+
17
+ @OptIn(UnstableApi::class)
18
+ class AudioFocusManager() {
19
+ private val players = mutableListOf<HybridVideoPlayer>()
20
+ private var currentMixAudioMode: MixAudioMode? = null
21
+ private var audioFocusRequest: AudioFocusRequest? = null
22
+
23
+ val appContext by lazy {
24
+ NitroModules.applicationContext ?: throw UnknownError()
25
+ }
26
+
27
+ private val audioManager by lazy {
28
+ appContext.getSystemService(Context.AUDIO_SERVICE) as? AudioManager ?: throw UnknownError()
29
+ }
30
+
31
+ private val audioFocusChangeListener = AudioManager.OnAudioFocusChangeListener { focusChange ->
32
+ when (focusChange) {
33
+ AudioManager.AUDIOFOCUS_GAIN -> {
34
+ unDuckActivePlayers()
35
+ }
36
+ AudioManager.AUDIOFOCUS_LOSS -> {
37
+ pauseActivePlayers()
38
+ currentMixAudioMode = null
39
+ audioFocusRequest = null
40
+ }
41
+ AudioManager.AUDIOFOCUS_LOSS_TRANSIENT -> {
42
+ val mixAudioMode = determineRequiredMixMode()
43
+ if (mixAudioMode != MixAudioMode.MIXWITHOTHERS) {
44
+ pauseActivePlayers()
45
+ currentMixAudioMode = null
46
+ audioFocusRequest = null
47
+ }
48
+ }
49
+ AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK -> {
50
+ val mixAudioMode = determineRequiredMixMode()
51
+ when (mixAudioMode) {
52
+ MixAudioMode.DONOTMIX -> pauseActivePlayers()
53
+ else -> duckActivePlayers()
54
+ }
55
+ }
56
+ }
57
+ }
58
+
59
+ fun registerPlayer(player: HybridVideoPlayer) {
60
+ if (!players.contains(player)) {
61
+ players.add(player)
62
+ }
63
+ }
64
+
65
+ fun unregisterPlayer(player: HybridVideoPlayer) {
66
+ players.remove(player)
67
+ if (players.isEmpty()) {
68
+ abandonAudioFocus()
69
+ } else {
70
+ requestAudioFocusUpdate()
71
+ }
72
+ }
73
+
74
+ fun requestAudioFocusUpdate() {
75
+ Threading.runOnMainThread {
76
+ val requiredMixMode = determineRequiredMixMode()
77
+
78
+ if (requiredMixMode == null) {
79
+ abandonAudioFocus()
80
+ return@runOnMainThread
81
+ }
82
+
83
+ if (currentMixAudioMode != requiredMixMode) {
84
+ requestAudioFocus(requiredMixMode)
85
+ }
86
+ }
87
+ }
88
+
89
+ private fun determineRequiredMixMode(): MixAudioMode? {
90
+ val activePlayers = players.filter { player ->
91
+ player.player.isPlaying && player.player.volume != 0f
92
+ }
93
+
94
+ if (activePlayers.isEmpty()) {
95
+ return null
96
+ }
97
+
98
+ val anyPlayerNeedsMixWithOthers = activePlayers.any { player ->
99
+ player.mixAudioMode == MixAudioMode.MIXWITHOTHERS
100
+ }
101
+
102
+ if (anyPlayerNeedsMixWithOthers) {
103
+ abandonAudioFocus()
104
+ return MixAudioMode.MIXWITHOTHERS
105
+ }
106
+
107
+ val anyPlayerNeedsExclusiveFocus = activePlayers.any { player ->
108
+ player.mixAudioMode == MixAudioMode.DONOTMIX
109
+ }
110
+
111
+ val anyPlayerNeedsDucking = activePlayers.any { player ->
112
+ player.mixAudioMode == MixAudioMode.DUCKOTHERS
113
+ }
114
+
115
+ return when {
116
+ anyPlayerNeedsExclusiveFocus -> MixAudioMode.DONOTMIX
117
+ anyPlayerNeedsDucking -> MixAudioMode.DUCKOTHERS
118
+ else -> MixAudioMode.AUTO
119
+ }
120
+ }
121
+
122
+ private fun requestAudioFocus(mixMode: MixAudioMode) {
123
+ val focusType = when (mixMode) {
124
+ MixAudioMode.DONOTMIX -> AudioManager.AUDIOFOCUS_GAIN
125
+ MixAudioMode.DUCKOTHERS -> AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK
126
+ MixAudioMode.AUTO -> AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK
127
+ MixAudioMode.MIXWITHOTHERS -> return // No focus needed for mix with others
128
+ }
129
+
130
+ val result = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
131
+ requestAudioFocusNew(focusType)
132
+ } else {
133
+ requestAudioFocusLegacy(focusType)
134
+ }
135
+
136
+ if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
137
+ currentMixAudioMode = mixMode
138
+ } else {
139
+ currentMixAudioMode = null
140
+ // Pause players since audio focus couldn't be obtained
141
+ pauseActivePlayers()
142
+ }
143
+ }
144
+
145
+ @RequiresApi(Build.VERSION_CODES.O)
146
+ private fun requestAudioFocusNew(focusType: Int): Int {
147
+
148
+ audioFocusRequest = AudioFocusRequest.Builder(focusType)
149
+ .setAudioAttributes(
150
+ AudioAttributes.Builder().run {
151
+ setUsage(AudioAttributes.USAGE_MEDIA)
152
+ setContentType(AudioAttributes.CONTENT_TYPE_MOVIE)
153
+ build()
154
+ }
155
+ )
156
+ .setOnAudioFocusChangeListener(audioFocusChangeListener)
157
+ .build()
158
+
159
+ return audioManager.requestAudioFocus(audioFocusRequest!!)
160
+ }
161
+
162
+ @Suppress("DEPRECATION")
163
+ private fun requestAudioFocusLegacy(focusType: Int): Int {
164
+ return audioManager.requestAudioFocus(
165
+ audioFocusChangeListener,
166
+ AudioManager.STREAM_MUSIC,
167
+ focusType
168
+ )
169
+ }
170
+
171
+ private fun abandonAudioFocus() {
172
+ if (currentMixAudioMode != null) {
173
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
174
+ abandonAudioFocusNew()
175
+ } else {
176
+ abandonAudioFocusLegacy()
177
+ }
178
+ currentMixAudioMode = null
179
+ audioFocusRequest = null
180
+ }
181
+ }
182
+
183
+ @RequiresApi(Build.VERSION_CODES.O)
184
+ private fun abandonAudioFocusNew() {
185
+ audioFocusRequest?.let { request ->
186
+ audioManager.abandonAudioFocusRequest(request)
187
+ }
188
+ }
189
+
190
+ @Suppress("DEPRECATION")
191
+ private fun abandonAudioFocusLegacy() {
192
+ audioManager.abandonAudioFocus(audioFocusChangeListener)
193
+ }
194
+
195
+ private fun pauseActivePlayers() {
196
+ Threading.runOnMainThread {
197
+ players.forEach { player ->
198
+ player.player.let { mediaPlayer ->
199
+ if (mediaPlayer.volume != 0f && mediaPlayer.isPlaying) {
200
+ mediaPlayer.pause()
201
+ }
202
+ }
203
+ }
204
+ }
205
+ }
206
+
207
+ private fun duckActivePlayers() {
208
+ Threading.runOnMainThread {
209
+ players.forEach { player ->
210
+ player.player.let { mediaPlayer ->
211
+ // We need to duck the volume to 50%. After the audio focus is regained,
212
+ // we will restore the volume to the user's volume.
213
+ mediaPlayer.volume = mediaPlayer.volume * 0.5f
214
+ }
215
+ }
216
+ }
217
+ }
218
+
219
+ private fun unDuckActivePlayers() {
220
+ Threading.runOnMainThread {
221
+ // Resume players that were paused due to audio focus loss
222
+ players.forEach { player ->
223
+ player.player.let { mediaPlayer ->
224
+ // Restore full volume if it was ducked
225
+ if (mediaPlayer.volume != 0f && mediaPlayer.volume.toDouble() != player.userVolume) {
226
+ mediaPlayer.volume = player.userVolume.toFloat()
227
+ }
228
+ }
229
+ }
230
+ }
231
+ }
232
+ }
233
+
@@ -0,0 +1,105 @@
1
+ package com.unifiedplayer.core
2
+
3
+ // Base class for all video errors
4
+ abstract class VideoError(
5
+ open val code: String,
6
+ message: String
7
+ ) : Error("{%@$code::$message@%}")
8
+
9
+ // Library related errors
10
+ sealed class LibraryError(code: String, message: String) : VideoError(code, message) {
11
+ object Deallocated : LibraryError(
12
+ "library/deallocated",
13
+ "Object has been deallocated"
14
+ )
15
+
16
+ object ApplicationContextNotFound : LibraryError(
17
+ "library/application-context-not-found",
18
+ "Application context not found"
19
+ )
20
+
21
+ class MethodNotSupported(val methodName: String) : LibraryError(
22
+ "library/method-not-supported",
23
+ "Method $methodName() is not supported on Android"
24
+ )
25
+
26
+ object DRMPluginNotFound : LibraryError(
27
+ "library/drm-plugin-not-found",
28
+ "No DRM plugin have been found, please add one to the project",
29
+ )
30
+ }
31
+
32
+ // Player related errors
33
+ sealed class PlayerError(code: String, message: String) : VideoError(code, message) {
34
+ object NotInitialized : PlayerError(
35
+ "player/not-initialized",
36
+ "Player has not been initialized (Or has been set to null)"
37
+ )
38
+
39
+ object AssetNotInitialized : PlayerError(
40
+ "player/asset-not-initialized",
41
+ "Asset has not been initialized (Or has been set to null)"
42
+ )
43
+
44
+ object InvalidSource : PlayerError(
45
+ "player/invalid-source",
46
+ "Invalid source passed to player"
47
+ )
48
+
49
+ object Cancelled : PlayerError(
50
+ "player/cancelled",
51
+ "Operation was cancelled"
52
+ )
53
+ }
54
+
55
+ // Source related errors
56
+ sealed class SourceError(code: String, message: String) : VideoError(code, message) {
57
+ class InvalidUri(val uri: String) : SourceError(
58
+ "source/invalid-uri",
59
+ "Invalid source file uri: $uri"
60
+ )
61
+
62
+ class MissingReadFilePermission(val uri: String) : SourceError(
63
+ "source/missing-read-file-permission",
64
+ "Missing read file permission for source file at $uri"
65
+ )
66
+
67
+ class FileDoesNotExist(val uri: String) : SourceError(
68
+ "source/file-does-not-exist",
69
+ "File does not exist at URI: $uri"
70
+ )
71
+
72
+ object FailedToInitializeAsset : SourceError(
73
+ "source/failed-to-initialize-asset",
74
+ "Failed to initialize asset"
75
+ )
76
+
77
+ class UnsupportedContentType(val uri: String) : SourceError(
78
+ "source/unsupported-content-type",
79
+ "type of content (${uri}) is not supported"
80
+ )
81
+
82
+ object Cancelled : SourceError(
83
+ "source/cancelled",
84
+ "Operation was cancelled"
85
+ )
86
+ }
87
+
88
+ // View related errors
89
+ sealed class VideoViewError(code: String, message: String) : VideoError(code, message) {
90
+ class ViewNotFound(val viewId: Int) : VideoViewError(
91
+ "view/not-found",
92
+ "View with viewId $viewId not found"
93
+ )
94
+ object ViewIsDeallocated : VideoViewError(
95
+ "view/deallocated",
96
+ "Attempt to access a view, but it has been deallocated (or not initialized)"
97
+ )
98
+ object PictureInPictureNotSupported : VideoViewError(
99
+ "view/picture-in-picture-not-supported",
100
+ "Picture in picture is not supported on this device"
101
+ )
102
+ }
103
+
104
+ // Unknown error
105
+ class UnknownError : VideoError("unknown/unknown", "Unknown error")