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,249 @@
|
|
|
1
|
+
buildscript {
|
|
2
|
+
// Buildscript is evaluated before everything else so we can't use getExtOrDefault
|
|
3
|
+
def kotlin_version = rootProject.ext.has("kotlinVersion") ? rootProject.ext.get("kotlinVersion") : project.properties["UnifiedPlayer_kotlinVersion"]
|
|
4
|
+
def minKotlin_version = project.properties["UnifiedPlayer_minKotlinVersion"]
|
|
5
|
+
|
|
6
|
+
def androidx_version = rootProject.ext.has('androidxActivityVersion') ? rootProject.ext.get('androidxActivityVersion') : project.properties['UnifiedPlayer_androidxActivityVersion']
|
|
7
|
+
def minAndroidx_version = project.properties["UnifiedPlayer_androidxActivityVersion"]
|
|
8
|
+
|
|
9
|
+
def isVersionAtLeast = { version, minVersion ->
|
|
10
|
+
def (major, minor, patch) = version.tokenize('.')
|
|
11
|
+
def (minMajor, minMinor, minPatch) = minVersion.tokenize('.')
|
|
12
|
+
|
|
13
|
+
// major version is greater
|
|
14
|
+
if (major.toInteger() > minMajor.toInteger()) return true
|
|
15
|
+
|
|
16
|
+
// major version is equal, minor version is greater
|
|
17
|
+
if (major.toInteger() == minMajor.toInteger() && minor.toInteger() > minMinor.toInteger()) return true
|
|
18
|
+
|
|
19
|
+
// major version is equal, minor version is equal, patch version is greater
|
|
20
|
+
if (major.toInteger() == minMajor.toInteger() && minor.toInteger() == minMinor.toInteger() && patch.toInteger() >= minPatch.toInteger()) return true
|
|
21
|
+
|
|
22
|
+
return false
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
repositories {
|
|
26
|
+
google()
|
|
27
|
+
mavenCentral()
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
dependencies {
|
|
31
|
+
classpath "com.android.tools.build:gradle:7.2.1"
|
|
32
|
+
// noinspection DifferentKotlinGradleVersion
|
|
33
|
+
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
ext {
|
|
37
|
+
if (!isVersionAtLeast(kotlin_version, minKotlin_version)) {
|
|
38
|
+
throw new GradleException("Kotlin version must be at least $minKotlin_version (current: $kotlin_version)")
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
if (!isVersionAtLeast(androidx_version, minAndroidx_version)) {
|
|
42
|
+
throw new GradleException("AndroidX version must be at least $minAndroidx_version (current: $androidx_version)")
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
def reactNativeArchitectures() {
|
|
48
|
+
def value = rootProject.getProperties().get("reactNativeArchitectures")
|
|
49
|
+
return value ? value.split(",") : ["armeabi-v7a", "x86", "x86_64", "arm64-v8a"]
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
def isNewArchitectureEnabled() {
|
|
53
|
+
return rootProject.hasProperty("newArchEnabled") && rootProject.getProperty("newArchEnabled") == "true"
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
apply plugin: "com.android.library"
|
|
57
|
+
apply plugin: "kotlin-android"
|
|
58
|
+
apply from: '../nitrogen/generated/android/UnifiedPlayer+autolinking.gradle'
|
|
59
|
+
apply from: './fix-prefab.gradle'
|
|
60
|
+
|
|
61
|
+
if (isNewArchitectureEnabled()) {
|
|
62
|
+
apply plugin: "com.facebook.react"
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
def getExtOrDefault(name) {
|
|
66
|
+
return rootProject.ext.has(name) ? rootProject.ext.get(name) : project.properties["UnifiedPlayer_" + name]
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
def getExtOrIntegerDefault(name) {
|
|
70
|
+
return rootProject.ext.has(name) ? rootProject.ext.get(name) : (project.properties["UnifiedPlayer_" + name]).toInteger()
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
def supportsNamespace() {
|
|
74
|
+
def parsed = com.android.Version.ANDROID_GRADLE_PLUGIN_VERSION.tokenize('.')
|
|
75
|
+
def major = parsed[0].toInteger()
|
|
76
|
+
def minor = parsed[1].toInteger()
|
|
77
|
+
|
|
78
|
+
// Namespace support was added in 7.3.0
|
|
79
|
+
return (major == 7 && minor >= 3) || major >= 8
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
def ExoplayerDependenciesList = [
|
|
83
|
+
"useExoplayerDash",
|
|
84
|
+
"useExoplayerHls",
|
|
85
|
+
]
|
|
86
|
+
|
|
87
|
+
def ExoplayerDependencies = ExoplayerDependenciesList.collectEntries { property ->
|
|
88
|
+
[(property): getExtOrDefault(property)?.toBoolean() ?: false]
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// Print Configuration
|
|
92
|
+
println "[UnifiedPlayer] Exoplayer Dependencies Configuration:"
|
|
93
|
+
ExoplayerDependenciesList.each { propertyName ->
|
|
94
|
+
def propertyValue = ExoplayerDependencies[propertyName]
|
|
95
|
+
println "$propertyName: $propertyValue"
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
android {
|
|
99
|
+
if (supportsNamespace()) {
|
|
100
|
+
namespace "com.unifiedplayer"
|
|
101
|
+
|
|
102
|
+
sourceSets {
|
|
103
|
+
main {
|
|
104
|
+
manifest.srcFile "src/main/AndroidManifestNew.xml"
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
ndkVersion getExtOrDefault("ndkVersion")
|
|
110
|
+
compileSdkVersion getExtOrIntegerDefault("compileSdkVersion")
|
|
111
|
+
|
|
112
|
+
defaultConfig {
|
|
113
|
+
minSdkVersion getExtOrIntegerDefault("minSdkVersion")
|
|
114
|
+
targetSdkVersion getExtOrIntegerDefault("targetSdkVersion")
|
|
115
|
+
|
|
116
|
+
buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString()
|
|
117
|
+
buildConfigField "boolean", "USE_EXOPLAYER_DASH", ExoplayerDependencies.useExoplayerDash.toString()
|
|
118
|
+
buildConfigField "boolean", "USE_EXOPLAYER_HLS", ExoplayerDependencies.useExoplayerHls.toString()
|
|
119
|
+
|
|
120
|
+
externalNativeBuild {
|
|
121
|
+
cmake {
|
|
122
|
+
cppFlags "-O2 -frtti -fexceptions -Wall -fstack-protector-all"
|
|
123
|
+
arguments "-DANDROID_STL=c++_shared", "-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON"
|
|
124
|
+
abiFilters (*reactNativeArchitectures())
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
externalNativeBuild {
|
|
130
|
+
cmake {
|
|
131
|
+
path "CMakeLists.txt"
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
packagingOptions {
|
|
136
|
+
excludes = [
|
|
137
|
+
"META-INF",
|
|
138
|
+
"META-INF/**",
|
|
139
|
+
"**/libc++_shared.so",
|
|
140
|
+
"**/libfbjni.so",
|
|
141
|
+
"**/libjsi.so",
|
|
142
|
+
"**/libfolly_json.so",
|
|
143
|
+
"**/libfolly_runtime.so",
|
|
144
|
+
"**/libglog.so",
|
|
145
|
+
"**/libhermes.so",
|
|
146
|
+
"**/libhermes-executor-debug.so",
|
|
147
|
+
"**/libhermes_executor.so",
|
|
148
|
+
"**/libreactnativejni.so",
|
|
149
|
+
"**/libturbomodulejsijni.so",
|
|
150
|
+
"**/libreact_nativemodule_core.so",
|
|
151
|
+
"**/libjscexecutor.so",
|
|
152
|
+
"**/libreactnative.so"
|
|
153
|
+
]
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
buildFeatures {
|
|
157
|
+
buildConfig true
|
|
158
|
+
prefab true
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
buildTypes {
|
|
162
|
+
release {
|
|
163
|
+
minifyEnabled false
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
lintOptions {
|
|
168
|
+
disable "GradleCompatible"
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
compileOptions {
|
|
172
|
+
sourceCompatibility JavaVersion.VERSION_1_8
|
|
173
|
+
targetCompatibility JavaVersion.VERSION_1_8
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
sourceSets {
|
|
177
|
+
main {
|
|
178
|
+
if (!isNewArchitectureEnabled()) {
|
|
179
|
+
java.srcDirs += ["src/paper/java"]
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
if (!ExoplayerDependencies.useExoplayerDash) {
|
|
183
|
+
java.srcDirs += ["src/stubs/dash"]
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
if (!ExoplayerDependencies.useExoplayerHls) {
|
|
187
|
+
java.srcDirs += ["src/stubs/hls"]
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
repositories {
|
|
194
|
+
mavenCentral()
|
|
195
|
+
google()
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
def kotlin_version = getExtOrDefault("kotlinVersion")
|
|
199
|
+
def media3_version = getExtOrDefault("media3Version")
|
|
200
|
+
def androidxCore_version = getExtOrDefault("androidxCoreVersion")
|
|
201
|
+
def androidxActivity_version = getExtOrDefault("androidxActivityVersion")
|
|
202
|
+
|
|
203
|
+
dependencies {
|
|
204
|
+
// For < 0.71, this will be from the local maven repo
|
|
205
|
+
// For > 0.71, this will be replaced by `com.facebook.react:react-android:$version` by react gradle plugin
|
|
206
|
+
//noinspection GradleDynamicVersion
|
|
207
|
+
implementation "com.facebook.react:react-native:+"
|
|
208
|
+
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
|
209
|
+
|
|
210
|
+
// Add a dependency on NitroModules
|
|
211
|
+
implementation project(":react-native-nitro-modules")
|
|
212
|
+
|
|
213
|
+
implementation "androidx.core:core-ktx:$androidxCore_version"
|
|
214
|
+
implementation "androidx.activity:activity-ktx:$androidxActivity_version"
|
|
215
|
+
|
|
216
|
+
// For media playback using ExoPlayer
|
|
217
|
+
implementation "androidx.media3:media3-exoplayer:$media3_version"
|
|
218
|
+
|
|
219
|
+
// Common functionality used across multiple media libraries
|
|
220
|
+
implementation "androidx.media3:media3-common:$media3_version"
|
|
221
|
+
|
|
222
|
+
// For building media playback UIs
|
|
223
|
+
implementation "androidx.media3:media3-ui:$media3_version"
|
|
224
|
+
|
|
225
|
+
// Common functionality for loading data
|
|
226
|
+
implementation "androidx.media3:media3-datasource:$media3_version"
|
|
227
|
+
|
|
228
|
+
// For loading data using the OkHttp network stack
|
|
229
|
+
implementation "androidx.media3:media3-datasource-okhttp:$media3_version"
|
|
230
|
+
|
|
231
|
+
// For Media Session
|
|
232
|
+
implementation "androidx.media3:media3-session:$media3_version"
|
|
233
|
+
|
|
234
|
+
if (ExoplayerDependencies.useExoplayerDash) {
|
|
235
|
+
implementation "androidx.media3:media3-exoplayer-dash:$media3_version"
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
if (ExoplayerDependencies.useExoplayerHls) {
|
|
239
|
+
implementation "androidx.media3:media3-exoplayer-hls:$media3_version"
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
if (isNewArchitectureEnabled()) {
|
|
244
|
+
react {
|
|
245
|
+
jsRootDir = file("../src/spec/fabric")
|
|
246
|
+
libraryName = "RNCVideoView"
|
|
247
|
+
codegenJavaPackageName = "com.facebook.react.viewmanagers"
|
|
248
|
+
}
|
|
249
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
tasks.configureEach { task ->
|
|
2
|
+
// Make sure that we generate our prefab publication file only after having built the native library
|
|
3
|
+
// so that not a header publication file, but a full configuration publication will be generated, which
|
|
4
|
+
// will include the .so file
|
|
5
|
+
|
|
6
|
+
def prefabConfigurePattern = ~/^prefab(.+)ConfigurePackage$/
|
|
7
|
+
def matcher = task.name =~ prefabConfigurePattern
|
|
8
|
+
if (matcher.matches()) {
|
|
9
|
+
def variantName = matcher[0][1]
|
|
10
|
+
task.outputs.upToDateWhen { false }
|
|
11
|
+
task.dependsOn("externalNativeBuild${variantName}")
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
afterEvaluate {
|
|
16
|
+
def abis = reactNativeArchitectures()
|
|
17
|
+
rootProject.allprojects.each { proj ->
|
|
18
|
+
if (proj === rootProject) return
|
|
19
|
+
|
|
20
|
+
def dependsOnThisLib = proj.configurations.findAll { it.canBeResolved }.any { config ->
|
|
21
|
+
config.dependencies.any { dep ->
|
|
22
|
+
dep.group == project.group && dep.name == project.name
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
if (!dependsOnThisLib && proj != project) return
|
|
26
|
+
|
|
27
|
+
if (!proj.plugins.hasPlugin('com.android.application') && !proj.plugins.hasPlugin('com.android.library')) {
|
|
28
|
+
return
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
def variants = proj.android.hasProperty('applicationVariants') ? proj.android.applicationVariants : proj.android.libraryVariants
|
|
32
|
+
// Touch the prefab_config.json files to ensure that in ExternalNativeJsonGenerator.kt we will re-trigger the prefab CLI to
|
|
33
|
+
// generate a libnameConfig.cmake file that will contain our native library (.so).
|
|
34
|
+
// See this condition: https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:build-system/gradle-core/src/main/java/com/android/build/gradle/tasks/ExternalNativeJsonGenerator.kt;l=207-219?q=createPrefabBuildSystemGlue
|
|
35
|
+
variants.all { variant ->
|
|
36
|
+
def variantName = variant.name
|
|
37
|
+
abis.each { abi ->
|
|
38
|
+
def searchDir = new File(proj.projectDir, ".cxx/${variantName}")
|
|
39
|
+
if (!searchDir.exists()) return
|
|
40
|
+
def matches = []
|
|
41
|
+
searchDir.eachDir { randomDir ->
|
|
42
|
+
def prefabFile = new File(randomDir, "${abi}/prefab_config.json")
|
|
43
|
+
if (prefabFile.exists()) matches << prefabFile
|
|
44
|
+
}
|
|
45
|
+
matches.each { prefabConfig ->
|
|
46
|
+
prefabConfig.setLastModified(System.currentTimeMillis())
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
UnifiedPlayer_kotlinVersion=1.9.24
|
|
2
|
+
UnifiedPlayer_minKotlinVersion=1.8.0
|
|
3
|
+
UnifiedPlayer_minSdkVersion=24
|
|
4
|
+
UnifiedPlayer_targetSdkVersion=35
|
|
5
|
+
UnifiedPlayer_compileSdkVersion=35
|
|
6
|
+
UnifiedPlayer_ndkVersion=27.1.12297006
|
|
7
|
+
|
|
8
|
+
UnifiedPlayer_useExoplayerDash=true
|
|
9
|
+
UnifiedPlayer_useExoplayerHls=true
|
|
10
|
+
|
|
11
|
+
UnifiedPlayer_media3Version=1.4.1
|
|
12
|
+
UnifiedPlayer_androidxCoreVersion=1.13.1
|
|
13
|
+
UnifiedPlayer_androidxActivityVersion=1.9.3
|
|
14
|
+
|
|
15
|
+
android.useAndroidX=true
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
|
2
|
+
package="com.unifiedplayer">
|
|
3
|
+
<uses-permission android:name="android.permission.INTERNET" />
|
|
4
|
+
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
|
5
|
+
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="32" />
|
|
6
|
+
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" />
|
|
7
|
+
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
|
|
8
|
+
<application android:hardwareAccelerated="true">
|
|
9
|
+
</application>
|
|
10
|
+
</manifest>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
|
2
|
+
<uses-permission android:name="android.permission.INTERNET" />
|
|
3
|
+
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
|
4
|
+
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="32" />
|
|
5
|
+
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" />
|
|
6
|
+
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
|
|
7
|
+
<application android:hardwareAccelerated="true">
|
|
8
|
+
</application>
|
|
9
|
+
</manifest>
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
package com.unifiedplayer.core
|
|
2
|
+
|
|
3
|
+
import android.content.Context
|
|
4
|
+
import android.media.AudioAttributes
|
|
5
|
+
import android.media.AudioManager
|
|
6
|
+
import android.media.AudioFocusRequest
|
|
7
|
+
import android.os.Build
|
|
8
|
+
import androidx.annotation.OptIn
|
|
9
|
+
import androidx.annotation.RequiresApi
|
|
10
|
+
import androidx.media3.common.util.UnstableApi
|
|
11
|
+
import com.margelo.nitro.NitroModules
|
|
12
|
+
import com.margelo.nitro.unifiedplayer.HybridVideoPlayer
|
|
13
|
+
import com.margelo.nitro.unifiedplayer.MixAudioMode
|
|
14
|
+
import kotlin.getValue
|
|
15
|
+
import com.unifiedplayer.core.utils.Threading
|
|
16
|
+
|
|
17
|
+
@OptIn(UnstableApi::class)
|
|
18
|
+
class AudioFocusManager() {
|
|
19
|
+
private val players = mutableListOf<HybridVideoPlayer>()
|
|
20
|
+
private var currentMixAudioMode: MixAudioMode? = null
|
|
21
|
+
private var audioFocusRequest: AudioFocusRequest? = null
|
|
22
|
+
|
|
23
|
+
val appContext by lazy {
|
|
24
|
+
NitroModules.applicationContext ?: throw UnknownError()
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
private val audioManager by lazy {
|
|
28
|
+
appContext.getSystemService(Context.AUDIO_SERVICE) as? AudioManager ?: throw UnknownError()
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
private val audioFocusChangeListener = AudioManager.OnAudioFocusChangeListener { focusChange ->
|
|
32
|
+
when (focusChange) {
|
|
33
|
+
AudioManager.AUDIOFOCUS_GAIN -> {
|
|
34
|
+
unDuckActivePlayers()
|
|
35
|
+
}
|
|
36
|
+
AudioManager.AUDIOFOCUS_LOSS -> {
|
|
37
|
+
pauseActivePlayers()
|
|
38
|
+
currentMixAudioMode = null
|
|
39
|
+
audioFocusRequest = null
|
|
40
|
+
}
|
|
41
|
+
AudioManager.AUDIOFOCUS_LOSS_TRANSIENT -> {
|
|
42
|
+
val mixAudioMode = determineRequiredMixMode()
|
|
43
|
+
if (mixAudioMode != MixAudioMode.MIXWITHOTHERS) {
|
|
44
|
+
pauseActivePlayers()
|
|
45
|
+
currentMixAudioMode = null
|
|
46
|
+
audioFocusRequest = null
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK -> {
|
|
50
|
+
val mixAudioMode = determineRequiredMixMode()
|
|
51
|
+
when (mixAudioMode) {
|
|
52
|
+
MixAudioMode.DONOTMIX -> pauseActivePlayers()
|
|
53
|
+
else -> duckActivePlayers()
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
fun registerPlayer(player: HybridVideoPlayer) {
|
|
60
|
+
if (!players.contains(player)) {
|
|
61
|
+
players.add(player)
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
fun unregisterPlayer(player: HybridVideoPlayer) {
|
|
66
|
+
players.remove(player)
|
|
67
|
+
if (players.isEmpty()) {
|
|
68
|
+
abandonAudioFocus()
|
|
69
|
+
} else {
|
|
70
|
+
requestAudioFocusUpdate()
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
fun requestAudioFocusUpdate() {
|
|
75
|
+
Threading.runOnMainThread {
|
|
76
|
+
val requiredMixMode = determineRequiredMixMode()
|
|
77
|
+
|
|
78
|
+
if (requiredMixMode == null) {
|
|
79
|
+
abandonAudioFocus()
|
|
80
|
+
return@runOnMainThread
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
if (currentMixAudioMode != requiredMixMode) {
|
|
84
|
+
requestAudioFocus(requiredMixMode)
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
private fun determineRequiredMixMode(): MixAudioMode? {
|
|
90
|
+
val activePlayers = players.filter { player ->
|
|
91
|
+
player.player.isPlaying && player.player.volume != 0f
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
if (activePlayers.isEmpty()) {
|
|
95
|
+
return null
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
val anyPlayerNeedsMixWithOthers = activePlayers.any { player ->
|
|
99
|
+
player.mixAudioMode == MixAudioMode.MIXWITHOTHERS
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
if (anyPlayerNeedsMixWithOthers) {
|
|
103
|
+
abandonAudioFocus()
|
|
104
|
+
return MixAudioMode.MIXWITHOTHERS
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
val anyPlayerNeedsExclusiveFocus = activePlayers.any { player ->
|
|
108
|
+
player.mixAudioMode == MixAudioMode.DONOTMIX
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
val anyPlayerNeedsDucking = activePlayers.any { player ->
|
|
112
|
+
player.mixAudioMode == MixAudioMode.DUCKOTHERS
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
return when {
|
|
116
|
+
anyPlayerNeedsExclusiveFocus -> MixAudioMode.DONOTMIX
|
|
117
|
+
anyPlayerNeedsDucking -> MixAudioMode.DUCKOTHERS
|
|
118
|
+
else -> MixAudioMode.AUTO
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
private fun requestAudioFocus(mixMode: MixAudioMode) {
|
|
123
|
+
val focusType = when (mixMode) {
|
|
124
|
+
MixAudioMode.DONOTMIX -> AudioManager.AUDIOFOCUS_GAIN
|
|
125
|
+
MixAudioMode.DUCKOTHERS -> AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK
|
|
126
|
+
MixAudioMode.AUTO -> AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK
|
|
127
|
+
MixAudioMode.MIXWITHOTHERS -> return // No focus needed for mix with others
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
val result = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
|
131
|
+
requestAudioFocusNew(focusType)
|
|
132
|
+
} else {
|
|
133
|
+
requestAudioFocusLegacy(focusType)
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
|
|
137
|
+
currentMixAudioMode = mixMode
|
|
138
|
+
} else {
|
|
139
|
+
currentMixAudioMode = null
|
|
140
|
+
// Pause players since audio focus couldn't be obtained
|
|
141
|
+
pauseActivePlayers()
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
@RequiresApi(Build.VERSION_CODES.O)
|
|
146
|
+
private fun requestAudioFocusNew(focusType: Int): Int {
|
|
147
|
+
|
|
148
|
+
audioFocusRequest = AudioFocusRequest.Builder(focusType)
|
|
149
|
+
.setAudioAttributes(
|
|
150
|
+
AudioAttributes.Builder().run {
|
|
151
|
+
setUsage(AudioAttributes.USAGE_MEDIA)
|
|
152
|
+
setContentType(AudioAttributes.CONTENT_TYPE_MOVIE)
|
|
153
|
+
build()
|
|
154
|
+
}
|
|
155
|
+
)
|
|
156
|
+
.setOnAudioFocusChangeListener(audioFocusChangeListener)
|
|
157
|
+
.build()
|
|
158
|
+
|
|
159
|
+
return audioManager.requestAudioFocus(audioFocusRequest!!)
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
@Suppress("DEPRECATION")
|
|
163
|
+
private fun requestAudioFocusLegacy(focusType: Int): Int {
|
|
164
|
+
return audioManager.requestAudioFocus(
|
|
165
|
+
audioFocusChangeListener,
|
|
166
|
+
AudioManager.STREAM_MUSIC,
|
|
167
|
+
focusType
|
|
168
|
+
)
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
private fun abandonAudioFocus() {
|
|
172
|
+
if (currentMixAudioMode != null) {
|
|
173
|
+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
|
174
|
+
abandonAudioFocusNew()
|
|
175
|
+
} else {
|
|
176
|
+
abandonAudioFocusLegacy()
|
|
177
|
+
}
|
|
178
|
+
currentMixAudioMode = null
|
|
179
|
+
audioFocusRequest = null
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
@RequiresApi(Build.VERSION_CODES.O)
|
|
184
|
+
private fun abandonAudioFocusNew() {
|
|
185
|
+
audioFocusRequest?.let { request ->
|
|
186
|
+
audioManager.abandonAudioFocusRequest(request)
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
@Suppress("DEPRECATION")
|
|
191
|
+
private fun abandonAudioFocusLegacy() {
|
|
192
|
+
audioManager.abandonAudioFocus(audioFocusChangeListener)
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
private fun pauseActivePlayers() {
|
|
196
|
+
Threading.runOnMainThread {
|
|
197
|
+
players.forEach { player ->
|
|
198
|
+
player.player.let { mediaPlayer ->
|
|
199
|
+
if (mediaPlayer.volume != 0f && mediaPlayer.isPlaying) {
|
|
200
|
+
mediaPlayer.pause()
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
private fun duckActivePlayers() {
|
|
208
|
+
Threading.runOnMainThread {
|
|
209
|
+
players.forEach { player ->
|
|
210
|
+
player.player.let { mediaPlayer ->
|
|
211
|
+
// We need to duck the volume to 50%. After the audio focus is regained,
|
|
212
|
+
// we will restore the volume to the user's volume.
|
|
213
|
+
mediaPlayer.volume = mediaPlayer.volume * 0.5f
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
private fun unDuckActivePlayers() {
|
|
220
|
+
Threading.runOnMainThread {
|
|
221
|
+
// Resume players that were paused due to audio focus loss
|
|
222
|
+
players.forEach { player ->
|
|
223
|
+
player.player.let { mediaPlayer ->
|
|
224
|
+
// Restore full volume if it was ducked
|
|
225
|
+
if (mediaPlayer.volume != 0f && mediaPlayer.volume.toDouble() != player.userVolume) {
|
|
226
|
+
mediaPlayer.volume = player.userVolume.toFloat()
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
package com.unifiedplayer.core
|
|
2
|
+
|
|
3
|
+
// Base class for all video errors
|
|
4
|
+
abstract class VideoError(
|
|
5
|
+
open val code: String,
|
|
6
|
+
message: String
|
|
7
|
+
) : Error("{%@$code::$message@%}")
|
|
8
|
+
|
|
9
|
+
// Library related errors
|
|
10
|
+
sealed class LibraryError(code: String, message: String) : VideoError(code, message) {
|
|
11
|
+
object Deallocated : LibraryError(
|
|
12
|
+
"library/deallocated",
|
|
13
|
+
"Object has been deallocated"
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
object ApplicationContextNotFound : LibraryError(
|
|
17
|
+
"library/application-context-not-found",
|
|
18
|
+
"Application context not found"
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
class MethodNotSupported(val methodName: String) : LibraryError(
|
|
22
|
+
"library/method-not-supported",
|
|
23
|
+
"Method $methodName() is not supported on Android"
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
object DRMPluginNotFound : LibraryError(
|
|
27
|
+
"library/drm-plugin-not-found",
|
|
28
|
+
"No DRM plugin have been found, please add one to the project",
|
|
29
|
+
)
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// Player related errors
|
|
33
|
+
sealed class PlayerError(code: String, message: String) : VideoError(code, message) {
|
|
34
|
+
object NotInitialized : PlayerError(
|
|
35
|
+
"player/not-initialized",
|
|
36
|
+
"Player has not been initialized (Or has been set to null)"
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
object AssetNotInitialized : PlayerError(
|
|
40
|
+
"player/asset-not-initialized",
|
|
41
|
+
"Asset has not been initialized (Or has been set to null)"
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
object InvalidSource : PlayerError(
|
|
45
|
+
"player/invalid-source",
|
|
46
|
+
"Invalid source passed to player"
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
object Cancelled : PlayerError(
|
|
50
|
+
"player/cancelled",
|
|
51
|
+
"Operation was cancelled"
|
|
52
|
+
)
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Source related errors
|
|
56
|
+
sealed class SourceError(code: String, message: String) : VideoError(code, message) {
|
|
57
|
+
class InvalidUri(val uri: String) : SourceError(
|
|
58
|
+
"source/invalid-uri",
|
|
59
|
+
"Invalid source file uri: $uri"
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
class MissingReadFilePermission(val uri: String) : SourceError(
|
|
63
|
+
"source/missing-read-file-permission",
|
|
64
|
+
"Missing read file permission for source file at $uri"
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
class FileDoesNotExist(val uri: String) : SourceError(
|
|
68
|
+
"source/file-does-not-exist",
|
|
69
|
+
"File does not exist at URI: $uri"
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
object FailedToInitializeAsset : SourceError(
|
|
73
|
+
"source/failed-to-initialize-asset",
|
|
74
|
+
"Failed to initialize asset"
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
class UnsupportedContentType(val uri: String) : SourceError(
|
|
78
|
+
"source/unsupported-content-type",
|
|
79
|
+
"type of content (${uri}) is not supported"
|
|
80
|
+
)
|
|
81
|
+
|
|
82
|
+
object Cancelled : SourceError(
|
|
83
|
+
"source/cancelled",
|
|
84
|
+
"Operation was cancelled"
|
|
85
|
+
)
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// View related errors
|
|
89
|
+
sealed class VideoViewError(code: String, message: String) : VideoError(code, message) {
|
|
90
|
+
class ViewNotFound(val viewId: Int) : VideoViewError(
|
|
91
|
+
"view/not-found",
|
|
92
|
+
"View with viewId $viewId not found"
|
|
93
|
+
)
|
|
94
|
+
object ViewIsDeallocated : VideoViewError(
|
|
95
|
+
"view/deallocated",
|
|
96
|
+
"Attempt to access a view, but it has been deallocated (or not initialized)"
|
|
97
|
+
)
|
|
98
|
+
object PictureInPictureNotSupported : VideoViewError(
|
|
99
|
+
"view/picture-in-picture-not-supported",
|
|
100
|
+
"Picture in picture is not supported on this device"
|
|
101
|
+
)
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// Unknown error
|
|
105
|
+
class UnknownError : VideoError("unknown/unknown", "Unknown error")
|