最近因为工作中用到Silverlight播放器的,所以接触到一些silverlight的东西,本打算实行拿来主义。谁料拿来的还是有些问题,只能自己修改。
下面对自己遇到的问题归纳一下,供以后的同学参考。
首先,播放器最大的问题就是全屏后视频不能放大。其实关于放大的问题网上有很多文章,但是大都相同。其实只是添加一个缩放的方法。代码如下
:
private static double APP_WIDTH = 498; // Application WIDth 整播放部分(包括下面的进度声音等按钮)的宽度,这个很重要,我
遇到的最后一个问题就是这个,因为这个设置不好,缩放比例就会有问题
private static double APP_HEIGHT = 414; // Application Height 整播放部分(包括下面的进度声音等按钮)的高度
private bool _scale = false; // _scale flag
public MainPage()
{
InitializeComponent();
CompositionTarget.Rendering += new EventHandler(CompositionTarget_Rendering);
Application.Current.Host.Content.FullScreenChanged += new EventHandler(Content_Resized);
}
private voID FullScreenbutton_Click(object sender,RoutedEventArgs e)
{
_scale = !Application.Current.Host.Content.IsFullScreen;
Application.Current.Host.Content.IsFullScreen = !Application.Current.Host.Content.IsFullScreen;
}
voID Content_Resized(object sender,EventArgs e)
{
double currentWIDth = Application.Current.Host.Content.ActualWIDth;
double currentHeight = Application.Current.Host.Content.ActualHeight;
if (_scale)
{
// Scale up the Canvas
Translate.X = 0;
Translate.Y = 0;
Scale.ScaleX = currentWIDth / APP_WIDTH;
Scale.ScaleY = currentHeight / APP_HEIGHT;
}
else
{
// position the Canvas to the center
Translate.X = (currentWIDth - APP_WIDTH) / 2;
Translate.Y = (currentHeight - APP_HEIGHT) / 2;
Scale.ScaleX = 1;
Scale.ScaleY = 1;
}
}
其实方法很简单很容易看懂,可能是因为刚接触的原因,一直不明白 <Scaletransform ScaleX="1" ScaleY="1" x:name="Scale" />在前台页面时怎
么使用的,因为这个问题浪费不少时间,后来多看了几个例子后,豁然发现原来无论是GrID还是MediaElement都有类似这样地方:
<GrID.Rendertransform>//Rendertransform这个在userControl,GrID,MediaElement里面都有。
<transformGroup>
<Scaletransform ScaleX="1" ScaleY="1" x:name="Scale" />
<Translatetransform X="0" Y="0" x:name="Translate" />
</transformGroup>
</GrID.Rendertransform>
加上这些后视频就能正常缩放了。
其次,我的问题是加完这些缩放后视频的位置不正确,视频的左上角在屏幕的中央,这个问题也让我百思不得其解,看了很多资料,貌似都是我上面
那样设置的啊,没有额外的其他了。后来因为后面的问题才发现,其实是因为我只缩放了MediaElement,而这个空间是居中显示的所以视频的位置不
对,视频下面的进度条等的位置也不对,后来对整个这些所在的GrID进行缩放后终于正确。
最后,说下进度条的问题,在上面的问题中发现进度条因为没有缩放,在屏幕的中间,所以就先修改了进度条的隐藏,其实这个很简单。代码如下:
private voID transportControls_MouseLeave(object sender,RoutedEventArgs e)
{
MediaGrID.Height += transportHeight;
//transportControls.Visibility = Visibility.Collapsed;
playPausebutton.Visibility = Visibility.Collapsed;
time.Visibility = Visibility.Collapsed;
mutebutton.Visibility = Visibility.Collapsed;
volumeSlIDer.Visibility = Visibility.Collapsed;
fullScreenbutton.Visibility = Visibility.Collapsed;
}
private voID transportControls_MouseEnter(object sender,RoutedEventArgs e)
{
MediaGrID.Height -= transportHeight;
//transportControls.Visibility = Visibility.Visible;
playPausebutton.Visibility = Visibility.Visible;
time.Visibility = Visibility.Visible;
mutebutton.Visibility = Visibility.Visible;
volumeSlIDer.Visibility = Visibility.Visible;
fullScreenbutton.Visibility = Visibility.Visible;
}
另外,在调试过程中因为缓存问题,消耗不少时间,因为我的silverlight是放到SharePoint网站上的,所以一直在网站上调试,(其实可以使用本
地视频进行调试 :-P),但是IE缓存太厉害了,我把播放器删除后仍能播放,最后发现只要清楚临时文件里所有东西就OK。(临时文件存放位置:C:
/Users/用户名/AppData/Local/Microsoft/windows/Temporary Internet files)总之,因为对Silverlight第一次接触,烦了很多低级错误吧。就此引以为戒吧。
总结以上是内存溢出为你收集整理的关于SilverLight视频播放器全部内容,希望文章能够帮你解决关于SilverLight视频播放器所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)