From 38a113097b614643edec5692346771955a26c10a Mon Sep 17 00:00:00 2001 From: root Date: Fri, 11 Jul 2025 11:44:52 +0800 Subject: [PATCH] fix --- src/components/VideoPlayer.tsx | 56 +++++++++++++++++++++++++++++++--- 1 file changed, 51 insertions(+), 5 deletions(-) diff --git a/src/components/VideoPlayer.tsx b/src/components/VideoPlayer.tsx index 134da03..d797e2e 100644 --- a/src/components/VideoPlayer.tsx +++ b/src/components/VideoPlayer.tsx @@ -25,6 +25,7 @@ const VideoPlayer: React.FC = ({ const [videoSrc, setVideoSrc] = useState('') const [fileExists, setFileExists] = useState(true) const [errorMessage, setErrorMessage] = useState('') + const [loadingMethod, setLoadingMethod] = useState<'convertFileSrc' | 'dataUrl'>('convertFileSrc') useEffect(() => { const checkFileAndSetSrc = async () => { @@ -45,12 +46,23 @@ const VideoPlayer: React.FC = ({ console.log('Video path conversion:', { originalPath: videoPath, convertedSrc: src, - fileExists: exists + fileExists: exists, + pathType: videoPath.includes('\\') ? 'Windows' : 'Unix', + pathLength: videoPath.length }) + // 获取文件详细信息 + try { + const fileInfo = await invoke('get_file_info', { filePath: videoPath }) + console.log('File info:', fileInfo) + } catch (infoError) { + console.warn('Could not get file info:', infoError) + } + setFileExists(true) setErrorMessage('') setVideoSrc(src) + setLoadingMethod('convertFileSrc') } catch (error) { console.error('Error checking file:', error) setFileExists(false) @@ -62,6 +74,23 @@ const VideoPlayer: React.FC = ({ checkFileAndSetSrc() }, [isOpen, videoPath]) + // 备用加载方法:使用data URL + const tryDataUrlMethod = async () => { + if (!videoPath) return + + try { + console.log('Trying data URL method for:', videoPath) + const dataUrl = await invoke('read_video_as_data_url', { filePath: videoPath }) + console.log('Data URL method successful, length:', dataUrl.length) + setVideoSrc(dataUrl) + setLoadingMethod('dataUrl') + setErrorMessage('') + } catch (error) { + console.error('Data URL method failed:', error) + setErrorMessage(`所有加载方法都失败了: ${error}`) + } + } + useEffect(() => { const video = videoRef.current if (!video) return @@ -182,7 +211,16 @@ const VideoPlayer: React.FC = ({

视频加载失败

{errorMessage}

-

文件路径: {videoPath}

+

文件路径: {videoPath}

+

当前加载方法: {loadingMethod}

+ {loadingMethod === 'convertFileSrc' && ( + + )} ) : ( @@ -191,16 +229,24 @@ const VideoPlayer: React.FC = ({ src={videoSrc} className="w-full h-auto max-h-[70vh]" onClick={handlePlayPause} - onError={(e) => { + onError={async (e) => { console.error('Video loading error:', { error: e, videoSrc, originalPath: videoPath, currentTarget: e.currentTarget, networkState: e.currentTarget.networkState, - readyState: e.currentTarget.readyState + readyState: e.currentTarget.readyState, + currentMethod: loadingMethod }) - setErrorMessage('视频加载失败,请检查文件格式和路径') + + // 如果当前使用的是convertFileSrc方法,尝试备用的data URL方法 + if (loadingMethod === 'convertFileSrc') { + console.log('convertFileSrc failed, trying data URL method...') + await tryDataUrlMethod() + } else { + setErrorMessage('视频加载失败,请检查文件格式和路径') + } }} onLoadStart={() => { console.log('Video load started:', videoSrc)