# 唱歌视频生成失败问题总结 ## 问题现象 多个唱歌视频生成任务失败: - **任务382**: 失败,错误信息显示为"文本上显示"(截断) - **任务384**: 失败,错误信息为"文件下载失败" ## 根本原因 **OSS Bucket配置错误** ### 当前配置(错误) ```env ALIYUN_OSS_BUCKET_NAME=hello12312312 ALIYUN_OSS_ENDPOINT=https://oss-cn-hangzhou.aliyuncs.com ALIYUN_OSS_CDN_DOMAIN=https://hello12312312.oss-cn-hangzhou.aliyuncs.com ``` ### 实际资源位置(正确) 歌曲音频文件存储在: ``` nvlovers.oss-cn-qingdao.aliyuncs.com ``` ### 问题分析 1. **任务382测试结果**: - 图片URL: ✅ 可访问(hello12312312 bucket) - 音频URL: ❌ 404错误(hello12312312 bucket中不存在) 2. **任务384**: - 错误信息:"文件下载失败" - 原因相同:尝试从错误的bucket下载资源 3. **成功案例对比**: - 成功的任务使用:`nvlovers.oss-cn-qingdao.aliyuncs.com` - 失败的任务使用:`hello12312312.oss-cn-hangzhou.aliyuncs.com` ## 为什么会失败 ### 文件下载流程 1. 系统从数据库读取歌曲的音频URL 2. 音频URL指向 `nvlovers` bucket(青岛) 3. 但系统配置使用 `hello12312312` bucket(杭州) 4. 当需要处理音频时,可能会尝试从配置的bucket下载 5. 文件不存在,返回404,任务失败 ### 错误传播 ``` 歌曲音频在 nvlovers bucket ↓ 配置指向 hello12312312 bucket ↓ 下载音频文件失败(404) ↓ 任务失败:"文件下载失败" ``` ## 解决方案 ### 立即修复(推荐) 修改 `.env` 文件,统一使用 `nvlovers` bucket: ```bash # 修改这三行 ALIYUN_OSS_BUCKET_NAME=nvlovers ALIYUN_OSS_ENDPOINT=https://oss-cn-qingdao.aliyuncs.com ALIYUN_OSS_CDN_DOMAIN=https://nvlovers.oss-cn-qingdao.aliyuncs.com ``` ### 操作步骤 1. **停止当前服务** - 双击运行 `杀死端口30101.bat` - 或在终端按 Ctrl+C 2. **修改配置文件** - 打开 `.env` 文件 - 修改上述三行配置 - 保存文件 3. **重启服务** - 双击运行 `启动项目.bat` 4. **验证修复** - 重新尝试生成唱歌视频 - 检查新任务是否成功 ## 验证方法 ### 方法1: 查看新任务的URL ```sql SELECT id, JSON_EXTRACT(payload, '$.audio_url') as audio_url, status, error_msg FROM nf_generation_tasks ORDER BY id DESC LIMIT 5; ``` URL应该包含 `nvlovers.oss-cn-qingdao.aliyuncs.com` ### 方法2: 测试资源可访问性 ```bash python xuniYou/测试任务384资源.py "音频URL" "图片URL" ``` ## 为什么之前有些任务成功了 查看数据库导出,发现: - 任务261-305中,大部分任务是**成功**的 - 这些成功的任务使用的资源URL都指向 `nvlovers` bucket - 失败的任务(262-264, 266, 382, 384)都是因为资源问题 可能的原因: 1. 某些资源(如恋人图片)上传到了 `hello12312312`,可以访问 2. 但歌曲音频都在 `nvlovers`,无法访问 3. 当任务需要下载音频处理时,就会失败 ## 预防措施 ### 1. 统一OSS配置 - 只使用一个bucket - 所有环境使用相同配置 - 避免配置文件不一致 ### 2. 添加资源检查 在生成任务前,检查资源是否可访问: ```python def check_resource_accessible(url): """检查资源是否可访问""" try: response = requests.head(url, timeout=5) return response.status_code == 200 except: return False # 在创建任务前检查 if not check_resource_accessible(audio_url): raise HTTPException(status_code=400, detail="音频文件不可访问") ``` ### 3. 改进错误提示 记录详细的错误信息,包括: - 具体的URL - HTTP状态码 - 完整的错误堆栈 ### 4. 资源迁移 如果需要使用 `hello12312312` bucket: ```bash # 使用ossutil同步资源 ossutil cp -r \ oss://nvlovers/uploads/ \ oss://hello12312312/uploads/ \ --update ``` ## 常见问题 ### Q1: 修改配置后还是失败? A: 确保: 1. 配置文件已保存 2. 服务已重启 3. 没有其他配置文件覆盖(如 `lover/.env`) ### Q2: 如何确认使用的是哪个bucket? A: 查看新创建任务的URL: ```sql SELECT JSON_EXTRACT(payload, '$.audio_url') FROM nf_generation_tasks ORDER BY id DESC LIMIT 1; ``` ### Q3: 需要迁移已有资源吗? A: 如果用户已上传文件到 `hello12312312`: - 方案A: 迁移到 `nvlovers`(推荐) - 方案B: 保留两个bucket,修改代码逻辑 ### Q4: 为什么有两个bucket? A: 可能是: - 测试环境和生产环境使用不同bucket - 配置文件复制时出错 - 多人开发时配置不一致 ## 总结 唱歌视频生成失败的核心问题是OSS配置不一致。修复方法很简单: 1. 修改 `.env` 中的三行配置 2. 重启服务 3. 重新测试 修复后,所有新任务都会使用正确的bucket,不会再出现"文件下载失败"的错误。