C# WPF-一次播放mediaelement的限制
我有在文件夹中搜索视频的功能。对于该文件夹中的每个视频文件,我将添加MediaElement并开始播放。当我有CCA10视频时,一切都很好。然后我添加了一些视频,将视图元素从网格更改为画布(因为性能),现在一些mediaelement没有显示(它们应该在空白处)。这不是一个相同的视频。大多数情况下,这些都发生在稍后处理的视频上,但并不总是如此。有人知道哪里会出问题吗?我认为它的性能没有问题,因为其他视频播放正常,应用程序运行良好。那么是否存在一些限制?或者我做错了什么?测试视频为.wmv和低质量(320x240) 视图:C# WPF-一次播放mediaelement的限制,c#,wpf,performance,mediaelement,C#,Wpf,Performance,Mediaelement,我有在文件夹中搜索视频的功能。对于该文件夹中的每个视频文件,我将添加MediaElement并开始播放。当我有CCA10视频时,一切都很好。然后我添加了一些视频,将视图元素从网格更改为画布(因为性能),现在一些mediaelement没有显示(它们应该在空白处)。这不是一个相同的视频。大多数情况下,这些都发生在稍后处理的视频上,但并不总是如此。有人知道哪里会出问题吗?我认为它的性能没有问题,因为其他视频播放正常,应用程序运行良好。那么是否存在一些限制?或者我做错了什么?测试视频为.wmv和低质量
没问题。MediaElement是个垃圾,有很多灾难性的bug。只要你只使用一种媒体元素和质量不好的视频就可以了
求助于您自己的DirectShow解决方案或查看WPF MediaKit。没有问题。MediaElement是个垃圾,有很多灾难性的bug。只要你只使用一种媒体元素和质量不好的视频就可以了
求助于您自己的DirectShow解决方案或查看WPF MediaKit。我将此问题保留了一段时间,但您可能是对的。现在,我正在尝试MediaKit。您是否尝试了仅在代码中创建MediaUriElement?我可以在xaml中创建播放视频,但在所有代码中我都有问题。没有显示任何内容,也没有错误消息。我在codeplax的讨论中发现了同样的问题,但还没有找到在代码中创建MediaUriElement的示例。MediaUriElement可以在代码中创建。设置属性前后必须有
BeginInit()
和EndInit()
方法。谢谢你。MediaKit真的很好用。我把它打开了一段时间,但你可能是对的。现在,我正在尝试MediaKit。您是否尝试了仅在代码中创建MediaUriElement?我可以在xaml中创建播放视频,但在所有代码中我都有问题。没有显示任何内容,也没有错误消息。我在codeplax的讨论中发现了同样的问题,但还没有找到在代码中创建MediaUriElement的示例。MediaUriElement可以在代码中创建。设置属性前后必须有BeginInit()
和EndInit()
方法。谢谢你。MediaKit真的很好用。
<Canvas x:Name="mainCanvas">
<ScrollViewer HorizontalScrollBarVisibility="Auto" Width="1680" Height="750">
<Canvas x:Name="videoCanvas">
</Canvas>
</ScrollViewer>
</Canvas>
public MainWindow()
{
InitializeComponent();
this.WindowStyle = WindowStyle.None;
this.WindowState = WindowState.Maximized;
getAllVideosFromFolder(System.IO.Path.GetFullPath(@"Videos\"));
}
private void getAllVideosFromFolder(string path)
{
try
{
var videoFiles = DirectoryHelper.GetFilesByExtensions(new DirectoryInfo(path), ".wmv", ".mp4", ".avi", ".mov");
int i = 0, j = 0;
foreach (var item in videoFiles)
{
MediaElement melem = createMediaElementForPreview(item.FileName);
Canvas.SetTop(melem, i * 250);
Canvas.SetLeft(melem, j * 340);
videoCanvas.Children.Add(melem);
i++;
if (i > 2)
{
i = 0;
j++;
}
videos.Add(videoClass);
}
videoCanvas.Width = j * 340;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private MediaElement createMediaElementForPreview(string sourcePath)
{
MediaElement melem = new MediaElement();
melem.LoadedBehavior = MediaState.Manual;
melem.Source = new Uri(sourcePath, UriKind.Relative);
melem.Width = 320;
melem.Height = 240;
melem.Volume = 0;
melem.Play();
melem.MouseDown += melem_MouseDown;
return melem;
}