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 は完全にたわごとであり、多くの壊滅的なバグがあります。メディア要素を 1 つだけ使用し、品質の低い動画を使用する限り問題ありません。

独自の DirectShow ソリューションに頼るか、WPF MediaKit を参照してください。

于 2012-10-18T17:11:16.757 に答える