自制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,呵呵,死循环吧,没关系,自己加一个信号变量就行了。这我不再详述了。
效果图:
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,呵呵,死循环吧,没关系,自己加一个信号变量就行了。这我不再详述了。
相关文章推荐
- 自制一个视频播放控件
- Android高级控件(四)——VideoView 实现引导页播放视频欢迎效果,超级简单却十分的炫酷
- iOS视频播放Demo VideoPlayerDemo
- 转---做笔记---引导页全屏视频播放控件
- JieCaoVideoPlayer节操视频播放控件
- c#里什么控件可以播放视频(avi)?怎么实现
- directshow学习笔记四-----视频预览(将预览视频播放到指定picture控件中,个人学习所用,仅供参考)
- videoplayer播放视频
- 玩转Android之在线视频播放控件Vitamio的使用
- cocos2d-x视频控件VideoPlayer的用户操作栏进度条去除
- opencv2在MFC对话框控件中显示图片播放视频
- Android 仿今日头条视频播放控件JieCaoVideoPlayer(几行代码快速实现)
- 写了个html5播放视频的video控件,只支持mp4和3gp(android和ios默认支持的格式就写了这个)
- unity5.6新功能VideoPlayer播放声音,判断视频播放完毕,以及遇到的坑总结
- C# 使用WPF 用MediaElement控件实现视频循环播放
- 一个html5播放视频的video控件只支持android的默认格式mp4和3gp
- 关于Unity3D VideoPlayer播放视频中的声音的问题
- quick-cocos2dx使用videoPlayer播放视频
- android之视频播放控件VideoView简单应用
- 使用vitamio4.0控件,播放视频花屏