您的位置:首页 > 运维架构

自制Silverlight视频播放器(一)-VideoPlayer视频播放控件

2008-04-25 14:58 239 查看
  近期在赶一个客户的项目,采用Silverlight技术制作一个视频播放页面。目前版本基于SL 2 Beta 1开发,已初步完Demo版,现将开发所得经验分享如下:

  效果图:

this.slider.Minimum = 0;

this.slider.Maximum = 100;

double seconds = this.mediaElement1.NaturalDuration.TimeSpan.TotalSeconds;

for (int i = (int)this.slider.Minimum; i < (int)this.slider.Maximum; i++)

double time= e.Marker.Time.TotalSeconds;

double seconds= this.mediaElement1.NaturalDuration.TimeSpan.TotalSeconds;

if (seconds <= 0)

double marker = (time * this.slider.Maximum / seconds);

txtSlider.Text = e.Marker.Time.Hours + ":" + e.Marker.Time.Minutes + ":" + e.Marker.Time.Seconds;

this.slider.Value = marker;
  在此,我们根据当前Marker的时间点与总时长算出播放时间占总时间的比例,然后计算出Slider当前应该的进度值。就OK了,如果要显示当前时长的话,只要txtSlider.Text = e.Marker.Time.Hours + ":" + e.Marker.Time.Minutes + ":" + e.Marker.Time.Seconds;即可。

  然后我们再实现进度条的拖拽功能。

  在Slider.ValueChanged事件中添加以下代码:

double seconds = this.mediaElement1.NaturalDuration.TimeSpan.TotalSeconds;

double time = seconds / this.slider.Maximum * this.slider.Value;

mediaElement1.Position = new TimeSpan(0, 0,(int) time);

  一切搞定!

  不过细心的你可能会发现一个问题,那就是MediaElement.MarkerReaded可以改变Slider.Value,而Slider.Value的改变又会引发Slider.ValueChanged,该事件中又有MediaElement.Position=v,这又会引发MediaElement.MarkerReaded,呵呵,死循环吧,没关系,自己加一个信号变量就行了。这我不再详述了。

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: