import React, { useContext, useState, useRef, useEffect } from 'react'; import { useParams, useNavigate } from 'react-router-dom'; import Container from '@mui/material/Container'; import Typography from '@mui/material/Typography'; import Box from '@mui/material/Box'; import IconButton from '@mui/material/IconButton'; import ArrowBackIcon from '@mui/icons-material/ArrowBack'; import ConfigContext from '../Config'; import ReactPlayer from 'react-player'; const VideoPlayer = () => { const config = useContext(ConfigContext); const { filename } = useParams(); const navigate = useNavigate(); const playerRef = useRef(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [isMobile, setIsMobile] = useState(false); // 检测移动设备 useEffect(() => { const checkMobile = () => { setIsMobile(window.innerWidth <= 768); }; checkMobile(); window.addEventListener('resize', checkMobile); return () => window.removeEventListener('resize', checkMobile); }, []); // 解码文件名 const decodedFilename = decodeURIComponent(filename); const videoUrl = `${window.location.origin}/res/${filename}`; const handleReady = () => { setLoading(false); }; const handleError = (error) => { console.error('Video error:', error); setError('视频加载失败'); setLoading(false); }; // 错误页面 if (error) { return ( navigate(-1)} sx={{ mr: 1 }}> {decodedFilename} {error} ); } return ( {/* 标题栏 */} navigate(-1)} sx={{ color: 'white', mr: 1 }} size={isMobile ? 'small' : 'medium'} > {decodedFilename} {/* 视频播放器容器 */} {loading && ( 加载中... )} {/* 底部信息(移动端显示简化提示) */} {isMobile ? '双击可全屏' : '提示:双击视频可全屏播放'} ); }; export default VideoPlayer;