这两天在用silverlight做一个媒体播放器,有两项基本功能要实现,即
1 显示当前播放时间
2 跳转到特定时间开始播放
经过查阅资料,实现上述功能可以用MediaElement的Position属性来实现。例如,用javascript获取当前播放时间可以写成这样
fuction GetTime(sender,arg)
{
var host = sender.getHost();
var mediaPlayer = Convert.ToMediaElement(host.content.findName('player));
var curPos = mediaPlayer .get_position();
var array = curPos.Seconds.toString().split('.',2);
var hour = parseInt(array[0]/ 3600);
var minutes = parseInt((array[0]% 3600) / 60);
var seconds = parseInt(array[0]% 60);
var milliseconds = array[1].substring(0,3);
//show time here....
}
上面代码中的Convert.ToMediaElement()方法是由Justin-Josef Angel 提供的intellisense,此处不多介绍。需要注意的是这一句:
curPos.Seconds.toString()
因为position返回的是timespan对象,并且只提供了一个Secondes属性,表示将整个时间换算成秒以后的值,因此只能通过该属性来计算其他时、分、毫秒。
同样,我们可以通过position来定位播放的新时刻:
fuction SetTime(sender,arg)
{
var host = sender.getHost();
var mediaPlayer = Convert.ToMediaElement(host.content.findName('player));
var newPos = "0.10:23:45.345";
mediaPlayer.set_position(newPos);
}
设置position时,并不能直接将一个timespan对象作为参数,例如
var pos = mediaPlayer.get_position();
mediaPlayer.set_position(pos);
执行时就会报错,原因是set_position只接受格式为 天.时:分:秒.毫秒 的字符串。