ASHX立即向客户端发送响应

本文关键字:响应 客户端 ASHX | 更新日期: 2023-09-27 18:25:17

我有一个ASHX处理程序,我想用它将音频(wav)文件流式传输到客户端。我使用BASS.net在流式传输之前对音频应用效果。

问题是读取BASS流需要一些时间。

这是代码:

Stream outStream = context.Response.OutputStream;
int length = 0;
context.Response.Buffer = true;
context.Response.ContentType = "audio/mpeg";
short[] data = new short[32768];
WaveWriterStream WW = new WaveWriterStream(outStream, bassStream);
do {
  length = Bass.BASS_ChannelGetData(bassStream, data, 32768);
  if (length > 0)
    WW.Write(data, length);
} while (length > 0);

循环大约需要8秒才能完成。。。如果你在浏览器中点击音频播放器并想听一些东西,这将是一段相当长的时间。

我在每次写入操作后都添加了一个Flush(),但这并没有改变任何内容。

在客户端,我使用soundmanager2来播放音频流。这是配置:

soundManager.setup({
  url: 'soundmanagerv297a-20130512/swf/',
  waitForWindowLoad: true,
  ontimeout: function () {
    soundManager.useHTML5Audio = true;
    soundManager.preferFlash = false;
    soundManager.reboot();
  },
  flashVersion: 9, // optional: shiny features (default = 8)
  // optional: ignore Flash where possible, use 100% HTML5 mode
  // preferFlash: false,
  preferFlash: false,
  onready: function () {
    player = soundManager.createSound({
      id: 'mySound',
      url: 'http://localhost:4261/AudioHandler.ashx',
      autoLoad: true,
      autoPlay: true,
      onload: function () {
        alert('The sound ' + this.id + ' loaded!');
      },
      volume: 50
    });
  }
});

那么,在ASHX处理程序开始写入音频流后,有什么方法可以"立即"收听音频流吗?

ASHX立即向客户端发送响应

我用Outputstream 的Method BeginFlush()解决了这个问题