import React, { useState } from 'react'; import { View, StyleSheet, Dimensions, Text, Platform, Modal, TouchableOpacity, StatusBar } from 'react-native'; import { Ionicons } from '@expo/vector-icons'; import { NativeVideoPlayer } from './NativeVideoPlayer'; import type { PlayUrlResponse } from '../services/types'; const { width } = Dimensions.get('window'); const VIDEO_HEIGHT = width * 0.5625; interface Props { playData: PlayUrlResponse | null; qualities: { qn: number; desc: string }[]; currentQn: number; onQualityChange: (qn: number) => void; onMiniPlayer?: () => void; onProgress?: (currentTime: number, duration: number) => void; seekTo?: { t: number; v: number }; } export function VideoPlayer({ playData, qualities, currentQn, onQualityChange, onMiniPlayer, onProgress, seekTo }: Props) { const [fullscreen, setFullscreen] = useState(false); if (!playData) { return ( 视频加载中... ); } if (Platform.OS === 'web') { const url = playData.durl?.[0]?.url ?? ''; return ( ); } return ( <> setFullscreen(true)} onMiniPlayer={onMiniPlayer} onProgress={onProgress} seekTo={seekTo} /> ); } const styles = StyleSheet.create({ container: { width, height: VIDEO_HEIGHT, backgroundColor: '#000' }, placeholder: { justifyContent: 'center', alignItems: 'center' }, placeholderText: { color: '#fff', fontSize: 14 }, fullscreenContainer: { flex: 1, backgroundColor: '#000' }, closeBtn: { position: 'absolute', top: 40, right: 16, padding: 8, backgroundColor: 'rgba(0,0,0,0.4)', borderRadius: 20, }, });