import React, { useState, useRef, useEffect } from 'react'; import { View, StyleSheet, TouchableOpacity, Dimensions, ActivityIndicator, Platform, } from 'react-native'; import { Video, ResizeMode, AVPlaybackStatus } from 'expo-av'; import { Image } from 'expo-image'; import { ThemedView } from '@/components/themed-view'; import { useThemeColor } from '@/hooks/use-theme-color'; import { extractVideoMetadata, calculateOptimalVideoSize, getVideoFileType, isValidVideoUrl } from '@/utils/video-utils'; const { width: screenWidth } = Dimensions.get('window'); export interface VideoPlayerProps { source: { uri: string }; poster?: string; style?: any; resizeMode?: ResizeMode; shouldPlay?: boolean; isLooping?: boolean; isMuted?: boolean; useNativeControls?: boolean; showPoster?: boolean; autoPlay?: boolean; maxHeight?: number; aspectRatio?: number; onReady?: (status: AVPlaybackStatus) => void; onWebLoadedData?: () => void; onError?: (error: any) => void; onPress?: () => void; fullscreenMode?: boolean; // 新增:全屏模式标志 } export function VideoPlayer({ source, poster, style, resizeMode = ResizeMode.CONTAIN, shouldPlay = false, isLooping = true, isMuted = true, useNativeControls = false, showPoster = true, autoPlay = false, maxHeight, aspectRatio, onReady, onWebLoadedData, onError, onPress, fullscreenMode = false, // 新增:默认非全屏模式 }: VideoPlayerProps) { const videoRef = useRef