diff --git a/__pycache__/server.cpython-310.pyc b/__pycache__/server.cpython-310.pyc index 06ec19b..db54a06 100644 Binary files a/__pycache__/server.cpython-310.pyc and b/__pycache__/server.cpython-310.pyc differ diff --git a/__pycache__/tts_service.cpython-310.pyc b/__pycache__/tts_service.cpython-310.pyc index 998696a..bc478ac 100644 Binary files a/__pycache__/tts_service.cpython-310.pyc and b/__pycache__/tts_service.cpython-310.pyc differ diff --git a/logs/server.log b/logs/server.log index 7847176..43a164a 100644 Binary files a/logs/server.log and b/logs/server.log differ diff --git a/server.py b/server.py index ac5a0db..9865d4e 100644 --- a/server.py +++ b/server.py @@ -12,7 +12,7 @@ import aiohttp from fastapi import FastAPI, UploadFile, File, HTTPException, Form from fastapi.middleware.cors import CORSMiddleware from fastapi.staticfiles import StaticFiles -from fastapi.responses import FileResponse +from fastapi.responses import FileResponse, Response from pydantic import BaseModel # 导入 TTS 服务 @@ -255,6 +255,34 @@ async def synthesize_tts(text: str = Form(...), provider: Optional[str] = Form(N app.mount("/audio", StaticFiles(directory=AUDIO_DIR), name="audio") +# ChatTTS 音频代理(解决 HTTPS 页面访问 HTTP 资源问题) +@app.get("/chattts/audio/{filename}") +async def proxy_chattts_audio(filename: str): + """代理 ChatTTS 音频文件""" + import aiohttp + + chattts_url = os.getenv("CHATTTS_URL", "http://192.168.2.5:12002") + + try: + async with aiohttp.ClientSession() as session: + async with session.get( + f"{chattts_url}/audio/{filename}", + timeout=aiohttp.ClientTimeout(total=30) + ) as resp: + if resp.status != 200: + raise HTTPException(status_code=404, detail="Audio not found") + + audio_data = await resp.read() + return Response( + content=audio_data, + media_type="audio/wav", + headers={"Cache-Control": "public, max-age=3600"} + ) + except Exception as e: + logger.error(f"Proxy audio error: {e}") + raise HTTPException(status_code=500, detail=str(e)) + + if __name__ == "__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=PORT) \ No newline at end of file diff --git a/tts_service.py b/tts_service.py index b104d1f..f333c88 100644 --- a/tts_service.py +++ b/tts_service.py @@ -134,8 +134,12 @@ class ChatTTSProvider(TTSProvider): raise Exception(f"ChatTTS error: {error}") data = await resp.json() - # ChatTTS 返回的 URL 是相对路径,需要拼接 - audio_url = f"{self.CHATTTS_URL}{data['audio_url']}" + # ChatTTS 返回的 URL 是 /audio/xxx.wav + # 改用本地代理路径(解决 HTTPS 页面访问 HTTP 问题) + original_url = data['audio_url'] + # /audio/xxx.wav -> /chattts/audio/xxx.wav (通过本地代理) + filename = original_url.split('/')[-1] + audio_url = f"/chattts/audio/{filename}" return None, audio_url def get_name(self) -> str: