背景
我正在尝试使用在这里找到的MediaStreamSource实现,在Silverlight 4中流式传输波形文件。问题是我想在文件仍在缓冲时播放它,或者至少在它缓冲时向用户提供一些视觉反馈。目前我的代码看起来像这样:
private void button1_Click(object sender, RoutedEventArgs e)
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(new Uri(App.Current.Host.Source, "../test.wav"));
//request.ContentType = "audio/x-wav";
request.AllowReadStreamBuffering = false;
request.BeginGetResponse(new AsyncCallback(RequestCallback), request);
}
private void RequestCallback(IAsyncResult ar)
{
this.Dispatcher.BeginInvoke(delegate()
{
HttpWebRequest request = (HttpWebRequest)ar.AsyncState;
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(ar);
WaveMediaStreamSource wavMss = new WaveMediaStreamSource(response.GetResponseStream());
try
{
me.SetSource(wavMss);
}
catch (InvalidOperationException)
{
// This file is not valid
}
me.Play();
});
}
问题在于设置了request.AllowReadStreamBuffering = false
后,该流不支持寻址,上述实现会抛出异常(请注意,我已将部分位置设置逻辑放入 if(stream.CanSeek)
块中):
当禁用缓冲区时,在主线程上不支持读取
问题
在Silverlight 4中有没有一种方法可以播放未经预先缓冲的WAV流?