TTS audio fails to play in the browser

用户在 Dify ChatFlow 中配置了 Tongyi 的 qwen3-tts-flash 模型进行文本转语音,API 请求和响应均返回正常,但网页端点击播放按钮后无声音,浏览器控制台也没有相关日志。用户通过 curl 重放 API 请求并保存为 text.mp3 ,该文件可在 PotPlaye

TTS audio fails to play in the browser

TTS audio fails to play in the browser

快速结论:该问题发生在 Dify 自托管 (Docker) 环境下,使用通义千问 qwen3-tts-flash 模型进行 TTS 时,浏览器无法播放音频。核心原因是音频格式不匹配:Tongyi 插件实际返回 WAV 数据,但 Dify 核心硬编码了 audio/mpeg Content-Type,导致浏览器解码失败。优先排查 Tongyi 插件的 audio_type 配置是否与实际输出一致。

问题场景

用户在 Dify ChatFlow 中配置了 Tongyi 的 qwen3-tts-flash 模型进行文本转语音,API 请求和响应均返回正常,但网页端点击播放按钮后无声音,浏览器控制台也没有相关日志。用户通过 curl 重放 API 请求并保存为 text.mp3,该文件可在 PotPlayer 中正常播放;但在浏览器控制台中直接使用 JavaScript 测试播放时,音频可以正常播放。

报错原文

Firefox: Uncaught DOMException: MediaSource.addSourceBuffer: Type not supported in MediaSource
Edge:  Uncaught (in promise) NotSupportedError: Failed to load because no supported source was found.

原因分析

根本原因是音频格式不匹配。Tongyi 的 qwen3-tts-flash 模型在 models/tongyi/models/tts/qwen3-tts-flash.yaml 中声明了 audio_type: mp3,但 Tongyi TTS 实现未指定输出格式,直接返回下载的音频字节(实际是 WAV 数据:RIFF....WAVE, PCM 24 kHz)。Dify 核心硬编码了 Content-Type: audio/mpeg,Web 客户端也按照 audio/mpeg 创建 MediaSource buffer。浏览器尝试将 WAV 字节作为 MP3 解码,因此失败。下载后的音频文件作为 WAV 可以正常播放。

环境排查

  • Dify 版本:1.14.0(升级到 1.14.1 后问题仍然存在)
  • 部署方式:Self Hosted (Docker)
  • 模型:Tongyi qwen3-tts-flash
  • 浏览器:Mozilla Firefox 和 Microsoft Edge 均复现
  • 检查 Tongyi 插件 qwen3-tts-flash.yaml 中的 audio_type 是否与真实返回格式一致

解决步骤

  1. 检查 Tongyi 插件的 models/tongyi/models/tts/qwen3-tts-flash.yaml 配置文件,确认 audio_type: mp3 是否与实际输出格式匹配。如果实际返回 WAV,应修改为 audio_type: wav
  2. 在 Tongyi TTS 实现代码中,检查是否有指定输出格式的参数。如果 API 支持,应强制请求 mp3 格式以匹配 Dify 的硬编码。
  3. 在 Dify 核心代码中,避免对 audio/mpeg 进行硬编码,改为根据 provider 实际返回的 Content-Type 动态设置,或至少增加对 WAV 格式的支持。
  4. 用户可优先尝试手动修改 Tongyi 插件的配置或代码,确保声明的音频类型与返回的实际数据一致。
  5. 如果以上步骤不可行,可参考 PR #35901 的修复,但注意该 PR 主要解决 AudioContext 状态问题,并未处理 WAV/MP3 不匹配,因此仍需单独修复格式问题。

验证方法

修改配置或代码后,在浏览器中重新触发 TTS 播放,观察音频是否能正常播放。同时检查浏览器开发者工具的 Network 面板,确认响应的 Content-Type 与实际音频数据格式一致(例如,如果返回 WAV,应为 audio/wav)。如果仍出现 NotSupportedErrorMediaSource.addSourceBuffer: Type not supported 错误,说明格式不匹配问题未解决。

参考来源

langgenius/dify #35880

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

celebrityanime
celebrityanime
文章: 14702

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注