mirror of
https://github.com/tapframe/NuvioStreaming.git
synced 2026-03-11 17:45:38 +00:00
45 lines
1.1 KiB
TypeScript
45 lines
1.1 KiB
TypeScript
/**
|
|
* Centralized player selection logic
|
|
* Used by both StreamsScreen and KSPlayer routing
|
|
*/
|
|
|
|
import { Platform } from 'react-native';
|
|
import { isMkvStream } from './mkvDetection';
|
|
|
|
export interface PlayerSelectionOptions {
|
|
uri: string;
|
|
headers?: Record<string, string>;
|
|
forceVlc?: boolean;
|
|
platform?: typeof Platform.OS;
|
|
}
|
|
|
|
/**
|
|
* Determines which player should be used for a given stream
|
|
*/
|
|
export const shouldUseKSPlayer = ({
|
|
uri,
|
|
headers,
|
|
forceVlc = false,
|
|
platform = Platform.OS
|
|
}: PlayerSelectionOptions): boolean => {
|
|
// Android always uses AndroidVideoPlayer (react-native-video)
|
|
if (platform === 'android') {
|
|
return false;
|
|
}
|
|
|
|
// iOS: Always use KSPlayer for all formats
|
|
// KSPlayer handles automatic fallback (AVPlayer → FFmpeg)
|
|
if (platform === 'ios') {
|
|
return true;
|
|
}
|
|
|
|
// Default fallback
|
|
return false;
|
|
};
|
|
|
|
/**
|
|
* Get the appropriate player component name
|
|
*/
|
|
export const getPlayerComponent = (options: PlayerSelectionOptions): 'AndroidVideoPlayer' | 'KSPlayerCore' => {
|
|
return shouldUseKSPlayer(options) ? 'KSPlayerCore' : 'AndroidVideoPlayer';
|
|
};
|