前段时间,我写了一} {A0是现在流行的文章,并与Silverlight 2中只是极少数的播放器模板的船舶。其中新模板,滚动播放列表已经建立了两个,我想我会测试之一。
不过,我已经有我的视频编码 - 包括所有的章节点缩略图,等,所以我没有要启动内部编码器,有我的项目建设,并从那里开始工作,像我一样最后一次。这一次,我创建一个新的Silverlight 2.0 UserControl的项目在Visual Studio 2008,一个星期或两个工作的新面貌和感觉的网站之前,我决定是时候合并的Expression Encoder模板我的项目。我发现整合这些非常有益的新模板的,但我觉得重要的是要添加模板本身的含义的外观和感觉的球员,是不是在DLL的存储,并不要紧的模板项目打开和编译;只是引用的DLL和Tim的指示后,总是给你标准的Silverlight 2的球员。为了添加的外观和感觉,你必须复制(或合并)模板中的Page.xaml文件的内容到您自己的UserControl。
我的项目,我想要的球员,是一个单独的UserControl,所以我去项目GT,GT新项目的Silverlight用户控制,并把它称为MediPlayer.xaml。接下来,我粘贴一切从C:\ Program Files文件\微软Expression \编码器2 \模板\ EN \ FrostedGallery \来源\ Page.xaml中到我的新MediaPlayer.xaml文件,然后改变的X级:在最高层,以反映我最初的命名空间和类的名称。 (如果您忘记了它是什么,只是撤消您的粘贴,使它记下来,并重新粘贴。)
我也希望我的播放器控制多个页面上,我想它隐藏的大部分时间,只有关闭按钮弹出伪模式"灯箱"格式。要达到这个效果,我只是用{A2}控制,让您可以点击选定的箱子艺术和阅读的提要,观看拖车,并购买Amazon.com。因此,我最初的想法是创建一个新的PlayListItem编程和球员的PlayListCollection中添加的按钮onLeftMouseButtonUp事件。我发现,而这个工作很好地,我最终结束与一个慢慢地被电影的用户点击的顺序由用户生成的播放列表,使其难以跟踪集合中的哪一项是电影,但更重要的是,我无法弄清楚如何充分利用所有的章节的资料,我原计划创建缩略图。我可以创建章项目对象,并将它们添加到自己的PlayListCollection对象,但我无法绑定新的对象,我的球员,因为播放列表中的属性是只读的。
读更多的{A3},我看到了,你可以添加一些XML控制InitParams,但我有24个视频,每个至少有4个章节点的缩略图路径,我并不需要开始输入所有到一个单一的线,了解什么是一场噩梦,将成为不仅难以阅读和维护,而且,它违背了整个MVC分离的代码,数据,和表示层伦理,我们都变得如此附加的。
更多谷歌搜索导致我{A4},它不允许你移动到代码隐藏参数的创建,但似乎需要修补与原来的模板代码,我不反对,但我已经想到了一个更清洁的解决方案。我想要的是一种方法来创建一个XML文件,这种格式包含我的整个播放列表:1: <?xml version="1.0" encoding="utf-8" ?>
2: <playList>
3: <playListItems>
4: <playListItem title="Dr No" description="Trailer"
mediaSource="ClientBin/01_dr_no.wmv"
adaptiveStreaming="False"
thumbSource="ClientBin/01_dr_no_Thumb.jpg" >
5: <chapters>
6: <chapter position="29.176"
thumbnailSource="ClientBin/01_dr_no_MarkerThumb 00.00.29.1760677.jpg"
title="1" />
7: <chapter position="49.374"
thumbnailSource="ClientBin/01_dr_no_MarkerThumb 00.00.49.3748838.jpg"
title="2" />
8: <!-- etc -->
20: </chapters>
21: </playListItem>
22: </playListItems>
23: </playList>
和简单地传递文件到我的球员。 ,我的解决方案横空出世,很轻松:我创建了一个新的类,从ExpressionMediaPlayer.MediaPlayer继承,并增加了一个新的方法会接受我的文件:
这需要一些细微的变化的MediaPlayer.xaml文件,以使其使用我的播放器版本。
首先,我取代的LT;表达:ExpressionPlayergt; LT标签; Bond_Silverlight2:MI6MediaPlayergt;标签,和任何静态资源风格,有一个目标ExpressionPlayer类型:ExpressionPlayer也需要更换,然后一切使用我的新球员。显然,又迈进了一步 - 如何初始化,并通过我的XML播放列表我的新球员。首先,我创造了我的XML文件,在上述的格式。重要的是要注意,我的视频文件和相关的JPEG文件存储在ClientBin文件夹内的Web服务器,而不是内部资源或内容XAP文件,。在我MediaPlayer.xaml的代码隐藏(这是我粘贴到较早,而不是从上面的代码MI6MediaPlayer类的Page.xaml中的用户控件),我呼吁启动方法使用的是我的XML文件的链接:using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
namespace Bond_Silverlight2
{
public partial class MediaPlayer : UserControl
{
public MediaPlayer()
{
InitializeComponent();
this.Loaded += new RoutedEventHandler(MediaPlayer_Loaded);
}
void MediaPlayer_Loaded(object sender, RoutedEventArgs e)
{
Player1.OnStartup("Playlist.xml");
}
private void Button_Click(object sender, RoutedEventArgs e)
{
Player1.Stop();
Visibility = System.Windows.Visibility.Collapsed;
}
}
}
存储的XML文件("; Playlist.xmlquot";)XAP文件中的内容。如果您创建XML文件内使用的Visual Studio项目GT,这应该是默认行为;添加项目"菜单,但如果你没有,你可以检查右击XML文件,选择"属性",检查生成操作quot; Contentquot,并复制到输出目录设置为quot;不要Copyquot。
现在,当我的球员是第一次加载到内存中,我完全播放列表立即可用。| Williarob