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 {
|
||||
src: string;
|
||||
headers?: { [key: string]: string };
|
||||
paused: boolean;
|
||||
volume: number;
|
||||
currentTime: number;
|
||||
|
|
@ -20,6 +21,7 @@ interface VideoPlayerProps {
|
|||
|
||||
export const AndroidVideoPlayer: React.FC<VideoPlayerProps> = ({
|
||||
src,
|
||||
headers,
|
||||
paused,
|
||||
volume,
|
||||
currentTime,
|
||||
|
|
@ -83,7 +85,7 @@ export const AndroidVideoPlayer: React.FC<VideoPlayerProps> = ({
|
|||
return (
|
||||
<Video
|
||||
ref={videoRef}
|
||||
source={{ uri: src }}
|
||||
source={headers ? { uri: src, headers } : { uri: src }}
|
||||
style={{ flex: 1 }}
|
||||
paused={paused}
|
||||
volume={volume}
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
Subproject commit ea7009824e2a9e272520113d63b2d09d6cf8a0e8
|
||||
Subproject commit d2eb5507001e031aaa5d258c390ec56ecfa8f9c8
|
||||
|
|
@ -61,6 +61,7 @@ const AndroidVideoPlayer: React.FC = () => {
|
|||
year,
|
||||
streamProvider,
|
||||
streamName,
|
||||
headers,
|
||||
id,
|
||||
type,
|
||||
episodeId,
|
||||
|
|
@ -1129,39 +1130,13 @@ const AndroidVideoPlayer: React.FC = () => {
|
|||
ref={videoRef}
|
||||
style={[styles.video, customVideoStyles, { transform: [{ scale: zoomScale }] }]}
|
||||
source={(() => {
|
||||
// Add specific headers for Xprime streams
|
||||
const isXprimeStream = currentStreamProvider === 'xprime' ||
|
||||
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 ? {
|
||||
// Use headers from route params if available, otherwise no headers
|
||||
const sourceWithHeaders = headers ? {
|
||||
uri: currentStreamUrl,
|
||||
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'
|
||||
}
|
||||
headers: headers
|
||||
} : { uri: currentStreamUrl };
|
||||
|
||||
if (isXprimeStream) {
|
||||
console.log('[AndroidVideoPlayer] Applying Xprime headers:', sourceWithHeaders.headers);
|
||||
} else {
|
||||
console.log('[AndroidVideoPlayer] No special headers applied');
|
||||
}
|
||||
console.log('[AndroidVideoPlayer] Using headers from route params:', headers);
|
||||
|
||||
return sourceWithHeaders;
|
||||
})()}
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ import { SourcesModal } from './modals/SourcesModal';
|
|||
|
||||
const VideoPlayer: React.FC = () => {
|
||||
const route = useRoute<RouteProp<RootStackParamList, 'Player'>>();
|
||||
const { streamProvider, uri } = route.params;
|
||||
const { streamProvider, uri, headers } = route.params;
|
||||
|
||||
// Check if the stream is from Xprime
|
||||
const isXprimeStream = streamProvider === 'xprime' || streamProvider === 'Xprime';
|
||||
|
|
@ -1220,39 +1220,13 @@ const VideoPlayer: React.FC = () => {
|
|||
ref={vlcRef}
|
||||
style={[styles.video, customVideoStyles, { transform: [{ scale: zoomScale }] }]}
|
||||
source={(() => {
|
||||
// Add specific headers for Xprime streams
|
||||
const isXprimeStream = currentStreamProvider === 'xprime' ||
|
||||
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 ? {
|
||||
// Use headers from route params if available, otherwise no headers
|
||||
const sourceWithHeaders = headers ? {
|
||||
uri: currentStreamUrl,
|
||||
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'
|
||||
}
|
||||
headers: headers
|
||||
} : { uri: currentStreamUrl };
|
||||
|
||||
if (isXprimeStream) {
|
||||
console.log('[VideoPlayer] Applying Xprime headers:', sourceWithHeaders.headers);
|
||||
} else {
|
||||
console.log('[VideoPlayer] No special headers applied');
|
||||
}
|
||||
console.log('[VideoPlayer] Using headers from route params:', headers);
|
||||
|
||||
return sourceWithHeaders;
|
||||
})()}
|
||||
|
|
|
|||
|
|
@ -79,6 +79,7 @@ export type RootStackParamList = {
|
|||
year?: number;
|
||||
streamProvider?: string;
|
||||
streamName?: string;
|
||||
headers?: { [key: string]: string };
|
||||
id?: string;
|
||||
type?: string;
|
||||
episodeId?: string;
|
||||
|
|
|
|||
|
|
@ -672,6 +672,7 @@ export const StreamsScreen = () => {
|
|||
year: metadata?.year,
|
||||
streamProvider: streamProvider,
|
||||
streamName: streamName,
|
||||
headers: stream.headers || undefined,
|
||||
id,
|
||||
type,
|
||||
episodeId: type === 'series' && selectedEpisode ? selectedEpisode : undefined,
|
||||
|
|
|
|||
|
|
@ -669,6 +669,11 @@ class LocalScraperService {
|
|||
stream.quality = result.quality;
|
||||
}
|
||||
|
||||
// Pass headers from scraper result if available
|
||||
if (result.headers) {
|
||||
stream.headers = result.headers;
|
||||
}
|
||||
|
||||
return stream;
|
||||
}).filter(stream => stream.url); // Filter out streams without URLs
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,11 +11,7 @@ export interface Stream {
|
|||
quality?: string;
|
||||
type?: string;
|
||||
lang?: string;
|
||||
headers?: {
|
||||
Referer?: string;
|
||||
'User-Agent'?: string;
|
||||
Origin?: string;
|
||||
};
|
||||
headers?: { [key: string]: string };
|
||||
files?: {
|
||||
file: string;
|
||||
type: string;
|
||||
|
|
|
|||
Loading…
Reference in a new issue