2013-07-28 121 views
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處理程序啓動後寫呢?

回答

0

我用OutputStream的BeginFlush()方法解決了它

相關問題