2009-12-19 67 views
0

嘿家伙我谈到wpf时相当绿色,所以我需要一点帮助,这里是我想要做的。Wpf自定义媒体元素

我想要创建一个自定义媒体元素,我希望能够加载视频并播放视频中15秒到1分钟的任何位置,我希望能够基于用户设置。我正在将大量的视频加载到列表视图控件中,我希望视频可以播放,但是我只是通过播放视频的小预览来节省资源。

事情我已经看着

  • 自定义控件 - 多少有些失落
  • 继承
  • 预先建立控制

我只是对下一步去哪里真的不确定。我会极大地认可你可以给我的任何帮助。

+0

您是否在尝试构建可下载预览视频的内容,然后您会处理一个事件清除窗口并下载并播放完整视频?或者可以下载完整视频的东西,但最初只播放片段(但可以播放完整视频)?或者一些中间行为?可能有各种方法来实现你想要的,但它将取决于你想要自定义元素的工作方式。 – itowlson 2009-12-19 01:00:47

+0

我现在正在做的是循环浏览我的视频文件夹,并将媒体元素添加到滚动查看器侧面的堆叠面板中。所以我可以有大约5-20个vids,我正在尝试构建一个自助服务终端应用程序,因此视频数量可能会有所不同。我最初的想法是视频在15秒-1分钟之间播放,循环播放。这样用户可以知道它的视频而不是图片(我有一个单独的滚动查看器)。我真的想削减这个程序会消耗的资源,因为硬件会有所不同。试图剪辑VID它可能不是要走的路,Idk,也许更好的线程? – nagates 2009-12-19 01:12:13

回答

1

考虑到您的意见扩展的要求,我建议您使用正常的MediaElement,但分配给它一个“预览”版本的视频,只包括你想要显示的片段和降低分辨率,以便保持负载足迹。

因此,您的模型将具有两个属性,称为PreviewUri和SourceUri。在PreviewUri中,您存储视频的“预览”版本;在SourceUri中,您存储“完整”版本。在您的ListBox或ItemsControl中,您将使用绑定到PreviewUri的MediaElements。当用户进行选择时,您将主MediaElement的Source设置为SourceUri。所以,你的列表框会是这个样子:

<ListBox ItemsSource="{Binding}"> 
    <ListBox.ItemTemplate> 
    <DataTemplate> 
     <MediaElement Source="{Binding PreviewUri}" /> 
    </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

你的模型将是这个样子:

public class Video // ideally implement INotifyPropertyChanged - not shown 
{ 
    public Uri PreviewUri { get; set; } 
    public Uri SourceUri { get; set; } 

    public static ObservableCollection<Video> LoadVideoInfo() 
    { 
    /* pseudocode 
    new up a collection 
    foreach (file in videoFolder) 
     collection.Add(new Video { PreviewUri = smallFileUri, SourceUri = bigFileUri }); 
    return collection; 
    */ 
    } 
} 

和后面的代码会是这个样子:

DataContext = Video.LoadVideoInfo(); 

你怎么样显示全尺寸视频将取决于您想要触发的内容以及全尺寸视频显示的位置。使用ListBox而不是循环和向StackPanel添加子项可能会有所帮助,因为您可以使用SelectedItemChanged事件,将数据绑定到SelectedItem或使用IsSynchronizedWithCurrentItem属性。

+0

so mediaElement对象是否启动它自己的线程?因为那是我对改进播放的其他想法。 – nagates 2009-12-19 01:58:41

+0

对不起,我不知道它是如何在内部管理线程的。但是自己创建后台线程可能会很棘手,因为您只能从拥有它们的线程与UI元素进行交互。此外,WPF媒体类(MediaElement,MediaPlayer和MediaTimeline仅公开一个Uri类型的Source属性,因此不清楚如何加载自己异步加载的数据,而不是创建自定义URI方案或其他内容。 – itowlson 2009-12-19 02:11:14