Silverlight SL媒体元素赢得';I don’第一次之后,我不会播放我的wave文件

Silverlight SL媒体元素赢得';I don’第一次之后,我不会播放我的wave文件,silverlight,wav,mediaelement,wavmss,Silverlight,Wav,Mediaelement,Wavmss,我使用library在silverlight媒体元素上播放wave文件。 当我第一次将文件加载到元素中时,它会播放,但当我第二次尝试播放时,它不会播放。 我用的是来自中国的样品 也许我遗漏了什么,这是我打开wave文件并首次成功播放的代码,这是我的媒体元素中的文件读取和设置为源: OpenFileDialog openFileDialog = new OpenFileDialog(); MemoryStream audioSource = new MemoryStream(); if

我使用library在silverlight媒体元素上播放wave文件。
当我第一次将文件加载到元素中时,它会播放,但当我第二次尝试播放时,它不会播放。
我用的是来自中国的样品

也许我遗漏了什么,这是我打开wave文件并首次成功播放的代码,这是我的媒体元素中的文件读取和设置为源:

OpenFileDialog openFileDialog = new OpenFileDialog();    
MemoryStream audioSource = new MemoryStream();

if (openFileDialog.ShowDialog() == true)    
{    
   using (FileStream fileStream = openFileDialog.File.OpenRead())    
   {    
       audioSource.SetLength(fileStream.Length);    
       fileStream.Read(audioSource.GetBuffer(), 0, (int)fileStream.Length);    
   }    
}

WaveMSS.WaveMediaStreamSource audioStreamSource = 
                 new WaveMSS.WaveMediaStreamSource(audioSource);

mediaElement1.SetSource(audioStreamSource);
当第一次播放结束时(我知道这是因为我参加了
\u mediaeend
活动),我不能再播放这段视频了

我试图设置MediaElement的位置,但未能再次播放:

mediaElement1.Position = TimeSpan.FromSeconds(0);
mediaElement1.Play();
我调试了它,Position属性设置为零,但当我尝试再次单击play(播放)时,Position属性移到末尾,并且再次弹出
\u MediaEnded
事件


我能做什么?

在MediaEnded事件中,将“sender”强制转换为MediaElement并调用Stop()。这将重置对象,以便您可以再次播放。

多亏了Gilles Khouzam,问题才得以解决

好的,我发现了问题。SeekAsync的实现 流中的已更改,但块中的剩余计数已更改 不在WaveMediaStreamSource.cs中,查找SeekAsync方法和 将代码更改为(添加MoveToChunkOffest行):


这不起作用,因为问题不在于SL MediaElement,而在于使用WaveMediaStreamSource解析的wave文件。
this.currentPosition = this.wavParser.WaveFormatEx.BufferSizeFromAudioDuration( seekToTime ) + this.startPosition;
this.wavParser.MoveToChunkOffset( ( uint ) this.wavParser.WaveFormatEx.BufferSizeFromAudioDuration( seekToTime ) );
this.currentTimeStamp = seekToTime;
ReportSeekCompleted( seekToTime );