mirror of
https://github.com/tapframe/NuvioStreaming.git
synced 2026-03-11 17:45:38 +00:00
some fixes
This commit is contained in:
parent
93ddb029a0
commit
6547d38c0e
8 changed files with 24 additions and 70 deletions
|
|
@ -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
|
||||||
|
|
@ -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;
|
||||||
})()}
|
})()}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
})()}
|
})()}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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[];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
Loading…
Reference in a new issue