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.
- package/LICENSE +20 -0
- package/README.md +474 -0
- package/UnifiedPlayer.podspec +51 -0
- package/android/CMakeLists.txt +29 -0
- package/android/build.gradle +249 -0
- package/android/fix-prefab.gradle +51 -0
- package/android/gradle.properties +15 -0
- package/android/src/main/AndroidManifest.xml +10 -0
- package/android/src/main/AndroidManifestNew.xml +9 -0
- package/android/src/main/cpp/cpp-adapter.cpp +9 -0
- package/android/src/main/java/com/unifiedplayer/core/AudioFocusManager.kt +233 -0
- package/android/src/main/java/com/unifiedplayer/core/VideoError.kt +105 -0
- package/android/src/main/java/com/unifiedplayer/core/VideoManager.kt +292 -0
- package/android/src/main/java/com/unifiedplayer/core/extensions/ResizeMode+AspectRatioFrameLayout.kt +20 -0
- package/android/src/main/java/com/unifiedplayer/core/extensions/SubtitleType+toString.kt +14 -0
- package/android/src/main/java/com/unifiedplayer/core/extensions/VideoPlaybackService+ServiceManagment.kt +59 -0
- package/android/src/main/java/com/unifiedplayer/core/fragments/FullscreenVideoFragment.kt +346 -0
- package/android/src/main/java/com/unifiedplayer/core/fragments/PictureInPictureHelperFragment.kt +85 -0
- package/android/src/main/java/com/unifiedplayer/core/player/DRMManagerSpec.kt +23 -0
- package/android/src/main/java/com/unifiedplayer/core/player/DataSourceFactoryUtils.kt +93 -0
- package/android/src/main/java/com/unifiedplayer/core/player/MediaItemUtils.kt +141 -0
- package/android/src/main/java/com/unifiedplayer/core/player/MediaSourceUtils.kt +134 -0
- package/android/src/main/java/com/unifiedplayer/core/player/OnAudioFocusChangedListener.kt +25 -0
- package/android/src/main/java/com/unifiedplayer/core/plugins/PluginsRegistry.kt +223 -0
- package/android/src/main/java/com/unifiedplayer/core/plugins/ReactNativeVideoPlugin.kt +173 -0
- package/android/src/main/java/com/unifiedplayer/core/recivers/AudioBecomingNoisyReceiver.kt +38 -0
- package/android/src/main/java/com/unifiedplayer/core/services/playback/CustomMediaNotificationProvider.kt +151 -0
- package/android/src/main/java/com/unifiedplayer/core/services/playback/VideoPlaybackCallback.kt +96 -0
- package/android/src/main/java/com/unifiedplayer/core/services/playback/VideoPlaybackService.kt +219 -0
- package/android/src/main/java/com/unifiedplayer/core/services/playback/VideoPlaybackServiceConnection.kt +59 -0
- package/android/src/main/java/com/unifiedplayer/core/utils/PictureInPictureUtils.kt +153 -0
- package/android/src/main/java/com/unifiedplayer/core/utils/SmallVideoPlayerOptimizer.kt +157 -0
- package/android/src/main/java/com/unifiedplayer/core/utils/SourceLoader.kt +48 -0
- package/android/src/main/java/com/unifiedplayer/core/utils/TextTrackUtils.kt +175 -0
- package/android/src/main/java/com/unifiedplayer/core/utils/Threading.kt +75 -0
- package/android/src/main/java/com/unifiedplayer/core/utils/VideoFileHelper.kt +51 -0
- package/android/src/main/java/com/unifiedplayer/core/utils/VideoInformationUtils.kt +67 -0
- package/android/src/main/java/com/unifiedplayer/core/utils/VideoOrientationUtils.kt +30 -0
- package/android/src/main/java/com/unifiedplayer/hybrids/videoplayer/HybridVideoPlayer.kt +732 -0
- package/android/src/main/java/com/unifiedplayer/hybrids/videoplayer/HybridVideoPlayerFactory.kt +16 -0
- package/android/src/main/java/com/unifiedplayer/hybrids/videoplayereventemitter/HybridVideoPlayerEventEmitter.kt +180 -0
- package/android/src/main/java/com/unifiedplayer/hybrids/videoplayersource/HybridVideoPlayerSource.kt +67 -0
- package/android/src/main/java/com/unifiedplayer/hybrids/videoplayersource/HybridVideoPlayerSourceFactory.kt +58 -0
- package/android/src/main/java/com/unifiedplayer/hybrids/videoviewviewmanager/HybridVideoViewViewManager.kt +187 -0
- package/android/src/main/java/com/unifiedplayer/hybrids/videoviewviewmanager/HybridVideoViewViewManagerFactory.kt +13 -0
- package/android/src/main/java/com/unifiedplayer/react/VideoPackage.kt +25 -0
- package/android/src/main/java/com/unifiedplayer/react/VideoViewViewManager.kt +78 -0
- package/android/src/main/java/com/unifiedplayer/view/VideoView.kt +565 -0
- package/android/src/main/res/layout/custom_player_control_view.xml +82 -0
- package/android/src/main/res/layout/player_view_surface.xml +13 -0
- package/android/src/main/res/layout/player_view_texture.xml +13 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNCVideoViewManagerDelegate.java +32 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNCVideoViewManagerInterface.java +16 -0
- package/android/src/stubs/dash/androidx/media3/exoplayer/dash/DashMediaSource.kt +35 -0
- package/android/src/stubs/dash/androidx/media3/exoplayer/dash/DashUtil.kt +11 -0
- package/android/src/stubs/dash/androidx/media3/exoplayer/dash/manifest/AdaptationSet.kt +9 -0
- package/android/src/stubs/dash/androidx/media3/exoplayer/dash/manifest/DashManifest.kt +10 -0
- package/android/src/stubs/dash/androidx/media3/exoplayer/dash/manifest/Period.kt +7 -0
- package/android/src/stubs/dash/androidx/media3/exoplayer/dash/manifest/Representation.kt +8 -0
- package/android/src/stubs/hls/androidx/media3/exoplayer/hls/HlsMediaSource.kt +33 -0
- package/ios/RNCVideoViewManager.mm +39 -0
- package/ios/Video-Bridging-Header.h +2 -0
- package/ios/core/HLSAuthProxy.swift +428 -0
- package/ios/core/VideoError.swift +164 -0
- package/ios/core/VideoManager.swift +219 -0
- package/ios/hybrids/VideoPlayer/HybridVideoPlayer.swift +697 -0
- package/ios/hybrids/VideoPlayer/HybridVideoPlayerFactory.swift +15 -0
- package/ios/hybrids/VideoPlayer/VLCPlaybackDelegates.swift +58 -0
- package/ios/hybrids/VideoPlayerEmitter/HybridVideoPlayerEventEmitter.swift +203 -0
- package/ios/hybrids/VideoPlayerSource/HybridVideoPlayerSource.swift +55 -0
- package/ios/hybrids/VideoPlayerSource/HybridVideoPlayerSourceFactory.swift +29 -0
- package/ios/hybrids/VideoViewViewManager/HybridVideoViewViewManager.swift +266 -0
- package/ios/hybrids/VideoViewViewManager/HybridVideoViewViewManagerFactory.swift +14 -0
- package/ios/view/VideoComponentView.swift +196 -0
- package/ios/view/VideoComponentViewObserver.swift +48 -0
- package/lib/module/core/VideoPlayer.js +287 -0
- package/lib/module/core/VideoPlayer.js.map +1 -0
- package/lib/module/core/VideoPlayerEvents.js +84 -0
- package/lib/module/core/VideoPlayerEvents.js.map +1 -0
- package/lib/module/core/hooks/useEvent.js +19 -0
- package/lib/module/core/hooks/useEvent.js.map +1 -0
- package/lib/module/core/hooks/useManagedInstance.js +75 -0
- package/lib/module/core/hooks/useManagedInstance.js.map +1 -0
- package/lib/module/core/hooks/useVideoPlayer.js +57 -0
- package/lib/module/core/hooks/useVideoPlayer.js.map +1 -0
- package/lib/module/core/types/BufferConfig.js +2 -0
- package/lib/module/core/types/BufferConfig.js.map +1 -0
- package/lib/module/core/types/DrmParams.js +2 -0
- package/lib/module/core/types/DrmParams.js.map +1 -0
- package/lib/module/core/types/Events.js +10 -0
- package/lib/module/core/types/Events.js.map +1 -0
- package/lib/module/core/types/IgnoreSilentSwitchMode.js +2 -0
- package/lib/module/core/types/IgnoreSilentSwitchMode.js.map +1 -0
- package/lib/module/core/types/MixAudioMode.js +2 -0
- package/lib/module/core/types/MixAudioMode.js.map +1 -0
- package/lib/module/core/types/ResizeMode.js +2 -0
- package/lib/module/core/types/ResizeMode.js.map +1 -0
- package/lib/module/core/types/TextTrack.js +2 -0
- package/lib/module/core/types/TextTrack.js.map +1 -0
- package/lib/module/core/types/Utils.js +2 -0
- package/lib/module/core/types/Utils.js.map +1 -0
- package/lib/module/core/types/VideoConfig.js +4 -0
- package/lib/module/core/types/VideoConfig.js.map +1 -0
- package/lib/module/core/types/VideoError.js +100 -0
- package/lib/module/core/types/VideoError.js.map +1 -0
- package/lib/module/core/types/VideoInformation.js +4 -0
- package/lib/module/core/types/VideoInformation.js.map +1 -0
- package/lib/module/core/types/VideoOrientation.js +2 -0
- package/lib/module/core/types/VideoOrientation.js.map +1 -0
- package/lib/module/core/types/VideoPlayerBase.js +4 -0
- package/lib/module/core/types/VideoPlayerBase.js.map +1 -0
- package/lib/module/core/types/VideoPlayerSourceBase.js +4 -0
- package/lib/module/core/types/VideoPlayerSourceBase.js.map +1 -0
- package/lib/module/core/types/VideoPlayerStatus.js +2 -0
- package/lib/module/core/types/VideoPlayerStatus.js.map +1 -0
- package/lib/module/core/utils/playerFactory.js +25 -0
- package/lib/module/core/utils/playerFactory.js.map +1 -0
- package/lib/module/core/utils/sourceFactory.js +138 -0
- package/lib/module/core/utils/sourceFactory.js.map +1 -0
- package/lib/module/core/video-view/NativeVideoView.tsx +18 -0
- package/lib/module/core/video-view/VideoView.js +261 -0
- package/lib/module/core/video-view/VideoView.js.map +1 -0
- package/lib/module/expo-plugins/@types.js +2 -0
- package/lib/module/expo-plugins/@types.js.map +1 -0
- package/lib/module/expo-plugins/getPackageInfo.js +23 -0
- package/lib/module/expo-plugins/getPackageInfo.js.map +1 -0
- package/lib/module/expo-plugins/withAndroidExtensions.js +35 -0
- package/lib/module/expo-plugins/withAndroidExtensions.js.map +1 -0
- package/lib/module/expo-plugins/withAndroidNotificationControls.js +29 -0
- package/lib/module/expo-plugins/withAndroidNotificationControls.js.map +1 -0
- package/lib/module/expo-plugins/withAndroidPictureInPicture.js +18 -0
- package/lib/module/expo-plugins/withAndroidPictureInPicture.js.map +1 -0
- package/lib/module/expo-plugins/withBackgroundAudio.js +22 -0
- package/lib/module/expo-plugins/withBackgroundAudio.js.map +1 -0
- package/lib/module/expo-plugins/withReactNativeVideo.js +27 -0
- package/lib/module/expo-plugins/withReactNativeVideo.js.map +1 -0
- package/lib/module/expo-plugins/writeToPodfile.js +53 -0
- package/lib/module/expo-plugins/writeToPodfile.js.map +1 -0
- package/lib/module/index.js +8 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/spec/fabric/VideoViewNativeComponent.ts +17 -0
- package/lib/module/spec/nitro/VideoPlayer.nitro.js +4 -0
- package/lib/module/spec/nitro/VideoPlayer.nitro.js.map +1 -0
- package/lib/module/spec/nitro/VideoPlayerEventEmitter.nitro.js +4 -0
- package/lib/module/spec/nitro/VideoPlayerEventEmitter.nitro.js.map +1 -0
- package/lib/module/spec/nitro/VideoPlayerSource.nitro.js +4 -0
- package/lib/module/spec/nitro/VideoPlayerSource.nitro.js.map +1 -0
- package/lib/module/spec/nitro/VideoViewViewManager.nitro.js +4 -0
- package/lib/module/spec/nitro/VideoViewViewManager.nitro.js.map +1 -0
- package/lib/typescript/drm-plugin/src/PluginManager.nitro.d.ts +10 -0
- package/lib/typescript/drm-plugin/src/PluginManager.nitro.d.ts.map +1 -0
- package/lib/typescript/drm-plugin/src/index.d.ts +4 -0
- package/lib/typescript/drm-plugin/src/index.d.ts.map +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/core/VideoPlayer.d.ts +88 -0
- package/lib/typescript/src/core/VideoPlayer.d.ts.map +1 -0
- package/lib/typescript/src/core/VideoPlayerEvents.d.ts +22 -0
- package/lib/typescript/src/core/VideoPlayerEvents.d.ts.map +1 -0
- package/lib/typescript/src/core/hooks/useEvent.d.ts +11 -0
- package/lib/typescript/src/core/hooks/useEvent.d.ts.map +1 -0
- package/lib/typescript/src/core/hooks/useManagedInstance.d.ts +19 -0
- package/lib/typescript/src/core/hooks/useManagedInstance.d.ts.map +1 -0
- package/lib/typescript/src/core/hooks/useVideoPlayer.d.ts +16 -0
- package/lib/typescript/src/core/hooks/useVideoPlayer.d.ts.map +1 -0
- package/lib/typescript/src/core/types/BufferConfig.d.ts +97 -0
- package/lib/typescript/src/core/types/BufferConfig.d.ts.map +1 -0
- package/lib/typescript/src/core/types/DrmParams.d.ts +64 -0
- package/lib/typescript/src/core/types/DrmParams.d.ts.map +1 -0
- package/lib/typescript/src/core/types/Events.d.ts +224 -0
- package/lib/typescript/src/core/types/Events.d.ts.map +1 -0
- package/lib/typescript/src/core/types/IgnoreSilentSwitchMode.d.ts +2 -0
- package/lib/typescript/src/core/types/IgnoreSilentSwitchMode.d.ts.map +1 -0
- package/lib/typescript/src/core/types/MixAudioMode.d.ts +2 -0
- package/lib/typescript/src/core/types/MixAudioMode.d.ts.map +1 -0
- package/lib/typescript/src/core/types/ResizeMode.d.ts +10 -0
- package/lib/typescript/src/core/types/ResizeMode.d.ts.map +1 -0
- package/lib/typescript/src/core/types/TextTrack.d.ts +20 -0
- package/lib/typescript/src/core/types/TextTrack.d.ts.map +1 -0
- package/lib/typescript/src/core/types/Utils.d.ts +2 -0
- package/lib/typescript/src/core/types/Utils.d.ts.map +1 -0
- package/lib/typescript/src/core/types/VideoConfig.d.ts +138 -0
- package/lib/typescript/src/core/types/VideoConfig.d.ts.map +1 -0
- package/lib/typescript/src/core/types/VideoError.d.ts +31 -0
- package/lib/typescript/src/core/types/VideoError.d.ts.map +1 -0
- package/lib/typescript/src/core/types/VideoInformation.d.ts +38 -0
- package/lib/typescript/src/core/types/VideoInformation.d.ts.map +1 -0
- package/lib/typescript/src/core/types/VideoOrientation.d.ts +2 -0
- package/lib/typescript/src/core/types/VideoOrientation.d.ts.map +1 -0
- package/lib/typescript/src/core/types/VideoPlayerBase.d.ts +155 -0
- package/lib/typescript/src/core/types/VideoPlayerBase.d.ts.map +1 -0
- package/lib/typescript/src/core/types/VideoPlayerSourceBase.d.ts +17 -0
- package/lib/typescript/src/core/types/VideoPlayerSourceBase.d.ts.map +1 -0
- package/lib/typescript/src/core/types/VideoPlayerStatus.d.ts +9 -0
- package/lib/typescript/src/core/types/VideoPlayerStatus.d.ts.map +1 -0
- package/lib/typescript/src/core/utils/playerFactory.d.ts +12 -0
- package/lib/typescript/src/core/utils/playerFactory.d.ts.map +1 -0
- package/lib/typescript/src/core/utils/sourceFactory.d.ts +29 -0
- package/lib/typescript/src/core/utils/sourceFactory.d.ts.map +1 -0
- package/lib/typescript/src/core/video-view/NativeVideoView.d.ts +2 -0
- package/lib/typescript/src/core/video-view/NativeVideoView.d.ts.map +1 -0
- package/lib/typescript/src/core/video-view/VideoView.d.ts +104 -0
- package/lib/typescript/src/core/video-view/VideoView.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +13 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/spec/fabric/VideoViewNativeComponent.d.ts +13 -0
- package/lib/typescript/src/spec/fabric/VideoViewNativeComponent.d.ts.map +1 -0
- package/lib/typescript/src/spec/nitro/VideoPlayer.nitro.d.ts +55 -0
- package/lib/typescript/src/spec/nitro/VideoPlayer.nitro.d.ts.map +1 -0
- package/lib/typescript/src/spec/nitro/VideoPlayerEventEmitter.nitro.d.ts +150 -0
- package/lib/typescript/src/spec/nitro/VideoPlayerEventEmitter.nitro.d.ts.map +1 -0
- package/lib/typescript/src/spec/nitro/VideoPlayerSource.nitro.d.ts +21 -0
- package/lib/typescript/src/spec/nitro/VideoPlayerSource.nitro.d.ts.map +1 -0
- package/lib/typescript/src/spec/nitro/VideoViewViewManager.nitro.d.ts +75 -0
- package/lib/typescript/src/spec/nitro/VideoViewViewManager.nitro.d.ts.map +1 -0
- package/nitro.json +47 -0
- package/nitrogen/generated/android/UnifiedPlayer+autolinking.cmake +95 -0
- package/nitrogen/generated/android/UnifiedPlayer+autolinking.gradle +27 -0
- package/nitrogen/generated/android/UnifiedPlayerOnLoad.cpp +122 -0
- package/nitrogen/generated/android/UnifiedPlayerOnLoad.hpp +34 -0
- package/nitrogen/generated/android/c++/JBandwidthData.hpp +65 -0
- package/nitrogen/generated/android/c++/JBufferConfig.hpp +101 -0
- package/nitrogen/generated/android/c++/JCustomVideoMetadata.hpp +74 -0
- package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_std__string_____OnGetLicensePayload.hpp +126 -0
- package/nitrogen/generated/android/c++/JFunc_void.hpp +75 -0
- package/nitrogen/generated/android/c++/JFunc_void_BandwidthData.hpp +78 -0
- package/nitrogen/generated/android/c++/JFunc_void_TimedMetadata.hpp +81 -0
- package/nitrogen/generated/android/c++/JFunc_void_VideoPlayerStatus.hpp +77 -0
- package/nitrogen/generated/android/c++/JFunc_void_bool.hpp +75 -0
- package/nitrogen/generated/android/c++/JFunc_void_double.hpp +75 -0
- package/nitrogen/generated/android/c++/JFunc_void_onLoadData.hpp +79 -0
- package/nitrogen/generated/android/c++/JFunc_void_onLoadStartData.hpp +82 -0
- package/nitrogen/generated/android/c++/JFunc_void_onPlaybackStateChangeData.hpp +77 -0
- package/nitrogen/generated/android/c++/JFunc_void_onProgressData.hpp +77 -0
- package/nitrogen/generated/android/c++/JFunc_void_onVolumeChangeData.hpp +77 -0
- package/nitrogen/generated/android/c++/JFunc_void_std__optional_std__variant_nitro__NullType__TextTrack__.hpp +83 -0
- package/nitrogen/generated/android/c++/JFunc_void_std__vector_std__string_.hpp +95 -0
- package/nitrogen/generated/android/c++/JHybridVideoPlayerEventEmitterSpec.cpp +224 -0
- package/nitrogen/generated/android/c++/JHybridVideoPlayerEventEmitterSpec.hpp +82 -0
- package/nitrogen/generated/android/c++/JHybridVideoPlayerFactorySpec.cpp +60 -0
- package/nitrogen/generated/android/c++/JHybridVideoPlayerFactorySpec.hpp +63 -0
- package/nitrogen/generated/android/c++/JHybridVideoPlayerSourceFactorySpec.cpp +106 -0
- package/nitrogen/generated/android/c++/JHybridVideoPlayerSourceFactorySpec.hpp +64 -0
- package/nitrogen/generated/android/c++/JHybridVideoPlayerSourceSpec.cpp +124 -0
- package/nitrogen/generated/android/c++/JHybridVideoPlayerSourceSpec.hpp +64 -0
- package/nitrogen/generated/android/c++/JHybridVideoPlayerSpec.cpp +300 -0
- package/nitrogen/generated/android/c++/JHybridVideoPlayerSpec.hpp +98 -0
- package/nitrogen/generated/android/c++/JHybridVideoViewViewManagerFactorySpec.cpp +56 -0
- package/nitrogen/generated/android/c++/JHybridVideoViewViewManagerFactorySpec.hpp +63 -0
- package/nitrogen/generated/android/c++/JHybridVideoViewViewManagerSpec.cpp +185 -0
- package/nitrogen/generated/android/c++/JHybridVideoViewViewManagerSpec.hpp +87 -0
- package/nitrogen/generated/android/c++/JIgnoreSilentSwitchMode.hpp +61 -0
- package/nitrogen/generated/android/c++/JListenerSubscription.hpp +67 -0
- package/nitrogen/generated/android/c++/JLivePlaybackParams.hpp +73 -0
- package/nitrogen/generated/android/c++/JMixAudioMode.hpp +64 -0
- package/nitrogen/generated/android/c++/JNativeDrmParams.hpp +111 -0
- package/nitrogen/generated/android/c++/JNativeExternalSubtitle.hpp +71 -0
- package/nitrogen/generated/android/c++/JNativeVideoConfig.hpp +136 -0
- package/nitrogen/generated/android/c++/JOnGetLicensePayload.hpp +69 -0
- package/nitrogen/generated/android/c++/JResizeMode.hpp +64 -0
- package/nitrogen/generated/android/c++/JResolution.hpp +61 -0
- package/nitrogen/generated/android/c++/JSourceType.hpp +58 -0
- package/nitrogen/generated/android/c++/JSubtitleType.hpp +67 -0
- package/nitrogen/generated/android/c++/JSurfaceType.hpp +58 -0
- package/nitrogen/generated/android/c++/JTextTrack.hpp +70 -0
- package/nitrogen/generated/android/c++/JTimedMetadata.hpp +78 -0
- package/nitrogen/generated/android/c++/JTimedMetadataObject.hpp +61 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_HybridVideoPlayerSourceSpec.cpp +26 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_HybridVideoPlayerSourceSpec.hpp +72 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_TextTrack.cpp +26 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_TextTrack.hpp +73 -0
- package/nitrogen/generated/android/c++/JVideoInformation.hpp +86 -0
- package/nitrogen/generated/android/c++/JVideoOrientation.hpp +73 -0
- package/nitrogen/generated/android/c++/JVideoPlayerStatus.hpp +64 -0
- package/nitrogen/generated/android/c++/JonLoadData.hpp +74 -0
- package/nitrogen/generated/android/c++/JonLoadStartData.hpp +65 -0
- package/nitrogen/generated/android/c++/JonPlaybackStateChangeData.hpp +61 -0
- package/nitrogen/generated/android/c++/JonProgressData.hpp +65 -0
- package/nitrogen/generated/android/c++/JonVolumeChangeData.hpp +61 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/BandwidthData.kt +61 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/BufferConfig.kt +101 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/CustomVideoMetadata.kt +71 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__string_____OnGetLicensePayload.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/Func_void.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/Func_void_BandwidthData.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/Func_void_TimedMetadata.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/Func_void_VideoPlayerStatus.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/Func_void_bool.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/Func_void_double.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/Func_void_onLoadData.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/Func_void_onLoadStartData.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/Func_void_onPlaybackStateChangeData.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/Func_void_onProgressData.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/Func_void_onVolumeChangeData.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/Func_void_std__optional_std__variant_nitro__NullType__TextTrack__.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/Func_void_std__vector_std__string_.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/HybridVideoPlayerEventEmitterSpec.kt +226 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/HybridVideoPlayerFactorySpec.kt +54 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/HybridVideoPlayerSourceFactorySpec.kt +58 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/HybridVideoPlayerSourceSpec.kt +61 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/HybridVideoPlayerSpec.kt +178 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/HybridVideoViewViewManagerFactorySpec.kt +54 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/HybridVideoViewViewManagerSpec.kt +168 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/IgnoreSilentSwitchMode.kt +24 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/ListenerSubscription.kt +55 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/LivePlaybackParams.kt +71 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/MixAudioMode.kt +25 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/NativeDrmParams.kt +85 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/NativeExternalSubtitle.kt +66 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/NativeVideoConfig.kt +81 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/OnGetLicensePayload.kt +66 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/ResizeMode.kt +25 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/Resolution.kt +56 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/SourceType.kt +23 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/SubtitleType.kt +26 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/SurfaceType.kt +23 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/TextTrack.kt +66 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/TimedMetadata.kt +51 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/TimedMetadataObject.kt +56 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/UnifiedPlayerOnLoad.kt +35 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/Variant_NullType_HybridVideoPlayerSourceSpec.kt +62 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/Variant_NullType_TextTrack.kt +62 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/VideoInformation.kt +86 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/VideoOrientation.kt +28 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/VideoPlayerStatus.kt +25 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/onLoadData.kt +71 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/onLoadStartData.kt +56 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/onPlaybackStateChangeData.kt +56 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/onProgressData.kt +61 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/unifiedplayer/onVolumeChangeData.kt +56 -0
- package/nitrogen/generated/ios/UnifiedPlayer+autolinking.rb +62 -0
- package/nitrogen/generated/ios/UnifiedPlayer-Swift-Cxx-Bridge.cpp +280 -0
- package/nitrogen/generated/ios/UnifiedPlayer-Swift-Cxx-Bridge.hpp +1106 -0
- package/nitrogen/generated/ios/UnifiedPlayer-Swift-Cxx-Umbrella.hpp +162 -0
- package/nitrogen/generated/ios/UnifiedPlayerAutolinking.mm +49 -0
- package/nitrogen/generated/ios/UnifiedPlayerAutolinking.swift +50 -0
- package/nitrogen/generated/ios/c++/HybridVideoPlayerEventEmitterSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridVideoPlayerEventEmitterSpecSwift.hpp +279 -0
- package/nitrogen/generated/ios/c++/HybridVideoPlayerFactorySpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridVideoPlayerFactorySpecSwift.hpp +87 -0
- package/nitrogen/generated/ios/c++/HybridVideoPlayerSourceFactorySpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridVideoPlayerSourceFactorySpecSwift.hpp +125 -0
- package/nitrogen/generated/ios/c++/HybridVideoPlayerSourceSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridVideoPlayerSourceSpecSwift.hpp +125 -0
- package/nitrogen/generated/ios/c++/HybridVideoPlayerSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridVideoPlayerSpecSwift.hpp +256 -0
- package/nitrogen/generated/ios/c++/HybridVideoViewViewManagerFactorySpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridVideoViewViewManagerFactorySpecSwift.hpp +84 -0
- package/nitrogen/generated/ios/c++/HybridVideoViewViewManagerSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridVideoViewViewManagerSpecSwift.hpp +217 -0
- package/nitrogen/generated/ios/swift/BandwidthData.swift +65 -0
- package/nitrogen/generated/ios/swift/BufferConfig.swift +201 -0
- package/nitrogen/generated/ios/swift/CustomVideoMetadata.swift +114 -0
- package/nitrogen/generated/ios/swift/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__string_____OnGetLicensePayload.swift +61 -0
- package/nitrogen/generated/ios/swift/Func_void.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_BandwidthData.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_TimedMetadata.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_VideoInformation.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_VideoPlayerStatus.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_bool.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_double.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_onLoadData.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_onLoadStartData.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_onPlaybackStateChangeData.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_onProgressData.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_onVolumeChangeData.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_std__optional_std__variant_nitro__NullType__TextTrack__.swift +65 -0
- package/nitrogen/generated/ios/swift/Func_void_std__shared_ptr_Promise_std__string__.swift +66 -0
- package/nitrogen/generated/ios/swift/Func_void_std__string.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_std__vector_std__string_.swift +46 -0
- package/nitrogen/generated/ios/swift/HybridVideoPlayerEventEmitterSpec.swift +74 -0
- package/nitrogen/generated/ios/swift/HybridVideoPlayerEventEmitterSpec_cxx.swift +479 -0
- package/nitrogen/generated/ios/swift/HybridVideoPlayerFactorySpec.swift +55 -0
- package/nitrogen/generated/ios/swift/HybridVideoPlayerFactorySpec_cxx.swift +145 -0
- package/nitrogen/generated/ios/swift/HybridVideoPlayerSourceFactorySpec.swift +56 -0
- package/nitrogen/generated/ios/swift/HybridVideoPlayerSourceFactorySpec_cxx.swift +156 -0
- package/nitrogen/generated/ios/swift/HybridVideoPlayerSourceSpec.swift +56 -0
- package/nitrogen/generated/ios/swift/HybridVideoPlayerSourceSpec_cxx.swift +157 -0
- package/nitrogen/generated/ios/swift/HybridVideoPlayerSpec.swift +80 -0
- package/nitrogen/generated/ios/swift/HybridVideoPlayerSpec_cxx.swift +490 -0
- package/nitrogen/generated/ios/swift/HybridVideoViewViewManagerFactorySpec.swift +55 -0
- package/nitrogen/generated/ios/swift/HybridVideoViewViewManagerFactorySpec_cxx.swift +141 -0
- package/nitrogen/generated/ios/swift/HybridVideoViewViewManagerSpec.swift +72 -0
- package/nitrogen/generated/ios/swift/HybridVideoViewViewManagerSpec_cxx.swift +390 -0
- package/nitrogen/generated/ios/swift/IgnoreSilentSwitchMode.swift +44 -0
- package/nitrogen/generated/ios/swift/ListenerSubscription.swift +37 -0
- package/nitrogen/generated/ios/swift/LivePlaybackParams.swift +114 -0
- package/nitrogen/generated/ios/swift/MixAudioMode.swift +48 -0
- package/nitrogen/generated/ios/swift/NativeDrmParams.swift +193 -0
- package/nitrogen/generated/ios/swift/NativeExternalSubtitle.swift +44 -0
- package/nitrogen/generated/ios/swift/NativeVideoConfig.swift +136 -0
- package/nitrogen/generated/ios/swift/OnGetLicensePayload.swift +44 -0
- package/nitrogen/generated/ios/swift/ResizeMode.swift +48 -0
- package/nitrogen/generated/ios/swift/Resolution.swift +34 -0
- package/nitrogen/generated/ios/swift/SourceType.swift +40 -0
- package/nitrogen/generated/ios/swift/SubtitleType.swift +52 -0
- package/nitrogen/generated/ios/swift/SurfaceType.swift +40 -0
- package/nitrogen/generated/ios/swift/TextTrack.swift +57 -0
- package/nitrogen/generated/ios/swift/TimedMetadata.swift +35 -0
- package/nitrogen/generated/ios/swift/TimedMetadataObject.swift +34 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_TextTrack.swift +30 -0
- package/nitrogen/generated/ios/swift/Variant_NullType__any_HybridVideoPlayerSourceSpec_.swift +30 -0
- package/nitrogen/generated/ios/swift/VideoInformation.swift +64 -0
- package/nitrogen/generated/ios/swift/VideoOrientation.swift +60 -0
- package/nitrogen/generated/ios/swift/VideoPlayerStatus.swift +48 -0
- package/nitrogen/generated/ios/swift/onLoadData.swift +49 -0
- package/nitrogen/generated/ios/swift/onLoadStartData.swift +41 -0
- package/nitrogen/generated/ios/swift/onPlaybackStateChangeData.swift +34 -0
- package/nitrogen/generated/ios/swift/onProgressData.swift +39 -0
- package/nitrogen/generated/ios/swift/onVolumeChangeData.swift +34 -0
- package/nitrogen/generated/shared/c++/BandwidthData.hpp +91 -0
- package/nitrogen/generated/shared/c++/BufferConfig.hpp +128 -0
- package/nitrogen/generated/shared/c++/CustomVideoMetadata.hpp +100 -0
- package/nitrogen/generated/shared/c++/HybridVideoPlayerEventEmitterSpec.cpp +40 -0
- package/nitrogen/generated/shared/c++/HybridVideoPlayerEventEmitterSpec.hpp +115 -0
- package/nitrogen/generated/shared/c++/HybridVideoPlayerFactorySpec.cpp +21 -0
- package/nitrogen/generated/shared/c++/HybridVideoPlayerFactorySpec.hpp +67 -0
- package/nitrogen/generated/shared/c++/HybridVideoPlayerSourceFactorySpec.cpp +22 -0
- package/nitrogen/generated/shared/c++/HybridVideoPlayerSourceFactorySpec.hpp +69 -0
- package/nitrogen/generated/shared/c++/HybridVideoPlayerSourceSpec.cpp +23 -0
- package/nitrogen/generated/shared/c++/HybridVideoPlayerSourceSpec.hpp +69 -0
- package/nitrogen/generated/shared/c++/HybridVideoPlayerSpec.cpp +57 -0
- package/nitrogen/generated/shared/c++/HybridVideoPlayerSpec.hpp +120 -0
- package/nitrogen/generated/shared/c++/HybridVideoViewViewManagerFactorySpec.cpp +21 -0
- package/nitrogen/generated/shared/c++/HybridVideoViewViewManagerFactorySpec.hpp +64 -0
- package/nitrogen/generated/shared/c++/HybridVideoViewViewManagerSpec.cpp +46 -0
- package/nitrogen/generated/shared/c++/HybridVideoViewViewManagerSpec.hpp +99 -0
- package/nitrogen/generated/shared/c++/IgnoreSilentSwitchMode.hpp +80 -0
- package/nitrogen/generated/shared/c++/ListenerSubscription.hpp +83 -0
- package/nitrogen/generated/shared/c++/LivePlaybackParams.hpp +99 -0
- package/nitrogen/generated/shared/c++/MixAudioMode.hpp +84 -0
- package/nitrogen/generated/shared/c++/NativeDrmParams.hpp +113 -0
- package/nitrogen/generated/shared/c++/NativeExternalSubtitle.hpp +97 -0
- package/nitrogen/generated/shared/c++/NativeVideoConfig.hpp +121 -0
- package/nitrogen/generated/shared/c++/OnGetLicensePayload.hpp +95 -0
- package/nitrogen/generated/shared/c++/ResizeMode.hpp +84 -0
- package/nitrogen/generated/shared/c++/Resolution.hpp +87 -0
- package/nitrogen/generated/shared/c++/SourceType.hpp +76 -0
- package/nitrogen/generated/shared/c++/SubtitleType.hpp +88 -0
- package/nitrogen/generated/shared/c++/SurfaceType.hpp +76 -0
- package/nitrogen/generated/shared/c++/TextTrack.hpp +96 -0
- package/nitrogen/generated/shared/c++/TimedMetadata.hpp +85 -0
- package/nitrogen/generated/shared/c++/TimedMetadataObject.hpp +87 -0
- package/nitrogen/generated/shared/c++/VideoInformation.hpp +112 -0
- package/nitrogen/generated/shared/c++/VideoOrientation.hpp +96 -0
- package/nitrogen/generated/shared/c++/VideoPlayerStatus.hpp +84 -0
- package/nitrogen/generated/shared/c++/onLoadData.hpp +100 -0
- package/nitrogen/generated/shared/c++/onLoadStartData.hpp +92 -0
- package/nitrogen/generated/shared/c++/onPlaybackStateChangeData.hpp +87 -0
- package/nitrogen/generated/shared/c++/onProgressData.hpp +91 -0
- package/nitrogen/generated/shared/c++/onVolumeChangeData.hpp +87 -0
- package/package.json +180 -0
- package/react-native.config.js +10 -0
- package/src/core/VideoPlayer.ts +357 -0
- package/src/core/VideoPlayerEvents.ts +146 -0
- package/src/core/hooks/useEvent.ts +24 -0
- package/src/core/hooks/useManagedInstance.ts +96 -0
- package/src/core/hooks/useVideoPlayer.ts +73 -0
- package/src/core/types/BufferConfig.ts +103 -0
- package/src/core/types/DrmParams.ts +65 -0
- package/src/core/types/Events.ts +283 -0
- package/src/core/types/IgnoreSilentSwitchMode.ts +1 -0
- package/src/core/types/MixAudioMode.ts +1 -0
- package/src/core/types/ResizeMode.ts +9 -0
- package/src/core/types/TextTrack.ts +22 -0
- package/src/core/types/Utils.ts +1 -0
- package/src/core/types/VideoConfig.ts +150 -0
- package/src/core/types/VideoError.ts +174 -0
- package/src/core/types/VideoInformation.ts +45 -0
- package/src/core/types/VideoOrientation.ts +8 -0
- package/src/core/types/VideoPlayerBase.ts +181 -0
- package/src/core/types/VideoPlayerSourceBase.ts +19 -0
- package/src/core/types/VideoPlayerStatus.ts +8 -0
- package/src/core/utils/playerFactory.ts +33 -0
- package/src/core/utils/sourceFactory.ts +171 -0
- package/src/core/video-view/NativeVideoView.tsx +18 -0
- package/src/core/video-view/VideoView.tsx +492 -0
- package/src/expo-plugins/@types.ts +37 -0
- package/src/expo-plugins/getPackageInfo.ts +23 -0
- package/src/expo-plugins/withAndroidExtensions.ts +46 -0
- package/src/expo-plugins/withAndroidNotificationControls.ts +43 -0
- package/src/expo-plugins/withAndroidPictureInPicture.ts +31 -0
- package/src/expo-plugins/withBackgroundAudio.ts +26 -0
- package/src/expo-plugins/withReactNativeVideo.ts +32 -0
- package/src/expo-plugins/writeToPodfile.ts +74 -0
- package/src/index.tsx +29 -0
- package/src/spec/fabric/VideoViewNativeComponent.ts +17 -0
- package/src/spec/nitro/VideoPlayer.nitro.ts +62 -0
- package/src/spec/nitro/VideoPlayerEventEmitter.nitro.ts +207 -0
- package/src/spec/nitro/VideoPlayerSource.nitro.ts +18 -0
- 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
|
+
};
|