
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是否与真实返回格式一致
解决步骤
- 检查 Tongyi 插件的
models/tongyi/models/tts/qwen3-tts-flash.yaml配置文件,确认audio_type: mp3是否与实际输出格式匹配。如果实际返回 WAV,应修改为audio_type: wav。 - 在 Tongyi TTS 实现代码中,检查是否有指定输出格式的参数。如果 API 支持,应强制请求
mp3格式以匹配 Dify 的硬编码。 - 在 Dify 核心代码中,避免对
audio/mpeg进行硬编码,改为根据 provider 实际返回的 Content-Type 动态设置,或至少增加对 WAV 格式的支持。 - 用户可优先尝试手动修改 Tongyi 插件的配置或代码,确保声明的音频类型与返回的实际数据一致。
- 如果以上步骤不可行,可参考 PR #35901 的修复,但注意该 PR 主要解决
AudioContext状态问题,并未处理 WAV/MP3 不匹配,因此仍需单独修复格式问题。
验证方法
修改配置或代码后,在浏览器中重新触发 TTS 播放,观察音频是否能正常播放。同时检查浏览器开发者工具的 Network 面板,确认响应的 Content-Type 与实际音频数据格式一致(例如,如果返回 WAV,应为 audio/wav)。如果仍出现 NotSupportedError 或 MediaSource.addSourceBuffer: Type not supported 错误,说明格式不匹配问题未解决。



