diff --git a/tauri-app/src-tauri/src/ffmpeg_cmd.rs b/tauri-app/src-tauri/src/ffmpeg_cmd.rs index 4c4b4d0..3a2d39c 100644 --- a/tauri-app/src-tauri/src/ffmpeg_cmd.rs +++ b/tauri-app/src-tauri/src/ffmpeg_cmd.rs @@ -740,9 +740,10 @@ pub async fn transcode_for_preview(app: &AppHandle, input_path: &str) -> Result< // 获取文件元数据用于缓存 key let metadata = std::fs::metadata(input_path) .map_err(|e| format!("无法读取文件元数据: {}", e))?; + // 某些文件系统(如 FAT32)不支持修改时间,失败时回退为 0 let mtime = metadata.modified() - .map_err(|e| format!("无法读取修改时间: {}", e))? - .duration_since(std::time::UNIX_EPOCH) + .ok() + .and_then(|t| t.duration_since(std::time::UNIX_EPOCH).ok()) .unwrap_or_default() .as_secs(); let file_size = metadata.len(); diff --git a/tauri-app/src/hooks/useLocalVideo.ts b/tauri-app/src/hooks/useLocalVideo.ts index ae08c52..12f0e1f 100644 --- a/tauri-app/src/hooks/useLocalVideo.ts +++ b/tauri-app/src/hooks/useLocalVideo.ts @@ -2,7 +2,8 @@ * 本地视频加载 Hook * ================= * - * 使用 Rust Command 路径校验 + convertFileSrc 安全访问本地视频文件。 + * 调用 getPreviewVideoUrl 获取浏览器兼容的预览视频 URL。 + * 首次加载时后台自动转码(H.264 Baseline + YUV420p),缓存后复用。 * 替代原有的 readFile + Blob URL 模式,零内存拷贝,支持 video 标签流式播放与 seek。 */ @@ -16,10 +17,10 @@ interface UseLocalVideoResult { } /** - * 加载本地视频文件,返回 asset:// URL + * 加载本地视频文件,返回预览用的 asset:// URL * * @param filePath 本地文件绝对路径(如 /Users/.../scene_1.mp4) - * @returns asset:// URL 或 undefined + * @returns 转码后的 asset:// URL 或 undefined(远程 URL 直接返回) */ export function useLocalVideo(filePath: string | undefined): UseLocalVideoResult { const [videoUrl, setVideoUrl] = useState(undefined);