我有一个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()
,但没有改变任何内容。
在客户端,我使用soundmanger2播放音频流。这是配置:
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处理程序开始写入后,有没有办法“立即”收听音频流?
答案 0 :(得分:0)
我使用Outputstream
的Method BeginFlush()解决了这个问题