Nginx反向代理导致NAudio播放音频出现白噪声问题排查
TTS工具切换Nginx域名访问后NAudio播放出现白噪声问题
我正尝试将TTS工具的访问方式从直接IP切换为Nginx管控的域名访问,其他功能均正常,但程序中的NAudio播放音频时出现白噪声(偶尔夹杂正常音频)。
使用的代码未发生变更,直接通过URL调用流功能可播放无错误音频,甚至在播放含白噪声的流后将其保存到本地,得到的仍是完整正常的音频文件。因此想了解:Nginx/域名访问是否会修改请求响应?或者有什么方法可以自行验证?
请求音频流的代码
HttpClient httpClient = new HttpClient(); httpClient.BaseAddress = new Uri(data.BaseUrl); httpClient.Timeout = TimeSpan.FromSeconds(2); HttpResponseMessage res = null; try { var uriBuilder = new UriBuilder(data.BaseUrl); uriBuilder.Path = data.StreamPath; var query = HttpUtility.ParseQueryString(uriBuilder.Query); query["text"] = voiceLine; query["voice"] = voice; query["language"] = getAlltalkLanguage(language); query["output_file"] = "ignoreme.wav"; uriBuilder.Query = query.ToString(); LogHelper.Debug(MethodBase.GetCurrentMethod().Name, $"Requesting... {uriBuilder.Uri}", eventId); using var req = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri); res = await httpClient.SendAsync(req, HttpCompletionOption.ResponseHeadersRead).ConfigureAwait(false); EnsureSuccessStatusCode(res); // Copy the sound to a new buffer and enqueue it LogHelper.Info(MethodBase.GetCurrentMethod().Name, "Getting response...", eventId); var responseStream = await res.Content.ReadAsStreamAsync().ConfigureAwait(false); LogHelper.Info(MethodBase.GetCurrentMethod().Name, "Done", eventId); return responseStream ; } catch (Exception ex) { LogHelper.Error(MethodBase.GetCurrentMethod().Name, ex.ToString(), eventId); }
播放流的代码
CurrentlyPlayingStream = queueItem; var stream = new RawSourceWaveStream(queueItem, new NAudio.Wave.WaveFormat(24000, 16, 1)); LogHelper.Info(MethodBase.GetCurrentMethod().Name, "Playing next queue item", eventId); var volumeSampleProvider = new VolumeSampleProvider(stream.ToSampleProvider()); volumeSampleProvider.Volume = Volume; ActivePlayer = new WasapiOut(AudioClientShareMode.Shared, 0); ActivePlayer.PlaybackStopped += SoundOut_PlaybackStopped; ActivePlayer.Init(volumeSampleProvider); ActivePlayer.Play();
编辑1
我在Docker环境中使用Nginx Proxy Manager(NPM),无自定义配置。
已尝试的操作:
- 禁用Nginx/通过Domain:Port访问,排除域名问题;
- 设置
gzip off;; - 禁用SSL;
以上操作均未解决问题。
编辑2
经过数小时调试,怀疑某些数据包的传输方式不符合NAudio直接播放流的要求,但通过NAudio保存后却正常。是否可能是Nginx偶尔传输延迟导致?(播放的音频中随机出现白噪声,每次情况不同)
内容的提问来源于stack exchange,提问作者Jkatzwinkel
相关产品推荐
相关产品推荐

