0

我有在文件夹中搜索视频的功能。对于该文件夹中的每个视频文件,我正在添加 MediaElement 并开始播放。当我有 cca​​ 10 视频时,一切都很好。然后我添加了一些视频,将视图元素从网格更改为画布(因为性能),现在一些媒体元素没有显示(它们应该在的地方有空白)。这不是一个相同的视频。大多数情况下,这些发生在稍后处理的视频上,但并非总是如此。有谁知道哪里有问题?我认为这不是性能问题,因为其余视频都可以正常播放并且应用程序运行良好。那么有一些限制吗?或者我做错了什么?测试视频是 .wmv 和低质量 (320x240)。

看法:

<Canvas x:Name="mainCanvas">
            <ScrollViewer HorizontalScrollBarVisibility="Auto" Width="1680" Height="750">
                <Canvas x:Name="videoCanvas">
                </Canvas>
            </ScrollViewer>
</Canvas>

和 MainWindow.xaml.cs 中的代码

 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;
    }
4

1 回答 1

3

没有问题。MediaElement 完全是狗屎,有许多灾难性的错误。只要您只使用一种媒体元素和质量差的视频就可以了。

求助于您自己的 DirectShow 解决方案或查看 WPF MediaKit。

于 2012-10-18T17:11:16.757 回答