some fixes

This commit is contained in:
tapframe 2025-07-30 00:29:11 +05:30
parent 93ddb029a0
commit 6547d38c0e
8 changed files with 24 additions and 70 deletions

View file

@ -4,6 +4,7 @@ import Video, { VideoRef, SelectedTrack, BufferingStrategyType, ResizeMode } fro
interface VideoPlayerProps { interface VideoPlayerProps {
src: string; src: string;
headers?: { [key: string]: string };
paused: boolean; paused: boolean;
volume: number; volume: number;
currentTime: number; currentTime: number;
@ -20,6 +21,7 @@ interface VideoPlayerProps {
export const AndroidVideoPlayer: React.FC<VideoPlayerProps> = ({ export const AndroidVideoPlayer: React.FC<VideoPlayerProps> = ({
src, src,
headers,
paused, paused,
volume, volume,
currentTime, currentTime,
@ -83,7 +85,7 @@ export const AndroidVideoPlayer: React.FC<VideoPlayerProps> = ({
return ( return (
<Video <Video
ref={videoRef} ref={videoRef}
source={{ uri: src }} source={headers ? { uri: src, headers } : { uri: src }}
style={{ flex: 1 }} style={{ flex: 1 }}
paused={paused} paused={paused}
volume={volume} volume={volume}
@ -118,4 +120,4 @@ export const AndroidVideoPlayer: React.FC<VideoPlayerProps> = ({
); );
}; };
export default AndroidVideoPlayer; export default AndroidVideoPlayer;

@ -1 +1 @@
Subproject commit ea7009824e2a9e272520113d63b2d09d6cf8a0e8 Subproject commit d2eb5507001e031aaa5d258c390ec56ecfa8f9c8

View file

@ -61,6 +61,7 @@ const AndroidVideoPlayer: React.FC = () => {
year, year,
streamProvider, streamProvider,
streamName, streamName,
headers,
id, id,
type, type,
episodeId, episodeId,
@ -1129,39 +1130,13 @@ const AndroidVideoPlayer: React.FC = () => {
ref={videoRef} ref={videoRef}
style={[styles.video, customVideoStyles, { transform: [{ scale: zoomScale }] }]} style={[styles.video, customVideoStyles, { transform: [{ scale: zoomScale }] }]}
source={(() => { source={(() => {
// Add specific headers for Xprime streams // Use headers from route params if available, otherwise no headers
const isXprimeStream = currentStreamProvider === 'xprime' || const sourceWithHeaders = headers ? {
currentStreamProvider === 'Xprime' ||
currentStreamUrl?.includes('xprime.tv');
// Debug logging for Xprime detection
console.log('[AndroidVideoPlayer] Xprime Detection Debug:');
console.log(' currentStreamProvider:', currentStreamProvider);
console.log(' currentStreamUrl:', currentStreamUrl);
console.log(' isXprimeStream:', isXprimeStream);
console.log(' URL includes xprime.tv:', currentStreamUrl?.includes('xprime.tv'));
const sourceWithHeaders = isXprimeStream ? {
uri: currentStreamUrl, uri: currentStreamUrl,
headers: { headers: headers
'User-Agent': 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36',
'Accept': 'video/webm,video/ogg,video/*;q=0.9,application/ogg;q=0.7,audio/*;q=0.6,*/*;q=0.5',
'Accept-Language': 'en-US,en;q=0.9',
'Accept-Encoding': 'identity',
'Origin': 'https://xprime.tv',
'Referer': 'https://xprime.tv/',
'Sec-Fetch-Dest': 'video',
'Sec-Fetch-Mode': 'no-cors',
'Sec-Fetch-Site': 'cross-site',
'DNT': '1'
}
} : { uri: currentStreamUrl }; } : { uri: currentStreamUrl };
if (isXprimeStream) { console.log('[AndroidVideoPlayer] Using headers from route params:', headers);
console.log('[AndroidVideoPlayer] Applying Xprime headers:', sourceWithHeaders.headers);
} else {
console.log('[AndroidVideoPlayer] No special headers applied');
}
return sourceWithHeaders; return sourceWithHeaders;
})()} })()}

View file

@ -40,7 +40,7 @@ import { SourcesModal } from './modals/SourcesModal';
const VideoPlayer: React.FC = () => { const VideoPlayer: React.FC = () => {
const route = useRoute<RouteProp<RootStackParamList, 'Player'>>(); const route = useRoute<RouteProp<RootStackParamList, 'Player'>>();
const { streamProvider, uri } = route.params; const { streamProvider, uri, headers } = route.params;
// Check if the stream is from Xprime // Check if the stream is from Xprime
const isXprimeStream = streamProvider === 'xprime' || streamProvider === 'Xprime'; const isXprimeStream = streamProvider === 'xprime' || streamProvider === 'Xprime';
@ -1220,39 +1220,13 @@ const VideoPlayer: React.FC = () => {
ref={vlcRef} ref={vlcRef}
style={[styles.video, customVideoStyles, { transform: [{ scale: zoomScale }] }]} style={[styles.video, customVideoStyles, { transform: [{ scale: zoomScale }] }]}
source={(() => { source={(() => {
// Add specific headers for Xprime streams // Use headers from route params if available, otherwise no headers
const isXprimeStream = currentStreamProvider === 'xprime' || const sourceWithHeaders = headers ? {
currentStreamProvider === 'Xprime' ||
currentStreamUrl?.includes('xprime.tv');
// Debug logging for Xprime detection
console.log('[VideoPlayer] Xprime Detection Debug:');
console.log(' currentStreamProvider:', currentStreamProvider);
console.log(' currentStreamUrl:', currentStreamUrl);
console.log(' isXprimeStream:', isXprimeStream);
console.log(' URL includes xprime.tv:', currentStreamUrl?.includes('xprime.tv'));
const sourceWithHeaders = isXprimeStream ? {
uri: currentStreamUrl, uri: currentStreamUrl,
headers: { headers: headers
'User-Agent': 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36',
'Accept': 'video/webm,video/ogg,video/*;q=0.9,application/ogg;q=0.7,audio/*;q=0.6,*/*;q=0.5',
'Accept-Language': 'en-US,en;q=0.9',
'Accept-Encoding': 'identity',
'Origin': 'https://xprime.tv',
'Referer': 'https://xprime.tv/',
'Sec-Fetch-Dest': 'video',
'Sec-Fetch-Mode': 'no-cors',
'Sec-Fetch-Site': 'cross-site',
'DNT': '1'
}
} : { uri: currentStreamUrl }; } : { uri: currentStreamUrl };
if (isXprimeStream) { console.log('[VideoPlayer] Using headers from route params:', headers);
console.log('[VideoPlayer] Applying Xprime headers:', sourceWithHeaders.headers);
} else {
console.log('[VideoPlayer] No special headers applied');
}
return sourceWithHeaders; return sourceWithHeaders;
})()} })()}

View file

@ -79,6 +79,7 @@ export type RootStackParamList = {
year?: number; year?: number;
streamProvider?: string; streamProvider?: string;
streamName?: string; streamName?: string;
headers?: { [key: string]: string };
id?: string; id?: string;
type?: string; type?: string;
episodeId?: string; episodeId?: string;

View file

@ -672,6 +672,7 @@ export const StreamsScreen = () => {
year: metadata?.year, year: metadata?.year,
streamProvider: streamProvider, streamProvider: streamProvider,
streamName: streamName, streamName: streamName,
headers: stream.headers || undefined,
id, id,
type, type,
episodeId: type === 'series' && selectedEpisode ? selectedEpisode : undefined, episodeId: type === 'series' && selectedEpisode ? selectedEpisode : undefined,

View file

@ -669,6 +669,11 @@ class LocalScraperService {
stream.quality = result.quality; stream.quality = result.quality;
} }
// Pass headers from scraper result if available
if (result.headers) {
stream.headers = result.headers;
}
return stream; return stream;
}).filter(stream => stream.url); // Filter out streams without URLs }).filter(stream => stream.url); // Filter out streams without URLs
} }

View file

@ -11,11 +11,7 @@ export interface Stream {
quality?: string; quality?: string;
type?: string; type?: string;
lang?: string; lang?: string;
headers?: { headers?: { [key: string]: string };
Referer?: string;
'User-Agent'?: string;
Origin?: string;
};
files?: { files?: {
file: string; file: string;
type: string; type: string;
@ -40,4 +36,4 @@ export interface GroupedStreams {
addonName: string; addonName: string;
streams: Stream[]; streams: Stream[];
}; };
} }