为什么MediaElement有时会无声地失败,我该如何纠正呢?

在我的WPF项目中,我创建了一个包含多个MediaElements播放video的视图。 有时,在一个或所有MediaElements之间的任何地方都无法播放分配给它们的video,而是显示黑色矩形,或根本不显示。 发生这种情况时,不会发生MediaFailed事件。 即使不播放video,MediaOpened事件也会在所有MediaElements上出现。

我已经为我的显卡安装了最新的驱动程序,这对此问题没有任何影响。

是否有一个程序可以用来确保每个MediaElement一直播放?

示例源代码如下。 包含video文件的完整示例项目位于github, url为https://github.com/duggulous/MediaElementIssueExample

MainWindow.xaml

                             

MainWindow.xaml.cs

 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace VideoDemo { ///  /// Interaction logic for MainWindow.xaml ///  public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void panel1_MediaOpened(object sender, RoutedEventArgs e) { Console.WriteLine("Opened: "+((MediaElement)sender).Source); } private void panel1_MediaFailed(object sender, ExceptionRoutedEventArgs e) { Console.WriteLine("Failed:"+((MediaElement)sender).Source); } private void panel1_MediaEnded(object sender, RoutedEventArgs e) { Console.WriteLine("Ended:"+((MediaElement)sender).Source); } } } 

MediaElement使用EVR ,而EVR又使用Direct3D。 EVR是一种有限的资源,您每个MediaElement都使用一个实例,并且偶尔播放达到限制。 不幸的是,问题在API内部被抑制,并且没有发生合理的错误报告。

您可以使用本答案中引用的工具估算播放实例的数量: 使用多个实例VMR 9的黑色video (此处还有EVR选项)。