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