SL媒体元素将在第一次播放后不播放我的wave文件

时间:2013-01-23 13:53:49

标签: silverlight wav mediaelement wavmss

我使用WaveMediaStreamSource (WAVmss)库在silverlight媒体元素上播放wave文件 它是第一次将文件加载到元素中时播放,但是当我第二次尝试播放它时它不会播放。
我使用了来自here的示例。

也许我错过了一些东西,这是我的代码,我打开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);

当第一次播放时(我知道因为我得到_MediaEnded事件),我无法再次播放此视频。

我尝试设置MediaElement的位置但无法再次播放:

mediaElement1.Position = TimeSpan.FromSeconds(0);
mediaElement1.Play();

我调试了它,并且Position属性确实设置为零,但是当我尝试再次点击播放时,位置属性移动到结尾,_MediaEnded事件再次弹出。

我该怎么办?

2 个答案:

答案 0 :(得分:1)

感谢Gilles Khouzam quick response,问题已经解决了。

  

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

this.currentPosition = this.wavParser.WaveFormatEx.BufferSizeFromAudioDuration( seekToTime ) + this.startPosition;
this.wavParser.MoveToChunkOffset( ( uint ) this.wavParser.WaveFormatEx.BufferSizeFromAudioDuration( seekToTime ) );
this.currentTimeStamp = seekToTime;
ReportSeekCompleted( seekToTime );

答案 1 :(得分:0)

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