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,492 @@
1
+ import * as React from 'react';
2
+ import type { ViewProps, ViewStyle } from 'react-native';
3
+ import { NitroModules } from 'react-native-nitro-modules';
4
+ import type { ListenerSubscription } from '../../spec/nitro/VideoPlayerEventEmitter.nitro';
5
+ import type {
6
+ SurfaceType,
7
+ VideoViewViewManager,
8
+ VideoViewViewManagerFactory,
9
+ } from '../../spec/nitro/VideoViewViewManager.nitro';
10
+ import { type VideoViewEvents } from '../types/Events';
11
+ import type { ResizeMode } from '../types/ResizeMode';
12
+ import {
13
+ tryParseNativeVideoError,
14
+ VideoComponentError,
15
+ VideoError,
16
+ } from '../types/VideoError';
17
+ import type { VideoPlayer } from '../VideoPlayer';
18
+ import { NativeVideoView } from './NativeVideoView';
19
+
20
+ export interface VideoViewProps extends Partial<VideoViewEvents>, ViewProps {
21
+ /**
22
+ * The player to play the video - {@link VideoPlayer}
23
+ */
24
+ player: VideoPlayer;
25
+ /**
26
+ * The style of the video view - {@link ViewStyle}
27
+ */
28
+ style?: ViewStyle;
29
+ /**
30
+ * Whether to show the controls. Defaults to false.
31
+ */
32
+ controls?: boolean;
33
+ /**
34
+ * Whether to enable & show the picture in picture button in native controls. Defaults to false.
35
+ */
36
+ pictureInPicture?: boolean;
37
+ /**
38
+ * Whether to automatically enter picture in picture mode when the video is playing. Defaults to false.
39
+ */
40
+ autoEnterPictureInPicture?: boolean;
41
+ /**
42
+ * How the video should be resized to fit the view. Defaults to 'none'.
43
+ * - 'contain': Scale the video uniformly (maintain aspect ratio) so that it fits entirely within the view
44
+ * - 'cover': Scale the video uniformly (maintain aspect ratio) so that it fills the entire view (may crop)
45
+ * - 'stretch': Scale the video to fill the entire view without maintaining aspect ratio
46
+ * - 'none': Do not resize the video
47
+ */
48
+ resizeMode?: ResizeMode;
49
+ /**
50
+ * Whether to keep the screen awake while the video view is mounted. Defaults to true.
51
+ */
52
+ keepScreenAwake?: boolean;
53
+
54
+ /**
55
+ * The type of underlying native view. Defaults to 'surface'.
56
+ * - 'surface': Uses a SurfaceView on Android. More performant, but cannot be animated or transformed.
57
+ * - 'texture': Uses a TextureView on Android. Less performant, but can be animated and transformed.
58
+ *
59
+ * Only applicable on Android
60
+ *
61
+ * @default 'surface'
62
+ * @platform android
63
+ */
64
+ surfaceType?: SurfaceType;
65
+ /**
66
+ * Whether to automatically start playing the video when loaded. Defaults to true.
67
+ */
68
+ autoplay?: boolean;
69
+ /**
70
+ * Whether the video should be displayed in fullscreen mode.
71
+ * Set to true to enter fullscreen, false to exit fullscreen.
72
+ */
73
+ fullscreen?: boolean;
74
+ /**
75
+ * Whether the video acts as paused.
76
+ * - true: Pause the video
77
+ * - false: Play the video
78
+ */
79
+ paused?: boolean;
80
+ /**
81
+ * The playback speed of the video. Defaults to 1.0.
82
+ */
83
+ speed?: number;
84
+ }
85
+
86
+ export interface VideoViewRef {
87
+ /**
88
+ * Enter fullscreen mode
89
+ */
90
+ enterFullscreen: () => void;
91
+ /**
92
+ * Exit fullscreen mode
93
+ */
94
+ exitFullscreen: () => void;
95
+ /**
96
+ * Enter picture in picture mode
97
+ */
98
+ enterPictureInPicture: () => void;
99
+ /**
100
+ * Exit picture in picture mode
101
+ */
102
+ exitPictureInPicture: () => void;
103
+ /**
104
+ * Check if picture in picture mode is supported
105
+ * @returns true if picture in picture mode is supported, false otherwise
106
+ */
107
+ canEnterPictureInPicture: () => boolean;
108
+ /**
109
+ * Adds a listener for a view event.
110
+ * @param event - The event to add a listener for.
111
+ * @param callback - The callback to call when the event is triggered.
112
+ * @returns A subscription object that can be used to remove the listener.
113
+ */
114
+ addEventListener: <Event extends keyof VideoViewEvents>(
115
+ event: Event,
116
+ callback: VideoViewEvents[Event]
117
+ ) => ListenerSubscription;
118
+ }
119
+
120
+ let nitroIdCounter = 1;
121
+ const VideoViewViewManagerFactory =
122
+ NitroModules.createHybridObject<VideoViewViewManagerFactory>(
123
+ 'VideoViewViewManagerFactory'
124
+ );
125
+
126
+ const wrapNativeViewManagerFunction = <T,>(
127
+ manager: VideoViewViewManager | null,
128
+ func: (manager: VideoViewViewManager) => T
129
+ ) => {
130
+ try {
131
+ if (manager === null) {
132
+ throw new VideoError('view/not-found', 'View manager not found');
133
+ }
134
+
135
+ return func(manager);
136
+ } catch (error) {
137
+ throw tryParseNativeVideoError(error);
138
+ }
139
+ };
140
+
141
+ const updateProps = (manager: VideoViewViewManager, props: VideoViewProps) => {
142
+ manager.player = props.player.__getNativePlayer();
143
+ manager.controls = props.controls ?? false;
144
+ manager.pictureInPicture = props.pictureInPicture ?? false;
145
+ manager.autoEnterPictureInPicture = props.autoEnterPictureInPicture ?? false;
146
+ manager.resizeMode = props.resizeMode ?? 'none';
147
+ manager.keepScreenAwake = props.keepScreenAwake ?? true;
148
+ manager.surfaceType = props.surfaceType ?? 'surface';
149
+ };
150
+
151
+ /**
152
+ * VideoView is a component that allows you to display a video from a {@link VideoPlayer}.
153
+ *
154
+ * @param player - The player to play the video - {@link VideoPlayer}
155
+ * @param controls - Whether to show the controls. Defaults to false.
156
+ * @param style - The style of the video view - {@link ViewStyle}
157
+ * @param pictureInPicture - Whether to show the picture in picture button. Defaults to false.
158
+ * @param autoEnterPictureInPicture - Whether to automatically enter picture in picture mode
159
+ * when the video is playing. Defaults to false.
160
+ * @param resizeMode - How the video should be resized to fit the view. Defaults to 'none'.
161
+ * @param autoplay - Whether to automatically start playing the video when loaded. Defaults to true.
162
+ * @param fullscreen - Whether the video should be displayed in fullscreen mode. Defaults to false.
163
+ */
164
+ const VideoView = React.forwardRef<VideoViewRef, VideoViewProps>(
165
+ (
166
+ {
167
+ player,
168
+ controls = false,
169
+ pictureInPicture = false,
170
+ autoEnterPictureInPicture = false,
171
+ resizeMode = 'none',
172
+ autoplay = true,
173
+ fullscreen = false,
174
+ paused,
175
+ speed,
176
+ onPictureInPictureChange,
177
+ onFullscreenChange,
178
+ willEnterFullscreen,
179
+ willExitFullscreen,
180
+ willEnterPictureInPicture,
181
+ willExitPictureInPicture,
182
+ ...props
183
+ },
184
+ ref
185
+ ) => {
186
+ const nitroId = React.useMemo(() => nitroIdCounter++, []);
187
+ const nitroViewManager = React.useRef<VideoViewViewManager | null>(null);
188
+ const [isManagerReady, setIsManagerReady] = React.useState(false);
189
+
190
+ const setupViewManager = React.useCallback(
191
+ (id: number) => {
192
+ try {
193
+ if (nitroViewManager.current === null) {
194
+ nitroViewManager.current =
195
+ VideoViewViewManagerFactory.createViewManager(id);
196
+
197
+ // Should never happen
198
+ if (!nitroViewManager.current) {
199
+ throw new VideoError(
200
+ 'view/not-found',
201
+ 'Failed to create View Manager'
202
+ );
203
+ }
204
+ }
205
+
206
+ setIsManagerReady(true);
207
+ } catch (error) {
208
+ const parsedError = tryParseNativeVideoError(error);
209
+
210
+ if (
211
+ parsedError instanceof VideoComponentError &&
212
+ parsedError.code === 'view/not-found'
213
+ ) {
214
+ // The view was not found, did view get unmounted?
215
+ if (id === nitroId) {
216
+ // The id from native is same as the one we have,
217
+ // so the view was unmounted before native manager was able to find it
218
+
219
+ // On slow devices, when we quickly mount and unmount the view,
220
+ // the native manager may not have been able to find the view before the view was unmounted
221
+ // This should really never happen, but it's better to be safe than sorry
222
+
223
+ // We don't throw an error here, because it's not an actual error.
224
+ console.warn(
225
+ '[Unified Player] VideoView was unmounted before native manager was able to find it. It can happen when the view is quickly mounted and unmounted.'
226
+ );
227
+
228
+ return;
229
+ }
230
+ }
231
+
232
+ throw parsedError;
233
+ }
234
+ },
235
+ [nitroId]
236
+ );
237
+
238
+ const onNitroIdChange = React.useCallback(
239
+ (event: { nativeEvent: { nitroId: number } }) => {
240
+ setupViewManager(event.nativeEvent.nitroId);
241
+ },
242
+ [setupViewManager]
243
+ );
244
+
245
+ React.useImperativeHandle(
246
+ ref,
247
+ () => ({
248
+ enterFullscreen: () => {
249
+ wrapNativeViewManagerFunction(nitroViewManager.current, (manager) => {
250
+ manager.enterFullscreen();
251
+ });
252
+ },
253
+ exitFullscreen: () => {
254
+ wrapNativeViewManagerFunction(nitroViewManager.current, (manager) => {
255
+ manager.exitFullscreen();
256
+ });
257
+ },
258
+ enterPictureInPicture: () => {
259
+ wrapNativeViewManagerFunction(nitroViewManager.current, (manager) => {
260
+ manager.enterPictureInPicture();
261
+ });
262
+ },
263
+ exitPictureInPicture: () => {
264
+ wrapNativeViewManagerFunction(nitroViewManager.current, (manager) => {
265
+ manager.exitPictureInPicture();
266
+ });
267
+ },
268
+ canEnterPictureInPicture: () => {
269
+ return wrapNativeViewManagerFunction(
270
+ nitroViewManager.current,
271
+ (manager) => {
272
+ return manager.canEnterPictureInPicture();
273
+ }
274
+ );
275
+ },
276
+ addEventListener: <Event extends keyof VideoViewEvents>(
277
+ event: Event,
278
+ callback: VideoViewEvents[Event]
279
+ ): ListenerSubscription => {
280
+ return wrapNativeViewManagerFunction(
281
+ nitroViewManager.current,
282
+ (manager) => {
283
+ switch (event) {
284
+ case 'onPictureInPictureChange':
285
+ return manager.addOnPictureInPictureChangeListener(
286
+ callback as VideoViewEvents['onPictureInPictureChange']
287
+ );
288
+ case 'onFullscreenChange':
289
+ return manager.addOnFullscreenChangeListener(
290
+ callback as VideoViewEvents['onFullscreenChange']
291
+ );
292
+ case 'willEnterFullscreen':
293
+ return manager.addWillEnterFullscreenListener(
294
+ callback as VideoViewEvents['willEnterFullscreen']
295
+ );
296
+ case 'willExitFullscreen':
297
+ return manager.addWillExitFullscreenListener(
298
+ callback as VideoViewEvents['willExitFullscreen']
299
+ );
300
+ case 'willEnterPictureInPicture':
301
+ return manager.addWillEnterPictureInPictureListener(
302
+ callback as VideoViewEvents['willEnterPictureInPicture']
303
+ );
304
+ case 'willExitPictureInPicture':
305
+ return manager.addWillExitPictureInPictureListener(
306
+ callback as VideoViewEvents['willExitPictureInPicture']
307
+ );
308
+ default:
309
+ throw new Error(
310
+ `[Unified Player] Unsupported event: ${event}`
311
+ );
312
+ }
313
+ }
314
+ );
315
+ },
316
+ }),
317
+ []
318
+ );
319
+
320
+ // Cleanup all listeners on unmount
321
+ React.useEffect(() => {
322
+ return () => {
323
+ if (nitroViewManager.current) {
324
+ nitroViewManager.current.clearAllListeners();
325
+ setIsManagerReady(false);
326
+ }
327
+ };
328
+ }, []);
329
+
330
+ // Register prop-based event callbacks as listeners
331
+ React.useEffect(() => {
332
+ if (!nitroViewManager.current) {
333
+ return;
334
+ }
335
+
336
+ const subscriptions: ListenerSubscription[] = [];
337
+
338
+ if (onPictureInPictureChange) {
339
+ subscriptions.push(
340
+ nitroViewManager.current.addOnPictureInPictureChangeListener(
341
+ onPictureInPictureChange
342
+ )
343
+ );
344
+ }
345
+ if (onFullscreenChange) {
346
+ subscriptions.push(
347
+ nitroViewManager.current.addOnFullscreenChangeListener(
348
+ onFullscreenChange
349
+ )
350
+ );
351
+ }
352
+ if (willEnterFullscreen) {
353
+ subscriptions.push(
354
+ nitroViewManager.current.addWillEnterFullscreenListener(
355
+ willEnterFullscreen
356
+ )
357
+ );
358
+ }
359
+ if (willExitFullscreen) {
360
+ subscriptions.push(
361
+ nitroViewManager.current.addWillExitFullscreenListener(
362
+ willExitFullscreen
363
+ )
364
+ );
365
+ }
366
+ if (willEnterPictureInPicture) {
367
+ subscriptions.push(
368
+ nitroViewManager.current.addWillEnterPictureInPictureListener(
369
+ willEnterPictureInPicture
370
+ )
371
+ );
372
+ }
373
+ if (willExitPictureInPicture) {
374
+ subscriptions.push(
375
+ nitroViewManager.current.addWillExitPictureInPictureListener(
376
+ willExitPictureInPicture
377
+ )
378
+ );
379
+ }
380
+
381
+ return () => {
382
+ subscriptions.forEach((sub) => sub.remove());
383
+ };
384
+ }, [
385
+ onPictureInPictureChange,
386
+ onFullscreenChange,
387
+ willEnterFullscreen,
388
+ willExitFullscreen,
389
+ willEnterPictureInPicture,
390
+ willExitPictureInPicture,
391
+ isManagerReady,
392
+ ]);
393
+
394
+ // Update non-event props
395
+ React.useEffect(() => {
396
+ if (!nitroViewManager.current) {
397
+ return;
398
+ }
399
+
400
+ // Update props to native view
401
+ updateProps(nitroViewManager.current, {
402
+ ...props,
403
+ player: player,
404
+ controls: controls,
405
+ pictureInPicture: pictureInPicture,
406
+ autoEnterPictureInPicture: autoEnterPictureInPicture,
407
+ resizeMode: resizeMode,
408
+ });
409
+ }, [
410
+ player,
411
+ controls,
412
+ pictureInPicture,
413
+ autoEnterPictureInPicture,
414
+ resizeMode,
415
+ props,
416
+ isManagerReady,
417
+ ]);
418
+
419
+ // Handle paused prop changes
420
+ React.useEffect(() => {
421
+ if (paused === undefined) return;
422
+
423
+ if (paused) {
424
+ player.pause();
425
+ } else {
426
+ player.play();
427
+ }
428
+ }, [paused, player]);
429
+
430
+ // Handle speed prop changes
431
+ React.useEffect(() => {
432
+ if (speed === undefined) return;
433
+
434
+ player.rate = speed;
435
+ }, [speed, player]);
436
+
437
+ // Handle autoplay when the view manager is ready
438
+ const hasAutoplayedRef = React.useRef(false);
439
+ React.useEffect(() => {
440
+ // If paused is explicitly set to true, we shouldn't autoplay
441
+ if (paused) return;
442
+
443
+ if (isManagerReady && autoplay && !hasAutoplayedRef.current) {
444
+ hasAutoplayedRef.current = true;
445
+ player.play();
446
+ }
447
+ }, [isManagerReady, autoplay, player, paused]);
448
+
449
+ // Handle fullscreen prop changes — only act on real transitions.
450
+ // Initial mount must not call exit/enterFullscreen: the underlying
451
+ // native view may already be deallocated in recycler scenarios
452
+ // (e.g. FlatList/FlashList items mounted/unmounted rapidly).
453
+ const prevFullscreenRef = React.useRef<boolean | undefined>(undefined);
454
+ React.useEffect(() => {
455
+ if (!nitroViewManager.current || !isManagerReady) {
456
+ return;
457
+ }
458
+
459
+ const prev = prevFullscreenRef.current;
460
+ prevFullscreenRef.current = fullscreen;
461
+
462
+ if (prev === undefined || prev === fullscreen) {
463
+ return;
464
+ }
465
+
466
+ try {
467
+ if (fullscreen) {
468
+ nitroViewManager.current.enterFullscreen();
469
+ } else {
470
+ nitroViewManager.current.exitFullscreen();
471
+ }
472
+ } catch (error) {
473
+ console.warn(
474
+ '[UnifiedPlayer] Failed to change fullscreen state:',
475
+ error
476
+ );
477
+ }
478
+ }, [fullscreen, isManagerReady]);
479
+
480
+ return (
481
+ <NativeVideoView
482
+ nitroId={nitroId}
483
+ onNitroIdChange={onNitroIdChange}
484
+ {...props}
485
+ />
486
+ );
487
+ }
488
+ );
489
+
490
+ VideoView.displayName = 'VideoView';
491
+
492
+ export default React.memo(VideoView);
@@ -0,0 +1,37 @@
1
+ export type ConfigProps = {
2
+ /**
3
+ * Whether to use react-native-test-app compatible mode.
4
+ * @default false
5
+ */
6
+ reactNativeTestApp?: boolean;
7
+
8
+ /**
9
+ * Apply configs to be able to use Picture-in-picture on Android.
10
+ * @default false
11
+ */
12
+ enableAndroidPictureInPicture?: boolean;
13
+
14
+ /**
15
+ * Whether to enable background audio feature.
16
+ * @default false
17
+ */
18
+ enableBackgroundAudio?: boolean;
19
+
20
+ /**
21
+ * Android extensions for ExoPlayer - you can choose which extensions to include in order to reduce the size of the app.
22
+ * @default { useExoplayerDash: true, useExoplayerHls: true }
23
+ */
24
+ androidExtensions?: {
25
+ /**
26
+ * Whether to use ExoPlayer's Dash extension.
27
+ * @default true
28
+ */
29
+ useExoplayerDash?: boolean;
30
+
31
+ /**
32
+ * Whether to use ExoPlayer's HLS extension.
33
+ * @default true
34
+ */
35
+ useExoplayerHls?: boolean;
36
+ };
37
+ };
@@ -0,0 +1,23 @@
1
+ export function getPackageInfo(): { name: string; version: string } {
2
+ // src/expo-plugins/getPackageInfo.ts
3
+ try {
4
+ const packageJson = require('../../package.json');
5
+
6
+ return {
7
+ name: packageJson.name,
8
+ version: packageJson.version,
9
+ };
10
+ } catch (_) {}
11
+
12
+ // lib/commonjs/expo-plugins/getPackageInfo.js
13
+ try {
14
+ const packageJson = require('../../../package.json');
15
+
16
+ return {
17
+ name: packageJson.name,
18
+ version: packageJson.version,
19
+ };
20
+ } catch (_) {}
21
+
22
+ throw new Error('Failed to get (react-native-unified-player) package info');
23
+ }
@@ -0,0 +1,46 @@
1
+ import { withGradleProperties, type ConfigPlugin } from '@expo/config-plugins';
2
+ import type { ConfigProps } from './@types';
3
+
4
+ /**
5
+ * Sets the Android extensions for ExoPlayer in `gradle.properties`.
6
+ * You can choose which extensions to include in order to reduce the size of the app.
7
+ */
8
+ export const withAndroidExtensions: ConfigPlugin<
9
+ ConfigProps['androidExtensions']
10
+ > = (c, androidExtensions) => {
11
+ const keys = ['RNVideo_useExoplayerDash', 'RNVideo_useExoplayerHls'];
12
+
13
+ if (!androidExtensions) {
14
+ androidExtensions = {
15
+ useExoplayerDash: true,
16
+ useExoplayerHls: true,
17
+ };
18
+ }
19
+
20
+ return withGradleProperties(c, (config) => {
21
+ config.modResults = config.modResults.filter((item) => {
22
+ if (item.type === 'property' && keys.includes(item.key)) {
23
+ return false;
24
+ }
25
+ return true;
26
+ });
27
+
28
+ for (const key of keys) {
29
+ const valueKey = key.replace(
30
+ 'RNVideo_',
31
+ ''
32
+ ) as keyof typeof androidExtensions;
33
+ const value = androidExtensions
34
+ ? (androidExtensions[valueKey] ?? false)
35
+ : false;
36
+
37
+ config.modResults.push({
38
+ type: 'property',
39
+ key,
40
+ value: value.toString(),
41
+ });
42
+ }
43
+
44
+ return config;
45
+ });
46
+ };
@@ -0,0 +1,43 @@
1
+ import {
2
+ AndroidConfig,
3
+ type ConfigPlugin,
4
+ withAndroidManifest,
5
+ } from '@expo/config-plugins';
6
+
7
+ export const withAndroidNotificationControls: ConfigPlugin = (oldConfig) => {
8
+ return withAndroidManifest(oldConfig, (config) => {
9
+ const mainApplication = AndroidConfig.Manifest.getMainApplication(
10
+ config.modResults
11
+ );
12
+ if (!mainApplication) {
13
+ console.warn(
14
+ 'AndroidManifest.xml is missing an <activity android:name=".MainActivity" /> element - skipping adding Notification Controls related config.'
15
+ );
16
+ return config;
17
+ }
18
+ mainApplication.service?.push({
19
+ '$': {
20
+ 'android:name':
21
+ 'com.twg.video.core.services.playback.VideoPlaybackService',
22
+ 'android:exported': 'false',
23
+ 'android:foregroundServiceType': 'mediaPlayback',
24
+ },
25
+ 'intent-filter': [
26
+ {
27
+ action: [
28
+ {
29
+ $: {
30
+ 'android:name': 'androidx.media3.session.MediaSessionService',
31
+ },
32
+ },
33
+ ],
34
+ },
35
+ ],
36
+ });
37
+ config.android?.permissions?.push(
38
+ 'android.permission.FOREGROUND_SERVICE',
39
+ 'android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK'
40
+ );
41
+ return config;
42
+ });
43
+ };
@@ -0,0 +1,31 @@
1
+ import {
2
+ AndroidConfig,
3
+ withAndroidManifest,
4
+ type ConfigPlugin,
5
+ } from '@expo/config-plugins';
6
+
7
+ export const withAndroidPictureInPicture: ConfigPlugin<boolean> = (
8
+ config,
9
+ enableAndroidPictureInPicture
10
+ ) => {
11
+ return withAndroidManifest(config, (_config) => {
12
+ if (!enableAndroidPictureInPicture) {
13
+ return _config;
14
+ }
15
+
16
+ const mainActivity = AndroidConfig.Manifest.getMainActivity(
17
+ _config.modResults
18
+ );
19
+
20
+ if (!mainActivity) {
21
+ console.warn(
22
+ 'AndroidManifest.xml is missing an <activity android:name=".MainActivity" /> element - skipping adding Picture-In-Picture related config.'
23
+ );
24
+ return _config;
25
+ }
26
+
27
+ mainActivity.$['android:supportsPictureInPicture'] = 'true';
28
+
29
+ return _config;
30
+ });
31
+ };
@@ -0,0 +1,26 @@
1
+ import { withInfoPlist, type ConfigPlugin } from '@expo/config-plugins';
2
+
3
+ /**
4
+ * Sets `UIBackgroundModes` in `Info.plist` to enable background audio on Apple platforms.
5
+ * This is required for audio to continue playing when the app is in the background.
6
+ */
7
+ export const withBackgroundAudio: ConfigPlugin<boolean> = (
8
+ c,
9
+ enableBackgroundAudio
10
+ ) => {
11
+ return withInfoPlist(c, (config) => {
12
+ const modes = config.modResults.UIBackgroundModes || [];
13
+
14
+ if (enableBackgroundAudio) {
15
+ if (!modes.includes('audio')) {
16
+ config.modResults.UIBackgroundModes = [...modes, 'audio'];
17
+ }
18
+ } else {
19
+ config.modResults.UIBackgroundModes = modes.filter(
20
+ (mode: string) => mode !== 'audio'
21
+ );
22
+ }
23
+
24
+ return config;
25
+ });
26
+ };