1
我有一個ASHX處理程序,我想用它將音頻(wav)文件流式傳輸到客戶端。我使用BASS.net在流式傳輸前對音頻應用效果。ASHX立即向客戶端發送響應
問題是,從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秒才能完成......一個相當長的時間,如果你在上audioplayer單擊瀏覽器,並要聽的東西。
我在每次寫入操作後都添加了一個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處理程序啓動後寫呢?