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,134 @@
1
+ package com.unifiedplayer.core.player
2
+
3
+ import android.content.Context
4
+ import android.net.Uri
5
+ import androidx.annotation.OptIn
6
+ import androidx.media3.common.util.Util
7
+ import androidx.media3.exoplayer.source.MediaSource
8
+ import com.margelo.nitro.unifiedplayer.HybridVideoPlayerSourceSpec
9
+ import androidx.core.net.toUri
10
+ import androidx.media3.common.C
11
+ import androidx.media3.common.MediaItem
12
+ import androidx.media3.common.util.UnstableApi
13
+ import androidx.media3.exoplayer.dash.DashMediaSource
14
+ import androidx.media3.exoplayer.drm.DrmSessionManager
15
+ import androidx.media3.exoplayer.hls.DefaultHlsExtractorFactory
16
+ import androidx.media3.exoplayer.hls.HlsMediaSource
17
+ import androidx.media3.exoplayer.source.DefaultMediaSourceFactory
18
+ import androidx.media3.exoplayer.source.MergingMediaSource
19
+ import androidx.media3.extractor.ts.DefaultTsPayloadReaderFactory
20
+ import com.margelo.nitro.unifiedplayer.HybridVideoPlayerSource
21
+ import com.unifiedplayer.core.LibraryError
22
+ import com.unifiedplayer.core.SourceError
23
+ import com.unifiedplayer.core.plugins.PluginsRegistry
24
+
25
+ @OptIn(UnstableApi::class)
26
+ @Throws(SourceError::class)
27
+ fun buildMediaSource(context: Context, source: HybridVideoPlayerSource, mediaItem: MediaItem): MediaSource {
28
+ val uri = source.uri.toUri()
29
+
30
+ // Explanation:
31
+ // 1. Remove query params from uri to avoid getting false extension
32
+ // 2. Get extension from uri
33
+ val type = Util.inferContentType(uri)
34
+ val dataSourceFactory = PluginsRegistry.shared.overrideMediaDataSourceFactory(
35
+ source,
36
+ buildBaseDataSourceFactory(context, source)
37
+ )
38
+
39
+ if (!source.config.externalSubtitles.isNullOrEmpty()) {
40
+ return buildExternalSubtitlesMediaSource(context, source)
41
+ }
42
+
43
+ val mediaSourceFactory: MediaSource.Factory = when (type) {
44
+ C.CONTENT_TYPE_DASH -> {
45
+ DashMediaSource.Factory(dataSourceFactory)
46
+ }
47
+ C.CONTENT_TYPE_HLS -> {
48
+ // HEVC-friendly HLS extractor:
49
+ // FLAG_ALLOW_NON_IDR_KEYFRAMES — H.265 uses CRA/BLA/IDR_N_LP NAL units instead
50
+ // of H.264 IDR. Without this flag the TS payload reader can drop the first
51
+ // keyframe in HEVC HLS streams, producing audio-only / black-video playback.
52
+ // FLAG_DETECT_ACCESS_UNITS — required when the stream lacks AUD NAL units
53
+ // between samples, also common in HEVC TS HLS.
54
+ // Chunkless preparation is DISABLED: the Spacture proxy serves a media-only
55
+ // playlist (no master with `CODECS="hvc1.*"`), so chunkless prep can't infer
56
+ // the track format and the renderer initialises against the wrong codec —
57
+ // black video, looping rebuffer. Forcing first-segment download lets the TS
58
+ // extractor probe the bitstream and surface HEVC correctly. The one-extra
59
+ // segment fetch on startup is well worth restoring playback.
60
+ HlsMediaSource.Factory(dataSourceFactory)
61
+ .setExtractorFactory(
62
+ DefaultHlsExtractorFactory(
63
+ DefaultTsPayloadReaderFactory.FLAG_ALLOW_NON_IDR_KEYFRAMES or
64
+ DefaultTsPayloadReaderFactory.FLAG_DETECT_ACCESS_UNITS,
65
+ true
66
+ )
67
+ )
68
+ .setAllowChunklessPreparation(false)
69
+ }
70
+ C.CONTENT_TYPE_OTHER -> {
71
+ DefaultMediaSourceFactory(context)
72
+ .setDataSourceFactory(dataSourceFactory)
73
+ }
74
+ else -> {
75
+ throw SourceError.UnsupportedContentType(source.uri)
76
+ }
77
+ }
78
+
79
+ source.config.drm?.let {
80
+ val drmSessionManager = source.drmSessionManager ?: throw LibraryError.DRMPluginNotFound
81
+ mediaSourceFactory.setDrmSessionManagerProvider { drmSessionManager }
82
+ }
83
+
84
+ return PluginsRegistry.shared.overrideMediaSourceFactory(
85
+ source,
86
+ mediaSourceFactory,
87
+ dataSourceFactory
88
+ ).createMediaSource(mediaItem)
89
+ }
90
+
91
+ @OptIn(UnstableApi::class)
92
+ fun buildExternalSubtitlesMediaSource(context: Context, source: HybridVideoPlayerSource): MediaSource {
93
+ val dataSourceFactory = PluginsRegistry.shared.overrideMediaDataSourceFactory(
94
+ source,
95
+ buildBaseDataSourceFactory(context, source)
96
+ )
97
+
98
+ val mediaItemBuilderWithSubtitles = MediaItem.Builder()
99
+ .setUri(source.uri.toUri())
100
+ .setSubtitleConfigurations(getSubtitlesConfiguration(source.config))
101
+
102
+ source.config.metadata?.let { metadata ->
103
+ mediaItemBuilderWithSubtitles.setMediaMetadata(getCustomMetadata(metadata))
104
+ }
105
+
106
+ val mediaItemBuilder = PluginsRegistry.shared.overrideMediaItemBuilder(
107
+ source,
108
+ mediaItemBuilderWithSubtitles
109
+ )
110
+
111
+ val mediaSourceFactory = DefaultMediaSourceFactory(context)
112
+ .setDataSourceFactory(dataSourceFactory)
113
+
114
+ if (source.config.drm != null) {
115
+ if (source.drmManager == null) {
116
+ throw LibraryError.DRMPluginNotFound
117
+ }
118
+
119
+ mediaSourceFactory.setDrmSessionManagerProvider {
120
+ source.drmManager as DrmSessionManager
121
+ }
122
+
123
+ val drmConfiguration = source.drmManager!!.getDRMConfiguration(source.config.drm!!)
124
+ mediaItemBuilder.setDrmConfiguration(drmConfiguration)
125
+ }
126
+
127
+ return PluginsRegistry.shared.overrideMediaSourceFactory(
128
+ source,
129
+ mediaSourceFactory,
130
+ dataSourceFactory
131
+ ).createMediaSource(mediaItemBuilder.build())
132
+ }
133
+
134
+
@@ -0,0 +1,25 @@
1
+ package com.unifiedplayer.core.player
2
+
3
+ import android.media.AudioManager
4
+ import com.margelo.nitro.unifiedplayer.HybridVideoPlayerEventEmitter
5
+
6
+ // TODO: We should make VideoFocusManager that will track focus globally for now lets just do simple listener
7
+ class OnAudioFocusChangedListener : AudioManager.OnAudioFocusChangeListener {
8
+ private var eventEmitter: HybridVideoPlayerEventEmitter? = null
9
+
10
+ override fun onAudioFocusChange(focusChange: Int) {
11
+ when (focusChange) {
12
+ AudioManager.AUDIOFOCUS_GAIN -> eventEmitter?.onAudioFocusChange(true)
13
+ AudioManager.AUDIOFOCUS_LOSS -> eventEmitter?.onAudioFocusChange(false)
14
+ AudioManager.AUDIOFOCUS_LOSS_TRANSIENT -> eventEmitter?.onAudioFocusChange(false)
15
+ }
16
+ }
17
+
18
+ fun setEventEmitter(eventEmitter: HybridVideoPlayerEventEmitter) {
19
+ this.eventEmitter = eventEmitter
20
+ }
21
+
22
+ fun removeEventEmitter() {
23
+ this.eventEmitter = null
24
+ }
25
+ }
@@ -0,0 +1,223 @@
1
+ package com.unifiedplayer.core.plugins
2
+
3
+ import android.util.Log
4
+ import androidx.annotation.OptIn
5
+ import androidx.media3.common.MediaItem
6
+ import androidx.media3.common.util.UnstableApi
7
+ import androidx.media3.datasource.DataSource
8
+ import androidx.media3.exoplayer.source.MediaSource
9
+ import com.margelo.nitro.unifiedplayer.HybridVideoPlayer
10
+ import com.margelo.nitro.unifiedplayer.HybridVideoPlayerSource
11
+ import com.unifiedplayer.BuildConfig
12
+ import com.unifiedplayer.core.LibraryError
13
+ import com.unifiedplayer.core.player.DRMManagerSpec
14
+ import com.unifiedplayer.view.VideoView
15
+ import java.lang.ref.WeakReference
16
+
17
+ // Keep these types for platform compatibility
18
+ // On iOS we cannot just export HybridVideoPlayer so we need to keep this typealias
19
+ typealias NativeVideoPlayer = HybridVideoPlayer
20
+ typealias NativeVideoPlayerSource = HybridVideoPlayerSource
21
+
22
+ class PluginsRegistry {
23
+ // Plugin ID -> ReactNativeVideoPluginSpec
24
+ private val plugins: MutableMap<String, ReactNativeVideoPluginSpec> = mutableMapOf()
25
+
26
+ companion object {
27
+ val shared = PluginsRegistry()
28
+ private const val TAG = "UnifiedPlayerPluginsRegistry"
29
+ }
30
+
31
+ // Public methods
32
+ fun register(plugin: ReactNativeVideoPluginSpec) {
33
+ if(hasPlugin(plugin)) {
34
+ plugins.replace(plugin.id, plugin)
35
+
36
+ if (BuildConfig.DEBUG) {
37
+ Log.d(TAG, "Replaced plugin ${plugin.name} (ID: ${plugin.id})")
38
+ }
39
+
40
+ return
41
+ }
42
+
43
+ plugins.put(plugin.id, plugin)
44
+
45
+ if (BuildConfig.DEBUG) {
46
+ Log.d(TAG, "Registered plugin ${plugin.name} (ID: ${plugin.id})")
47
+ }
48
+ }
49
+
50
+ @Suppress("unused")
51
+ fun unregister(plugin: ReactNativeVideoPluginSpec) {
52
+ if (!hasPlugin(plugin)) {
53
+ if (BuildConfig.DEBUG) {
54
+ Log.d(TAG, "Tried to unregister plugin ${plugin.name} (ID: ${plugin.id}), but it was not registered")
55
+ }
56
+
57
+ return
58
+ }
59
+
60
+ plugins.remove(plugin.id)
61
+
62
+ if (BuildConfig.DEBUG) {
63
+ Log.d(TAG, "Unregistered plugin ${plugin.name} (ID: ${plugin.id})")
64
+ }
65
+ }
66
+
67
+ // Notifications
68
+ @OptIn(UnstableApi::class)
69
+ internal fun notifyPlayerCreated(player: WeakReference<NativeVideoPlayer>) {
70
+ plugins.values.forEach { it.onPlayerCreated(player) }
71
+ }
72
+
73
+ @OptIn(UnstableApi::class)
74
+ internal fun notifyPlayerDestroyed(player: WeakReference<NativeVideoPlayer>) {
75
+ plugins.values.forEach { it.onPlayerDestroyed(player) }
76
+ }
77
+
78
+ @OptIn(UnstableApi::class)
79
+ internal fun notifyVideoViewCreated(view: WeakReference<VideoView>) {
80
+ plugins.values.forEach { it.onVideoViewCreated(view) }
81
+ }
82
+
83
+ @OptIn(UnstableApi::class)
84
+ internal fun notifyVideoViewDestroyed(view: WeakReference<VideoView>) {
85
+ plugins.values.forEach { it.onVideoViewDestroyed(view) }
86
+ }
87
+
88
+ // Internal methods
89
+
90
+ /**
91
+ * Maybe override the source with the plugins.
92
+ *
93
+ * This method is used to override the source with the plugins.
94
+ * It is called when a source is created and is used to override the source with the plugins.
95
+ *
96
+ * It is not guaranteed that the source will be overridden with the plugins.
97
+ * If no plugin overrides the source, the original source is returned.
98
+ *
99
+ * @param source The source instance.
100
+ * @return The maybe overridden source instance.
101
+ */
102
+ internal fun overrideSource(source: NativeVideoPlayerSource): NativeVideoPlayerSource {
103
+ var overriddenSource = source
104
+
105
+ for (plugin in plugins.values) {
106
+ overriddenSource = plugin.overrideSource(overriddenSource)
107
+ }
108
+
109
+ return overriddenSource
110
+ }
111
+
112
+ /**
113
+ * Returns the DRM manager instance from the plugins.
114
+ *
115
+ * @throws LibraryError.DRMPluginNotFound If no DRM manager is found.
116
+ * @return Any
117
+ */
118
+ internal fun getDRMManager(source: NativeVideoPlayerSource): DRMManagerSpec {
119
+ for (plugin in plugins.values) {
120
+ val manager = plugin.getDRMManager(source)
121
+
122
+ if (manager != null) return manager
123
+ }
124
+
125
+ throw LibraryError.DRMPluginNotFound
126
+ }
127
+
128
+ /**
129
+ * Maybe override the media data source factory with the plugins.
130
+ *
131
+ * If no plugin overrides the media data source factory, the original factory is returned.
132
+ *
133
+ * @param source The source instance.
134
+ * @param mediaDataSourceFactory The media data source factory instance.
135
+ * @return The maybe overridden media data source factory instance.
136
+ */
137
+ internal fun overrideMediaDataSourceFactory(
138
+ source: NativeVideoPlayerSource,
139
+ mediaDataSourceFactory: DataSource.Factory
140
+ ): DataSource.Factory {
141
+ for (plugin in plugins.values) {
142
+ val factory = plugin.getMediaDataSourceFactory(source, mediaDataSourceFactory)
143
+
144
+ if (factory != null) return factory
145
+ }
146
+
147
+ return mediaDataSourceFactory
148
+ }
149
+
150
+ /**
151
+ * Maybe override the media source factory with the plugins.
152
+ *
153
+ * If no plugin overrides the media source factory, the original factory is returned.
154
+ *
155
+ * @param source The source instance.
156
+ * @param mediaSourceFactory The media source factory instance.
157
+ * @param mediaDataSourceFactory The media data source factory instance.
158
+ * @return The maybe overridden media source factory instance.
159
+ */
160
+ internal fun overrideMediaSourceFactory(
161
+ source: NativeVideoPlayerSource,
162
+ mediaSourceFactory: MediaSource.Factory,
163
+ mediaDataSourceFactory: DataSource.Factory
164
+ ): MediaSource.Factory {
165
+ for (plugin in plugins.values) {
166
+ val factory = plugin.getMediaSourceFactory(source, mediaSourceFactory, mediaDataSourceFactory)
167
+
168
+ if (factory != null) return factory
169
+ }
170
+
171
+ return mediaSourceFactory
172
+ }
173
+
174
+ /**
175
+ * Maybe override the media item builder with the plugins.
176
+ *
177
+ * If no plugin overrides the media item builder, the original builder is returned.
178
+ *
179
+ * @param source The source instance.
180
+ * @param mediaItemBuilder The media item builder instance.
181
+ * @return The maybe overridden media item builder instance.
182
+ */
183
+ internal fun overrideMediaItemBuilder(
184
+ source: NativeVideoPlayerSource,
185
+ mediaItemBuilder: MediaItem.Builder
186
+ ): MediaItem.Builder {
187
+ for (plugin in plugins.values) {
188
+ val builder = plugin.getMediaItemBuilder(source, mediaItemBuilder)
189
+
190
+ if (builder != null) return builder
191
+ }
192
+
193
+ return mediaItemBuilder
194
+ }
195
+
196
+ /**
197
+ * Maybe disable the cache with the plugins.
198
+ *
199
+ * If no plugin disables the cache, the original cache is not disabled.
200
+ *
201
+ * @param source The source instance.
202
+ * @return The maybe disabled cache.
203
+ */
204
+ internal fun shouldDisableCache(source: NativeVideoPlayerSource): Boolean {
205
+ for (plugin in plugins.values) {
206
+ val shouldDisable = plugin.shouldDisableCache(source)
207
+
208
+ if (shouldDisable) return true
209
+ }
210
+
211
+ return false
212
+ }
213
+
214
+ /**
215
+ * Checks if a plugin is registered.
216
+ *
217
+ * @param plugin The plugin instance.
218
+ * @return True if the plugin is registered, false otherwise.
219
+ */
220
+ internal fun hasPlugin(plugin: ReactNativeVideoPluginSpec): Boolean {
221
+ return plugins.any { it.key == plugin.id }
222
+ }
223
+ }
@@ -0,0 +1,173 @@
1
+ package com.unifiedplayer.core.plugins
2
+
3
+ import androidx.media3.common.MediaItem
4
+ import androidx.media3.common.util.UnstableApi
5
+ import androidx.media3.datasource.DataSource
6
+ import androidx.media3.exoplayer.source.MediaSource
7
+ import com.unifiedplayer.core.player.DRMManagerSpec
8
+ import com.unifiedplayer.view.VideoView
9
+ import java.lang.ref.WeakReference
10
+
11
+ interface ReactNativeVideoPluginSpec {
12
+ /**
13
+ * The ID of the plugin.
14
+ */
15
+ val id: String
16
+
17
+ /**
18
+ * The name of the plugin.
19
+ */
20
+ val name: String
21
+
22
+ /**
23
+ * Called when a player is created.
24
+ *
25
+ * @param player The weak reference to the player instance.
26
+ */
27
+ @UnstableApi
28
+ fun onPlayerCreated(player: WeakReference<NativeVideoPlayer>)
29
+
30
+ /**
31
+ * Called when a player is destroyed.
32
+ *
33
+ * @param player The weak reference to the player instance.
34
+ */
35
+ @UnstableApi
36
+ fun onPlayerDestroyed(player: WeakReference<NativeVideoPlayer>)
37
+
38
+ /**
39
+ * Called when a video view is created.
40
+ *
41
+ * @param view The weak reference to the video view instance.
42
+ */
43
+ @UnstableApi
44
+ fun onVideoViewCreated(view: WeakReference<VideoView>)
45
+
46
+ /**
47
+ * Called when a video view is destroyed.
48
+ *
49
+ * @param view The weak reference to the video view instance.
50
+ */
51
+ @UnstableApi
52
+ fun onVideoViewDestroyed(view: WeakReference<VideoView>)
53
+
54
+ /**
55
+ * Called when a source is being used to create mediaItem or MediaSource.
56
+ * You can use it to modify the source before it is used.
57
+ *
58
+ * @param source The source instance.
59
+ * @return The overridden source instance.
60
+ */
61
+ fun overrideSource(source: NativeVideoPlayerSource): NativeVideoPlayerSource
62
+
63
+ /**
64
+ * Called when a DRM manager is requested.
65
+ *
66
+ * @return The DRM manager instance.
67
+ */
68
+ fun getDRMManager(source: NativeVideoPlayerSource): DRMManagerSpec?
69
+
70
+
71
+ /**
72
+ * Called when a media data source factory is requested.
73
+ *
74
+ * @param source The source instance.
75
+ * @param mediaDataSourceFactory The media data source factory.
76
+ * @return The media data source factory. If null is returned, the default factory will be used.
77
+ */
78
+ fun getMediaDataSourceFactory(
79
+ source: NativeVideoPlayerSource,
80
+ mediaDataSourceFactory: DataSource.Factory
81
+ ): DataSource.Factory?
82
+
83
+ /**
84
+ * Called when a media source factory is requested.
85
+ *
86
+ * @param source The source instance.
87
+ * @param mediaSourceFactory The media source factory.
88
+ * @param mediaDataSourceFactory The media data source factory.
89
+ * @return The media source factory. If null is returned, the default factory will be used.
90
+ */
91
+ fun getMediaSourceFactory(
92
+ source: NativeVideoPlayerSource,
93
+ mediaSourceFactory: MediaSource.Factory,
94
+ mediaDataSourceFactory: DataSource.Factory
95
+ ): MediaSource.Factory?
96
+
97
+ /**
98
+ * Called when a media item builder is requested.
99
+ *
100
+ * @param source The source instance.
101
+ * @param mediaItemBuilder The media item builder.
102
+ * @return The media item builder. If null is returned, the default builder will be used.
103
+ */
104
+ fun getMediaItemBuilder(
105
+ source: NativeVideoPlayerSource,
106
+ mediaItemBuilder: MediaItem.Builder
107
+ ): MediaItem.Builder?
108
+
109
+ /**
110
+ * Called when a cache should be disabled.
111
+ *
112
+ * @param source The source instance.
113
+ * @return True if cache should be disabled, false otherwise.
114
+ */
115
+ fun shouldDisableCache(source: NativeVideoPlayerSource): Boolean
116
+ }
117
+
118
+ @Suppress("Unused")
119
+ /**
120
+ * A helper base implementation of the ReactNativeVideoPluginSpec interface.
121
+ */
122
+ open class ReactNativeVideoPlugin(override val name: String) : ReactNativeVideoPluginSpec {
123
+ override val id = "RNV_Plugin_${name}"
124
+
125
+ init {
126
+ // Automatically register the plugin when it is created
127
+ PluginsRegistry.shared.register(this)
128
+ }
129
+
130
+ @UnstableApi
131
+ override fun onPlayerCreated(player: WeakReference<NativeVideoPlayer>) { /* NOOP */}
132
+
133
+ @UnstableApi
134
+ override fun onPlayerDestroyed(player: WeakReference<NativeVideoPlayer>) { /* NOOP */}
135
+
136
+ @UnstableApi
137
+ override fun onVideoViewCreated(view: WeakReference<VideoView>) { /* NOOP */}
138
+
139
+ @UnstableApi
140
+ override fun onVideoViewDestroyed(view: WeakReference<VideoView>) { /* NOOP */}
141
+
142
+ override fun overrideSource(source: NativeVideoPlayerSource): NativeVideoPlayerSource {
143
+ return source
144
+ }
145
+
146
+ override fun getDRMManager(source: NativeVideoPlayerSource): DRMManagerSpec? { return null }
147
+
148
+ override fun getMediaDataSourceFactory(
149
+ source: NativeVideoPlayerSource,
150
+ mediaDataSourceFactory: DataSource.Factory
151
+ ): DataSource.Factory? {
152
+ return null
153
+ }
154
+
155
+ override fun getMediaSourceFactory(
156
+ source: NativeVideoPlayerSource,
157
+ mediaSourceFactory: MediaSource.Factory,
158
+ mediaDataSourceFactory: DataSource.Factory
159
+ ): MediaSource.Factory? {
160
+ return null
161
+ }
162
+
163
+ override fun getMediaItemBuilder(
164
+ source: NativeVideoPlayerSource,
165
+ mediaItemBuilder: MediaItem.Builder
166
+ ): MediaItem.Builder? {
167
+ return null
168
+ }
169
+
170
+ override fun shouldDisableCache(source: NativeVideoPlayerSource): Boolean {
171
+ return false
172
+ }
173
+ }
@@ -0,0 +1,38 @@
1
+ package com.unifiedplayer.core.recivers
2
+
3
+ import android.content.BroadcastReceiver
4
+ import android.content.Context
5
+ import android.content.Intent
6
+ import android.content.IntentFilter
7
+ import android.media.AudioManager
8
+ import androidx.core.content.ContextCompat
9
+ import com.margelo.nitro.NitroModules
10
+ import com.margelo.nitro.unifiedplayer.HybridVideoPlayerEventEmitter
11
+ import com.unifiedplayer.core.LibraryError
12
+
13
+ class AudioBecomingNoisyReceiver() : BroadcastReceiver() {
14
+ private var eventEmitter: HybridVideoPlayerEventEmitter? = null
15
+
16
+ override fun onReceive(context: Context?, intent: Intent?) {
17
+ if (intent?.action == AudioManager.ACTION_AUDIO_BECOMING_NOISY) {
18
+ eventEmitter?.onAudioBecomingNoisy()
19
+ }
20
+ }
21
+
22
+ fun setEventEmitter(eventEmitter: HybridVideoPlayerEventEmitter) {
23
+ val context = NitroModules.applicationContext ?: throw LibraryError.ApplicationContextNotFound
24
+
25
+ this.eventEmitter = eventEmitter
26
+ val intentFilter = IntentFilter(AudioManager.ACTION_AUDIO_BECOMING_NOISY)
27
+ ContextCompat.registerReceiver(
28
+ context.applicationContext,
29
+ this,
30
+ intentFilter,
31
+ ContextCompat.RECEIVER_NOT_EXPORTED
32
+ )
33
+ }
34
+
35
+ fun removeEventEmitter() {
36
+ this.eventEmitter = null
37
+ }
38
+ }